API KEYS
Create a scoped API key
POST
/v1/api-keysSee the request and response contract below.
Backend integrationYour backend and SDK use a tenant API key.
Try itAvailable for creating, reading, and deleting verification sessions in Test. Other operations are reference-only; API-key protected routes require a tenant API key on your backend. Open a session request
Request bodyRequired
Request fields
namestringoptionalscopesarray<string>requiredexpires_atstring,null · date-timeoptionalFuture absolute UTC expiry. Omit or use null for a non-expiring key.
View JSON schema
{
"type": "object",
"required": [
"scopes"
],
"properties": {
"name": {
"type": "string",
"maxLength": 100
},
"scopes": {
"type": "array",
"minItems": 1,
"uniqueItems": true,
"items": {
"type": "string",
"enum": [
"session:create",
"session:read",
"audit:read",
"api_keys:manage"
]
}
},
"expires_at": {
"type": [
"string",
"null"
],
"format": "date-time",
"description": "Future absolute UTC expiry. Omit or use null for a non-expiring key."
}
},
"additionalProperties": false
}Raw JSON schema
{
"type": "object",
"required": [
"scopes"
],
"properties": {
"name": {
"type": "string",
"maxLength": 100
},
"scopes": {
"type": "array",
"minItems": 1,
"uniqueItems": true,
"items": {
"type": "string",
"enum": [
"session:create",
"session:read",
"audit:read",
"api_keys:manage"
]
}
},
"expires_at": {
"type": [
"string",
"null"
],
"format": "date-time",
"description": "Future absolute UTC expiry. Omit or use null for a non-expiring key."
}
},
"additionalProperties": false
}Responses
Response 201
JSON response
application/json · Response schema
idstringrequirednamestring,nulloptionalscopesarray<string>optionalapi_keystringrequiredlivemodebooleanrequiredWhether this key targets live data. False means sandbox/test data.
expires_atstring,null · date-timerequiredAbsolute UTC expiry. Null means the key does not expire.
last_used_atstring,null · date-timerequiredMost recent successful authentication. Null means the key has not been used.
View JSON schema
{
"type": "object",
"required": [
"id",
"api_key",
"livemode",
"expires_at",
"last_used_at"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": [
"string",
"null"
]
},
"scopes": {
"type": "array",
"items": {
"type": "string"
}
},
"api_key": {
"type": "string",
"writeOnly": true
},
"livemode": {
"type": "boolean",
"description": "Whether this key targets live data. False means sandbox/test data."
},
"expires_at": {
"type": [
"string",
"null"
],
"format": "date-time",
"description": "Absolute UTC expiry. Null means the key does not expire."
},
"last_used_at": {
"type": [
"string",
"null"
],
"format": "date-time",
"description": "Most recent successful authentication. Null means the key has not been used."
}
}
}Response 400
Error response
application/json · Response schema
errorstringrequiredmessagestringrequired
View JSON schema
{
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string"
},
"message": {
"type": "string"
}
}
}Response 401
Error response
application/json · Response schema
errorstringrequiredmessagestringrequired
View JSON schema
{
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string"
},
"message": {
"type": "string"
}
}
}Response 403
Error response
application/json · Response schema
errorstringrequiredmessagestringrequired
View JSON schema
{
"type": "object",
"required": [
"error",
"message"
],
"properties": {
"error": {
"type": "string"
},
"message": {
"type": "string"
}
}
}