curl --request POST \
--url https://sandbox.api.byzantine.fi/v1/submit/invite-users \
--header 'Content-Type: application/json' \
--header 'X-Pubkey: <x-pubkey>' \
--header 'X-Pubkey, X-Timestamp, X-Signature: <api-key>' \
--header 'X-Signature: <x-signature>' \
--header 'X-Timestamp: <x-timestamp>' \
--data '
{
"signedBody": {
"type": "ACTIVITY_TYPE_CREATE_USERS_V3",
"timestampMs": "<string>",
"organizationId": "d107c1e1-766a-4091-802c-de61a3973e91",
"parameters": {
"users": [
{
"userName": "John Doe",
"userEmail": "john.doe@example.com",
"apiKeys": [
{
"apiKeyName": "Byzantine API Key",
"publicKey": "c51b102585622c59715784828c579278d5360159cd214fc976f5ce537c41872231",
"curveType": "API_KEY_CURVE_P256",
"expirationSeconds": "3600"
}
],
"authenticators": [
{
"authenticatorName": "<string>",
"challenge": "<string>",
"attestation": {
"credentialId": "<string>",
"clientDataJson": "<string>",
"attestationObject": "<string>",
"transports": []
}
}
],
"oauthProviders": [
{
"providerName": "<string>",
"oidcToken": "<string>"
}
],
"userTags": [
"<string>"
]
}
]
}
},
"invitedBy": "550e8400-e29b-41d4-a716-446655440000",
"webAuthnStamp": "<string>"
}
'import requests
url = "https://sandbox.api.byzantine.fi/v1/submit/invite-users"
payload = {
"signedBody": {
"type": "ACTIVITY_TYPE_CREATE_USERS_V3",
"timestampMs": "<string>",
"organizationId": "d107c1e1-766a-4091-802c-de61a3973e91",
"parameters": { "users": [
{
"userName": "John Doe",
"userEmail": "john.doe@example.com",
"apiKeys": [
{
"apiKeyName": "Byzantine API Key",
"publicKey": "c51b102585622c59715784828c579278d5360159cd214fc976f5ce537c41872231",
"curveType": "API_KEY_CURVE_P256",
"expirationSeconds": "3600"
}
],
"authenticators": [
{
"authenticatorName": "<string>",
"challenge": "<string>",
"attestation": {
"credentialId": "<string>",
"clientDataJson": "<string>",
"attestationObject": "<string>",
"transports": []
}
}
],
"oauthProviders": [
{
"providerName": "<string>",
"oidcToken": "<string>"
}
],
"userTags": ["<string>"]
}
] }
},
"invitedBy": "550e8400-e29b-41d4-a716-446655440000",
"webAuthnStamp": "<string>"
}
headers = {
"X-Pubkey": "<x-pubkey>",
"X-Timestamp": "<x-timestamp>",
"X-Signature": "<x-signature>",
"X-Pubkey, X-Timestamp, X-Signature": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-Pubkey': '<x-pubkey>',
'X-Timestamp': '<x-timestamp>',
'X-Signature': '<x-signature>',
'X-Pubkey, X-Timestamp, X-Signature': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
signedBody: {
type: 'ACTIVITY_TYPE_CREATE_USERS_V3',
timestampMs: '<string>',
organizationId: 'd107c1e1-766a-4091-802c-de61a3973e91',
parameters: {
users: [
{
userName: 'John Doe',
userEmail: 'john.doe@example.com',
apiKeys: [
{
apiKeyName: 'Byzantine API Key',
publicKey: 'c51b102585622c59715784828c579278d5360159cd214fc976f5ce537c41872231',
curveType: 'API_KEY_CURVE_P256',
expirationSeconds: '3600'
}
],
authenticators: [
{
authenticatorName: '<string>',
challenge: '<string>',
attestation: {
credentialId: '<string>',
clientDataJson: '<string>',
attestationObject: '<string>',
transports: []
}
}
],
oauthProviders: [{providerName: '<string>', oidcToken: '<string>'}],
userTags: ['<string>']
}
]
}
},
invitedBy: '550e8400-e29b-41d4-a716-446655440000',
webAuthnStamp: '<string>'
})
};
fetch('https://sandbox.api.byzantine.fi/v1/submit/invite-users', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"accountId": "550e8400-e29b-41d4-a716-446655440000",
"newUsers": [
{
"userId": "550e8400-e29b-41d4-a716-446655440000",
"firstName": "John",
"lastName": "Doe",
"userEmail": "john.doe@example.com"
}
],
"invitedBy": "550e8400-e29b-41d4-a716-446655440000",
"invitedAt": "2023-11-07T05:31:56Z"
}Step 2 Send invitations (passkey)
Send an invitation to users to join a Byzantine account. If the users did not yet do a KYC on Byzantine, an email will ask them to do so.
curl --request POST \
--url https://sandbox.api.byzantine.fi/v1/submit/invite-users \
--header 'Content-Type: application/json' \
--header 'X-Pubkey: <x-pubkey>' \
--header 'X-Pubkey, X-Timestamp, X-Signature: <api-key>' \
--header 'X-Signature: <x-signature>' \
--header 'X-Timestamp: <x-timestamp>' \
--data '
{
"signedBody": {
"type": "ACTIVITY_TYPE_CREATE_USERS_V3",
"timestampMs": "<string>",
"organizationId": "d107c1e1-766a-4091-802c-de61a3973e91",
"parameters": {
"users": [
{
"userName": "John Doe",
"userEmail": "john.doe@example.com",
"apiKeys": [
{
"apiKeyName": "Byzantine API Key",
"publicKey": "c51b102585622c59715784828c579278d5360159cd214fc976f5ce537c41872231",
"curveType": "API_KEY_CURVE_P256",
"expirationSeconds": "3600"
}
],
"authenticators": [
{
"authenticatorName": "<string>",
"challenge": "<string>",
"attestation": {
"credentialId": "<string>",
"clientDataJson": "<string>",
"attestationObject": "<string>",
"transports": []
}
}
],
"oauthProviders": [
{
"providerName": "<string>",
"oidcToken": "<string>"
}
],
"userTags": [
"<string>"
]
}
]
}
},
"invitedBy": "550e8400-e29b-41d4-a716-446655440000",
"webAuthnStamp": "<string>"
}
'import requests
url = "https://sandbox.api.byzantine.fi/v1/submit/invite-users"
payload = {
"signedBody": {
"type": "ACTIVITY_TYPE_CREATE_USERS_V3",
"timestampMs": "<string>",
"organizationId": "d107c1e1-766a-4091-802c-de61a3973e91",
"parameters": { "users": [
{
"userName": "John Doe",
"userEmail": "john.doe@example.com",
"apiKeys": [
{
"apiKeyName": "Byzantine API Key",
"publicKey": "c51b102585622c59715784828c579278d5360159cd214fc976f5ce537c41872231",
"curveType": "API_KEY_CURVE_P256",
"expirationSeconds": "3600"
}
],
"authenticators": [
{
"authenticatorName": "<string>",
"challenge": "<string>",
"attestation": {
"credentialId": "<string>",
"clientDataJson": "<string>",
"attestationObject": "<string>",
"transports": []
}
}
],
"oauthProviders": [
{
"providerName": "<string>",
"oidcToken": "<string>"
}
],
"userTags": ["<string>"]
}
] }
},
"invitedBy": "550e8400-e29b-41d4-a716-446655440000",
"webAuthnStamp": "<string>"
}
headers = {
"X-Pubkey": "<x-pubkey>",
"X-Timestamp": "<x-timestamp>",
"X-Signature": "<x-signature>",
"X-Pubkey, X-Timestamp, X-Signature": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'X-Pubkey': '<x-pubkey>',
'X-Timestamp': '<x-timestamp>',
'X-Signature': '<x-signature>',
'X-Pubkey, X-Timestamp, X-Signature': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
signedBody: {
type: 'ACTIVITY_TYPE_CREATE_USERS_V3',
timestampMs: '<string>',
organizationId: 'd107c1e1-766a-4091-802c-de61a3973e91',
parameters: {
users: [
{
userName: 'John Doe',
userEmail: 'john.doe@example.com',
apiKeys: [
{
apiKeyName: 'Byzantine API Key',
publicKey: 'c51b102585622c59715784828c579278d5360159cd214fc976f5ce537c41872231',
curveType: 'API_KEY_CURVE_P256',
expirationSeconds: '3600'
}
],
authenticators: [
{
authenticatorName: '<string>',
challenge: '<string>',
attestation: {
credentialId: '<string>',
clientDataJson: '<string>',
attestationObject: '<string>',
transports: []
}
}
],
oauthProviders: [{providerName: '<string>', oidcToken: '<string>'}],
userTags: ['<string>']
}
]
}
},
invitedBy: '550e8400-e29b-41d4-a716-446655440000',
webAuthnStamp: '<string>'
})
};
fetch('https://sandbox.api.byzantine.fi/v1/submit/invite-users', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"accountId": "550e8400-e29b-41d4-a716-446655440000",
"newUsers": [
{
"userId": "550e8400-e29b-41d4-a716-446655440000",
"firstName": "John",
"lastName": "Doe",
"userEmail": "john.doe@example.com"
}
],
"invitedBy": "550e8400-e29b-41d4-a716-446655440000",
"invitedAt": "2023-11-07T05:31:56Z"
}Authorizations
Headers
Integrator's ECDSA public key (P-256 curve, compressed SEC1 format). Example: 0x038fedef7c12f93bbf342ad8943b7a825a3b41f61c9dc118b2c718efebabbf62fd
Unix timestamp in seconds (UTC). Must be within tolerance window (1 minute) to prevent replay attacks. Example: 1760375826
ECDSA signature (DER-encoded, hex with 0x prefix). Signs the message: {timestamp}{METHOD}{path_and_query}{json_body}. Example: 0x3045022100...
Body
Body to invite new users to an existing account
The object that needs to be signed by the end user to invite a new user to a Byzantine account.
Show child attributes
Show child attributes
A UUID string
"550e8400-e29b-41d4-a716-446655440000"
Cryptographically passkey signed (stamped). For more info, see authentication methods.
Response
Users invited successfully
Response body when new users are successfully invited to a Byzantine account
A UUID string
"550e8400-e29b-41d4-a716-446655440000"
Show child attributes
Show child attributes
A UUID string
"550e8400-e29b-41d4-a716-446655440000"
The timestamp when the users were invited.

