SettleMint
Developer guidesCompliance

Compliance provider API reference

Reference for DALP compliance-provider integration endpoints, subject mapping endpoints, webhook headers, statuses, and monitoring fields.

DALP exposes tenant-scoped endpoints for Sumsub, ComplyAdvantage, Elliptic, Jumio, Middesk, Onfido, Persona, Trulioo, Veriff, and other configured compliance-provider integration setup, subject mapping, webhook intake, and monitoring history.

All endpoint paths below are relative to the versioned API base path. Webhook paths are relative to the platform origin.

Provider kinds

Provider kindCurrent use
sumsubIdentity verdicts and applicant-on-hold monitoring alerts for configured identity topics
sumsub-amlAML / watchlist monitoring alerts on existing Sumsub applicants
sumsub-kytKYT transaction and wallet monitoring for both entity and wallet subjects
complyadvantageAML and sanctions search monitoring with categorical alert severity
ellipticWallet monitoring alerts for wallet-monitoring topics
jumioIdentity-verification verdicts for the knowYourCustomer topic
middeskKYB verdicts for the knowYourCustomer topic
onfidoWorkflow Studio and classic API identity-verification verdicts for knowYourCustomer
personaInquiry verdicts for the knowYourCustomer topic
truliooDataVerify KYC/KYB verdicts for the knowYourCustomer topic
veriffHosted KYC session verdicts for the knowYourCustomer topic

Roles

Compliance-provider read and manage operations require one of these system roles on the active organisation:

  • admin
  • systemManager
  • complianceManager

Integration statuses

StatusMeaning
pendingProvisioning or trusted-issuer registration is still in progress
activeThe integration can receive and process provider webhooks
pausedIntake is paused by an operator
failedProvisioning failed and can be retried
revokedThe integration has been revoked

Integration endpoints

MethodPathPurpose
GET/compliance/integrationsList tenant compliance-provider integrations
POST/compliance/integrationsCreate and provision an integration
GET/compliance/integrations/{integrationId}Read one integration
POST/compliance/integrations/validate-credentialsValidate write-only provider credentials
POST/compliance/integrations/{integrationId}/pausePause intake
POST/compliance/integrations/{integrationId}/resumeResume a paused integration
POST/compliance/integrations/{integrationId}/retry-provisioningRetry idempotent provisioning
POST/compliance/integrations/{integrationId}/revokeRevoke the integration
PATCH/compliance/integrations/{integrationId}/policyUpdate the revocation severity threshold
POST/compliance/integrations/{integrationId}/rotate-secretStage a new webhook signing secret
POST/compliance/integrations/{integrationId}/promote-secretPromote the pending signing secret
POST/compliance/integrations/{integrationId}/cancel-secret-rotationDiscard a pending signing secret
GET/compliance/integrations/{integrationId}/healthRead integration health
GET/compliance/integrations/{integrationId}/monitoringList monitoring alerts
POST/compliance/subjects/transactions/registerRegister a Sumsub KYT transaction

Create integration request

POST /compliance/integrations accepts:

FieldTypeNotes
providerKindProvider kindSelects the provider adapter
credentialsobjectProvider-specific write-only API credentials
topicNameclaim topic nameOne integration maps to one claim topic
webhookSigningSecretstringSecret used to verify inbound provider webhooks
webhookAuthModehmac or basic_auth_ip_allowlistDefaults to hmac for HMAC providers; Jumio resolves to IP allowlisting
webhookIpAllowliststring array, optionalRequired and non-empty when the resolved mode is basic_auth_ip_allowlist
revocationSeverityThresholdinteger from 0 through 100Defaults to 80

Webhook authentication is resolved against the selected provider. Sumsub, Elliptic, ComplyAdvantage, Sumsub AML, Sumsub KYT, Middesk, Onfido, Persona, Trulioo, and Veriff use hmac. Creation rejects a non-empty webhookIpAllowlist for those integrations because their webhook verifiers do not consult an allowlist. Jumio always resolves to basic_auth_ip_allowlist, whether the request omits webhookAuthMode or supplies the default hmac. Jumio creation requires a non-empty webhookIpAllowlist.

Sumsub credentials use:

{
  "providerKind": "sumsub",
  "credentials": {
    "appToken": "...",
    "secretKey": "..."
  }
}

Sumsub AML credentials use:

{
  "providerKind": "sumsub-aml",
  "credentials": {
    "apiToken": "...",
    "secretKey": "...",
    "webhookSigningSecret": "...",
    "levelName": "aml-monitoring-level"
  }
}

Sumsub KYT credentials use:

{
  "providerKind": "sumsub-kyt",
  "credentials": {
    "apiToken": "...",
    "secretKey": "...",
    "webhookSigningSecret": "...",
    "levelName": "kyt-monitoring-level"
  }
}

Sumsub KYT supports both entity and wallet subject mapping: the applicant id anchors the entity subject, while txn.info.address is treated as the tenant wallet and txn.counterparty.address as the other side of the monitored transaction.

