Add Privacy Key Credential

Overview

The Add Privacy Key Credential API adds a Privacy Key as a credential to an existing account. It supports two ways of supplying the key:

  • Send a facial image - the platform mints the Privacy Key for you, server-side, using Omnifaces image processing. This is the recommended path: the minted key is guaranteed to be compatible with your tenant's duplicate-detection and search features.
  • Send a ready-made Privacy Key - a key you already hold (for example, one returned by the 1:1 Privacy Key Matching API) is stored as-is.

In both cases the credential is registered against your tenant's Privacy Key search policy, so accounts enrolled through this API behave the same as accounts enrolled through a live transaction.

📘

This API works with Privacy Key credentials only. It does not create or affect traditional biometric enrollments (biometric templates stored by the platform); those are managed through the standard transaction workflows.

Authentication & Authorization

  • Requests must include a valid bearer customer token.
  • The Customer Create Account FIDO2 Credentials permission (CustomerCreateAccountFido2Credentials) is required to invoke this API.
📘

This permission is not enabled by default. Contact your authID representative to have it added to your tenant and mapped to the appropriate roles.

When to Use

Use this API when you:

  • Need to enroll an account with a Privacy Key credential without running an interactive transaction
  • Are migrating accounts from another system and hold reference facial images
  • Already hold a Privacy Key from a prior workflow and want to attach it to an account
📘

The image you send is used only to mint the Privacy Key. It is processed in transit and is never stored by the platform.

Trust Model

An image supplied through this API is asserted by you, the operator. It does not pass through the injection and presentation attack checks that a live transaction performs, so only submit images whose authenticity your organization has already established. This is why the API requires a dedicated operator permission.

Endpoint

POST /accounts/{accountNumber}/fido2Credentials

Creates a Privacy Key credential for the given account. When an image is supplied, the Privacy Key is minted from it server-side.

Request

The request format depends on which enrollment mode you use.

Path Parameters

FieldTypeRequiredDescription
accountNumberstringYesThe account the credential is added to

Mode 1 - Mint from image

Content-Type: multipart/form-data

Send the facial image as a binary file part. One credential is created per request.

curl -X POST "https://<host>/IDCompleteBackendEngine/Default/AdministrationServiceRest/v1/accounts/<accountNumber>/fido2Credentials" \
  -H "Authorization: Bearer <token>" \
  -F "[email protected]" \
  -F "description=Enrollment key"
FieldTypeRequiredDescription
imagebinaryYesFacial image used to mint the Privacy Key server-side
descriptionstringNoA label for the credential, shown in account details
📘

When an image is provided, it always wins: any ready-made key included in the same request is disregarded, and the credential stored (and returned) is the one minted from the image.

Mode 2 - Store a ready-made key

Content-Type: application/json

The body is an array of credential objects, one credential created per entry.

curl -X POST "https://<host>/IDCompleteBackendEngine/Default/AdministrationServiceRest/v1/accounts/<accountNumber>/fido2Credentials" \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '[{ "Fido2PublicKey": "<privacy key>", "Description": "Enrollment key" }]'
FieldTypeRequiredDescription
Fido2PublicKeystringYesA ready-made Privacy Key to store as the credential
DescriptionstringNoA label for the credential, shown in account details

Behavior by Tenant Search Policy

Your tenant is configured with one of three Privacy Key search policies. The API's behavior depends on the policy and on whether you sent an image or a ready-made key.

Image provided (key minted server-side)

Tenant policyBehavior
Disabled / no policyKey is minted and stored. No search-space interaction.
AddKey is minted, stored, and enrolled into the tenant's search space.
AddAndBlockDuplicatesKey is minted and checked against the search space in a single atomic step. If the face matches a different account, the request is rejected as a duplicate and nothing is stored.

Ready-made key provided (no image)

Tenant policyBehavior
Disabled / no policyKey is stored. Behavior unchanged from earlier releases.
AddKey is stored and enrolled into the tenant's search space.
AddAndBlockDuplicatesRequest is rejected. Duplicate detection requires data that only server-side minting produces, so a ready-made key cannot satisfy this policy. Send an image instead.

Response

The response is an array with one entry per created credential.

[
  {
    "Id": "string",
    "CreatedDate": "2026-08-17T12:00:00Z",
    "Description": "Enrollment key",
    "KeyData": "string"
  }
]

Fields

FieldTypeDescription
IdstringUnique identifier of the stored credential
CreatedDatestring (date-time)When the credential was created
DescriptionstringThe label supplied in the request
KeyDatastringThe minted Privacy Key material. Returned only when the credential was minted from an image.

Errors

ScenarioResult
Image matches a different account (AddAndBlockDuplicates)Rejected as duplicate; nothing stored
Ready-made key sent under AddAndBlockDuplicatesRejected; send an image instead
Neither image nor key suppliedRejected as invalid request
Image can't be processed (e.g. no face detected)400 Bad Request naming the offending argument
Privacy Key search service unreachableFails closed; no credential written; safe to retry
Credential already exists or account credential limit reached409 Conflict
Missing or invalid token / permission401 Unauthorized

Did this page help you?