Skip to content

Public API — v3.0.0

Type: Major Release  ·  Previous version: v2.9.0


✅ 1 New ✏️ 13 Modified

✅ 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, or
  • nameSpace, or
  • customNameSpace

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 bearer token

Error when fetching card details due to invalid api key

403

- Error when fetching card details because bearer token is invalid

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

{
  "errors": [
    {
      "type": "API Key",
      "message": "Invalid API Key"
    }
  ]
}

403 — Error when fetching card details because tenant id is invalid

{
  "errors": [
    {
      "type": "Access control",
      "message": "Access denied for this resource"
    }
  ]
}

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):

  • walletAddress
  • nameSpace
  • customNameSpace

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 bearer token

Error response when fetching available debit cards due to invalid api key

403

- Error response when fetching available debit cards because bearer token is invalid

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

{
  "errors": [
    {
      "type": "API Key",
      "message": "Invalid API Key"
    }
  ]
}

403 — Error response when fetching available debit cards because tenant id is invalid

{
  "errors": [
    {
      "type": "Access control",
      "message": "Access denied for this resource"
    }
  ]
}

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.

{
  "errors": {
    "type": "catch",
    "message": "Something went wrong, please try again"
  }
}

404 — No data response if there is no details for the given vendor

{
  "type": "Consent",
  "message": "No data found"
}

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.

{
  "errors": {
    "type": "catch",
    "message": "Something went wrong, please try again"
  }
}

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

{
  "errors": [
    {
      "message": "No data found",
      "type": "No data"
    }
  ]
}

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 bearer token

Error when updating card status due to invalid api key

403

- Error when updating card status because bearer token is invalid

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

{
  "message": "Card status updated successfully",
  "data": {
    "status": "Temporary block"
  }
}

400 — Error response when updating card status because card details are not present

{
  "errors": [
    {
      "type": "Not found",
      "message": "Card Details Not Found"
    }
  ]
}

401 — Error when updating card status due to invalid api key

{
  "errors": [
    {
      "type": "API Key",
      "message": "Invalid API Key"
    }
  ]
}

403 — Error when updating card status because tenant id is invalid

{
  "errors": [
    {
      "type": "Access control",
      "message": "Access denied for this resource"
    }
  ]
}

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 bearer token

Error when updating card status due to invalid api key

403

- Error when updating card status because bearer token is invalid

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

{
  "message": "Card status updated successfully",
  "data": {
    "status": "Lost"
  }
}

400 — Error response when updating card status because card details are not present

{
  "errors": [
    {
      "type": "Not found",
      "message": "Card Details Not Found"
    }
  ]
}

401 — Error when updating card status due to invalid api key

{
  "errors": [
    {
      "type": "API Key",
      "message": "Invalid API Key"
    }
  ]
}

403 — Error when updating card status because tenant id is invalid

{
  "errors": [
    {
      "type": "Access control",
      "message": "Access denied for this resource"
    }
  ]
}

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 bearer token

Error when updating card status due to invalid api key

403

- Error when updating card status because bearer token invalid

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

{
  "message": "Card status updated successfully",
  "data": {
    "status": "Stolen"
  }
}

400 — Error response when updating card status because card details are not present

{
  "errors": [
    {
      "type": "Not found",
      "message": "Card Details Not Found"
    }
  ]
}

401 — Error when updating card status due to invalid api key

{
  "errors": [
    {
      "type": "API Key",
      "message": "Invalid API Key"
    }
  ]
}

403 — Error when updating card status because tenant id is invalid

{
  "errors": [
    {
      "type": "Access control",
      "message": "Access denied for this resource"
    }
  ]
}

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 bearer token

Error response when issuing debit cards due to invalid api key

403

- Error response when issuing debit cards because bearer token is invalid

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

{
  "errors": [
    {
      "type": "API Key",
      "message": "Invalid API Key"
    }
  ]
}

403 — Error response when issuing debit cards because tenant id is invalid

{
  "errors": [
    {
      "type": "Access control",
      "message": "Access denied for this resource"
    }
  ]
}

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

+ businessUserId                           string  # business user Id ot assign the wallet level

Deprecated Fields

- tenantId                                 string  # tenant id in which wallet user is onboard

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

+ walletAddress                            string  # account address of the wallet

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."
    }
  ]
}