Create a new identity, or add a new version to an existing one when the request matches.
Before writing, the service derives a match key from piiData: OrgId.Othr.Id when useCaseType is BUSINESS, or PrvtId.Othr.Id when it is INDIVIDUAL. The value is normalized (ASCII whitespace and punctuation removed, then uppercased) and hashed per tenant. If an active identity with the same key and identityType already exists, the request does not create a new identity. It writes the new version from the request body in full (piiData and nickName are replaced, not merged) and returns 201 with the existing identityId and its version incremented. If there is no match, a new identity is created at version 1.
If piiData contains no value at that path, no match key is recorded and the request always creates a new identity. Whether the field is present depends on the data requirements for the corridor, currency, use case, and payout method you are sending on.
Two identities cannot share the same match key and identityType within a tenant. To register a second bank account for the same party, deactivate the existing identity first, which is permanent, or use the v3 identities API, which does not match on OrgId.Othr.Id or PrvtId.Othr.Id. v3 keys identities on a client-supplied internalId and rejects a create whose internalId already belongs to an active identity with 409, so two accounts for one party are created with distinct internalId values.
For the full behavior, including how to hold two bank accounts for one payee and what happens when two payees share an ID number, see Identity matching (v2).
PII data in JSON format.
You must use the correct piiData schema for the type of identity you want to create.
Note: Reach out to your Ripple liaison to get this schema.
The type of the identity
| Enum Value | Description |
|---|---|
| BENEFICIARY | Identity associated with the beneficiary. |
| ORIGINATOR | Identity associated with the party originating the payment. |
The nickname for the identity provided at the time of identity creation
- Mock serverhttps://docs.ripple.com/_mock/products/payments-direct-2/v2025.11/api-docs/payments-direct-api/payments-direct-2-api/v2/identities
- UAT environment with simulated currencyhttps://api.test.ripple.com/v2/identities
- Production environmenthttps://api.ripple.com/v2/identities
curl -i -X POST \
https://docs.ripple.com/_mock/products/payments-direct-2/v2025.11/api-docs/payments-direct-api/payments-direct-2-api/v2/identities \
-H 'Authorization: Bearer <YOUR_JWT_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"piiData": {},
"identityType": "BENEFICIARY",
"nickName": "MyCompany",
"useCaseType": "BUSINESS"
}'successful operation
The unique ID of the identity. When the request matched an existing identity, this is that existing identity's ID rather than a new one. Check version to tell the two cases apart.
{ "identityId": "2f4ac57f-c5ba-4051-b51f-b3565778717b", "version": 2 }