Partner API — v3.0.1
Type: Patch Release · Previous version: v3.0.0
✏️ Modified Endpoints
DELETE /tenant/customer/forget/{customerAccountId}
Tag: Tenant Customers
Summary: API to delete wallet user (Right to Forget)
Retrieves customer details using customerAccountId provided as a path parameter and deletes the associated wallet user as part of the "Right to Forget" process.
Only the customerAccountId should be provided in the request.
Include the tenant-id in headers to identify the tenant. You may also include the access-token for authentication if applicable.
Use this API to:
- Permanently delete a wallet user's data
- Support user data deletion for compliance (e.g., GDPR, user requests)
Updated Response Codes
200
Successfully removed (forgot) the wallet user. Returns confirmation details.
400
Bad request. Possible reasons: missing parameters, invalid wallet ID, or user already forgotten.
Response Examples
| Code | Description |
|---|---|
| 200 | Successfully removed (forgot) the wallet user. Returns confirmation details. |
| 400 | Bad request. Possible reasons: missing parameters, invalid wallet ID, or user already forgotten. |
200 — Successfully removed (forgot) the wallet user. Returns confirmation details.
400 — Bad request. Possible reasons: missing parameters, invalid wallet ID, or user already forgotten.
GET /consent/consent-message/{tenantId}
Tag: Consent
Summary: Fetch vendor consent details
Retrieves the consent message configured for a specific tenant and vendor combination.
Useful to:
- Display consent copy to the customer before accepting consent
- Retrieve vendor-specific agreement details for audit/logging
Updated Query Parameters
subCategory (string)
- Description updated:
- Before: Sub Category
- After: Consent subcategory (e.g., Deposits)
type (string)
- Description updated:
- Before: Type
- After: Consent type (e.g., ACH)
Updated Response Codes
200
Consent message fetched successfully
400
Error occurred while fetching vendor consent details
404
No consent details found for the given vendor
Response Examples
| Code | Description |
|---|---|
| 200 | Consent message fetched successfully |
| 400 | Error occurred while fetching vendor consent details |
| 404 | No consent details found for the given vendor |
200 — Consent message fetched successfully
{
"data": {
"vendorName": "Plaid Inc.",
"currentActiveVersion": "v1.0.3",
"consentMessage": "I authorize the platform to retrieve my banking data...",
"dssId": "dss_4u8ddjeq"
},
"message": "Vendor consent details fetched successfully"
}
400 — Error occurred while fetching vendor consent details
404 — No consent details found for the given vendor
GET /consent/consent-status
Tag: Consent
Summary: Check consent status of a customer
Retrieves the consent status for a customer based on the provided subcategory and type.
Headers:
- tenant-id (optional): Scope the customer context.
- access-token (optional): Used to authenticate the customer's identity.
Query Parameters:
- subCategory: The category under which consent is taken (e.g., Deposits).
- type: The specific consent type (e.g., ACH).
- customerAccountId (optional): Unique ID for the customer.
Added Query Params
None
Deprecated Query Params
| Parameter | Type | Description |
|---|---|---|
dssVendorId |
string | DSS Vendor Id e.g. abcd1234-5678-90ab-cdef-123456abcdef |
Updated Query Parameters
customerAccountId (string)
- Description updated:
- Before: customer Account Id
- After: Customer account ID for which the consent is being checked
subCategory (string)
- Description updated:
- Before: Sub Category
- After: Sub-category for consent classification (e.g., Deposits)
type (string)
- Description updated:
- Before: Type
- After: Consent type being verified (e.g., ACH)
Updated Response Codes
200
Returned when consent information is successfully fetched.
400
Returned when:
- Required query parameters are missing or invalid
- Tenant ID is not valid
404
Returned when no consent information is available for the specified criteria.
Response Examples
| Code | Description |
|---|---|
| 200 | Returned when consent information is successfully fetched. |
| 400 | Returned when: |
| 404 | Returned when no consent information is available for the specified criteria. |
200 — Returned when consent information is successfully fetched.
{
"data": {
"latestConsentVersion": "<string>"
},
"message": [
"Consent is accepted",
"Consent is not valid. Please accept the consent"
]
}
400 — Returned when:
- Required query parameters are missing or invalid
- Tenant ID is not valid
404 — Returned when no consent information is available for the specified criteria.
{
"errors": {
"type": "No data found",
"message": "No consent is available, please accept the consent"
}
}
GET /consent/fetch-tnc
Tag: Consent
Summary: Fetch latest Terms & Conditions or Privacy Policy
Retrieves the most recent active version of either Terms & Conditions or Privacy Policy.
This is typically used to:
- Display the latest legal documents to users
- Ensure customers accept the current version before onboarding
Updated Query Parameters
type (string)
- Description updated:
- Before: document type
- After: Type of legal document to retrieve
Updated Response Codes
200
Returns the latest active document content
400
Returned for invalid type or unexpected errors while fetching the document
401
Returned when requestor is not authorized to access the document
Response Examples
| Code | Description |
|---|---|
| 200 | Returns the latest active document content |
| 400 | Returned for invalid type or unexpected errors while fetching the document |
| 401 | Returned when requestor is not authorized to access the document |
200 — Returns the latest active document content
{
"message": "PRIVACY_POLICY / TERMS_CONDITIONS html content fetched successfully",
"content": "<string>"
}
400 — Returned for invalid type or unexpected errors while fetching the document
{
"errors": [
{
"type": "catch",
"message": "error[1]"
},
{
"message": "err.message",
"type": "catch"
}
]
}
401 — Returned when requestor is not authorized to access the document
{
"errors": [
{
"type": "Not Authorized",
"message": "This tenant has no access / unauthorized."
}
]
}
GET /federate-id/linked
Tag: Federated Id Management
Summary: Retrieve linked bank account details
Fetch bank account linkage details using one of the supported identifiers: federatedId, walletAddress, or bankAccountNumber. At least one query parameter must be provided. This endpoint is useful to verify if a bank account is already linked with a federated ID or wallet address.
Updated Query Parameters
federatedId (string)
- Description updated:
- Before: Federated Id
- After: The unique federated identifier associated with the user
walletAddress (string)
- Description updated:
- Before: Wallet Address
- After: The blockchain wallet address linked to the bank account
- Example updated:
0x123abc456def789ghi101jklmnopqrstu
Response Examples
| Code | Description |
|---|---|
| 200 | Linked bank account details retrieved successfully. |
| 400 | Missing or invalid query parameters. |
| 401 | Error response when user is unauthorized. |
| 403 | Error response when user is forbidden. |
| 500 | Error response when internal server error. |
200 — Linked bank account details retrieved successfully.
{
"message": "Linked accounts fetched successfully",
"data": [
{
"bankAccountNumber": "1234567890",
"federatedId": "FE-9876543210",
"walletAddress": "0x123abc456def789ghi101jklmnopqrstu",
"abaNumber": "021000021",
"createdAt": "2020-08-01T12:34:56.000Z"
}
]
}
400 — Missing or invalid query parameters.
401 — Error response when user is unauthorized.
403 — Error response when user is forbidden.
500 — Error response when internal server error.
{
"error": {
"type": "Internal server error",
"message": "An unexpected error occurred. Please try again later"
}
}
GET /offchainTransaction/transfer-method
Tag: Off Chain Transactions
Summary: Fetch available transfer methods
Retrieves available off-chain transfer methods (e.g., ACH, Wire) for a given user identity based on the input query.
You must pass the type query parameter to specify the transfer method type (e.g., ach, wire).
You can optionally provide either:
namespace(e.g.,example.user.ul) orblockchainAddress(e.g.,0xABC...) to scope the identity.
Include the tenant-id in headers to identify the tenant. Include the api-key for authenticated access.
Use this API to:
- Display eligible payment methods to the user
- Determine routing based on verified off-chain identities
Updated Query Parameters
blockchainAddress (string)
- Description added: Blockchain wallet address of the user
namespace (string)
- Description added: User namespace
type (string)
- Description added: Transfer method type (e.g., ach, wire, etc)
Updated Response Codes
200
Returned when valid transfer methods are successfully fetched.
400
Returned when required query parameters are missing or identity cannot be resolved.
Response Examples
| Code | Description |
|---|---|
| 200 | Returned when valid transfer methods are successfully fetched. |
| 400 | Returned when required query parameters are missing or identity cannot be resolved. |
200 — Returned when valid transfer methods are successfully fetched.
{
"data": {
"id": "offchain_12345",
"bankDetails": "Royal Bank, John Doe, GB94BARC10201530093459",
"type": "ach",
"createdAt": "2024-11-03T13:45:30.000Z"
},
"message": "Successfully fetched transfer methods"
}
400 — Returned when required query parameters are missing or identity cannot be resolved.
{
"errors": "[\n {\n \"type\": \"catch\",\n \"message\": \"API failed in execution\"\n },\n {\n \"type\": \"Transfer Method\",\n \"message\": \"Please provide either namespace or blockchain address\"\n },\n {\n \"type\": \"Transfer Method\",\n \"message\": \"Tenant Id is missing in Headers\"\n },\n {\n \"type\": \"No data found\",\n \"message\": \"Please provide valid namespace\"\n },\n {\n \"type\": \"Transfer Method\",\n \"message\": \"Couldn't allow the transaction, customer doesn't belong to Tenant\"\n },\n {\n \"type\": \"Transfer Method\",\n \"message\": \"isTenantAuthorized?.message\"\n },\n {\n \"type\": \"No data found\",\n \"message\": \"Please provide valid namespace\"\n },\n {\n \"data\": [],\n \"message\": \"No Transfer Method Available For : namespace\"\n },\n {\n \"type\": \"Transfer Method\",\n \"message\": \"Couldn't allow the transaction, customer doesn't belong to Tenant\"\n },\n {\n \"type\": \"Transfer Method\",\n \"message\": \"isTenantAuthorized?.message\"\n },\n {\n \"type\": \"No data found\",\n \"message\": \"Please provide valid namespace\"\n },\n {\n \"type\": \"catch\",\n \"message\": \"Failed to fetch the transfer method\"\n }\n]"
}
GET /tenant/badge
Tag: Badge Management
Summary: Fetch all badges
Retrieves a paginated list of badges with optional filters and search.
Useful for dashboard views, admin portals, and filtered badge management.
Updated Query Parameters
page (number)
- Description updated:
- Before: Page index
- After: Page index for pagination (starts from 1)
pagesize (number)
- Description updated:
- Before: Page size
- After: Number of items per page
search (string)
- Description updated:
- Before: search key
- After: Search keyword (badge name as silver, gold etc. and badge type as identification, financial, information)
Updated Response Codes
200
Successfully retrieved the list of badges
400
Returned when badge listing fails due to validation or processing error
Response Examples
| Code | Description |
|---|---|
| 200 | Successfully retrieved the list of badges |
| 400 | Returned when badge listing fails due to validation or processing error |
200 — Successfully retrieved the list of badges
400 — Returned when badge listing fails due to validation or processing error
{
"errors": [
{
"type": "catch",
"message": "shows the error message while API failed in execution"
},
{
"message": "Page or pagesize should be positive value or atleast 1",
"type": "page"
},
{
"type": "catch",
"message": "err.message"
}
]
}
GET /tenant/badge/assign/fetch-all/{identificationBadgeId}
Tag: Badge Management
Summary: Fetch all assigned financial, identification, and information badges along with token list
Retrieves the complete list of badges and tokens associated with a given identification badge ID.
Useful for viewing all linked credentials or representations tied to a user or entity.
Added Response Codes
| Code | Description |
|---|---|
| 400 | Returned when retrieval fails due to validation or processing errors |
Deprecated Response Codes
None
Updated Response Codes
200
Successfully retrieved all assigned badges with linked token details
Response Examples
| Code | Description |
|---|---|
| 200 | Successfully retrieved all assigned badges with linked token details |
| 400 | Returned when retrieval fails due to validation or processing errors |
200 — Successfully retrieved all assigned badges with linked token details
{
"data": [
{
"publicId": "8d776c9f-2038-45dc-87dd-0d995af7fdaf",
"token": "TOK-123",
"identificationBadgeDetails": {
"identificationBadgeId": "36d166e5-c9d9-445b-8458-281546dd8171",
"badgeName": "BRONZE-IDENTIFICATION-BADGE",
"badgeType": "FIN"
},
"financialBadgeDetails": {
"financialBadgeId": "62a8de99-1934-4e38-805b-74fa31b7c1ab",
"badgeName": "GOLD-FINANCIAL-BADGE",
"badgeType": "FIN"
},
"customFinanceBadgeDetails": {
"customFinancialBadgeId": "e4d123c2-0c6e-45a4-bf8c-1a4cc87f2a63",
"badgeName": "CUSTOM-FIN-BADGE",
"badgeType": "FIN"
},
"informationBadgeDetails": {}
}
],
"message": "badges with token linked fetched successfully."
}
400 — Returned when retrieval fails due to validation or processing errors
GET /tenant/badge/{badgeId}
Tag: Badge Management
Summary: Fetch badge details by badgeId
Retrieves detailed information about a specific badge using its badgeId.
Includes metadata, issuance details, and associated configuration if available.
Updated Path Parameters
badgeId (string)
- Description updated:
- Before: badge Id
- After: Unique identifier of the badge
Updated Response Codes
200
Returned when badge details are successfully retrieved
400
Returned when badgeId is invalid or details could not be fetched
Response Examples
| Code | Description |
|---|---|
| 200 | Returned when badge details are successfully retrieved |
| 400 | Returned when badgeId is invalid or details could not be fetched |
200 — Returned when badge details are successfully retrieved
{
"data": [
{
"badgeId": "2cbfdc48-072c-40e5-8976-7ade3586faf6",
"badgeName": "Qamar Khan",
"badgeType": "IDENTIFICATION",
"badgeDescription": "bronze identification badge",
"userGroup": "WALLET_USER",
"badgeSymbolRef": "https://ulcheckpointstaging.blob.core.windows.net/staging-blob-container/Sheetal%20Kumar",
"createdBy": "dff33fea-b456-4cfa-b2a1-0cbf9071aefe",
"storageProvider": "abc",
"createdAt": "2022-12-07T00:00:00.000Z",
"updatedAt": "2022-12-07T00:00:00.000Z",
"financial_badge_token": [
{
"financialBadgeId": "2cbfdc48-072c-40e5-8976-7ade3586faf6",
"tokenSymbol": "USBC",
"createdAt": "2022-12-07T00:00:00.000Z",
"updatedAt": "2022-12-07T00:00:00.000Z"
}
],
"badge_rules": [
{
"ruleId": "2cbfdc48-072c-40e5-8976-7ade3586faf6",
"badgeId": "2cbfdc48-072c-40e5-8976-7ade3586faf6",
"tenantId": "2cbfdc48-072c-40e5-8976-7ade3586faf6",
"isActive": "true",
"startDate": "2023-12-18T18:30:00.000Z",
"endDate": "2023-12-18T18:30:00.000Z",
"ruleGroup": "wallet-user",
"ruleVersion": "1",
"isDefaultRule": "false",
"createdBy": "dff33fea-b456-4cfa-b2a1-0cbf9071aefe",
"status": "pending",
"inactiveDate": "2022-12-07T00:00:00.000Z",
"createdAt": "2022-12-07T00:00:00.000Z",
"updatedAt": "2022-12-07T00:00:00.000Z"
}
]
}
],
"message": "Badge details fetched successfully"
}
400 — Returned when badgeId is invalid or details could not be fetched
GET /tenant/business-user/{businessUserId}
Tag: Business User
Summary: Fetch business user details by businessUserId
Retrieves detailed information of a business user using their unique ID.
This includes metadata, KYC documents, and verification status if available.
Updated Response Codes
200
Business user details successfully fetched
400
Returned when the business user ID is invalid or lookup fails
Response Examples
| Code | Description |
|---|---|
| 200 | Business user details successfully fetched |
| 400 | Returned when the business user ID is invalid or lookup fails |
200 — Business user details successfully fetched
{
"message": "Business user details fetched successfully",
"data": {
"businessUserId": "Jone Doe",
"businessUserName": "Jone Doe",
"domain": "jonedoe",
"startDate": "2023-11-30T18:30:00.000Z",
"endDate": "2023-11-30T18:30:00.000Z",
"complianceStatus": "PENDING",
"accountStatus": "PENDING",
"onboardingStatus": "PENDING",
"identityProviderStatus": "PENDING",
"createdAt": "2023-12-01T11:12:47.449Z",
"updatedAt": "2023-12-01T11:12:47.449Z",
"tenantId": "53834add-8bf9-4982-a356-3cc420bd6be7",
"business_user_namespaces": {
"businessUserNamespaceId": "1d528994-cdc7-4766-ab3e-2dd99995867c",
"businessUserId": "1d528994-cdc7-4766-ab3e-2dd99995867c",
"businessUserNamespace": "test.ul",
"accountAddress": "1d500994-cdc7-4766-ab3e-2dd99995867c"
},
"dss_business_users": {
"dssTypeId": "70b7e287-37bf-4422-934c-27f7d451f274",
"businessUserId": "70b7e287-37bf-4422-934c-27f7d451f274",
"dssId": "140638535",
"createdAt": "2023-12-01T11:12:45.802Z",
"updatedAt": "2023-12-01T11:12:45.802Z"
},
"business_user_metadata": {
"businessUserMetadataId": "70b7e287-37bf-4422-934c-27f7d451f274",
"businessUserId": "70b7e287-37bf-4422-934c-27f7d451f274",
"companyAddress": {
"address1": "Mr John Smith. 132, 40ft Street, Kingston",
"city": "San Francisco",
"state": "CA",
"isoCountryCode": "US",
"postalCode": "90213"
},
"email": "<string>",
"taxId": "<number>",
"legalName": "<string>",
"phone": "<number>",
"businessEntityName": "<string>",
"bankVerificationNumber": "<number>",
"incorporationDocs": {
"documentType": "8",
"fileName": "filename.png",
"content": "base64,iVBORw0KGgoAAAANSUhEUgAAAZ4AAAEDCAYAAAAFhGKSAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUA",
"countryCode": "US"
},
"jurisdictionDocs": {
"documentType": "8",
"fileName": "filename.png",
"content": "base64,iVBORw0KGgoAAAANSUhEUgAAAZ4AAAEDCAYAAAAFhGKSAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUA",
"countryCode": "US"
},
"otherDocs": {
"documentType": "8",
"fileName": "filename.png",
"content": "base64,iVBORw0KGgoAAAANSUhEUgAAAZ4AAAEDCAYAAAAFhGKSAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUA",
"countryCode": "US"
},
"entityBeneficialOwners": {
"documentType": "8",
"fileName": "filename.png",
"content": "base64,iVBORw0KGgoAAAANSUhEUgAAAZ4AAAEDCAYAAAAFhGKSAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUA",
"countryCode": "US"
},
"individualBeneficialOwners": {
"documentType": "8",
"fileName": "filename.png",
"content": "base64,iVBORw0KGgoAAAANSUhEUgAAAZ4AAAEDCAYAAAAFhGKSAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUA",
"countryCode": "US"
},
"controlPersons": {
"title": "supervisor",
"identification": {
"documentType": "8",
"fileName": "filename.png",
"content": "base64,iVBORw0KGgoAAAANSUhEUgAAAZ4AAAEDCAYAAAAFhGKSAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUA",
"countryCode": "US"
},
"documents": [
{
"documentType": "8",
"fileName": "filename.png",
"content": "base64,iVBORw0KGgoAAAANSUhEUgAAAZ4AAAEDCAYAAAAFhGKSAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUA",
"countryCode": "US"
}
],
"dateOfBirth": "2000-12-01",
"emailAddress": "test@test.com",
"firstName": "First name",
"lastName": "Last name",
"phoneNumber": "9100000000",
"phoneNumberType": "0",
"taxIdNumber": "122-22-2332",
"address": {
"address1": "Lorem Ipsum is simply dummy text",
"city": "Lorem",
"state": "CA",
"isoCountryCode": "US",
"postalCode": "90213"
},
"bvn": "bn01910190",
"customAttributes": [
{
"name": "name",
"value": "value"
}
],
"proofOfAddress": {
"documentType": "8",
"fileName": "filename.png",
"content": "base64,iVBORw0KGgoAAAANSUhEUgAAAZ4AAAEDCAYAAAAFhGKSAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUA",
"countryCode": "US"
}
},
"memoFields": {
"name": "<string>",
"value": "<string>"
},
"otherDetails": "<string>",
"registeredOfficeAddress": {
"address1": "Lorem Ipsum is simply dummy text",
"address2": "Lorem Ipsum is simply dummy text",
"city": "Lorem",
"state": "CA",
"isoCountryCode": "US",
"postalCode": "90213"
},
"signatories": {
"title": "supervisor",
"identification": {
"documentType": "8",
"fileName": "filename.png",
"content": "base64,iVBORw0KGgoAAAANSUhEUgAAAZ4AAAEDCAYAAAAFhGKSAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUA",
"countryCode": "US"
},
"documents": [
{
"documentType": "8",
"fileName": "filename.png",
"content": "base64,iVBORw0KGgoAAAANSUhEUgAAAZ4AAAEDCAYAAAAFhGKSAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUA",
"countryCode": "US"
}
],
"dateOfBirth": "2000-12-01",
"emailAddress": "test@test.com",
"firstName": "First name",
"lastName": "Last name",
"phoneNumber": "9100000000",
"phoneNumberType": "0",
"taxIdNumber": "122-22-2332",
"address": {
"address1": "Lorem Ipsum is simply dummy text",
"city": "Lorem",
"state": "CA",
"isoCountryCode": "US",
"postalCode": "90213"
},
"bvn": "bn01910190",
"customAttributes": [
{
"name": "name",
"value": "value"
}
],
"proofOfAddress": {
"documentType": "8",
"fileName": "filename.png",
"content": "base64,iVBORw0KGgoAAAANSUhEUgAAAZ4AAAEDCAYAAAAFhGKSAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUA",
"countryCode": "US"
}
}
},
"business_user_documents": {
"businessUserDocumentId": "0598df1a-3f21-48e1-803e-071dc7be372d",
"businessUserId": "1d528994-cdc7-4766-ab3e-2dd99995867c",
"documentType": "8",
"fileName": "filename.png",
"content": "base64,iVBORw0KGgoAAAANSUhEUgAAAZ4AAAEDCAYAAAAFhGKSAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUA",
"countryCode": "US",
"type": "incorporationDocs",
"createdAt": "2023-12-01T11:12:47.699Z",
"updatedAt": "2023-12-01T11:12:47.699Z"
},
"walletBalanceDetails": {
"accountAddress": "0x5179ba6509980077000977f5eac2",
"namespaceId": "1d528994-cdc7-4766-ab3e-2dd99995867c",
"isGlobal": "<number>",
"isPrimary": "<string>",
"domainNamespace": "snltd7.biz.sonnyss31.ul",
"tenantId": "1d528994-cdc7-4766-ab3e-2dd99995867c",
"tenantName": "Digit Ltd",
"customNamespace": "snltd7.biz.sonnyss31.ul",
"namespaceProvider": "2023-12-01T11:12:47.699Z",
"balance": {
"balance": "0",
"name": "USBC",
"symbol": "USBC"
}
}
}
}
400 — Returned when the business user ID is invalid or lookup fails
{
"errors": [
{
"type": "catch",
"message": "Please provide valid business user id"
},
{
"type": "catch",
"message": "err[1]"
},
{
"type": "catch",
"message": "error.message"
}
]
}
GET /tenant/customer/customer-details
Tag: Tenant Customers
Summary: Fetch tenant customer details
Retrieves customer details using one of the following:
- Namespace, Account Address, Customer Name, Custom Namespace, or Phone Number
Only one field should be provided per request. If none or multiple are sent, you'll get a 400 Bad Request.
Include the tenant-id in headers to identify the tenant.
Use this API to:
- Look up existing customers
- Fetch details for wallet actions or onboarding
Updated Response Codes
200
Successfully fetched tenant customer details.
400
Bad request. Failed to fetch tenant customer details.
404
- will give you the error response when it don't find any data related the given user-namespace, account-address, customer-name or custom-namespace
No data found for the provided user namespace, account address, customer name, or custom namespace.
Response Examples
| Code | Description |
|---|---|
| 200 | Successfully fetched tenant customer details. |
| 400 | Bad request. Failed to fetch tenant customer details. |
| 404 | No data found for the provided user namespace, account address, customer name, or custom namespace. |
200 — Successfully fetched tenant customer details.
{
"message": "Customer details fetched successfully",
"data": [
{
"domainNamespace": "ul-ledger.user.ul",
"customNamespace": "esstech.ul",
"namespaceProvider": "msv",
"tenantName": "Prod Uled",
"firstName": "amber",
"middleName": "donald",
"lastName": "wenny",
"taxIdNumber": "122-22-2332",
"ssn": "ssn",
"phoneNumber": "+15417543010",
"dateOfBirth": "1997-04-02",
"address": {
"city": "New York",
"state": "KY",
"address1": "123 Main St",
"country": "US",
"postalCode": "10001",
"isoCountryCode": "US"
},
"latLong": {
"lat_long_data": "Lorem",
"lat_long_country": "US",
"lat_long_city": "address1"
},
"email": "amber.wenny@mail.com",
"occupation": "Engineer",
"annualSalary": "50000-75000",
"accountPurpose": "Savings",
"expectedMonthlyVolume": "1000-5000",
"accountAddress": "0x3107259fa40121c259e524042b30326fd9625516",
"kycStatus": "PENDING",
"fundingStatus": "ACCEPTED",
"complianceStatus": "ACCEPTED",
"accountStatus": "ACTIVE",
"customerAccountCategory": "bronze",
"wallets": [],
"PEPScreeningPassed": "Pending",
"geographyScreening": "<string>",
"locationConfidenceScore": "<string>",
"nameScreening": "<string>",
"overallComplianceStatus": "<string>"
}
]
}
400 — Bad request. Failed to fetch tenant customer details.
{
"errors": [
{
"type": "More value",
"message": "Please provide only one value"
},
{
"type": "No value",
"message": "Please provide any one value"
},
{
"type": "No value",
"message": "Please provide valid tenant id"
},
{
"type": "No data found",
"message": "No data found"
},
{
"type": "catch",
"message": "error[1]"
},
{
"type": "catch",
"message": "err.message"
}
]
}
404 — No data found for the provided user namespace, account address, customer name, or custom namespace.
GET /tenant/customer/customer-full-details/{customerAccountId}
Tag: Tenant Customers
Summary: Fetch details of a customer using customer account ID
Retrieves customer details using customer account ID provided as a path parameter.
Only one field should be provided per request — in this case, the customerAccountId in the URL.
Include the tenant-id in headers to identify the tenant. You may also include access-token and api-key headers for authentication if applicable.
Use this API to:
- Look up existing customers by account ID
- Fetch complete customer profiles for verification or system actions
Updated Path Parameters
customerAccountId (string)
- Description updated:
- Before: Customer Account Id
- After: Unique identifier for the customer account.
Updated Response Codes
200
Successfully fetched full tenant customer details.
400
Bad request. Failed to fetch full tenant customer details.
404
- will give you the error response when it unable find any data related to the given customer account id
No customer data found for the provided customer account ID.
Response Examples
| Code | Description |
|---|---|
| 200 | Successfully fetched full tenant customer details. |
| 400 | Bad request. Failed to fetch full tenant customer details. |
| 404 | No customer data found for the provided customer account ID. |
200 — Successfully fetched full tenant customer details.
{
"message": "Customer details fetched successfully",
"data": [
{
"customerAccountId": "c8abc8ff-8c56-4231-9e55-aaca9698a3d7",
"domainNamespace": "ul-ledger.user.ul",
"customNamespace": "esstech.ul",
"namespaceProvider": "msv",
"tenantName": "Prod Uled",
"firstName": "amber",
"middleName": "donald",
"lastName": "wenny",
"taxIdNumber": "122-22-2332",
"ssn": "ssn",
"phoneNumber": "+15417543010",
"dateOfBirth": "1997-04-02",
"address": {
"city": "New York",
"state": "KY",
"address1": "123 Main St",
"country": "US",
"postalCode": "10001",
"isoCountryCode": "US"
},
"latLong": {
"lat_long_data": "Lorem",
"lat_long_country": "US",
"lat_long_city": "address1"
},
"email": "amber.wenny@mail.com",
"occupation": "Engineer",
"annualSalary": "50000-75000",
"accountPurpose": "Savings",
"expectedMonthlyVolume": "1000-5000",
"accountAddress": "0x3107259fa40121c259e524042b30326fd9625516",
"kycStatus": "PENDING",
"fundingStatus": "ACCEPTED",
"complianceStatus": "ACCEPTED",
"accountStatus": "ACTIVE",
"customerAccountCategory": "bronze",
"documents": [],
"tenant_customer_notes": [],
"wallets": [],
"idBadgeLogs": [],
"infoBadge": [],
"denialCode": "<string>",
"denialReason": "<string>",
"governmentIdVerificationStatus": "Not Verified",
"poaVerificationStatus": "Not Verified",
"ssnVerificationStatus": "Not Verified",
"bankVerificationStatus": "Not Verified"
}
]
}
400 — Bad request. Failed to fetch full tenant customer details.
{
"errors": [
{
"type": "catch",
"message": "error[1]"
},
{
"type": "catch",
"message": "err.message"
}
]
}
404 — No customer data found for the provided customer account ID.
{
"errors": [
{
"type": "No data found",
"message": "No data found for tenant"
},
{
"type": "No data available",
"message": "There is no such customer account in the given tenant id"
}
]
}
GET /transactions/identifier/{identifier}/type/{type}/history
Tag: Chain
Summary: API endpoint to fetch the on chain or off chain transactions history
Updated Query Parameters
memo (string)
- Example updated:
payment
Updated Path Parameters
identifier (string)
- Example updated:
john.ul
type (string)
- Example updated:
on-chain
Response Examples
| Code | Description |
|---|---|
| 200 | Fetch on chain or off chain transactions history |
| 400 | Error : 400 response |
200 — Fetch on chain or off chain transactions history
{
"data": [
{
"trxId": "0xca6ede3c859f76289f2da6cdf5774645eb155795b685c20b28ee9a4e74445d82",
"blockHash": "0xc24cf427119c9d125490782468368e6c06c47eec842f904b2fa0baaf27c754c5",
"blockNumber": "362839",
"amount": "2000000000000000000",
"paymentType": "credit",
"from": "0x0x0000000000000000000000000000000000000",
"to": "0xd0112345678907da6383b7c4ec349e5ae85404d0",
"tokenSymbol": "TOKEN",
"fromNamespace": "itech.sheetalus.ul",
"toNamespace": "itech.punitus.ul",
"fromCustomNamespace": "itech_sheetalus_ul",
"toCustomNamespace": "itech_punitus_ul",
"status": "Completed",
"timestamp": "1672925586",
"isError": "0",
"revertReason": null,
"navigationURL": "https://rpc.tst.ent.universalledger.publicmint.io:8545/tx/0xca6ede3c859f76289f2da6cdf5774645eb155795b685c20b28ee9a4e74445d82/internal-transactions"
},
{
"trxId": "0xd55658107bf03b592064204f90457fd61ad0109f9f09e43eeb4ce003d351288b",
"blockHash": "0x88555a433ff5891771daa097f5824cd54ae44e7531f60bb2cd27c2e05bf34a07",
"blockNumber": "362830",
"amount": "1000000000000000000",
"paymentType": "credit",
"from": "0x0x0000000000000000000000000000000000000",
"to": "0xd0112345678907da6383b7c4ec349e5ae85404d0",
"tokenSymbol": "TOKEN",
"fromNamespace": "itech.sheetalus.ul",
"toNamespace": "itech.punitus.ul",
"fromCustomNamespace": "itech_sheetalus_ul",
"toCustomNamespace": "itech_punitus_ul",
"status": "Completed",
"timestamp": "1672925550",
"isError": "0",
"revertReason": null,
"navigationURL": "https://rpc.tst.ent.universalledger.publicmint.io:8545/tx/0xd55658107bf03b592064204f90457fd61ad0109f9f09e43eeb4ce003d351288b/internal-transactions"
},
{
"trxId": "0xc2c415def09cb7bbaa9b8d419f917bb7e7e20d345447dadeac04a0a40c730269",
"blockHash": "0x74f1beb868586e1047b1fc72044ed31f0490261875cefa4004278704f57c09e8",
"blockNumber": "362823",
"amount": "500000000000000000000",
"paymentType": "credit",
"from": "0x0x0000000000000000000000000000000000000",
"to": "0xd0112345678907da6383b7c4ec349e5ae85404d0",
"tokenSymbol": "TOKEN",
"fromNamespace": "itech.sheetalus.ul",
"toNamespace": "itech.punitus.ul",
"fromCustomNamespace": "itech_sheetalus_ul",
"toCustomNamespace": "itech_punitus_ul",
"status": "Completed",
"timestamp": "1672925522",
"isError": "0",
"revertReason": null,
"navigationURL": "https://rpc.tst.ent.universalledger.publicmint.io:8545/tx/0xc2c415def09cb7bbaa9b8d419f917bb7e7e20d345447dadeac04a0a40c730269/internal-transactions"
}
]
}
400 — Error : 400 response
{
"errors": [
{
"type": "Transaction error",
"error": "No address found for namespace john.ul"
},
{
"type": "Transaction error",
"error": "Identifier does not belong to tenant_id"
},
{
"type": "filterError",
"message": "Start date can not be greater than the End date"
},
{
"type": "filterError",
"message": "type can only be on-chain || off-chain"
},
{
"type": "filterError",
"message": "Error in fetchOnChainTransactionHistory: ${error.message}"
},
{
"type": "filterError",
"message": "Error in fetchOffChainTransactionHistory: ${error.message}"
}
]
}
GET /transactions/{identifier}/balance
Tag: Chain
Summary: Gets the balance of the address.
Updated Path Parameters
identifier (string)
- Example updated:
john.ul
Response Examples
| Code | Description |
|---|---|
| 200 | Gets the balance of the address. |
| 400 | Error : 400 response |
200 — Gets the balance of the address.
400 — Error : 400 response
{
"errors": [
{
"type": "Client error",
"error": "Unable to fetch balance for address 0x439028fcbb2b9e04dbd6be8e3e6f1458b31f949cc"
},
{
"type": "Client error",
"error": "Identifier does not belong to tenant_id"
}
]
}
POST /consent/accept-consent
Tag: Consent
Summary: Accept customer or tenant consent
Accepts consent from a customer or tenant for a specific vendor or service.
Include the tenant-id and optionally access-token in the request headers.
Use this API to:
- Record user consent for vendors or platforms
- Ensure legal compliance with consent records
Updated Request Body Fields
consentStatus (string)
- Description updated:
- Before: consent Status
- After: Status of the customer consent (e.g., ACCEPTED, REVOKED).
consentVersion (string)
- Description updated:
- Before: consent Version
- After: Version of the consent document that the user agreed to.
- Example updated:
v2.3
customerAccountId (string)
- Description updated:
- Before: customerAccountId
- After: Unique identifier for the customer account (UUID). Optional for new consents.
- Example updated:
f9b8b57a-9e03-4d3e-8b5e-5dfb2942fc56
dssVendorId (string)
- Description updated:
- Before: dssVendorId
- After: Unique identifier assigned to the DSS vendor.
- Example updated:
vendor_xyz_123
type (string)
- Description updated:
- Before: type
- After: Type of payment or account method the consent relates to (e.g., ACH, etc).
Updated Response Codes
201
Returned when the consent is successfully accepted and stored.
400
Returned when:
- Required fields are missing
- Consent is already accepted
- Tenant information is invalid
Current Request Example
{
"customerAccountId": "f9b8b57a-9e03-4d3e-8b5e-5dfb2942fc56",
"dssVendorId": "vendor_xyz_123",
"consentStatus": "ACCEPTED",
"consentVersion": "v2.3",
"type": "ACH"
}
Response Examples
| Code | Description |
|---|---|
| 201 | Returned when the consent is successfully accepted and stored. |
| 400 | Returned when: |
201 — Returned when the consent is successfully accepted and stored.
{
"data": {
"customerConsentId": "ccid_654321",
"customerAccountId": "f9b8b57a-9e03-4d3e-8b5e-5dfb2942fc56",
"dssVendorId": "vendor_xyz_123",
"consentStatus": "ACCEPTED",
"consentVersion": "v2.3",
"createdAt": "2025-07-15T08:12:34.000Z",
"updatedAt": "2025-07-15T09:15:12.000Z"
},
"message": "Customer consent updated successfully"
}
400 — Returned when:
- Required fields are missing
- Consent is already accepted
- Tenant information is invalid
POST /digital-wallet/deposit
Tag: Digital Wallet
Summary: Deposit via digital wallet into the user account
Initiates a deposit request using a digital wallet linked to the user account. This API is typically used to top up wallet balance.
Updated Response Codes
201
Deposit successfully initiated
400
Returned when deposit initiation fails due to validation or processing errors
Current Request Example
{
"amount": "<number>",
"namespace": "test.jones1.ul",
"successUrl": "https://console-dev.cab340b7670d495a8ed7.eastus.aksapp.io/payments/success",
"failureUrl": "https://console-dev.cab340b7670d495a8ed7.eastus.aksapp.io/payments/failure",
"cancelUrl": "https://console-dev.cab340b7670d495a8ed7.eastus.aksapp.io/payments/cancel",
"ipAddress": "127.0.0.1",
"token": "THAI"
}
Response Examples
| Code | Description |
|---|---|
| 201 | Deposit successfully initiated |
| 400 | Returned when deposit initiation fails due to validation or processing errors |
201 — Deposit successfully initiated
{
"data": {
"url": "https://www.sandbox.paypal.com/checkoutnow?token=6KY73853N7081953X",
"fiatTransactionId": "dca665ae-ffae-4249-9b5b-31439d470258",
"fiatStatus": "PENDING",
"namespace": "digit.sheetalku55.ul",
"amount": 87,
"fiatTransactionHistory": {
"fiatTxnHistoryId": "be02917c-c515-4579-9e99-a159f81bb333",
"status": "PENDING",
"description": "Digital wallet transaction status is initiated, default status is pending.",
"createdAt": "2024-07-19T07:48:20.791Z"
}
}
}
400 — Returned when deposit initiation fails due to validation or processing errors
{
"errors": [
{
"type": "Add Fund",
"message": "please enter namespace of user"
},
{
"type": "Add Fund ",
"message": "no payment provider detail found"
},
{
"type": "Add Fund",
"message": "Something went wrong, please try again"
}
]
}
POST /federate-id/link
Tag: Federated Id Management
Summary: Link a bank account with a federated ID wallet
This endpoint links a bank account to a wallet address associated with a federated ID. The client must provide valid account and wallet details in the request payload. If the account is already linked or the input is invalid, an error response is returned.
Updated Request Body Fields
federatedId (string)
- Description updated:
- Before: federated Id
- After: The unique federated identifier associated with the user
- Example updated:
fed-789654123
walletAddress (string)
- Description updated:
- Before: wallet address
- After: The blockchain wallet address to be linked with the bank account
- Example updated:
0x123abc456def789ghi101jklmnopqrstu
Current Request Example
Response Examples
| Code | Description |
|---|---|
| 201 | Bank account successfully linked to wallet |
| 400 | Invalid input or bank account already linked |
| 401 | Error response when user is unauthorized. |
| 403 | Error response when user is forbidden. |
| 500 | Server error |
201 — Bank account successfully linked to wallet
{
"message": "Bank account linked successfully",
"data": {
"federatedId": "125AH",
"bankAccountNumber": "2123",
"walletAddress": "1234567890",
"abaNumber": "1234567890"
}
}
400 — Invalid input or bank account already linked
{
"errors": [
{
"type": "Federated Id",
"message": "Wallet address or Federated Id already linked"
}
]
}
401 — Error response when user is unauthorized.
403 — Error response when user is forbidden.
500 — Server error
{
"error": {
"type": "Internal server error",
"message": "An unexpected error occurred. Please try again later"
}
}
POST /offchainTransaction/transfer-method
Tag: Off Chain Transactions
Summary: Create a transfer for tenant or customer
Initiates a transfer request on behalf of a tenant or user, depending on the payload.
Supports multiple types of off-chain transfers such as:
ach(Automated Clearing House)wire
Required fields vary by type:
- For ACH:
bankAccountNamebankAccountNumberroutingNumbernamespacetype: "ach"
Include the tenant-id in headers to identify the tenant. You may also include the api-key for secured access.
Use this API to:
- Add new off-chain bank transfer method for a customer or tenant
- Enable wallet withdrawals or deposits via traditional banking rails
Updated Request Body Fields
accountType (string)
- Description updated:
- Before: Account type checking | saving
- After: Type of bank account. Common values: checking, saving.
bankAccountName (string)
- Description updated:
- Before: bank Account Name of User
- After: Name on the user’s bank account.
- Example updated:
John Doe
bankAccountNumber (string)
- Description updated:
- Before: bank Account Number of User
- After: Bank account number of the user.
bankName (string)
- Description updated:
- Before: bank Name of User
- After: Name of the bank used for the transfer.
- Example updated:
Royal Bank
blockchainAddress (string)
- Description updated:
- Before: Blockchain Address
- After: Blockchain wallet address of the user. Required if namespace is not provided.
- Example updated:
0x8262f83b50e933677a89c854ba7dc64d3ae52001
namespace (string)
- Description updated:
- Before: Transfer method identity owner
- After: Namespace of the user. Required if blockchainAddress is not provided.
- Example updated:
john.doe.ul
routingNumber (string)
- Description updated:
- Before: routingNumber
- After: Bank routing number used to identify the bank branch.
type (string)
- Description updated:
- Before: Transfer method type
- After: Transfer method type. Valid values: card or ach.
- Example updated:
ach
Updated Response Codes
400
Returned when the payload is invalid or transfer creation fails.
Current Request Example
{
"namespace": "john.doe.ul",
"blockchainAddress": "0x8262f83b50e933677a89c854ba7dc64d3ae52001",
"type": "ach",
"bankName": "Royal Bank",
"bankAccountName": "John Doe",
"bankAccountNumber": "GB94BARC10201530093459",
"routingNumber": "011401533",
"accountType": "checking"
}
Response Examples
| Code | Description |
|---|---|
| 400 | Returned when the payload is invalid or transfer creation fails. |
400 — Returned when the payload is invalid or transfer creation fails.
{
"errors": "[\n {\n \"type\": \"catch\",\n \"message\": \"API failed in execution\"\n },\n {\n \"type\": \"Transfer Method\",\n \"message\": \"Please provide either namespace or blockchain address\"\n },\n {\n \"type\": \"Transfer Method\",\n \"message\": \"Tenant Id is missing in Headers\"\n },\n {\n \"type\": \"No data found\",\n \"message\": \"Please provide valid namespace\"\n },\n {\n \"type\": \"Transfer Method\",\n \"message\": \"Couldn't allow the transaction, customer doesn't belong to Tenant\"\n },\n {\n \"type\": \"Transfer Method\",\n \"message\": \"isTenantAuthorized?.message\"\n },\n {\n \"type\": \"No data found\",\n \"message\": \"Please provide valid namespace\"\n },\n {\n \"data\": [],\n \"message\": \"No Transfer Method Available For : namespace\"\n },\n {\n \"type\": \"Transfer Method\",\n \"message\": \"Couldn't allow the transaction, customer doesn't belong to Tenant\"\n },\n {\n \"type\": \"Transfer Method\",\n \"message\": \"isTenantAuthorized?.message\"\n },\n {\n \"type\": \"No data found\",\n \"message\": \"Please provide valid namespace\"\n },\n {\n \"type\": \"catch\",\n \"message\": \"Failed to fetch the transfer method\"\n }\n]"
}
POST /tenant/business-user
Tag: Business User
Summary: Onboard a new business user
Registers a new business user under a tenant.
Used during the initial setup or provisioning of a business account by providing necessary business and contact details.
Updated Request Body Fields
bankVerificationNumber (string)
- Description updated:
- Before: bank verification Number of business user
- After: Bank Verification Number of business user
customNamespace (string)
- Description updated:
- Before: custom namespace for business user
- After: Custom namespace for business user
provider (string)
- Description updated:
- Before: custom namespace provider
- After: Custom namespace provider
Updated Response Codes
201
Returns success when business user is onboarded
400
Returned when onboarding fails due to validation issues or bad request data
Current Request Example
{
"businessUserLegalName": "Jone Doe",
"domain": "jonedoe",
"accountAddress": "0x5179ba651a8ab0d2da5dc3e54ee6c8aa73272f5eac1",
"businessUserName": "Jone Doe",
"customNamespace": "jonedoebusiness",
"provider": "ens",
"businessUserAddress": {
"address1": "Mr John Smith. 132, 40ft Street, Kingston",
"city": "San Francisco",
"state": "CA",
"isoCountryCode": "US",
"postalCode": "90213"
},
"businessEntityName": "Not Applicable",
"incorporationDocs": {
"documentType": "8",
"fileName": "filename.png",
"content": "base64,iVBORw0KGgoAAAANSUhEUgAAAZ4AAAEDCAYAAAAFhGKSAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUA",
"countryCode": "US"
},
"jurisdictionDocs": {
"documentType": "8",
"fileName": "filename.png",
"content": "base64,iVBORw0KGgoAAAANSUhEUgAAAZ4AAAEDCAYAAAAFhGKSAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUA",
"countryCode": "US"
},
"otherDocs": [
{
"documentType": "8",
"fileName": "filename.png",
"content": "base64,iVBORw0KGgoAAAANSUhEUgAAAZ4AAAEDCAYAAAAFhGKSAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUA",
"countryCode": "US"
}
],
"entityBeneficialOwners": [
{
"ownershipPercentage": 20,
"ownershipType": 1,
"entityBeneficialOwners": [
{}
],
"individualBeneficialOwners": [
{
"ownershipPercentage": 20,
"ownershipType": 1,
"title": "<string>",
"identification": {
"documentType": "8",
"fileName": "filename.png",
"content": "base64,iVBORw0KGgoAAAANSUhEUgAAAZ4AAAEDCAYAAAAFhGKSAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUA",
"countryCode": "US"
},
"isControlPerson": "<boolean>",
"otherDocs": {
"documentType": "8",
"fileName": "filename.png",
"content": "base64,iVBORw0KGgoAAAANSUhEUgAAAZ4AAAEDCAYAAAAFhGKSAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUA",
"countryCode": "US"
},
"dob": "<string>",
"email": "<string>",
"firstName": "<string>",
"lastName": "<string>",
"phoneNumber": "9822222",
"phoneType": "<string>",
"taxIdNumber": "122-22-2332",
"taxCountry": "US",
"taxState": "California",
"address": {
"address1": "Lorem Ipsum is simply dummy text",
"city": "Lorem",
"state": "CA",
"isoCountryCode": "US",
"postalCode": "90213"
},
"bankVerificationNumber": "<string>",
"proofOfAddress": {
"documentType": "8",
"fileName": "filename.png",
"content": "base64,iVBORw0KGgoAAAANSUhEUgAAAZ4AAAEDCAYAAAAFhGKSAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUA",
"countryCode": "US"
}
}
],
"controlPersons": [
{
"title": "supervisor",
"identification": {
"documentType": "8",
"fileName": "filename.png",
"content": "base64,iVBORw0KGgoAAAANSUhEUgAAAZ4AAAEDCAYAAAAFhGKSAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUA",
"countryCode": "US"
},
"documents": [
{
"documentType": "8",
"fileName": "filename.png",
"content": "base64,iVBORw0KGgoAAAANSUhEUgAAAZ4AAAEDCAYAAAAFhGKSAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUA",
"countryCode": "US"
}
],
"dateOfBirth": "2000-12-01",
"emailAddress": "test@test.com",
"firstName": "First name",
"lastName": "Last name",
"phoneNumber": "9100000000",
"phoneNumberType": "0",
"taxIdNumber": "122-22-2332",
"address": {
"address1": "Lorem Ipsum is simply dummy text",
"city": "Lorem",
"state": "CA",
"isoCountryCode": "US",
"postalCode": "90213"
},
"bvn": "bn01910190",
"customAttributes": [
{
"name": "name",
"value": "value"
}
],
"proofOfAddress": {
"documentType": "8",
"fileName": "filename.png",
"content": "base64,iVBORw0KGgoAAAANSUhEUgAAAZ4AAAEDCAYAAAAFhGKSAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUA",
"countryCode": "US"
}
}
],
"incorporationDocs": {
"documentType": "8",
"fileName": "filename.png",
"content": "base64,iVBORw0KGgoAAAANSUhEUgAAAZ4AAAEDCAYAAAAFhGKSAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUA",
"countryCode": "US"
},
"jurisdictionDocs": {
"documentType": "8",
"fileName": "filename.png",
"content": "base64,iVBORw0KGgoAAAANSUhEUgAAAZ4AAAEDCAYAAAAFhGKSAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUA",
"countryCode": "US"
},
"legalName": "<string>",
"taxIdNumber": "12-3123123",
"taxCountry": "US",
"taxState": "California",
"phoneNumber": "9800000",
"address": {
"address1": "Lorem Ipsum is simply dummy text",
"city": "Lorem",
"state": "CA",
"isoCountryCode": "US",
"postalCode": "90213"
},
"bvn": "<string>",
"proofOfAddress": {
"documentType": "8",
"fileName": "filename.png",
"content": "base64,iVBORw0KGgoAAAANSUhEUgAAAZ4AAAEDCAYAAAAFhGKSAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUA",
"countryCode": "US"
}
}
],
"individualBeneficialOwners": [
{
"ownershipPercentage": 20,
"ownershipType": 1,
"title": "<string>",
"identification": {
"documentType": "8",
"fileName": "filename.png",
"content": "base64,iVBORw0KGgoAAAANSUhEUgAAAZ4AAAEDCAYAAAAFhGKSAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUA",
"countryCode": "US"
},
"isControlPerson": "<boolean>",
"otherDocs": {
"documentType": "8",
"fileName": "filename.png",
"content": "base64,iVBORw0KGgoAAAANSUhEUgAAAZ4AAAEDCAYAAAAFhGKSAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUA",
"countryCode": "US"
},
"dob": "<string>",
"email": "<string>",
"firstName": "<string>",
"lastName": "<string>",
"phoneNumber": "9822222",
"phoneType": "<string>",
"taxIdNumber": "122-22-2332",
"taxCountry": "US",
"taxState": "California",
"address": {
"address1": "Lorem Ipsum is simply dummy text",
"city": "Lorem",
"state": "CA",
"isoCountryCode": "US",
"postalCode": "90213"
},
"bankVerificationNumber": "<string>",
"proofOfAddress": {
"documentType": "8",
"fileName": "filename.png",
"content": "base64,iVBORw0KGgoAAAANSUhEUgAAAZ4AAAEDCAYAAAAFhGKSAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUA",
"countryCode": "US"
}
}
],
"memoFields": {
"name": "<string>",
"value": "<string>"
},
"bankVerificationNumber": "bnk009198",
"businessUserEmail": "lorem@mygmail.com",
"taxIdNumber": "122-22-2332",
"phoneNumber": "123456789",
"controlPersons": {
"title": "supervisor",
"identification": {
"documentType": "8",
"fileName": "filename.png",
"content": "base64,iVBORw0KGgoAAAANSUhEUgAAAZ4AAAEDCAYAAAAFhGKSAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUA",
"countryCode": "US"
},
"documents": [
{
"documentType": "8",
"fileName": "filename.png",
"content": "base64,iVBORw0KGgoAAAANSUhEUgAAAZ4AAAEDCAYAAAAFhGKSAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUA",
"countryCode": "US"
}
],
"dateOfBirth": "2000-12-01",
"emailAddress": "test@test.com",
"firstName": "First name",
"lastName": "Last name",
"phoneNumber": "9100000000",
"phoneNumberType": "0",
"taxIdNumber": "122-22-2332",
"gender": "Male",
"address": {
"address1": "Mr John Smith. 132, 40ft Street, Kingston",
"city": "San Francisco",
"state": "CA",
"isoCountryCode": "US",
"postalCode": "90213"
},
"bvn": "bn01910199",
"customAttributes": [
{
"name": "name",
"value": "value"
}
],
"proofOfAddress": {
"documentType": "8",
"fileName": "filename.png",
"content": "base64,iVBORw0KGgoAAAANSUhEUgAAAZ4AAAEDCAYAAAAFhGKSAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUA",
"countryCode": "US"
},
"tax": {
"idNumber": "134567890",
"country": "US",
"state": "NY"
}
},
"registeredOfficeAddress": {
"address1": "Lorem Ipsum is simply dummy text",
"address2": "Lorem Ipsum is simply dummy text",
"city": "Lorem",
"state": "CA",
"isoCountryCode": "US",
"postalCode": "90213"
},
"proofOfAddress": {
"documentType": "8",
"fileName": "filename.png",
"content": "base64,iVBORw0KGgoAAAANSUhEUgAAAZ4AAAEDCAYAAAAFhGKSAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUA",
"countryCode": "US"
},
"signatories": [
{
"title": "supervisor",
"identification": {
"documentType": "8",
"fileName": "filename.png",
"content": "base64,iVBORw0KGgoAAAANSUhEUgAAAZ4AAAEDCAYAAAAFhGKSAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUA",
"countryCode": "US"
},
"documents": [
{
"documentType": "8",
"fileName": "filename.png",
"content": "base64,iVBORw0KGgoAAAANSUhEUgAAAZ4AAAEDCAYAAAAFhGKSAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUA",
"countryCode": "US"
}
],
"dateOfBirth": "2000-12-01",
"emailAddress": "test@test.com",
"firstName": "First name",
"lastName": "Last name",
"phoneNumber": "9100000000",
"phoneNumberType": "0",
"taxIdNumber": "122-22-2332",
"gender": "Male",
"address": {
"address1": "Mr John Smith. 132, 40ft Street, Kingston",
"city": "San Francisco",
"state": "CA",
"isoCountryCode": "US",
"postalCode": "90213"
},
"bvn": "bn01910199",
"customAttributes": [
{
"name": "name",
"value": "value"
}
],
"proofOfAddress": {
"documentType": "8",
"fileName": "filename.png",
"content": "base64,iVBORw0KGgoAAAANSUhEUgAAAZ4AAAEDCAYAAAAFhGKSAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUA",
"countryCode": "US"
},
"tax": {
"idNumber": "134567890",
"country": "US",
"state": "NY"
}
}
],
"governingDocuments": [
{
"documentType": "8",
"fileName": "filename.png",
"content": "base64,iVBORw0KGgoAAAANSUhEUgAAAZ4AAAEDCAYAAAAFhGKSAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUA",
"countryCode": "US"
}
],
"clientToken": "CLT",
"badgeId": "2852ea54-b77d-4853-96bb-e9e484765b35"
}
Response Examples
| Code | Description |
|---|---|
| 201 | Returns success when business user is onboarded |
| 400 | Returned when onboarding fails due to validation issues or bad request data |
201 — Returns success when business user is onboarded
{
"data": {
"domain": "jonedoe",
"business_user_name": "jone doe",
"business_user_metadata": {
"email": "lorem@mygmail.com",
"phone": "9540217306",
"legal_name": "jone doe",
"tax_id": "12345",
"businessUserId": "57b99458-f481-4822-b8b3-516d6bd611ca",
"businessUserMetadataId": "57b99458-f481-4822-b8b3-516d6bd611ca",
"business_entity_name": "Not Applicable",
"company_address": {
"address1": "Mr John Smith. 132, 40ft Street, Kingston",
"city": "San Francisco",
"state": "CA",
"isoCountryCode": "US",
"postalCode": "90213"
}
},
"is_active": true,
"created_at": "2022-11-11T09:47:44.007Z",
"start_date": "2022-11-11T09:47:44.007Z",
"end_date": "2022-11-11T09:47:44.007Z",
"tenant_id": "57b99458-f481-4822-b8b3-516d6bd611ca"
},
"message": "Tenant onboarded successfully"
}
400 — Returned when onboarding fails due to validation issues or bad request data
[
{
"type": [
{
"type": "Duplicate",
"message": "Business domain already exists"
},
{
"message": "Business user is already registered with provided email id",
"type": "Duplicate"
},
{
"message": "Business's control person is already registered with provided email id",
"type": "Duplicate"
},
{
"type": "onboard",
"message": "error"
},
{
"type": "onboard",
"message": "Business name already exists"
},
{
"type": "onboard",
"message": "Not able to create account"
},
{
"type": "onboard/Identity",
"message": "publicMint.errors[0].message"
},
{
"type": "onboard",
"message": "Not able to onboard business"
}
],
"message": "some error message"
}
]
POST /tenant/customer
Tag: Tenant Customers
Summary: Onboard tenant customer
Creates a new tenant customer record in the system.
Only the payload should be provided in the request body as per the defined schema.
Include the tenant-id in headers to identify the tenant if applicable. You may also include the api-key for authentication if required.
Use this API to:
- Onboard new customers into a tenant environment
- Initiate customer lifecycle events such as KYC, wallet setup, or onboarding workflows
Added Fields
None
Deprecated Fields
Updated Request Body Fields
dateOfBirth (string)
- Description updated:
- Before: tenant customer date of birth
- After: tenant customer date of birth (YYYY-MM-DD)
- Example updated:
1997-02-02
firstName (string)
- Description updated:
- Before: tenant customer first name
- After: Tenant customer first name. Either "fullName" or both "firstName" and "lastName" must be provided.
fullName (string)
- Description updated:
- Before: tenant customer Full name
- After: Tenant customer full name. Either "fullName" or both "firstName" and "lastName" must be provided.
gender (string)
- Description updated:
- Before: please give every letter in CAPS
- After: Gender (In Upper Case)
- Example updated:
['MALE', 'FEMALE', 'OTHERS', 'UNKNOWN']
ip_address (string)
- Example updated:
127.0.0.1
lastName (string)
- Description updated:
- Before: tenant customer last name
- After: Tenant customer last name. Required if "firstName" is provided and "fullName" is not.
ssn (string)
- Description updated:
- Before: ssn details
- After: Social Security Number (SSN) of the customer.
ulNamespace (string)
- Description updated:
- Before: if a cutomster onboarded in tenant A and wants to onboard in tenant B, then ul namespace is required
- After: if a customer onboarded in tenant A and wants to onboard in tenant B, then ul namespace is required
verifiedDOB (string)
- Description updated:
- Before: GID DOB
- After: GID DOB (YYYY-MM-DD)
verifiedName (string)
- Example updated:
John Doe
Updated Response Codes
201
Customer onboarding successful. Returns the onboarded customer details.
400
Customer onboarding failed. Possible reasons include validation errors or duplicate customer.
Current Request Example
{
"identificationBadgeId": "<string>",
"firstName": "Jone",
"middleName": "<string>",
"lastName": "Doe",
"fullName": "Jone Doe",
"accountAddress": "<string>",
"customerMetaData": {},
"tenantId": "e1e9adb4-d3bd-4ba5-98b8-011c03a9d2b1",
"customNamespace": "jonedoe",
"provider": "ens",
"ulNamespace": "digit.sam.ul",
"maritalStatus": [
"married",
"unmarried"
],
"dateOfBirth": "1997-02-02",
"email": "lorem@mygmail.com",
"gender": [
"MALE",
"FEMALE",
"OTHERS",
"UNKNOWN"
],
"phoneNumber": "+91123456789",
"nationality": "<string>",
"ip_address": "127.0.0.1",
"ssn": "<string>",
"stateLicenseId": "<string>",
"tin": "<string>",
"address": {
"city": "New York",
"state": "KY",
"address1": "123 Main St",
"country": "US",
"postalCode": "10001",
"isoCountryCode": "US"
},
"lat_long": {
"lat_long_data": "Lorem",
"lat_long_country": "US",
"lat_long_city": "address1 "
},
"tax": {
"country": "BO",
"idNumber": "122-22-2332",
"state": "<string>"
},
"governmentDocuments": [
{
"description": "National ID card of the user",
"fileName": "idCard.png",
"side": "front",
"type": "DriversLicense",
"content": "<string>",
"number": "123455",
"issuedCountry": "India",
"expired": false,
"validFromDate": "2012-12-12",
"validTillDate": "2030-12-12"
}
],
"proofOfAddress": [
{
"description": "Credit card statement for Sep 2024",
"fileName": "cc1.png",
"side": "front",
"type": "Utility Bill",
"content": "<string>",
"number": "123455",
"issuedCountry": "India",
"expired": false,
"validFromDate": "2022-01-01",
"validTillDate": "2030-12-31"
}
],
"others": {
"stateIdLicense": "KY-321456789",
"proofOfAddress": "UtilityBill-2024.pdf",
"alienIdCard": "A123456789"
},
"selfieContent": "<string>",
"metroLocationDetails": {
"shortName": "San Francisco",
"fullName": "San Francisco, California",
"code": "USA-SFO"
},
"additionalLatLong": {
"lat": "37.8888888",
"long": "-122.1777777"
},
"additionalAddress": {
"fullName": "United States of America",
"nameISO3": "USA"
},
"geoLocationDetails": {
"declaredAddress": "San Francisco",
"phoneNumber": "+91-9876676556",
"iPAddress": "127.0.0.1"
},
"metroAreaDetails": {
"deviceData": "example",
"declaredAddress": "San Francisco, California",
"phoneNumber": "+91-987765566",
"iPAddress": "127.0.0.1"
},
"countryDetails": {
"deviceData": "example",
"declaredAddress": "San Francisco, California",
"phoneNumber": "+91-9876665654",
"iPAddress": "127.0.0.1"
},
"verifiedName": "John Doe",
"verifiedDOB": "2012-12-12",
"verifiedPhoto": "string",
"verifiedIDNumber": "string",
"verifiedCountry": "string",
"verifiedState": "string",
"verifiedIDIssueDate": "2012-12-12",
"verifiedIDExpirationDate": "2012-12-12",
"verifiedAddress": {
"fullAddress": "Lorem Ipsum 30, 13612 Tallinn, Estonia"
},
"verifiedGender": "string",
"bankAccountDetails": {
"bankLegalName": "US Bank",
"bankAccountHolderName": "John Doe",
"bankAccountType": "Savings",
"bankAccountNumber": "Ul22440412",
"bankAccountHolderPhoneNumber": "+917347634906",
"bankAccountHolderEmail": "unknown@gmail.com",
"bankAccountHolderAddress": "Lorem Ipsum 30, 13612 Tallinn, Estonia"
},
"plaidDetails": {
"plaidToken": "token",
"plaidConsentTimestamp": "2024-09-25 10:51:39.178821+00"
},
"occupation": "RETIRED",
"annualSalary": "1000000",
"accountPurpose": "Trading",
"expectedMonthlyVolume": "10000"
}
Response Examples
| Code | Description |
|---|---|
| 201 | Customer onboarding successful. Returns the onboarded customer details. |
| 400 | Customer onboarding failed. Possible reasons include validation errors or duplicate customer. |
201 — Customer onboarding successful. Returns the onboarded customer details.
{
"data": {
"firstName": "Jone",
"middleName": "<string>",
"lastName": "Doe",
"accountAddress": "<string>",
"tenantId": "e1e9adb4-d3bd-4ba5-98b8-011c03a9d2b1",
"dateOfBirth": "02-02-1997",
"email": "lorem@mygmail.com",
"gender": "<string>",
"phoneNumber": "123455656789",
"address": {
"city": "New York",
"state": "KY",
"address1": "123 Main St",
"country": "US",
"postalCode": "10001",
"isoCountryCode": "US"
},
"tax": {
"country": "BO",
"idNumber": "122-22-2332",
"state": "<string>"
},
"documents": [
{
"description": "National ID card of the user",
"fileName": "idCard.png",
"side": "front",
"type": "DriversLicense",
"content": "<string>",
"number": "123455",
"issuedCountry": "India",
"expired": false,
"validFromDate": "2012-12-12",
"validTillDate": "2030-12-12"
}
],
"faceImage": "<string>",
"complianceStatus": "PENDING",
"customerAccountId": "11167c62-b6b4-4031-ac92-6ef56e9648bd",
"customerAccountCategory": "Bronzeone",
"assignedIdentificationBadge": "11167c62-b6b4-4031-ac92-6ef56e9648bd",
"domainNamespace": "allahabad.amitp.ul"
},
"message": "User has successfully onboarded with the badge Bronzeone [8d16684e-ee0a-4c10-83c0-c4d89e6a8666]."
}
400 — Customer onboarding failed. Possible reasons include validation errors or duplicate customer.
{
"errors": [
{
"type": "catch",
"message": "Please provide valid tenant id"
},
{
"type": "Onboard Customer",
"message": "Please provide a valid ISO 3166-1 alpha-2 country and state code"
},
{
"type": "Onboard Customer",
"message": "This custom namespace is already taken"
},
{
"type": "Duplicate",
"message": "Account address already taken"
},
{
"type": "Tenant",
"message": "Tenant's account has been blocked. You will be not able to onboard any user. Please get in touch with support team"
},
{
"type": "Duplicate",
"message": "No data found with given tenant Id"
},
{
"type": "Tenant",
"message": "Tenant onboarding status is isTenantAvailableCheck?.onboardingStatus"
},
{
"type": "onboard",
"message": "A user is already been registered with provided email id"
},
{
"type": "onboard",
"message": "Wallet user already exists inside tenant"
},
{
"message": "There are no sufficient documents",
"type": "Documents"
},
{
"message": "A user is already been registered with provided email id",
"type": "Duplicate"
},
{
"type": "Finclusive",
"message": "messages"
},
{
"type": "catch",
"message": "err[1]"
},
{
"type": "catch",
"message": "error.message"
},
{
"type": "Identity",
"message": "error in deleting identity"
},
{
"type": "Rule Error",
"errors": "axiosResponse.errors"
},
{
"type": "Duplicate",
"message": "Blockchain address already exists on the platform, onboarding not permitted.",
"error_code": "ULOT0043"
},
{
"type": "Duplicate",
"message": "UNS ID (Custom namespace) already exists on the platform, onboarding not permitted.",
"error_code": "ULOT0044"
},
{
"type": "Duplicate",
"message": "Customer has already been onboarded based on unique identification parameters.",
"error_code": "ULOT0045"
},
{
"type": "Customer",
"message": "Missing [first name and last name or full name] Unique Identification parameters in the onboarding request.",
"error_code": "ULOT0046"
},
{
"type": "Customer",
"message": "Unable to allocate badge to wallet user for onboarding request.",
"error_code": "ULOT0047",
"denial_code": "l07",
"denial_reason": "Invalid email address"
}
]
}
POST /tenant/customer/add-wallet
Tag: Tenant Customers
Summary: Add wallet to a wallet user
This endpoint allows adding a wallet to an existing wallet user in the system. It accepts user and wallet-related details in the request body, processes the data, and creates a new wallet entry mapped to the user.
Key operations performed:
- Handles success and failure responses accordingly.
Typical use cases include:
- Creating a new wallet during user onboarding.
- Linking additional wallets to an existing user profile.
Added Fields
Deprecated Fields
Updated Response Codes
201
Wallet added successfully. Returns wallet ID and metadata.
400
Wallet addition failed. Possible reasons include invalid user ID, duplicate wallet, or missing fields.
Current Request Example
{
"customerAccountId": "e1e9adb4-d3bd-4ba5-98b8-011c03a9d2b1",
"tenantId": "e1e9adb4-d3bd-4ba5-98b8-011c03a9d2b1",
"customNamespace": "jonedoe",
"provider": "ens",
"accountAddress": "walletUserAccountAddress",
"financialBadgeId": "d573926e-358f-482d-8375-6842477ce736",
"tokenSymbol": "USBC"
}
Response Examples
| Code | Description |
|---|---|
| 201 | Wallet added successfully. Returns wallet ID and metadata. |
| 400 | Wallet addition failed. Possible reasons include invalid user ID, duplicate wallet, or missing fields. |
201 — Wallet added successfully. Returns wallet ID and metadata.
{
"data": {
"customerAccountId": "1a310d45-0f5f-4f44-bc1d-6ddfd9547787e",
"namespace": "tenantDomain.sheetalku1.ul"
},
"message": "wallet added successfully"
}
400 — Wallet addition failed. Possible reasons include invalid user ID, duplicate wallet, or missing fields.
{
"errors": [
{
"type": "Add Wallet ",
"message": "Multi wallet feature has been disabled by tenant name"
},
{
"type": "Add Wallet",
"message": "Not able to fetch basic details of wallet user"
},
{
"type": "Add Wallet",
"message": "Wallet user details not found"
},
{
"type": "Add Wallet",
"message": "Please use unique account address"
},
{
"type": "Add Wallet",
"message": "Custom namespace is already taken"
},
{
"type": "Add Wallet",
"message": "Something went wrong, please try again"
}
]
}
POST /tenant/customer/get-auth-url
Tag: Verification APIs
Summary: Get VFP (Verification Fingerprint)
Retrieves a VFP (Verification Fingerprint) authentication URL using the provided payload. This URL is typically used to initiate identity verification through third-party services.
Only the request body should include required identifiers as per the payload schema.
Include the access-token in headers to authorize the request. This is a mandatory field.
Use this API to:
- Initiate identity verification
- Generate a time-bound, signed VFP link for external verification flows
Updated Request Body Fields
dob (string)
- Description updated:
- Before: DOB
- After: Date of Birth in DD-MM-YYYY format
finalTargetUrl (string)
- Description updated:
- Before: Final Target Url
- After: The final redirection URL after authentication
Current Request Example
{
"sourceIp": "127.0.0.1",
"finalTargetUrl": "https://google.com",
"mobileNumber": "2001001686",
"dob": "01-01-1994",
"ssn": "1232"
}
Response Examples
| Code | Description |
|---|---|
| 202 | Success response |
| 400 | Error response |
202 — Success response
{
"data": {
"requestId": "7f83-b0c4-90e0-90b3-11e10800200c9a66",
"status": "0",
"description": "Success"
},
"message": "Success"
}
400 — Error response
{
"errors": [
{
"message": "Get auth URL request got failed",
"type": "Prove"
},
{
"type": "Prove",
"message": "Either dob or ssn required and should be valid."
},
{
"type": "Prove",
"message": "SMS request got failed"
},
{
"type": "Prove",
"message": "Get auth URL request got failed"
}
]
}
POST /tenant/customer/update
Tag: Tenant Customers
Summary: Update tenant customer
Retrieves customer details from the request body and upgrades the wallet user profile, typically based on account tier, eligibility, or other tenant-specific criteria.
Only the request body should contain the customerAccountId and other upgradable fields as defined in the payload schema.
Include the tenant-id in headers to identify the tenant. You may also include the api-key or other headers if required for authentication.
Added Fields
None
Deprecated Fields
Updated Response Codes
202
Upgrade processed successfully. Returns the updated customer profile.
400
Upgrade failed due to invalid inputs or fields.
Current Request Example
{
"identificationBadgeId": "<string>",
"customerAccountId": "cbf2f17a-d0d1-42da-a6cc-cb28f99484ea",
"firstName": "Jone",
"middleName": "<string>",
"lastName": "Doe",
"fullName": "Jone Doe",
"address": {
"city": "Lorem",
"state": "KY",
"address1": "address1 ",
"country": "BO",
"postalCode": "Lorem",
"isoCountryCode": "US"
},
"additionalAddress": {
"fullName": "United States of America",
"nameISO3": "USA"
},
"maritalStatus": [
"married",
"unmarried"
],
"email": "lorem@mygmail.com",
"gender": "unknown",
"phoneNumber": "+91123456789",
"nationality": "<string>",
"ip_address": "<string>",
"ssn": "<string>",
"lat_long": {
"lat_long_data": "Lorem",
"lat_long_country": "US",
"lat_long_city": "address1 "
},
"selfieContent": "<string>",
"additionalLatLong": {
"lat": "37.8888888",
"long": "-122.1777777"
},
"metroLocationDetails": {
"shortName": "San Francisco",
"fullName": "San Francisco, California",
"code": "USA-SFO"
},
"geoLocationDetails": {
"declaredAddress": "San Francisco",
"phoneNumber": "+91-9876676556",
"iPAddress": "127.0.0.1"
},
"metroAreaDetails": {
"deviceData": "example",
"declaredAddress": "San Francisco, California",
"phoneNumber": "+91-987765566",
"iPAddress": "127.0.0.1"
},
"countryDetails": {
"deviceData": "example",
"declaredAddress": "San Francisco, California",
"phoneNumber": "+91-9876665654",
"iPAddress": "127.0.0.1"
},
"tax": {
"country": "BO",
"idNumber": "134567890",
"state": "US"
},
"tin": "string",
"stateLicenseId": "<string>",
"governmentDocuments": {
"description": "National ID card of the user",
"fileName": "idCard.png",
"side": "front",
"type": "DriversLicense",
"content": "<string>",
"number": "123455",
"issuedCountry": "India",
"expired": false,
"validFromDate": "2012-12-12",
"validTillDate": "2030-12-12"
},
"proofOfAddress": [
{
"description": "Credit card statement for Sep 2024",
"fileName": "cc1.png",
"side": "front",
"type": "Utility Bill",
"content": "<string>",
"number": "123455",
"issuedCountry": "India",
"expired": false,
"validFromDate": "2022-01-01",
"validTillDate": "2030-12-31"
}
],
"verifiedName": "string",
"verifiedDOB": "2012-12-12",
"verifiedPhoto": "string",
"verifiedIDNumber": "string",
"verifiedCountry": "string",
"verifiedState": "string",
"verifiedIDIssueDate": "2012-12-12",
"verifiedIDExpirationDate": "2012-12-12",
"verifiedAddress": {
"fullAddress": "Lorem Ipsum 30, 13612 Tallinn, Estonia"
},
"verifiedGender": "string",
"bankAccount": "false",
"bankAccountDetails": {
"bankLegalName": "US Bank",
"bankAccountHolderName": "John Doe",
"bankAccountType": "Savings",
"bankAccountNumber": "Ul22440412",
"bankAccountHolderPhoneNumber": "+917347634906",
"bankAccountHolderEmail": "unknown@gmail.com",
"bankAccountHolderAddress": "Lorem Ipsum 30, 13612 Tallinn, Estonia"
},
"plaidDetails": {
"plaidToken": "token",
"plaidConsentTimestamp": "2024-09-25 10:51:39.178821+00"
},
"occupation": "RETIRED",
"annualSalary": "1000000",
"accountPurpose": "Trading",
"expectedMonthlyVolume": "10000"
}
Response Examples
| Code | Description |
|---|---|
| 202 | Upgrade processed successfully. Returns the updated customer profile. |
| 400 | Upgrade failed due to invalid inputs or fields. |
202 — Upgrade processed successfully. Returns the updated customer profile.
{
"type": "Success",
"assignedIdentificationBadge": "8d16684e-ee0a-4c10-83c0-c4d89e6a8666",
"message": "User has successfully onboarded with the badge Bronzeone [8d16684e-ee0a-4c10-83c0-c4d89e6a8666]."
}
400 — Upgrade failed due to invalid inputs or fields.
{
"errors": [
{
"type": "Customer",
"message": "There is no account for the given customer Id"
},
{
"type": "Upgrade",
"message": "Customer cannot able to upgrade while ONBOARDING status is PENDING"
},
{
"type": "Upgrade",
"message": "Customer cannot able to upgrade while ONBOARDING status is REJECTED"
},
{
"type": "Documents",
"message": "There are no sufficient documents"
},
{
"type": "Finclusive",
"message": "messages"
},
{
"type": "Rule failed",
"message": "ruleCheck.errors"
},
{
"type": "Upgrade customer",
"message": "Customer is already upgraded to silver"
},
{
"type": "catch",
"message": "err[1]"
},
{
"type": "catch",
"message": "error"
},
{
"type": "Customer",
"message": "Failed to update badge for user request.",
"error_code": "ULUP0001"
},
{
"type": "Missing data",
"message": "Customer already exists with provided unique identifier parameters"
},
{
"type": "Upgrade",
"message": "Compliance checks got failed"
},
{
"type": "Missing data",
"message": "Mandatory fields are missing"
}
]
}
POST /tenant/customer/validate-user
Tag: Verification APIs
Summary: Validate user identity or wallet linkage
Validates a user using the provided identity payload. This could involve verifying KYC, linking identity to wallet, or other tenant-specific logic.
Headers Required:
access-token: JWT or Base64 encoded token used for authentication and validation
Request Body:
- User identity fields such as mobile number, document ID, or user reference ID
Updated Response Codes
202
Success Response - Returns user validation status and metadata
400
Error response - Returns validation errors or missing/invalid fields.
Current Request Example
Response Examples
| Code | Description |
|---|---|
| 202 | Success Response - Returns user validation status and metadata |
| 400 | Error response - Returns validation errors or missing/invalid fields. |
202 — Success Response - Returns user validation status and metadata
{
"data": {
"firstName": "Tod",
"lastName": "Weedall",
"addresses": {
"address": "39 South Trail",
"extendedAddress": "string",
"city": "San Antonio",
"region": "TX",
"postalCode": "78285"
},
"emailAddresses": [
"tweedalld@ehow.com"
],
"ssn": "565228370",
"dob": "1984-12-10",
"trustScore": 1000
}
}
400 — Error response - Returns validation errors or missing/invalid fields.
{
"errors": [
{
"type": "Catch",
"message": [
{
"type": "catch",
"message": "Shows the unknown errors while the API execution"
},
{
"type": "Prove",
"message": "Request Id not found"
},
{
"errors": "tokenErrors"
},
{
"type": "catch",
"message": "err.message"
},
{
"type": "catch",
"message": "err.message"
}
]
}
]
}
POST /transaction/add-fund
Tag: Payment
Summary: Fetch Add-Fund URL for wallet user account
Generates a URL for securely adding funds to a wallet using a supported payment method (e.g., card, netbanking).
The request payload must include valid card details, amount, and user identifier (e.g., namespace).
Include the tenant-id in headers to identify the tenant. Use this API to:
- Enable wallet top-ups via external payment gateways
- Generate a transaction initiation link for the frontend
Updated Response Codes
201
Returned when the payment URL is successfully generated.
400
Returned when the payload is invalid or the fund generation fails.
Current Request Example
{
"amount": "<number>",
"namespace": "test.jones1.ul",
"successUrl": "https://console-dev.cab340b7670d495a8ed7.eastus.aksapp.io/payments/success",
"failureUrl": "https://console-dev.cab340b7670d495a8ed7.eastus.aksapp.io/payments/failure",
"cancelUrl": "https://console-dev.cab340b7670d495a8ed7.eastus.aksapp.io/payments/cancel",
"ipAddress": "127.0.0.1",
"token": "THAI"
}
Response Examples
| Code | Description |
|---|---|
| 201 | Returned when the payment URL is successfully generated. |
| 400 | Returned when the payload is invalid or the fund generation fails. |
201 — Returned when the payment URL is successfully generated.
{
"data": {
"namespace": "blrwizards.sheetalstagk.ul",
"url": "https://pay.sandbox.checkout.com/page/hpp_CizJqjrq23?_pcf"
}
}
400 — Returned when the payload is invalid or the fund generation fails.
{
"errors": [
{
"type": "Add Fund",
"message": "please enter namespace of user"
},
{
"type": "Add Fund ",
"message": "no payment provider detail found"
},
{
"type": "Add Fund",
"message": "Something went wrong, please try again"
}
]
}
POST /transaction/add-fund-ach
Tag: Payment
Summary: Initiate fund deposit via Cliq ACH
Triggers a fund deposit request into a user's wallet using Cliq ACH.
You can provide any one of the following identifiers to locate the user:
- namespace
- customNamespace
- accountAddress
Only one should be passed per request. If multiple or none are sent, a 400 Bad Request is returned.
Include the tenant-id and api-key in headers for authentication.
Use this API to:
- Initiate wallet funding via bank transfer (ACH)
- Power workflows that require adding funds to a user's wallet
Updated Query Parameters
accountAddress (string)
- Description added: Blockchain wallet address of the user
customNamespace (string)
- Description added: Alternate custom namespace if standard one is not used
namespace (string)
- Description added: Standard user namespace (e.g. from federated ID)
Updated Response Codes
201
Returned when the ACH fund deposit request is successfully initiated.
400
Returned when the request fails due to invalid input or processing issues.
Current Request Example
{
"transactionAmount": 1,
"token": "USBC",
"customerBankAccountType": "checking",
"customerBankAccountNumber": "1",
"customerBankRoutingNumber": "102000076",
"ipAddress": "127.0.0.1"
}
Response Examples
| Code | Description |
|---|---|
| 201 | Returned when the ACH fund deposit request is successfully initiated. |
| 400 | Returned when the request fails due to invalid input or processing issues. |
201 — Returned when the ACH fund deposit request is successfully initiated.
{
"data": {
"namespace": "produled.qamark.ul",
"transactionId": "49dad5f9-173d-4e63-a08f-f3a62eb905c4",
"amount": 1,
"cardTransactionHistory": {
"card_transaction_id": "49dad5f9-173d-4e63-a08f-f3a62eb905c4",
"status": "APPROVED",
"description": "card transaction status is approved",
"created_at": "2023-07-20T07:29:55.453Z",
"cardTransactionHistoryId": "f5ae6c1f-cbfc-41f5-af83-33a898255e57"
}
}
}
400 — Returned when the request fails due to invalid input or processing issues.
{
"errors": [
{
"error_code": "ULDT2005",
"type": "deposit-tier2-failed",
"message": "Maximum allowed number of deposit transactions per month for a user per wallet criteria not met"
}
]
}
POST /transaction/confirmation-requests
Tag: Payment
Summary: Submit a confirmation request for a deposit
This endpoint allows an authenticated user to confirm a previously submitted deposit request. A successful confirmation updates the status of the deposit and triggers further actions required for minting tokens. The request payload must include the required confirmation details.
Updated Response Codes
201
Confirmation request was successfully submitted. The response includes details of the confirmed deposit transaction.
400
The confirmation request could not be processed. Possible reasons include invalid payload, missing or incorrect parameters, or a failed validation. The response contains error details.
Current Request Example
{
"depositRequestId": "5822e56e-1909-426f-a4be-1d49b15c781c",
"amount": 5,
"token": "<string>",
"walletIdentifier": "testbronze01 or 0xB47deb51aEEf5C1732E09CBF20adF4C0e8F22947",
"walletIdentifierType": "CUSTOM NAMESPACE or WALLET ADDRESS",
"confirm": "YES or NO"
}
Response Examples
| Code | Description |
|---|---|
| 201 | Confirmation request was successfully submitted. The response includes details of the confirmed deposit transaction. |
| 400 | The confirmation request could not be processed. Possible reasons include invalid payload, missing or incorrect parameters, or a failed validation. The response contains error details. |
201 — Confirmation request was successfully submitted. The response includes details of the confirmed deposit transaction.
{
"data": {
"requestId": "facc46b7-9988-482c-bf42-7a2cf8f97f72",
"tenantId": "4e6cb408-8a22-4edc-ba0f-e0f8071efc64",
"amount": 35,
"token": "THIS",
"rejectionReason": "",
"statusStage": "FINAL",
"status": "COMPLETED",
"data": {
"namespace": "digit.thirusilver11s.ul",
"transactionId": "2bfd5f84-5ea1-4a05-b7f6-a3ebb104b9ff",
"amount": 35,
"paymentStatus": "APPROVED",
"tokenMintStatus": "PENDING",
"cardTransactionHistory": [
{
"transactionHistoryId": "11bc5cd3-e515-4f8d-ba63-d1982d3ff946",
"status": "APPROVED",
"description": "token minting status is approved",
"createdAt": "2023-12-21T11:31:20.614Z"
},
{
"transactionHistoryId": "373e2f59-a41a-463a-8750-0e3c7e96116b",
"status": "DEPOSIT-REQUEST-SUCCESS",
"description": "transaction status is deposit-request-success",
"createdAt": "2023-12-21T11:31:22.469Z"
}
]
}
},
"message": "Confirmation request submitted successfully"
}
400 — The confirmation request could not be processed. Possible reasons include invalid payload, missing or incorrect parameters, or a failed validation. The response contains error details.
{
"errors": [
{
"type": "catch",
"message": "error message"
},
{
"type": "catch",
"message": "Successfully Invalidated Confirmation Request. No further action possible for the same request."
},
{
"type": "catch",
"message": "Initiation of deposit request got failed"
}
]
}
POST /transaction/deposit-requests
Tag: Payment
Summary: Submit a deposit request to mint tokens
This endpoint allows an authenticated user to initiate a deposit request. The request payload must include all required deposit details. If the request is valid, the system will register the deposit request for further processing and token minting.
Updated Response Codes
201
Deposit request was successfully submitted. The response contains confirmation details of the submitted request.
400
The deposit request could not be processed. Possible reasons include invalid payload, missing parameters, or a failed validation. The response includes error details.
Current Request Example
{
"amount": 5,
"token": "THIS",
"walletIdentifier": "testbronze01 or 0xB47deb51aEEf5C1732E09CBF20adF4C0e8F22947",
"walletIdentifierType": "CUSTOM NAMESPACE or WALLET ADDRESS"
}
Response Examples
| Code | Description |
|---|---|
| 201 | Deposit request was successfully submitted. The response contains confirmation details of the submitted request. |
| 400 | The deposit request could not be processed. Possible reasons include invalid payload, missing parameters, or a failed validation. The response includes error details. |
201 — Deposit request was successfully submitted. The response contains confirmation details of the submitted request.
{
"data": {
"amount": "25",
"token": "THIS",
"walletIdentifier": "digit_testsiveruserdigitte1_ul",
"walletIdentifierType": "CUSTOM NAMESPACE",
"tenantId": "4e6cb408-8a22-4edc-ba0f-e0f8071efc64",
"rejectionReason": "Deposit not allowed",
"statusStage": "FINAL",
"status": "Rejected request due to validation failures",
"created_at": "2023-12-09T10:26:47.748Z",
"depositRequestId": "5822e56e-1909-426f-a4be-1d49b15c781c"
},
"message": "Deposit request submitted successfully"
}
400 — The deposit request could not be processed. Possible reasons include invalid payload, missing parameters, or a failed validation. The response includes error details.
{
"errors": [
{
"type": "catch",
"message": "error message"
},
{
"type": "catch",
"message": "Initiation of deposit request got failed"
}
]
}
POST /transaction/exchange-plaid-token
Tag: Payment
Summary: Exchange Plaid public token for access credentials
Converts a Plaid public token into a permanent access token used to interact with linked bank accounts.
Include the tenant-id and api-key headers to authorize and scope the request.
Use this API to:
- Complete the Plaid authentication flow
- Fetch access token and item ID for a user account
Updated Request Body Fields
publicToken (string)
- Description updated:
- Before: userId
- After: Temporary public token received from Plaid Link, to be exchanged for an access token.
- Example updated:
public-sandbox-abc123xyz456
Updated Response Codes
201
Returned when the token exchange is successful.
400
Returned when the public token is invalid or the exchange fails.
Current Request Example
Response Examples
| Code | Description |
|---|---|
| 201 | Returned when the token exchange is successful. |
| 400 | Returned when the public token is invalid or the exchange fails. |
POST /transaction/expire-session
Tag: Payment
Summary: Expire a payment session
Marks a payment session as expired, typically used when the user abandons or cancels a payment flow.
Include the tenant-id in headers to identify the tenant.
Use this API to:
- Invalidate an active or pending payment session
- Cancel unused sessions to avoid unintended charges or timeout errors
Updated Request Body Fields
transactionId (string)
- Description updated:
- Before: transaction id of the transaction for which session you want to expire
- After: Transaction ID of the session you want to expire
- Example updated:
3fa85f64-5717-4562-b3fc-2c963f66afa6
Updated Response Codes
201
Returned when the session is successfully marked as expired.
400
Returned when the session cannot be expired due to:
- Invalid or missing session ID
- Session already completed or expired
- Tenant header not found
Current Request Example
Response Examples
| Code | Description |
|---|---|
| 201 | Returned when the session is successfully marked as expired. |
| 400 | Returned when the session cannot be expired due to: |
201 — Returned when the session is successfully marked as expired.
400 — Returned when the session cannot be expired due to:
- Invalid or missing session ID
- Session already completed or expired
- Tenant header not found
{
"errors": [
{
"type": "Add Fund",
"message": "please enter namespace of user"
},
{
"type": "Add Fund ",
"message": "no payment provider detail found"
},
{
"type": "Add Fund",
"message": "Something went wrong, please try again"
}
]
}
POST /transaction/plaid-link-token
Tag: Payment
Summary: Create a Plaid link token for customer connection
Generates a Plaid link token to securely connect a customer's financial account.
Include the tenant-id and api-key in headers to scope and authorize the request.
Use this API to:
- Start the Plaid authentication flow
- Connect a user's bank account for ACH operations
Updated Request Body Fields
userId (string)
- Description updated:
- Before: userId
- After: Unique identifier of the user for whom the Plaid link token is being generated.
- Example updated:
c6a8a1b5-9d0e-4bd6-a7e2-91d2e2365a9f
Updated Response Codes
201
Returned when a link token is created successfully.
400
Returned when the request fails due to missing user ID or configuration issues.
Current Request Example
Response Examples
| Code | Description |
|---|---|
| 201 | Returned when a link token is created successfully. |
| 400 | Returned when the request fails due to missing user ID or configuration issues. |
PUT /transaction/redeem/fiat-transfer/{transactionHash}
Tag: Redeem
Summary: Update redeem fiat transfer details
Updates fiat transaction metadata related to a redeem transaction identified by its transactionHash.
Include the tenant-id and api-key in headers for authentication.
Use this API to:
- Update fiat settlement details after redeem
- Ensure traceability for off-chain money movement
Updated Response Codes
200
Returned when the fiat transaction is successfully updated.
400
Returned when the update fails due to invalid input or missing headers.
Current Request Example
{
"referenceId": "12345_abcd",
"fiatAmount": "<number>",
"tokenSymbol": "USBC",
"fiatSymbol": "USD",
"type": "BANK-BOOK"
}
Response Examples
| Code | Description |
|---|---|
| 200 | Returned when the fiat transaction is successfully updated. |
| 400 | Returned when the update fails due to invalid input or missing headers. |
200 — Returned when the fiat transaction is successfully updated.
{
"data": {
"transactionId": "5ea3eb51-8a02-415d-bf74-add22ed74803",
"referenceId": "5",
"tokenSymbol": "USBC",
"fiatSymbol": "USD",
"fiatAmount": 5,
"tokenAmount": 1,
"type": "BANK-BOOK"
},
"message": "fiat transaction status updated successfully."
}
400 — Returned when the update fails due to invalid input or missing headers.
{
"errors": [
{
"type": "redeem",
"message": "please enter correct amount"
},
{
"type": "redeem",
"message": "token symbol is incorrect"
},
{
"type": "redeem",
"message": "Something went wrong, please try again"
}
]
}
🚫 Deprecated Endpoints
Deprecated in this version
- GET
/transactions/v2/identifier/{identifier}/type/{type}/history— Get on-chain or off-chain transaction history (supports optional secondary identifier).