Elliptic credentials use:

{
  "providerKind": "elliptic",
  "credentials": {
    "apiKey": "...",
    "apiSecret": "..."
  }
}

ComplyAdvantage credentials use:

{
  "providerKind": "complyadvantage",
  "credentials": {
    "apiToken": "...",
    "webhookSigningSecret": "..."
  }
}

Jumio credentials use:

{
  "providerKind": "jumio",
  "credentials": {
    "apiToken": "...",
    "apiSecret": "...",
    "region": "eu-1",
    "basicAuthCredentials": "..."
  },
  "webhookSigningSecret": "jumio-callback-basic-auth-secret",
  "webhookAuthMode": "basic_auth_ip_allowlist",
  "webhookIpAllowlist": ["203.0.113.10"]
}

Jumio regions are amer-1, eu-1, and sg-1. Jumio uses callback Basic Auth plus an IP allowlist instead of HMAC-only webhook authentication. The Basic Auth credential configured in the Jumio callback must match the integration webhookSigningSecret; credentials.basicAuthCredentials is provider credential material, not the callback verifier secret.

Middesk credentials use:

{
  "providerKind": "middesk",
  "credentials": {
    "apiKey": "...",
    "webhookSigningSecret": "..."
  }
}

Onfido credentials use:

{
  "providerKind": "onfido",
  "credentials": {
    "apiToken": "...",
    "webhookSigningSecret": "...",
    "region": "eu"
  }
}

Onfido regions are us, eu, and ca.

Persona credentials use:

{
  "providerKind": "persona",
  "credentials": {
    "apiToken": "...",
    "webhookSigningSecret": "...",
    "inquiryTemplateId": "itmpl_..."
  }
}

Trulioo credentials use:

{
  "providerKind": "trulioo",
  "credentials": {
    "apiKey": "...",
    "apiSecret": "...",
    "webhookSigningSecret": "..."
  }
}

Veriff credentials use:

{
  "providerKind": "veriff",
  "credentials": {
    "apiKey": "...",
    "apiSecret": "...",
    "webhookSigningSecret": "..."
  }
}

Integration response fields

FieldMeaning
idIntegration identifier
providerKindProvider kind
topicNameConfigured claim topic name
topicIdClaim topic ID as a digit string
statusCurrent integration status
statusExplanationHuman-readable status details
issuerEoaAddressProvider issuer EOA registered as trusted issuer
webhookUrlTokenURL token used in the provider webhook URL
revocationSeverityThresholdSeverity threshold for monitoring-driven revocation
pendingSecretExpiresAtExpiry for the pending webhook signing secret
lastActivityLatest verdict or alert activity
lastHealthCheckLast stored credential/secret health result
createdAt / updatedAtIntegration timestamps

Subject endpoints

MethodPathProviderPurpose
POST/compliance/subjects/create-applicantSumsubCreate and map a Sumsub applicant
POST/compliance/subjects/create-applicantJumioCreate and map a Jumio applicant
POST/compliance/subjects/create-applicantMiddeskCreate and map a Middesk business
POST/compliance/subjects/create-applicantOnfidoCreate and map an Onfido applicant
POST/compliance/subjects/create-applicantPersonaCreate and map a Persona inquiry
POST/compliance/subjects/create-applicantTruliooRun DataVerify and map a Trulioo subject
POST/compliance/subjects/create-applicantVeriffCreate and map a hosted Veriff session
POST/compliance/subjects/register-walletComplyAdvantageRegister and map a monitored entity search
POST/compliance/subjects/register-walletEllipticRegister and map an Elliptic wallet subject

create-applicant accepts:

FieldTypeNotes
integrationIdUUIDMust identify an active Surface-A integration
identityAddressEthereum addressDALP identity address in the active system
applicantHints.externalUserIdstring, optionalExternal subject identifier; defaults to the identity address
applicantHints.levelstring, optionalProvider workflow, level, or configuration selector
applicantHints.name / businessNamestring, Middesk onlyBusiness name
applicantHints.tinstring, Middesk onlyBusiness tax identifier
applicantHints.addressesarray, Middesk onlyBusiness addresses
applicantHints.firstName / first_namestring, Onfido onlyApplicant first name
applicantHints.lastName / last_namestring, Onfido onlyApplicant last name
applicantHints.inquiryTemplateId / inquiry_template_idstring, Persona onlyPersona inquiry template override
applicantHints.fieldsobject, Persona onlyPersona inquiry fields
applicantHints.countryCodestring, Trulioo onlyDataVerify country code
applicantHints.demographicsobject, Trulioo onlyDataVerify DataFields.PersonInfo input
applicantHints.personobject, Veriff onlyHosted session person prefill
applicantHints.callbackUrlstring, Veriff onlyVeriff callback URL

create-applicant returns externalId and may return redirectUrl. When applicantHints.level is omitted, DALP forwards its default level value to providers that need a selector. Use that omission only when the provider tenant has a real workflow or configuration with that exact value. The default is not a portable Jumio or Onfido workflow identifier.

