Public API — v3.0.0
Type: Major Release · Previous version: v2.9.0
✅ New Endpoints
GET /transactions/v2/identifier/{identifier}/type/{type}/history
Tag: Chain
Summary: Get on-chain or off-chain transaction history (supports optional secondary identifier).
If secondaryIdentifier is provided, only transactions where BOTH identifiers appear (as sender/receiver in any order) are returned. Otherwise returns transactions where the primary identifier is sender OR receiver.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
secondaryIdentifier |
string | No | Optional second identifier(can be of namespace/address/custom namespace). When provided, results include only transactions where BOTH identifiers are involved (either order). |
startdate |
string | No | Filter by created_at date (inclusive start). Format: mm/dd/yyyy. |
enddate |
string | No | Filter by created_at date (exclusive next-day end). Format: mm/dd/yyyy. |
sort |
string | No | Sort by created_at. |
page |
string | No | 1-based page number. |
pageSize |
string | No | Number of items per page. |
memo |
string | No | Case-insensitive substring match on decrypted memo/notes. |
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
identifier |
string | Yes | Any identifier: user namespace (e.g., "tenant.user.ul"), tenant namespace ("tenant.ul"), account address (EIP-55 or lowercase "0x..."), or custom namespace ("custom.domain"). |
type |
string | Yes | Transaction source. |
Response Codes
| Code | Description |
|---|---|
| 200 | Transaction history. Each transaction includes method and partnerName. |
| 400 | Validation or filter errors. |
200 — Transaction history. Each transaction includes method and partnerName.
{
"data": [
{
"trxId": "0xbc4d82e9d54f2a9bc7e4ef3eb075217078de5616ce756842c91a854680e7c055",
"amount": 1,
"paymentType": "DEBIT",
"from": "0xdddd5eacf20148ac39e4c3ed540ab419da835bce",
"to": "0x740768f5ba3757c76452fae11fbff696af8300bd",
"fromNamespace": "basecoinnarencorp.kaias.ul",
"toNamespace": "narendracorpbank.automationu.ul",
"fromCustomNamespace": "NA",
"toCustomNamespace": "NA",
"status": "CANCELLED",
"timestamp": 1755372999,
"createdAt": "2025-08-16T19:36:39.5650000+00:00",
"errors": [
{
"type": "transfer-failed",
"message": "Stored value per month criteria not met",
"error_code": "ULTT0010"
}
],
"isError": 1,
"revertReason": "Stored value per month criteria not met",
"navigationURL": "https://explorer.dev.omnumi.io/tx/0xbc4d82e9d54f2a9bc7e4ef3eb075217078de5616ce756842c91a854680e7c055/internal-transactions",
"memo": "NA",
"partnerName": null,
"method": null
}
]
}
400 — Validation or filter errors.
{
"errors": [
{
"type": "TransactionError",
"message": "No address found for namespace john.ul"
},
{
"type": "TransactionError",
"message": "Identifier doesn't belong to tenant_id"
},
{
"type": "FilterError",
"message": "Start date cannot be greater than the End date"
},
{
"type": "FilterError",
"message": "type can only be on-chain || off-chain"
},
{
"type": "FilterError",
"message": "Error in fetchOnChainTransactionHistory: <reason>"
},
{
"type": "FilterError",
"message": "Error in fetchOffChainTransactionHistory: <reason>"
}
]
}
✏️ Modified Endpoints
GET /cards/details
Tag: Card
Summary: Retrieve card details by account and namespace
Retrieves detailed information for a card based on account, wallet, and namespace filters. This includes product metadata, card plan, customer linkages, balance info, and design elements. Used for full profile views of a debit card on customer service dashboards or in audits.
Filters include (any one) to get cards tied to a specific wallet:
walletAddress, ornameSpace, orcustomNameSpace
Card Statuses:
1000: Fully operational
1001: Refer to issuer
1004: Capture card
1005: Decline all transactions
1007: Decline all transactions
1008: Honor with ID
1041: Lost card - Capture
1043: Stolen card - Capture
1054: Expired card - Report
1140: Lost card - No capture
1143: Stolen card - No capture
1154: Expired card - Do not inform
1062: Restricted card
Updated Response Codes
401
Error when fetching card details due to invalid api key
403
Error when fetching card details because tenant id is invalid
Response Examples
| Code | Description |
|---|---|
| 200 | Successfully retrieved card details |
| 400 | Error response when fetching card details because card is not present |
| 401 | Error when fetching card details due to invalid api key |
| 403 | Error when fetching card details because tenant id is invalid |
| 500 | Error when fetching card details due to server error |
200 — Successfully retrieved card details
{
"message": "Card details fetched successfully",
"data": {
"cardNumber": "4219220000005986",
"cardHolderName": "John Doe",
"expiryDate": "2025-04-29",
"cardType": "VISA",
"status": "Temporary block",
"vendor": "RAIN",
"type": "Virtual",
"cvv": "598"
}
}
400 — Error response when fetching card details because card is not present
{
"errors": [
{
"type": "Not found",
"message": "Details not found, Please make sure details are correct."
}
]
}
401 — Error when fetching card details due to invalid api key
403 — Error when fetching card details because tenant id is invalid
500 — Error when fetching card details due to server error
{
"errors": [
{
"type": "Internal server error",
"message": "An unexpected error occurred. Please try again later"
}
]
}
GET /cards/eligible-cards
Tag: Card
Summary: Retrieve a list of all eligible debit cards
Retrieves a list of eligible debit cards for a walletAddress, nameSpace, or customNameSpace.
This endpoint is used to display eligible cards that can be requested to a wallet.
Filters include (any one of):
walletAddressnameSpacecustomNameSpace
Supports api-key and tenant-id in headers for authorization and tenant context.
Updated Response Codes
401
Error response when fetching available debit cards due to invalid api key
403
Error response when fetching available debit cards because tenant id is invalid
Response Examples
| Code | Description |
|---|---|
| 200 | Successfully retrieved the list of available debit cards |
| 400 | Error response when fetching available debit cards because customNameSpace is not correct |
| 401 | Error response when fetching available debit cards due to invalid api key |
| 403 | Error response when fetching available debit cards because tenant id is invalid |
| 500 | Error response when fetching available debit cards due to server error |
200 — Successfully retrieved the list of available debit cards
{
"message": "Select available product options",
"data": [
{
"cardProductId": "7d405976-87f5-47a1-aa23-76a4ee8e63d0",
"isActive": true,
"createdAt": "2025-06-02T06:01:50.9030000+00:00",
"updatedAt": "2025-06-02T06:01:50.9030000+00:00",
"productVendorId": "23d2c6c8-2458-4537-8c10-f4f64ff995bd",
"productTypeId": "6d2fdf75-0acf-4d94-8ae6-910d6269b42d",
"vendorDssTypeId": "fc902297-b48c-4e85-9530-623670af3fde",
"productName": "Via Carte Debit Card New",
"productVendorName": "VIACARTE",
"productTypeName": "DEBIT CARD"
}
]
}
400 — Error response when fetching available debit cards because customNameSpace is not correct
{
"errors": [
{
"type": "Not found",
"message": "Details not found, Please make sure details are correct."
}
]
}
401 — Error response when fetching available debit cards due to invalid api key
403 — Error response when fetching available debit cards because tenant id is invalid
500 — Error response when fetching available debit cards due to server error
{
"errors": [
{
"type": "Internal server error",
"message": "An unexpected error occurred. Please try again later"
}
]
}
GET /consent/consent-message/{tenantId}
Tag: Consent
Summary: get consent message
Updated Query Parameters
subCategory (string)
- Example updated:
Deposits
type (string)
- Example updated:
ACH
Response Examples
| Code | Description |
|---|---|
| 200 | Get consent message |
| 400 | Error response when consent-message api gets failed. |
| 404 | No data response if there is no details for the given vendor |
200 — Get consent message
{
"data": {
"vendorName": "string",
"currentActiveVersion": "string",
"consentMessage": "string",
"dssId": "string"
},
"message": "Vendor consent details fetched successfully"
}
400 — Error response when consent-message api gets failed.
404 — No data response if there is no details for the given vendor
GET /consent/consent-status
Tag: Consent
Summary: check consent status
Added Query Params
| Parameter | Type | Description |
|---|---|---|
dssVendorId |
string | DSS Vendor Id e.g. abcd1234-5678-90ab-cdef-123456abcdef |
Deprecated Query Params
None
Updated Query Parameters
customerAccountId (string)
- Example updated:
abcd1234-5678-90ab-cdef-123456abcdef
Response Examples
| Code | Description |
|---|---|
| 200 | Check consent status |
| 400 | Error response when consent-status api gets failed. |
| 404 | will give you the error response when no consent is present for the customer |
200 — Check consent status
{
"data": {
"latestConsentVersion": "string"
},
"message": [
"Consent is accepted",
"Consent is not valid. Please accept the consent"
]
}
400 — Error response when consent-status api gets failed.
404 — will give you the error response when no consent is present for the customer
{
"errors": {
"type": "No data found",
"message": "No consent is available, please accept the consent"
}
}
GET /tenant/customer/customer-details
Tag: Tenant Customers
Summary: Fetch details of a customer using either user-namespace, account-address, customer-name or custom-namespace
Updated Query Parameters
accountAddress (string)
- Example updated:
0x520b81aaA2AB71812f163e5e6B5a9e4B9f117975
namespace (string)
- Example updated:
esstech.merryw.ul
Response Examples
| Code | Description |
|---|---|
| 200 | will fetch the tenant customer details successfully |
| 400 | Bad request response if tenant customer detail fetching get failed |
| 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 |
200 — will fetch the tenant customer details successfully
{
"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": "Lorem",
"state": "KY",
"address1": "address1 ",
"country": "BO",
"postalCode": "Lorem",
"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": [
{
"tenantName": "globalIdInc3",
"domainNamespace": "globalidinc3.universalle1.ul",
"accountAddress": "0x3107259fa40121C259W524042b31386fD9625228",
"isGlobal": false,
"isPrimary": false,
"customNamespace": "johnwink004",
"namespaceProvider": "ens"
},
{
"tenantName": "globalIdInc3",
"domainNamespace": "globalidinc3.universalle2.ul",
"accountAddress": "0x3107259fa40121C259E524042b31386fS9625228",
"isGlobal": false,
"isPrimary": false,
"customNamespace": "johnwink005",
"namespaceProvider": "ens"
},
{
"tenantName": "globalIdInc3",
"domainNamespace": "globalidinc3.universalle3.ul",
"accountAddress": "0x3107259fa40121C258W524042b31386fD9625228",
"isGlobal": false,
"isPrimary": false,
"customNamespace": "johnwink1004",
"namespaceProvider": "ens"
},
{
"tenantName": "globalIdInc3",
"domainNamespace": "globalidinc3.universalle4.ul",
"accountAddress": "0x3107259fa40121C255E524042b31386fS9625228",
"isGlobal": false,
"isPrimary": false,
"customNamespace": "johnwink1005",
"namespaceProvider": "ens"
},
{
"tenantName": "globalIdInc3",
"domainNamespace": "globalidinc3.universalle5.ul",
"accountAddress": "0x3107259fa40121C245E524042b31386fS9625228",
"isGlobal": false,
"isPrimary": false,
"customNamespace": "johnwink1006",
"namespaceProvider": "ens"
},
{
"tenantName": "globalIdInc3",
"domainNamespace": "globalidinc3.universalle6.ul",
"accountAddress": "0x3107259fa40121C245E524042b3138c6fS9625228",
"isGlobal": false,
"isPrimary": false,
"customNamespace": "johnwink100a6",
"namespaceProvider": "ens"
},
{
"tenantName": "globalIdInc3",
"domainNamespace": "globalidinc3.universalle7.ul",
"accountAddress": "0x3107259fa40121C24d5E524042b3138c6fS9625228",
"isGlobal": false,
"isPrimary": false,
"customNamespace": "johnwinkv100a6",
"namespaceProvider": "ens"
},
{
"tenantName": "globalIdInc3",
"domainNamespace": "globalidinc3.universalle8.ul",
"accountAddress": "0x3107259fa40121C2sg4d5E524042b3138c6fS9625228",
"isGlobal": false,
"isPrimary": false,
"customNamespace": "johnwingkv10s0a6",
"namespaceProvider": "ens"
},
{
"tenantName": "globalIdInc3",
"domainNamespace": "globalidinc3.universall.ul",
"accountAddress": "0x3107259fa40121c259e124042b31386fd9625228",
"isGlobal": false,
"isPrimary": true,
"customNamespace": null,
"namespaceProvider": null
}
],
"PEPScreeningPassed": "Pending",
"geographyScreening": "string",
"locationConfidenceScore": "string",
"nameScreening": "string",
"overallComplianceStatus": "string"
}
]
}
400 — Bad request response if tenant customer detail fetching get failed
{
"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 — 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
PATCH /cards/block-unblock
Tag: Card
Summary: Change the status of a debit card (e.g. block, unblock)
Updates the status of a specific debit card to a new status value, such as block or unblock. The status code and reason must be provided in the request body. This is typically used to temporarily disable or re-enable a card for operational or security reasons.
Requires:
api-key header or
tenant-id header
Updated Response Codes
401
Error when updating card status due to invalid api key
403
Error when updating card status because tenant id is invalid
Current Request Example
{
"block": false,
"reason": "User requested temporary block",
"walletAddress": "string",
"customNameSpace": "string",
"nameSpace": "string"
}
Response Examples
| Code | Description |
|---|---|
| 200 | Card status updated successfully |
| 400 | Error response when updating card status because card details are not present |
| 401 | Error when updating card status due to invalid api key |
| 403 | Error when updating card status because tenant id is invalid |
| 500 | Error when updating card status due to server error |
200 — Card status updated successfully
400 — Error response when updating card status because card details are not present
401 — Error when updating card status due to invalid api key
403 — Error when updating card status because tenant id is invalid
500 — Error when updating card status due to server error
{
"errors": [
{
"type": "Internal server error",
"message": "An unexpected error occurred. Please try again later"
}
]
}
POST /cards/report/lost
Tag: Card
Summary: Report a debit card as lost
Marks a specific debit card as lost. This operation updates the card status to a lost code. Requires: api-key header or tenant-id header
Updated Response Codes
401
Error when updating card status due to invalid api key
403
Error when updating card status because tenant id is invalid
Current Request Example
{
"reason": "User reported",
"walletAddress": "string",
"customNameSpace": "string",
"nameSpace": "string",
"reportDate": "2025-06-13"
}
Response Examples
| Code | Description |
|---|---|
| 200 | Card successfully marked as lost |
| 400 | Error response when updating card status because card details are not present |
| 401 | Error when updating card status due to invalid api key |
| 403 | Error when updating card status because tenant id is invalid |
| 500 | Error when updating card status due to server error |
200 — Card successfully marked as lost
400 — Error response when updating card status because card details are not present
401 — Error when updating card status due to invalid api key
403 — Error when updating card status because tenant id is invalid
500 — Error when updating card status due to server error
{
"errors": [
{
"type": "Internal server error",
"message": "An unexpected error occurred. Please try again later"
}
]
}
POST /cards/report/stolen
Tag: Card
Summary: Report a debit card as stolen
Marks a specific debit card as stolen. This operation updates the card status to a stolen code. Requires: api-key header or tenant-id header
Updated Response Codes
401
Error when updating card status due to invalid api key
403
Error when updating card status because tenant id is invalid
Current Request Example
{
"reason": "User reported",
"walletAddress": "string",
"customNameSpace": "string",
"nameSpace": "string",
"reportDate": "2025-06-13"
}
Response Examples
| Code | Description |
|---|---|
| 200 | Card successfully marked as stolen |
| 400 | Error response when updating card status because card details are not present |
| 401 | Error when updating card status due to invalid api key |
| 403 | Error when updating card status because tenant id is invalid |
| 500 | Error when updating card status due to server error |
200 — Card successfully marked as stolen
400 — Error response when updating card status because card details are not present
401 — Error when updating card status due to invalid api key
403 — Error when updating card status because tenant id is invalid
500 — Error when updating card status due to server error
{
"errors": [
{
"type": "Internal server error",
"message": "An unexpected error occurred. Please try again later"
}
]
}
POST /cards/request-card
Tag: Card
Summary: Request a new debit card
Request a new debit card for a customer. Requires customer account ID, selected product ID, and optional wallet or namespace identifiers.
The endpoint generates a card tied to the customer wallet, product plan, and issuer.
Updated Response Codes
401
Error response when issuing debit cards due to invalid api key
403
Error response when issuing debit cards because tenant id is invalid
Current Request Example
{
"walletAddress": "string",
"customNameSpace": "string",
"nameSpace": "string",
"cardProductId": "string",
"tokenSymbol": "string"
}
Response Examples
| Code | Description |
|---|---|
| 201 | Created response after debit card issued successfully |
| 400 | Error response when issuing debit cards because customNameSpace is not correct |
| 401 | Error response when issuing debit cards due to invalid api key |
| 403 | Error response when issuing debit cards because tenant id is invalid |
| 500 | Error response when issuing debit cards due to server error |
201 — Created response after debit card issued successfully
{
"message": "Debit card issued successfully",
"data": {
"cardNumber": "4219220000005986",
"cardHolderName": "John Doe",
"expiryDate": "2025-04-29",
"cardType": "VISA",
"status": "Temporary block",
"vendor": "RAIN",
"type": "Virtual",
"cvv": "598"
}
}
400 — Error response when issuing debit cards because customNameSpace is not correct
{
"errors": [
{
"type": "Not found",
"message": "Details not found, Please make sure details are correct."
}
]
}
401 — Error response when issuing debit cards due to invalid api key
403 — Error response when issuing debit cards because tenant id is invalid
500 — Error response when issuing debit cards due to server error
{
"errors": [
{
"type": "Internal server error",
"message": "An unexpected error occurred. Please try again later"
}
]
}
POST /tenant/customer
Tag: Tenant Customers
Summary: Onboard tenant customer
Added Fields
+ accountPurpose string # Account purpose
+ annualSalary string # Annual salary
+ expectedMonthlyVolume string # Expected monthly volume
+ occupation string # Occupation Example occupation codes: - STUDENT → Student - RETIRED → Retired - OTHERXX → Other - UNEMPLO → Unemployed - 15-1132 → Software Developers, Applications - 15-1134 → Web Developers
Deprecated Fields
None
Current Request Example
{
"identificationBadgeId": "string",
"firstName": "Jone",
"middleName": "string",
"lastName": "Doe",
"fullName": "Jone Doe",
"accountAddress": "0xAbC1234567890abcdefABC1234567890abcdefAB",
"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": "unknown",
"phoneNumber": "+91123456789",
"nationality": "string",
"ip_address": "string",
"ssn": "string",
"stateLicenseId": "string",
"tin": "string",
"address": {
"city": "Lorem",
"state": "KY",
"address1": "address1 ",
"country": "BO",
"postalCode": "Lorem",
"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 user",
"fileName": "idCard.png",
"side": "front",
"type": "DriversLicense",
"content": "string",
"number": "123455",
"issuedCountry": "INDIA",
"expired": false,
"validFromDate": "2012-12-12",
"validTillDate": "2012-02-02"
}
],
"proofOfAddress": [
{
"description": "credit card statement for Sep2024",
"fileName": "cc1.png",
"side": "front",
"type": "front",
"content": "string",
"number": "123455",
"issuedCountry": "INDIA",
"expired": false,
"validFromDate": "2012-12-12",
"validTillDate": "2012-02-02"
}
],
"passport": {
"description": "national id card of user",
"fileName": "idCard.png",
"side": "front",
"type": "DriversLicense",
"content": "string",
"number": "123455",
"issuedCountry": "INDIA",
"expired": false,
"validFromDate": "2012-12-12",
"validTillDate": "2012-02-02"
},
"others": {
"stateIdLicense": "321",
"proofOfAddress": "321",
"alienIdCard": "321"
},
"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": "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",
"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-25T10:51:39.1788210+00:00"
},
"occupation": "RETIRED",
"annualSalary": "1000000",
"accountPurpose": "Trading",
"expectedMonthlyVolume": "10000"
}
Response Examples
| Code | Description |
|---|---|
| 201 | Created response after tenant customer successfully onboard |
| 400 | Error response after tenant customer onboarding gets failed |
201 — Created response after tenant customer successfully onboard
{
"data": {
"firstName": "Jone",
"middleName": "string",
"lastName": "Doe",
"accountAddress": "string",
"tenantId": "e1e9adb4-d3bd-4ba5-98b8-011c03a9d2b1",
"dateOfBirth": "1997-02-02",
"email": "lorem@mygmail.com",
"gender": "male",
"phoneNumber": "123455656789",
"address": {
"city": "Lorem",
"state": "KY",
"address1": "address1 ",
"country": "BO",
"postalCode": "Lorem",
"isoCountryCode": "US"
},
"tax": {
"country": "BO",
"idNumber": "122-22-2332",
"state": "string"
},
"documents": [
{
"description": "national id card of user",
"fileName": "idCard.png",
"side": "front",
"type": "DriversLicense",
"content": "string",
"number": "123455",
"issuedCountry": "INDIA",
"expired": false,
"validFromDate": "2012-12-12",
"validTillDate": "2012-02-02"
}
],
"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 — Error response after tenant customer onboarding gets failed
{
"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 wallet user
Provide either CustomerAccountId of wallet user or BusinessUserId of business user.
Added Fields
Deprecated Fields
Current Request Example
{
"customerAccountId": "e1e9adb4-d3bd-4ba5-98b8-011c03a9d2b1",
"customNamespace": "jonedoe",
"provider": "ens",
"accountAddress": "walletUserAccountAddress",
"financialBadgeId": "d573926e-358f-482d-8375-6842477ce736",
"businessUserId": "d573926e-358f-482d-8375-6842477ce736",
"tokenSymbol": "USBC"
}
Response Examples
| Code | Description |
|---|---|
| 201 | Success Response when wallet is added successfully |
| 400 | Error response for all possible cases when adding wallet api gets failed. |
201 — Success Response when wallet is added successfully
{
"data": {
"customerAccountId": "1a310d45-0f5f-4f44-bc1d-6ddfd9547787e",
"namespace": "tenantDomain.sheetalku1.ul"
},
"message": "wallet added successfully"
}
400 — Error response for all possible cases when adding wallet api gets failed.
{
"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/update
Tag: Tenant Customers
Summary: API Version V2.0.0 | Update tenant customer | Modifier - Gurumoorthy
Added Fields
+ accountPurpose string # Account purpose
+ annualSalary string # Annual salary
+ expectedMonthlyVolume string # Expected monthly volume
+ occupation string # Occupation Example occupation codes: - STUDENT → Student - RETIRED → Retired - OTHERXX → Other - UNEMPLO → Unemployed - 15-1132 → Software Developers, Applications - 15-1134 → Web Developers
Deprecated Fields
None
Updated Request Body Fields
maritalStatus (string)
- Allowed values added:
married,unmarried - Allowed values removed:
MARRIED,UNMARRIED - Example updated:
['married', 'unmarried']
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 user",
"fileName": "idCard.png",
"side": "front",
"type": "DriversLicense",
"content": "string",
"number": "123455",
"issuedCountry": "INDIA",
"expired": false,
"validFromDate": "2012-12-12",
"validTillDate": "2012-02-02"
}
],
"proofOfAddress": [
{
"description": "credit card statement for Sep2024",
"fileName": "cc1.png",
"side": "front",
"type": "front",
"content": "string",
"number": "123455",
"issuedCountry": "INDIA",
"expired": false,
"validFromDate": "2012-12-12",
"validTillDate": "2012-02-02"
}
],
"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",
"reRunComplianceCheck": true,
"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-25T10:51:39.1788210+00:00"
},
"occupation": "RETIRED",
"annualSalary": "1000000",
"accountPurpose": "Trading",
"expectedMonthlyVolume": "10000"
}
Response Examples
| Code | Description |
|---|---|
| 202 | Success response |
| 400 | Error response |
202 — Success response
{
"type": "Success",
"assignedIdentificationBadge": "8d16684e-ee0a-4c10-83c0-c4d89e6a8666",
"message": "User has successfully onboarded with the badge Bronzeone [8d16684e-ee0a-4c10-83c0-c4d89e6a8666]."
}
400 — Error response
{
"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"
}
]
}
PUT /tenant/customer/{customerId}
Tag: Tenant Customers
Summary: Update custom namespace of the customer
Added Fields
Deprecated Fields
None
Updated Request Body Fields
customNamespace (string)
- Example updated:
my_namespace
Added Response Codes
| Code | Description |
|---|---|
| 201 | Custom namespace is created successfully |
| 400 | Bad request error response if failed to update custom namespace |
Deprecated Response Codes
None
Updated Response Codes
200
Custom namespace is updated successfully
Current Request Example
{
"customNamespace": "my_namespace",
"walletAddress": "0xb9b8FF00d740ed1aa614d05dE11178dEB365E384"
}
Response Examples
| Code | Description |
|---|---|
| 200 | Custom namespace is updated successfully |
| 201 | Custom namespace is created successfully |
| 400 | Bad request error response if failed to update custom namespace |
200 — Custom namespace is updated successfully
{
"data": {
"customNamespace": "new_namespace"
},
"message": "Customer details updated successfully"
}
201 — Custom namespace is created successfully
{
"data": {
"custom_namespace": "example_namespace",
"namespace_id": "7a32a5f4-2db5-4a1f-9ef0-e42fb858d49c",
"created_at": "2025-09-10T09:56:17.0060000+00:00",
"namespaceMapperId": "f2781527-ae42-40c2-b174-56a3c720cd49"
},
"message": "Customer details updated successfully"
}
400 — Bad request error response if failed to update custom namespace
{
"errors": [
{
"type": "Invalid UUID",
"message": "UUID is not valid"
},
{
"type": "update",
"message": "There is no account for the given customer Id"
},
{
"type": "update",
"message": "Tenant address not found"
},
{
"type": "update",
"message": "No namespace details found to update custom namespace"
},
{
"type": "update",
"message": "Couldn't allow the transaction, customer doesn't belong to Tenant"
},
{
"type": "update",
"message": "This custom namespace is already taken"
},
{
"type": "catch",
"message": "Something went wrong."
}
]
}