Request a new TrueIdentity
POST /identity/request
Request an identity for a given person. Requires seed data to be provided.
Once approved (or cancelled), you will receive a callback via webhook. See below.
To receive a callback, you must configure a webhook URL in your user portal, and subscribe to the 'TrueIdentity Actions' webhook.
Note an error code of INTERNAL_ERROR_EMAIL 'E2002' will be returned if the email fails to send. In this case the request will still be created and the user will be able to complete their TrueIdentity using the redirect URL. The code and redirect_url will be provided inside the details object of the error response.
Parameters
| Name | In | Required | Description |
|---|---|---|---|
X-Correlation-Id |
header | no | Unique identifier for tracking the request through the system Example: |
Authorization |
header | yes | Access key generated from the auth API Example: |
X-Tenant-Id |
header | yes | The tenant ID for the request Example: |
X-Request-Timestamp |
header | yes | The timestamp for the request Example: |
Request body
Content type application/json
Fields
| Field | Type | Required | Description | ||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
first_name |
string | yes | |||||||||||||||||||||||||
last_name |
string | yes | |||||||||||||||||||||||||
email |
string | yes | Contact's personal email address |
||||||||||||||||||||||||
phone |
string | yes | Contact's personal mobile phone number, without country code |
||||||||||||||||||||||||
phone_country_code |
integer | yes | Country code for phone number |
||||||||||||||||||||||||
purpose |
string | yes | One of: |
||||||||||||||||||||||||
return_url |
string | yes | The client URL to redirect the user to after finishing their TrueIdentity process. This location should be configured to await the webhook response. |
||||||||||||||||||||||||
off_ramp_url |
string | yes | The client URL to redirect the user to if they cannot provide all the documents required by the rule set. |
||||||||||||||||||||||||
results_emails |
string | yes | Optional email addresses to send notification of results to. Comma separated list. Not required, as webhook is required for onward processing. |
||||||||||||||||||||||||
download_email |
string | yes | Optional email address to send the download link to if any credential source files are requested, e.g. a Police Check certificate. |
||||||||||||||||||||||||
expiry_hours |
integer | yes | Optional number of hours the request should be valid for. Leave unset to default to 24. Set to 0 to disable expiry (not recommended). |
||||||||||||||||||||||||
send_email |
boolean | no | Whether TrueVault should send an email to the user with a link to complete their TrueIdentity. |
||||||||||||||||||||||||
payment_via |
string | no | Optional flag to set billing to invoice (not user-pays). Please contact us to enable invoice billing, if you haven't already. One of: |
||||||||||||||||||||||||
ruleset |
string | no | The verification ruleset to use for this identity request. It sets the evidence a person has to provide before the identity is issued.
Omit it and One of: |
||||||||||||||||||||||||
claims |
string | yes | The claims to request for this identity request. Document claims only fulfilled if data is known. Claims can be provided as either:
To mark a claim as essential (mandatory), provide it as a key with Flat array example (all optional): ["trueidentity.email", "trueidentity.name", "acicncchc.credential"] Object with essential markers: {
"trueidentity.email": null,
"acicncchc.credential": {"essential": true},
"document.driving_license.licence_number": null
}
In this example, One of: |
Example request body
{
"first_name": "string",
"last_name": "string",
"email": "jamie@gmail.com",
"phone": 412321123,
"phone_country_code": 61,
"purpose": "identity",
"return_url": "string",
"off_ramp_url": "string",
"results_emails": "string",
"download_email": "string",
"expiry_hours": 0,
"send_email": true,
"payment_via": "invoice",
"ruleset": "bronze",
"claims": [
"string"
]
}
Responses
| Status | Description |
|---|---|
200 OK | Request created successfully |
400 Bad Request | Validation error |
401 Unauthorized | Authentication failed or invalid token |
403 Forbidden | Unauthorized or insufficient permissions |
409 Conflict | Conflict error |
429 Too Many Requests | Too many requests |
500 Internal Server Error | Internal server error |
Content type application/json
Response fields (200)
| Field | Type | Required | Description |
|---|---|---|---|
data |
object | yes | |
data.access_request_code |
string | no | The request code for the identity request. This will be contained in the webhook response for alignment. |
data.identity_session_code |
string | no | The identity session code for the identity request. You will need this to retrieve results later. |
data.redirect_url |
string | no | The TrueVault URL to redirect the user to in order to complete/share their TrueIdentity. |
correlation_id |
string | yes | |
meta |
object | no | Optional metadata about the response |
Example 200 response
{
"correlation_id": "req-64b4a7e123456",
"data": {
"access_request_code": "string",
"identity_session_code": "string",
"redirect_url": "string"
}
}Content type application/json
ErrorResponse (400)
| Field | Type | Required | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
error |
object | yes | Every error carries a machine-readable
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
error.message |
string | yes | Human readable error message |
||||||||||||||||||||||||||||||||||||||||||||||||||||||
error.type |
string | yes | Error type identifier One of: |
||||||||||||||||||||||||||||||||||||||||||||||||||||||
error.code |
string | yes | Machine-readable error code One of: |
||||||||||||||||||||||||||||||||||||||||||||||||||||||
error.timestamp |
string | yes | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
error.correlation_id |
string | yes | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
error.details |
object | no | Additional error context |
Example 400 response
{
"error": {
"message": "string",
"type": "VALIDATION_ERROR",
"code": "E1001",
"timestamp": "2026-02-20T03:14:15Z",
"correlation_id": "string"
}
}Content type application/json
Response fields (401)
| Field | Type | Required | Description |
|---|---|---|---|
error |
object | yes |
Example 401 response
{
"error": {
"type": "AUTHENTICATION_FAILED",
"code": "E1003"
}
}Content type application/json
Response fields (403)
| Field | Type | Required | Description |
|---|---|---|---|
error |
object | yes |
Example 403 response
{
"error": {
"type": "UNAUTHORIZED",
"code": "E1004"
}
}Content type application/json
ConflictError (409)
| Field | Type | Required | Description |
|---|---|---|---|
error |
object | no | |
error.message |
string | no | Human readable error message |
error.type |
string | no | One of: |
error.code |
string | no | One of: |
error.timestamp |
string | no | |
error.correlation_id |
string | no | |
error.details |
object | no | |
error.details.existing_code |
string | no |
Example 409 response
{
"error": {
"message": "string",
"type": "CONFLICT",
"code": "E1006",
"timestamp": "2026-02-20T03:14:15Z",
"correlation_id": "req-64b4a7e123456",
"details": {
"existing_code": "string"
}
}
}Content type application/json
Response fields (429)
| Field | Type | Required | Description |
|---|---|---|---|
error |
object | yes |
Example 429 response
{
"error": {
"type": "RATE_LIMIT_EXCEEDED",
"code": "E1007"
}
}Content type application/json
Response fields (500)
| Field | Type | Required | Description |
|---|---|---|---|
error |
object | yes |
Example 500 response
{
"error": {
"type": "INTERNAL_ERROR",
"code": "E2001"
}
}
Example request
curl --request POST \
--url https://api.sandbox.truevault.com.au/api/v1/identity/request \
--header 'X-Correlation-Id: <value>' \
--header 'Authorization: <value>' \
--header 'X-Tenant-Id: <value>' \
--header 'X-Request-Timestamp: <value>' \
--header 'Content-Type: application/json'