Conclusion

Through comprehensive on-device processing, advanced neural network architectures, and negligible data transmission, the Private Identity® Facial Age Estimation Portal eases the burden of global regulatory compliance while providing a frictionless user experience. Its modular deployment options—spanning from mobile and web to embedded edge devices—empower businesses in regulated markets (gaming, e-commerce, streaming media, etc.) to confidently manage age verification at scale.


By combining cutting-edge deep learning at the edge, encrypted data exchange, and stringent privacy-by-design principles, the Portal establishes a new industry benchmark for ethical, accurate, and resilient age estimation technology.


For further customization or specialized deployments (e.g., government ID checks, KYC integrations, or unique enterprise workflows), please contact support@privateid.com.


Frequently Asked Questions


Question:

Do you support web-hook callbacks to let us know the estimation result instead of us polling for it?

Answer:

Absolutely. We provide web-hook callbacks so you can receive the final estimation results in real-time, without needing to poll our system.


Question:

Can the Age Estimation result include the age or age range that has been determined and the confidence score?

Answer:

Yes, we can include both the derived age (or age range) and its corresponding confidence score in the results.


Question:

What does the result for the POST /session API look like?

Answer:

Below is an example of the JSON payload returned by the POST /session endpoint:

  {
    "token": "7d014351-6d6f-4202-8e8f-1d692b52409e",
    "url": "https://g.devel.privateid.com/estimate?token=7d0143-8f-1d09e",
    "expiresAt": "2025-01-03T13:52:36.721Z"
  }
  • Name
    token
    Type
    string
    Description

    A unique identifier for the session

  • Name
    url
    Type
    string
    Description

    The URL where facial age estimation can be performed for this session

  • Name
    expiresAt
    Type
    string
    Description

    The time and date when the session token expires


Question:

What does the Webhook data format look like, and how does one configure a webhook?

Answer:

The webhook data format includes the age estimation result for the session ID, and additional session validation metadata. To configure a webhook, you need to pass a callback object, which includes the following:

  • Name
    url
    Type
    string
    Description

    The target URL where the webhook data will be sent.

  • Name
    headers
    Description

    Additional request headers to include in the webhook call (for authentication).

At the end of the session, the system sends the event data (including the age estimation result) to the specified URL. We added this to the documentation above for session creation.

Sample Webhook Payload (customizable):

  {
    category: "PrivateID FAE Response",
    description: "Customizable Facial Age Estimation Response",

    // Unique identifier for the session
    sessionId: null,

    // Returns the estimated age result
    estimatedAge: null,

    // Indicates whether the age estimate is over or under a predefined threshold
    thresholdStatus: null,

    // last screen user visited, if session abandoned 
    lastScreen: null,

    // Counts the number of spoofing attempts detected during the session
    spoofAttemptCount: null,

    // Details about the user's device, browser, and interactions (not PII)
    deviceDetails: {
      // Information about the user's system and device
      systemInfo: {
        // The user agent string representing the browser and system
        userAgent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36",

        // The type or architecture of the device being used
        deviceType: "MacIntel",

        // Information about the device's screen
        screen: {
          // The width of the screen in pixels
          width: 1728,
          // The height of the screen in pixels
          height: 1117,
          // The current orientation of the screen
          orientation: "landscape-primary",
        },

        // Number of touch points supported by the device
        touchPoints: 0,
      },

      // Details about the browser environment being used
      browserDetails: {
        // The name of the browser
        name: "Chrome",
        // The rendering engine powering the browser
        engine: "Blink",
        // The operating system platform
        platform: "Mac OS",
      },

      // Hardware and system resource details
      hardwareStatus: {
        battery: {
          // Current battery level as a percentage
          level: 100,
          // Indicates if the device is charging
          charging: true,
        },
      },

      // Environmental context about the user's session
      environment: {
        // The locale setting of the user (language and region)
        locale: "en-US",
        // Geographic location of the user, if available
        location: {
          latitude: null,
          longitude: null,
        },
        // Timezone information for the user's session
        timezone: {
          // The offset from UTC in hours
          offset: 8,
          // The name of the timezone
          name: "America/Los_Angeles",
        },
      },

      // Metrics related to the user's interactions during the session
      interactionMetrics: {
        // Number of mouse clicks detected
        mouseClicks: 2,
        // Number of mouse movements detected
        mouseMovements: 168,
        // Number of key presses detected
        keyPresses: 0,
        // Number of touch interactions detected
        touchInteractions: 0,
        // Indicates if the developer tools were opened
        devToolsUsage: false,
      },

      // Indicators for security checks and session validation
      securityIndicators: {
        isHeadless: {
          // Indicates if WebDriver (automation tool) is detected
          webdriver: false,
          // Indicates if the user agent string has been modified
          userAgentModified: false,
          // Indicates if WebGL is disabled (can signify headless mode)
          webGLDisabled: false,
        },
      },
    },
  };