For Jumio, pass applicantHints.level as the tenant's workflow definition key, such as the numeric key or label configured in Jumio. DALP uses applicantHints.externalUserId, or the identity address when omitted, as the external subject id and may return a hosted web URL as redirectUrl.

For Middesk, pass applicantHints.name or businessName, applicantHints.tin, and at least one address in applicantHints.addresses. DALP stores Middesk external_id, falling back to the external subject id supplied in the request.

For Onfido, pass applicantHints.level as the active workflow id from Onfido, and pass applicantHints.firstName and applicantHints.lastName. DALP forwards optional email, phone number, redirect URLs, and locale. DALP also maps the returned Onfido applicant id when it differs from the external subject id.

For Persona, pass applicantHints.inquiryTemplateId or configure inquiryTemplateId on the integration. DALP creates an inquiry and stores the returned Persona inquiry id as the external subject id. The response may include the hosted inquiry URL as redirectUrl.

For Trulioo, pass applicantHints.countryCode and applicantHints.demographics. DALP forwards the demographics object to DataVerify as DataFields.PersonInfo. DALP stores CustomerReferenceID as the external subject id. This adapter does not return a hosted redirect URL.

For Veriff, pass applicantHints.person when pre-filling hosted session person data and applicantHints.callbackUrl when the session should carry an explicit Veriff callback URL. DALP stores vendorData as the external subject id and returns the hosted session URL as redirectUrl.

register-wallet accepts either an Elliptic wallet mapping or a ComplyAdvantage entity-search mapping:

FieldTypeNotes
integrationIdUUIDMust identify an active Surface-B integration
walletAddressEthereum addressElliptic only; wallet already registered to a DALP identity
identityAddressEthereum addressComplyAdvantage only; DALP identity to bind to the search
subjectHints.searchTermstringComplyAdvantage search term
subjectHints.clientRefstring, optionalComplyAdvantage client reference; defaults to identityAddress
subjectHints.entityTypestring, optionalComplyAdvantage entity type; defaults to person
subjectHints.typesstring array, optionalComplyAdvantage screening list types; defaults to sanction, warning

register-wallet returns externalId and the resolved identityAddress.

Webhook paths

Provider dashboards send webhook events to:

/api/webhooks/compliance/<provider>/<integrationId>/<urlToken>

Current provider path segments are:

  • sumsub
  • sumsub-aml
  • sumsub-kyt
  • complyadvantage
  • elliptic
  • jumio
  • middesk
  • onfido
  • persona
  • trulioo
  • veriff

The request body limit is 64 KiB.

Webhook signatures

ProviderHeadersAccepted digest
Sumsubx-payload-digest, x-payload-digest-algHMAC_SHA1_HEX, HMAC_SHA256_HEX, or HMAC_SHA512_HEX over raw body
ComplyAdvantagex-complyadvantage-signatureHMAC-SHA256 hex over raw body
Ellipticx-elliptic-signatureHMAC-SHA256 hex over raw body, with optional sha256= prefix
JumioAuthorizationBasic Auth credentials plus configured source IP allowlist
Middeskx-middesk-signature-256HMAC-SHA256 hex over raw body
Onfidox-sha2-signatureHMAC-SHA256 hex over raw body
Personapersona-signatureHMAC-SHA256 hex over ${timestamp}.${rawBody}
Trulioox-trulioo-signatureHMAC-SHA256 hex over raw body
Veriffx-hmac-signatureHMAC-SHA256 hex over raw body

If Sumsub omits x-payload-digest-alg, DALP uses HMAC_SHA256_HEX. Persona accepts space-separated signature sets during key rotation.

Trulioo DataVerify webhooks prefer the top-level TransactionId as the provider event id. Legacy deliveries without that stable id use a lower-trust composite fallback: SHA-256 over (TransactionId, RecordStatus, body_hash), where body_hash is the SHA-256 hex digest of the raw body.

ComplyAdvantage webhooks prefer the top-level id as the provider event id. Legacy deliveries without that stable id use a composite fallback: SHA-256 over (search_id, created_at).

Webhook processing outcomes

ConditionBehaviour
Signature invalidRequest is rejected
Body exceeds 64 KiBRequest is rejected as too large
New event is outside the five-minute replay windowRequest is rejected
Duplicate completed eventEvent is treated as replayed
Retryable claim processing failureRequest returns retry behaviour so the provider can resend
Subject is unmappedEvent is recorded for audit, but no on-chain claim effect occurs

Monitoring fields

The monitoring endpoint returns paginated rows with:

FieldMeaning
idMonitoring row ID
providerEventIdProvider event identifier
subjectAddressDALP subject address when resolved
topicNameClaim topic when available
severityNormalised severity from 0 through 100, when available
outcomeProcessing outcome
rawPayloadOriginal provider payload retained for audit
processedAtProcessing timestamp when completed
createdAtRow creation timestamp

See also

On this page