Skip to main content
POST
/
v1
/
submit
/
create-user
Create a Byzantine user
curl --request POST \
  --url https://api.byzantine.fi/v1/submit/create-user \
  --header 'Content-Type: application/json' \
  --header 'X-Pubkey: <api-key>' \
  --header 'X-Signature: <x-signature>' \
  --header 'X-Timestamp: <x-timestamp>' \
  --data '{
  "userInfo": {
    "firstName": "John",
    "middleName": "William",
    "lastName": "Smith",
    "email": "john.smith@example.com",
    "phone": "+33 123 456 789",
    "birthDate": "1990-01-01",
    "nationality": "FRA",
    "residentialAddress": {
      "streetLine1": "33 Rue La Fayette",
      "streetLine2": "WeWork",
      "city": "Paris",
      "state": "IDF",
      "postalCode": "75009",
      "country": "FRA"
    },
    "socialSecurityNumber": "123-45-6789"
  },
  "additionalUserInfo": {
    "employmentStatus": "employed",
    "expectedMonthlyPaymentsUsd": "5000_9999",
    "sourceOfFunds": "salary",
    "mostRecentOccupation": "151252"
  },
  "verificationDocuments": [
    {
      "documentType": "passport",
      "documentNumber": "FR1234567890",
      "description": "Additional supporting document",
      "issuingCountry": "FRA",
      "document": "data:image/png;base64,iVBORw0lFTkSuQmCC..."
    }
  ],
  "bridgeSignedAgreementId": "d107c1e1-766a-4091-802c-de61a3973e91",
  "byzantineTermsSignedAt": "2025-11-19T21:14:58.328Z",
  "authenticators": [
    {
      "authenticatorName": "<string>",
      "challenge": "<string>",
      "attestation": {
        "credentialId": "<string>",
        "clientDataJson": "<string>",
        "attestationObject": "<string>",
        "transports": [
          "<string>"
        ]
      }
    }
  ]
}'
{
  "userId": "550e8400-e29b-41d4-a716-446655440000",
  "accountId": "550e8400-e29b-41d4-a716-446655440000",
  "verificationStatus": "active",
  "userInfo": {
    "firstName": "John",
    "middleName": "William",
    "lastName": "Smith",
    "email": "john.smith@example.com",
    "phone": "+33 123 456 789",
    "birthDate": "1990-01-01",
    "nationality": "FRA",
    "residentialAddress": {
      "streetLine1": "33 Rue La Fayette",
      "streetLine2": "WeWork",
      "city": "Paris",
      "state": "IDF",
      "postalCode": "75009",
      "country": "FRA"
    },
    "socialSecurityNumber": "123-45-6789"
  },
  "additionalUserInfo": {
    "employmentStatus": "employed",
    "expectedMonthlyPaymentsUsd": "5000_9999",
    "sourceOfFunds": "salary",
    "mostRecentOccupation": "151252"
  },
  "verificationDocuments": [
    {
      "documentType": "passport",
      "documentNumber": "FR1234567890",
      "description": "Additional supporting document",
      "issuingCountry": "FRA",
      "documentId": "830c219c-d197-451d-b879-77936a80c452",
      "warnings": [
        "<string>"
      ],
      "errors": [
        "<string>"
      ]
    }
  ],
  "bridgeSignedAgreementId": "d107c1e1-766a-4091-802c-de61a3973e91",
  "byzantineTermsSignedAt": "2025-11-19T21:14:58.328Z",
  "isPasskeyActivated": "false",
  "isOtpActivated": "true"
}

Authorizations

X-Pubkey
string
header
required

Integrator's ECDSA public key (P-256 curve, compressed SEC1 format). Example: 0x038fedef7c12f93bbf342ad8943b7a825a3b41f61c9dc118b2c718efebabbf62fd

Headers

X-Timestamp
string
required

Unix timestamp in seconds (UTC). Must be within tolerance window (1 minute) to prevent replay attacks. Example: 1760375826

X-Signature
string
required

ECDSA signature (DER-encoded, hex with 0x prefix). Signs the message: {timestamp}{METHOD}{path_and_query}{json_body}. Example: 0x3045022100...

Body

application/json

User to be created. The vast majority of fields are required in order to complete the identity verification process.

userInfo
object
required

Personal information about the user required for identity verification.

bridgeSignedAgreementId
string
required

The ID of the signed Bridge ToS agreement. For more information, see individual account creation - KYC.

Example:

"d107c1e1-766a-4091-802c-de61a3973e91"

byzantineTermsSignedAt
integer
required

The timestamp when the Byzantine Finance Terms & Conditions were signed. For more information, see individual account creation - KYC.

Example:

"2025-11-19T21:14:58.328Z"

additionalUserInfo
object

Additional user information for KYC. This information is required for users considered high risk or over 60 years of age.

verificationDocuments
object[] | null
authenticators
object[] | null

A list of Authenticators.

Response

User created successfully

Response body for creating a Byzantine user

userId
string<uuid>
required

A UUID string

Example:

"550e8400-e29b-41d4-a716-446655440000"

accountId
string<uuid>
required

A UUID string

Example:

"550e8400-e29b-41d4-a716-446655440000"

verificationStatus
enum<string>
required

The identity verification status of the user.

Available options:
under_review,
waiting_for_information,
active,
rejected,
inactive
Example:

"active"

userInfo
object
required

Personal information about the user required for identity verification.

bridgeSignedAgreementId
string
required

The ID of the signed Bridge ToS agreement. For more information, see individual account creation - KYC.

Example:

"d107c1e1-766a-4091-802c-de61a3973e91"

byzantineTermsSignedAt
integer
required

The timestamp when the Byzantine Finance Terms & Conditions were signed. For more information, see individual account creation - KYC.

Example:

"2025-11-19T21:14:58.328Z"

isPasskeyActivated
boolean
required

An indicator showing whether passkey authentication is active for this user. For more information, see wallet authentication.

Example:

"false"

isOtpActivated
boolean
required

An indicator showing whether OTP authentication is active for this user. For more information, see wallet authentication.

Example:

"true"

additionalUserInfo
object

Additional user information for KYC. This information is required for users considered high risk or over 60 years of age.

verificationDocuments
object[] | null