Question:

What does the Age Estimation result look like?

Answer

The Age Estimation result is the estimated age output from the model. This estimated age is then compared to a predefined threshold value to determine if the subject meets the age requirement (“above threshold” or “under threshold”).


The age estimation itself (for example, “33.055858”) is not considered personal information under the privacy laws. This is because there are many people who are 33 years old, so this number does not identify an individual person.


We can also provide an indication of whether the age meets your specified threshold without directly sharing the exact age value. (e.g. “Below threshold”, or “Above threshold”)


Question:

What sort of liveness detection do you have?

Answer:

Our patented on-device advanced AI/ML algorithms provide high confidence passive liveness checks that function effectively under varying lighting conditions and on a diverse set of devices and web browsers to detect spoofing attempts including paper, digital and even deep fakes. Active liveness checks can be made available upon request.


Our liveness detection models operate directly on the user's device, ensuring that no images or personally identifiable information (PII) leave the device. This approach safeguards user privacy, mitigates the risk of sensitive data exposure in the event of a breach, and eliminates the need for consent to capture data, as all processing, including facial age estimation, is performed locally on the user's device.


Question:

Can you detect face swap attempts, spoofing attempts etc? If so, how?

Answer:

Our passive liveness anti-spoof models, which run on the device, ensure that the person capturing the selfie in the UI/UX is a live human being, effectively preventing paper, digital, and deepfake spoofing attempts. Our liveness models include the ability to detect spoofing in both static images as well as live video streaming.


Question:

Can the API return a unique face identifier for the person who verified themselves?

Answer:

Yes, PrivateID can return a unique face identifier (UUID and GUID) for a verified individual using our patented, privacy-preserving homomorphic tokenization techniques. This identifier is consistent across verifications and devices, enabling PrivateID to recognize the same person across multiple sessions while maintaining privacy and security.


Error Codes

Facial Age Estimation General Error Codes

Category Status Code Workstation Error Code Message
New -2000 Camera unavailable (Camera failed to start or permissions were not given)
Decision - Fail -1 Invalid image (No face found)
Decision - Pass 0 Valid face (Success)
Fraud Signal 1 Image spoof
Fraud Signal 2 Video spoof
Dynamic Feedback 3 Too Close
Dynamic Feedback 4 Too far
Dynamic Feedback 5 Close to right edge
Dynamic Feedback 6 Close to left edge
Dynamic Feedback 7 Close to top edge
Dynamic Feedback 8 Close to bottom edge
Dynamic Feedback 9 Too blurry
Dynamic Feedback 10 Eyeglasses detected
Dynamic Feedback 11 Facemask detected
Dynamic Feedback 12 Chin too far left
Dynamic Feedback 13 Chin too far right
Dynamic Feedback 14 Chin too far up
Dynamic Feedback 15 Chin too far down
Dynamic Feedback 16 Image too dim
Dynamic Feedback 17 Image too bright
Dynamic Feedback 18 Face low confidence value (used for selfie Compare to another image, photo on ID)
Dynamic Feedback 19 Invalid face background
Dynamic Feedback 20 Eyes closed
Dynamic Feedback 21 Mouth open
Dynamic Feedback 22 Face tilted right
Dynamic Feedback 23 Face tilted left

Facial Age Estimation Spoof Error Codes

Status Code (Property) Error Code Message
-100 Invalid Image
-5 Triggered if a desktop or otherwise disallowed device attempts to connect under a mobile-only configuration.
-4 Invalid Face
-3 Face Too Close To Edge
-2 Mobile Phone Detected
-1 No Face Detected
0 Real
1 Spoof Detected

Document Capture Error Codes (Optional: Compare selfie to photo on ID with DOB extraction)

Category Status Code (Property) Workstation Error Code Message
Front DL Scan -2 Internal Error
Front DL Scan -1 Invalid Image (No document)
Front DL Scan 0 Success
Front DL Scan 3 ALMOST DONE . . . (Found document but unable to parse hold still)
Front DL Scan 4 MOVE JUST A LITTLE CLOSER
Front DL Scan 18 Not valid document
Back DL Scan -2 Internal Error
Back DL Scan -1 No Document Found
Back DL Scan 0 Success
Back DL Scan 3 ALMOST DONE . . .(Found document but unable to parse hold still)
Back DL Scan 4 MOVE JUST A LITTLE CLOSER
Back DL Scan 9 TOO BLURRY or Finger is blocking document
Back DL Scan 10 MOVE CLOSER TO BARCODE
Back DL Scan 18 No BARCODE found

Was this page helpful?