Skip to content

Registering and Managing Tenants

Register sub-clients and receive generated client API keys.

Resell partners can register VASPs as CryptoSwift tenants. CryptoSwift creates the tenant record, links it to the partner, and returns a generated tenant-specific apiKey that can be used for regular Client API calls.

Register a VASP

POST /partners/tenants creates a new tenant under the authenticated partner.

Required parameters:

FieldTypeDescription
namestringTenant service name.
emailstringTenant main contact email.

Optional parameters:

FieldTypeDescription
legalNamestringTenant registered legal entity name.
webhookUrlstringTenant webhook URL for Travel Rule message notifications.
countrystringTenant country.
webpagestringTenant webpage.
townNamestringTenant town name.
mfaPolicystringTenant MFA policy: optional or required. Defaults to optional.
isWalletVerificationRiskScoringEnabledbooleanEnables wallet verification risk scoring for the tenant.
curl --location --request POST 'https://api-dev.cryptoswift.eu/partners/tenants' \
  --header 'X-Partner-Api-Key: <partner-api-key>' \
  --header 'Content-Type: application/json' \
  --data-raw '{
    "name": "Acme Exchange",
    "legalName": "Acme Digital Assets LLC",
    "email": "ops@acme.exchange",
    "webhookUrl": "https://acme.exchange/webhooks/travel-rule",
    "country": "US",
    "webpage": "https://acme.exchange",
    "townName": "New York",
    "mfaPolicy": "required",
    "isWalletVerificationRiskScoringEnabled": true
  }'

Successful response:

{
  "id": 42,
  "name": "Acme Exchange",
  "legalName": "Acme Digital Assets LLC",
  "email": "ops@acme.exchange",
  "isVerified": true,
  "webhookUrl": "https://acme.exchange/webhooks/travel-rule",
  "webhookSecret": "s3cr3t-signing-token",
  "apiKey": "ae6fb520-05b5-4a7a-9b25-8486d9a402d7",
  "country": "US",
  "webpage": "https://acme.exchange",
  "townName": "New York",
  "mfaPolicy": "required",
  "isWalletVerificationRiskScoringEnabled": true
}

CryptoSwift generates the client API key automatically. Store this value on the partner side if you plan to proxy API calls for the client.

Error Responses

{
  "statusCode": 400,
  "message": "Required data not provided. Please make sure to provide the Tenant name, email and API key.",
  "error": "Bad Request"
}

CryptoSwift returns 400 Bad Request when name or email is blank or missing.

{
  "statusCode": 401,
  "message": "Unauthorized"
}

CryptoSwift returns 401 Unauthorized when the X-Partner-Api-Key header is missing or invalid.

{
  "statusCode": 409,
  "message": "A verified user with the given name already exist.",
  "error": "Conflict"
}

CryptoSwift returns 409 Conflict when a verified tenant with the given name already exists.

List Tenants

Use GET /partners/tenants to retrieve existing partner tenants and their API keys.

curl --location 'https://api-dev.cryptoswift.eu/partners/tenants' \
  --header 'X-Partner-Api-Key: <partner-api-key>'
[
  {
    "id": 42,
    "name": "Acme Exchange",
    "legalName": "Acme Digital Assets LLC",
    "email": "ops@acme.exchange",
    "isVerified": true,
    "webhookUrl": "https://acme.exchange/webhooks/travel-rule",
    "webhookSecret": "s3cr3t-signing-token",
    "apiKey": "ae6fb520-05b5-4a7a-9b25-8486d9a402d7",
    "country": "US"
  }
]