Skip to content

Partner API — v1.0.0

Type: Initial Release  ·  Endpoints introduced: 21


Agreement

GET /tenant/agreement/get-agreement

Tag: Agreement
Summary: fetch agreements

Query Parameters

Parameter Type Required Description
agreementId string No agreement Id

Response Codes

Code Description
200 will fetch the agreement
400 Bad request response if fetching the agreement gets failed
404 No data response if there is no agreement present

200 — will fetch the agreement

{
  "message": "Agreements fetched successfully",
  "data": [
    {
      "id": "4162f690-a5d7-43a5-ba54-82c6f3aa3e09",
      "content": "US Patriot ACT: To help the government fight the funding of terrorism and money laundering activities",
      "status": "PENDING",
      "first_name": "Jone",
      "last_name": "Doe",
      "email": "test@test.com",
      "account_address": "4162f690-a5d7-43a5-ba54-82c6f3aa3e09",
      "ip": "0.0.0.0",
      "agreement_type": "US_PATRIOTIC_ACT",
      "created_at": "2023-06-27T01:05:26.0000000+00:00",
      "agreementId": "4162f690-a5d7-43a5-ba54-82c6f3aa3e09"
    }
  ]
}

400 — Bad request response if fetching the agreement gets failed

{
  "errors": [
    {
      "type": "catch",
      "message": "Shows what kind of error occurred in the execution of this API"
    },
    {
      "type": "fetch",
      "message": "Could't fetch token"
    },
    {
      "type": "catch",
      "message": "err.message"
    },
    {
      "type": "Agreement",
      "message": "Tenant Id is missing in Headers"
    },
    {
      "type": "fetch",
      "message": "Could't fetch token"
    },
    {
      "data": {},
      "message": "No data found"
    }
  ]
}

404 — No data response if there is no agreement present

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

GET /tenant/agreement/terms-and-privacy-agreements

Tag: Agreement
Summary: Fetch Agreement Template

Query Parameters

Parameter Type Required Description
type string Yes Template type e.g. PRIVACY_POLICY or TERMS_CONDITIONS

Response Codes

Code Description
200 Success response of the fetch agreement template
400 Error Response

200 — Success response of the fetch agreement template

{
  "message": "Fetched template successfully",
  "data": {
    "templateId": "4b9c4c86-0701-40cf-9ebb-59bc0ddd4650",
    "html": "<Content>",
    "type": "UL_TEMPLATE"
  }
}

400 — Error Response

{
  "errors": [
    {
      "type": "Catch",
      "message": "Shows what kind of error occurred in the execution of this API"
    },
    {
      "type": "Agreement",
      "message": "No Template with the type {agreementType}"
    }
  ]
}

POST /tenant/agreement/preview-UL-agreement

Tag: Agreement
Summary: preview UL agreements

Request Body

Field Type Required Description
firstName string Yes tenant customer first name e.g. Jone
lastName string Yes tenant customer last name e.g. Doe
email string Yes tenant email e.g. lorem@mygmail.com
ip string Yes IP Address e.g. 0.0.0.0
accountAddress string Yes tenant customer account address e.g. 0x874259c8e1d58ac53f6f22e3f3e5a5dc86773248

Example Request

{
  "firstName": "Jone",
  "lastName": "Doe",
  "email": "lorem@mygmail.com",
  "ip": "0.0.0.0",
  "accountAddress": "0x874259c8e1d58ac53f6f22e3f3e5a5dc86773248"
}

Response Codes

Code Description
200 will preview the agreement of UL
400 Bad request response if fetching the UL agreement gets failed
404 No data response if there is no agreement present

200 — will preview the agreement of UL

{
  "message": "Agreements fetched successfully",
  "data": [
    {
      "id": "4162f690-a5d7-43a5-ba54-82c6f3aa3e09",
      "content": "US Patriot ACT: To help the government fight the funding of terrorism and money laundering activities",
      "status": "PENDING",
      "first_name": "Jone",
      "last_name": "Doe",
      "email": "test@test.com",
      "account_address": "4162f690-a5d7-43a5-ba54-82c6f3aa3e09",
      "ip": "0.0.0.0",
      "agreement_type": "US_PATRIOTIC_ACT",
      "created_at": "2023-06-27T01:05:26.0000000+00:00",
      "agreementId": "4162f690-a5d7-43a5-ba54-82c6f3aa3e09"
    }
  ]
}

400 — Bad request response if fetching the UL agreement gets failed

{
  "errors": [
    {
      "type": "catch",
      "message": "Shows what kind of error occurred in the execution of this API"
    },
    {
      "type": "fetch",
      "message": "Could't fetch token"
    },
    {
      "type": "catch",
      "message": "err.message"
    },
    {
      "type": "Agreement",
      "message": "Tenant Id is missing in Headers"
    },
    {
      "type": "fetch",
      "message": "Could't fetch token"
    },
    {
      "data": {},
      "message": "No data found"
    }
  ]
}

404 — No data response if there is no agreement present

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

POST /tenant/agreement/preview-agreement

Tag: Agreement
Summary: preview agreements

Request Body

Field Type Required Description
firstName string Yes tenant customer first name e.g. Jone
middleName string No tenant customer middle name
lastName string Yes tenant customer last name e.g. Doe
ip string Yes IP Address e.g. 0.0.0.0
accountAddress string Yes tenant customer account address e.g. 0x874259c8e1d58ac53f6f22e3f3e5a5dc86773248
dateOfBirth string Yes tenant customer date of birth e.g. 02-02-1997
email string Yes tenant email e.g. lorem@mygmail.com
taxCountry string Yes tenant customer tax country code e.g. BO
taxIdNumber string Yes tenant customer tax id code e.g. 122-22-2332
phoneNumber object Yes
address object Yes

Example Request

{
  "firstName": "Jone",
  "middleName": "string",
  "lastName": "Doe",
  "ip": "0.0.0.0",
  "accountAddress": "0x874259c8e1d58ac53f6f22e3f3e5a5dc86773248",
  "dateOfBirth": "1997-02-02",
  "email": "lorem@mygmail.com",
  "taxCountry": "BO",
  "taxIdNumber": "122-22-2332",
  "phoneNumber": {
    "country": "IN ",
    "number": "7027779322 ",
    "sms": true
  },
  "address": {
    "address1": "address1 ",
    "address2": "address2 ",
    "postalCode": "Lorem",
    "city": "Lorem",
    "state": "KY",
    "country": "BO"
  }
}

Response Codes

Code Description
200 will preview the agreement
400 Bad request response if fetching the agreement gets failed
404 No data response if there is no agreement present

200 — will preview the agreement

{
  "message": "Agreements fetched successfully",
  "data": [
    {
      "id": "4162f690-a5d7-43a5-ba54-82c6f3aa3e09",
      "content": "US Patriot ACT: To help the government fight the funding of terrorism and money laundering activities",
      "status": "PENDING",
      "first_name": "Jone",
      "last_name": "Doe",
      "email": "test@test.com",
      "account_address": "4162f690-a5d7-43a5-ba54-82c6f3aa3e09",
      "ip": "0.0.0.0",
      "agreement_type": "US_PATRIOTIC_ACT",
      "created_at": "2023-06-27T01:05:26.0000000+00:00",
      "agreementId": "4162f690-a5d7-43a5-ba54-82c6f3aa3e09"
    }
  ]
}

400 — Bad request response if fetching the agreement gets failed

{
  "errors": [
    {
      "type": "catch",
      "message": "Shows what kind of error occurred in the execution of this API"
    },
    {
      "type": "fetch",
      "message": "Could't fetch token"
    },
    {
      "type": "catch",
      "message": "err.message"
    },
    {
      "type": "Agreement",
      "message": "Tenant Id is missing in Headers"
    },
    {
      "type": "fetch",
      "message": "Could't fetch token"
    },
    {
      "data": {},
      "message": "No data found"
    }
  ]
}

404 — No data response if there is no agreement present

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

PUT /tenant/agreement/preview-agreement/{agreementId}

Tag: Agreement
Summary: Update consent of agreement

Request Body

Field Type Required Description
status string Yes Status e.g. ACCEPTED

Example Request

{
  "status": "ACCEPTED"
}

Path Parameters

Parameter Type Required Description
agreementId string Yes

Response Codes

Code Description
200 will Update consent of agreement
400 Bad request response if Update consent of agreement get failed

200 — will Update consent of agreement

{
  "data": {
    "customerAccountId": "c02d249a-e720-4df8-b1b6-f016e2d351de",
    "id": "c02d249a-e720-4df8-b1b6-f016e2d351de",
    "status": "PENDING",
    "createdAt": "2023-05-01T11:30:25.0000000+00:00",
    "updatedAt": "2023-05-01T11:30:25.0000000+00:00"
  },
  "message": "Agreement successfully updated"
}

400 — Bad request response if Update consent of agreement get failed

{
  "errors": [
    {
      "type": "catch",
      "message": "Could't Update agreement"
    },
    {
      "type": "Agreement",
      "message": "Tenant Id is missing in Headers"
    },
    {
      "type": "Agreement",
      "message": "Could't Update agreement"
    },
    {
      "type": "catch",
      "message": "err.message"
    }
  ]
}

PUT /tenant/agreement/ul-preview-agreement/{agreementId}

Tag: Agreement
Summary: Update consent of UL agreement

Request Body

Field Type Required Description
status string Yes Status e.g. ACCEPTED

Example Request

{
  "status": "ACCEPTED"
}

Path Parameters

Parameter Type Required Description
agreementId string Yes

Response Codes

Code Description
200 will Update consent of UL agreement
400 Bad request response if Update consent of UL agreement get failed

200 — will Update consent of UL agreement

{
  "data": {
    "customerAccountId": "c02d249a-e720-4df8-b1b6-f016e2d351de",
    "id": "c02d249a-e720-4df8-b1b6-f016e2d351de",
    "status": "PENDING",
    "createdAt": "2023-05-01T11:30:25.0000000+00:00",
    "updatedAt": "2023-05-01T11:30:25.0000000+00:00"
  },
  "message": "Agreement successfully updated"
}

400 — Bad request response if Update consent of UL agreement get failed

{
  "errors": [
    {
      "type": "catch",
      "message": "Could't Update agreement"
    },
    {
      "type": "Agreement",
      "message": "Tenant Id is missing in Headers"
    },
    {
      "type": "Agreement",
      "message": "Could't Update agreement"
    },
    {
      "type": "catch",
      "message": "err.message"
    }
  ]
}

General

GET /transactions/identifier/{identifier}/type/{type}/history

Summary: API endpoint to fetch the on chain or off chain transactions history

Query Parameters

Parameter Type Required Description
startdate string No mm/dd/yyyy
enddate string No mm/dd/yyyy
startblock string No 13390483
endblock string No 18590483
sort string No Defaults to descending order. Available values: asc, desc
page string No 1
offset string No 12

Path Parameters

Parameter Type Required Description
identifier string Yes Pass any one identifier(namespace or tenantNamespace or customNamespace or accountAddress) namespace: example "tenant.user.ul" tenantNamespace example "tenant.ul" accountAddress example "0x520b81aaA2AB71812f163e5e6B5a9e4B9f117975" customNamespace example "custom.domain"
type string Yes transaction type

Response Codes

Code Description
200 Fetch on chain or off chain transactions history
400 Error : 400 response

GET /transactions/{identifier}/balance

Summary: Gets the balance of the address.

Path Parameters

Parameter Type Required Description
identifier string Yes Pass any one identifier(namespace or tenantNamespace or customNamespace or accountAddress) namespace: example "tenant.user.ul" tenantNamespace example "tenant.ul" accountAddress example "0x520b81aaA2AB71812f163e5e6B5a9e4B9f117975" customNamespace example "custom.domain"

Response Codes

Code Description
200 Gets the balance of the address.
400 Error : 400 response

Off Chain Transactions

GET /offchainTransaction/transfer-method

Tag: Off Chain Transactions
Summary: fetch transfer methods

Query Parameters

Parameter Type Required Description
type string Yes e.g. ach
namespace string No e.g. fourthunicorn.raju1bh4.ul
blockchainAddress string No e.g. 0x8262f83b50e933677a89c854ba7dc64d3ae52001

Response Codes

Code Description
200 will fetch transfer methods via identityId
400 Bad request response if transfer methods fetching get failed

200 — will fetch transfer methods via identityId

{
  "data": {
    "id": "string",
    "bankDetails": "string",
    "type": "string",
    "createdAt": "string"
  },
  "message": "Successfully fetched from transfer methods"
}

400 — Bad request response if transfer methods fetching get failed

{
  "errors": [
    {
      "type": "catch",
      "message": "shows the error message while API failed in execution"
    },
    {
      "type": "Transfer Method",
      "message": "Please provide either namespace or blockchain address"
    },
    {
      "type": "Transfer Method",
      "message": "Tenant Id is missing in Headers"
    },
    {
      "message": "Please provide valid namespace",
      "type": "No data found"
    },
    {
      "type": "Transfer Method",
      "message": "Couldn't allow the transaction, customer doesn't belong to Tenant"
    },
    {
      "type": "Transfer Method",
      "message": "isTenantAuthorized?.message"
    },
    {
      "message": "Please provide valid namespace",
      "type": "No data found"
    },
    {
      "data": [],
      "message": "No Transfer Method Available For : namespace"
    },
    {
      "type": "Transfer Method",
      "message": "Couldn't allow the transaction, customer doesn't belong to Tenant"
    },
    {
      "type": "Transfer Method",
      "message": "isTenantAuthorized?.message"
    },
    {
      "message": "Please provide valid namespace",
      "type": "No data found"
    },
    {
      "message": "Failed to fetch the transfer method",
      "type": "catch"
    }
  ]
}

POST /offchainTransaction/transfer-method

Tag: Off Chain Transactions
Summary: create a transfer for tenant or customer

Request Body

Field Type Required Description
namespace string Yes Transfer method identity owner
blockchainAddress string Yes Blockchain Address
type string Yes Transfer method type One of: card, ach e.g. ['card', 'ach']
bankName string Yes bank Name of User e.g. Royal bank
bankAccountName string Yes bank Account Name of User e.g. foobar
bankAccountNumber string Yes bank Account Number of User e.g. GB94BARC10201530093459
routingNumber string Yes routingNumber e.g. 011401533
accountType string Yes Account type checking | saving e.g. checking

Example Request

{
  "namespace": "string",
  "blockchainAddress": "string",
  "type": [
    "card",
    "ach"
  ],
  "bankName": "Royal bank",
  "bankAccountName": "foobar",
  "bankAccountNumber": "GB94BARC10201530093459",
  "routingNumber": "011401533",
  "accountType": "checking"
}

Response Codes

Code Description
400 Bad request response if transfer methods fetching get failed

400 — Bad request response if transfer methods fetching get failed

{
  "errors": [
    {
      "type": "catch",
      "message": "shows the error message while API failed in execution"
    },
    {
      "type": "Transfer Method",
      "message": "Please provide either namespace or blockchain address"
    },
    {
      "type": "Transfer Method",
      "message": "Tenant Id is missing in Headers"
    },
    {
      "message": "Please provide valid namespace",
      "type": "No data found"
    },
    {
      "type": "Transfer Method",
      "message": "Couldn't allow the transaction, customer doesn't belong to Tenant"
    },
    {
      "type": "Transfer Method",
      "message": "isTenantAuthorized?.message"
    },
    {
      "message": "Please provide valid namespace",
      "type": "No data found"
    },
    {
      "data": [],
      "message": "No Transfer Method Available For : namespace"
    },
    {
      "type": "Transfer Method",
      "message": "Couldn't allow the transaction, customer doesn't belong to Tenant"
    },
    {
      "type": "Transfer Method",
      "message": "isTenantAuthorized?.message"
    },
    {
      "message": "Please provide valid namespace",
      "type": "No data found"
    },
    {
      "message": "Failed to fetch the transfer method",
      "type": "catch"
    }
  ]
}

Payment

POST /transaction/add-fund

Tag: Payment
Summary: fetch add fund url for wallet user account

Request Body

Field Type Required Description
amount number Yes amount
namespace string Yes Fund user namespace e.g. test.jones1.ul
successUrl string No success redirect url e.g. https://example.com/payments/success
failureUrl string No failure redirect url e.g. https://example.com/payments/failure
cancelUrl string No cancel redirect url e.g. https://example.com/payments/cancel
ipAddress string Yes Ip Address e.g. 127.0.0.1
token string Yes Token Symbol e.g. THAI

Example Request

{
  "amount": 0,
  "namespace": "test.jones1.ul",
  "successUrl": "https://example.com/payments/success",
  "failureUrl": "https://example.com/payments/failure",
  "cancelUrl": "https://example.com/payments/cancel",
  "ipAddress": "127.0.0.1",
  "token": "THAI"
}

Response Codes

Code Description
201 Success Response when url is fetched successfully
400 Error response for all possible cases when calling add fund api gets failed.

201 — Success Response when url is fetched successfully

{
  "data": {
    "namespace": "blrwizards.sheetalstagk.ul",
    "url": "https://pay.sandbox.checkout.com/page/hpp_CizJqjrq23?_pcf"
  }
}

400 — Error response for all possible cases when calling add fund api gets failed.

{
  "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 request through cliq ACH

Request Body

Field Type Required Description
transactionAmount number Yes amount e.g. 1
token string Yes Token | under which token that amount to be transferred e.g. USBC
customerBankAccountType string Yes Customer Bank Account Type e.g. checking
customerBankAccountNumber string No Customer Bank Account Number e.g. 1
customerBankRoutingNumber string No Customer Bank Routing Number e.g. 102000076
ipAddress string Yes Ip Address e.g. 127.0.0.1

Example Request

{
  "transactionAmount": 1,
  "token": "USBC",
  "customerBankAccountType": "checking",
  "customerBankAccountNumber": "1",
  "customerBankRoutingNumber": "102000076",
  "ipAddress": "127.0.0.1"
}

Query Parameters

Parameter Type Required Description
namespace string No e.g. wizzit.albertab.ul
customNamespace string No
accountAddress string No e.g. 0x29358a44c1a18cd08974625d258986e243805c34

Response Codes

Code Description
201 Success Response when request initiated successfully
400 Error response for all possible cases when calling add-fund-ach API gets fail.

201 — Success Response when request initiated successfully

{
  "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.0000000+00:00",
      "cardTransactionHistoryId": "f5ae6c1f-cbfc-41f5-af83-33a898255e57"
    }
  }
}

400 — Error response for all possible cases when calling add-fund-ach API gets fail.

{
  "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/expire-session

Tag: Payment
Summary: Expire payment session

Request Body

Field Type Required Description
transactionId string Yes transaction id of the transaction for which session you want to expire

Example Request

{
  "transactionId": "string"
}

Response Codes

Code Description
201 Success Response when session expired successfully
400 Error response for all possible cases when calling session expired gets failed.

201 — Success Response when session expired successfully

{
  "data": {
    "status": "expired"
  }
}

400 — Error response for all possible cases when calling session expired gets failed.

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

Tenant Customers

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

Query Parameters

Parameter Type Required Description
namespace string No User namespace e.g. esstech.merryw.ul
accountAddress string No Account Address e.g. 0x520b81aaA2AB71812f163e5e6B5a9e4B9f117975
name string No Customer Name
customNamespace string No Custom Namespace

Response Codes

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",
        "street": "Lorem",
        "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",
      "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"
    }
  ]
}

POST /tenant/customer

Tag: Tenant Customers
Summary: onboard tenant customer

Request Body

Field Type Required Description
firstName string Yes tenant customer first name e.g. Jone
middleName string No tenant customer middle name
lastName string Yes tenant customer last name e.g. Doe
accountAddress string Yes account address of customer
customerMetaData object No meta data details of customer
tenantId string Yes tenant id of customer e.g. e1e9adb4-d3bd-4ba5-98b8-011c03a9d2b1
customNamespace string No custom namespace for tenant wallet user e.g. jonedoe
provider string No custom namespace provider e.g. ens
ulNamespace string No if a cutomster onboarded in tenant A and wants to onboard in tenant B, then ul namespace is required e.g. digit.sam.ul
maritalStatus string No marital status One of: married, unmarried e.g. ['married', 'unmarried']
dateOfBirth string Yes tenant customer date of birth e.g. 02-02-1997
email string Yes tenant email e.g. lorem@mygmail.com
gender string No please give every letter in CAPS One of: male, female, others, unknown e.g. unknown
phoneNumber string Yes phone number of tenant customer e.g. 123455656789
nationality string No Nationality of user
ip_address string Yes ip address
ssn string No ssn details
stateLicenseId string No state license id
tin string No tin number
address object Yes
lat_long object No
tax object No
governmentDocuments array[object] No
passport object No
others object No
selfieContent string Yes selfie of user
metroLocationDetails object No
additionalLatLong object No
additionalAddress object No
geoLocationDetails object No
metroAreaDetails object No
countryDetails object No
gidName string No GID Name
gidDOB string No GID DOB e.g. 2012-12-12
gidPhoto string No GID Photo
gidIdNumber string No GID ID Number
gidCountry string No GID Country
gidState string No GID State
gidIssueDate string No GID Issue Date e.g. 2012-12-12
gidExpirationDate string No GID Expiration Date e.g. 2012-12-12
gidAddress object No
gidGender string No GID Gender
bankAccount boolean No bank account e.g. false
bankAccountDetails object Yes

Example Request

{
  "firstName": "Jone",
  "middleName": "string",
  "lastName": "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": "unknown",
  "phoneNumber": "123455656789",
  "nationality": "string",
  "ip_address": "string",
  "ssn": "string",
  "stateLicenseId": "string",
  "tin": "string",
  "address": {
    "city": "Lorem",
    "state": "KY",
    "street": "Lorem",
    "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"
    }
  ],
  "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"
  },
  "gidName": "string",
  "gidDOB": "2012-12-12",
  "gidPhoto": "string",
  "gidIdNumber": "string",
  "gidCountry": "string",
  "gidState": "string",
  "gidIssueDate": "2012-12-12",
  "gidExpirationDate": "2012-12-12",
  "gidAddress": {
    "fullAddress": "Lorem Ipsum 30, 13612 Tallinn, Estonia"
  },
  "gidGender": "string",
  "bankAccount": "false",
  "bankAccountDetails": {
    "bankName": "US Bank",
    "accountHolderName": "John Doe",
    "bankType": "Savings"
  }
}

Response Codes

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",
      "street": "Lorem",
      "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",
    "domainNamespace": "allahabad.amitp.ul"
  },
  "message": "Customer's profile submitted for review"
}

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": "Custom namespace is 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"
    }
  ]
}

POST /tenant/customer/add-wallet

Tag: Tenant Customers
Summary: Add wallet to wallet user

Request Body

Field Type Required Description
customerAccountId string Yes id of wallet user e.g. e1e9adb4-d3bd-4ba5-98b8-011c03a9d2b1
tenantId string Yes tenant id in which wallet user is onboard e.g. e1e9adb4-d3bd-4ba5-98b8-011c03a9d2b1
customNamespace string Yes custom namespace for tenant wallet user e.g. jonedoe
provider string Yes custom namespace provider e.g. ens
accountAddress string Yes account address of wallet user e.g. walletUserAccountAddress

Example Request

{
  "customerAccountId": "e1e9adb4-d3bd-4ba5-98b8-011c03a9d2b1",
  "tenantId": "e1e9adb4-d3bd-4ba5-98b8-011c03a9d2b1",
  "customNamespace": "jonedoe",
  "provider": "ens",
  "accountAddress": "walletUserAccountAddress"
}

Response Codes

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/upgrade

Tag: Tenant Customers
Summary: update tenant customer | Modifier - Gurumoorthy

Request Body

Field Type Required Description
tenantId string Yes tenant id of customer e.g. e1e9adb4-d3bd-4ba5-98b8-011c03a9d2b1
customerAccountId string Yes customer account id of customer e.g. cbf2f17a-d0d1-42da-a6cc-cb28f99484ea
tax object No
tin string No Tin Id
stateLicenseId string No state license id
governmentDocuments array[string] No
gidName string No GID Name
gidDOB string No GID DOB e.g. 2012-12-12
gidPhoto string No GID Photo
gidIdNumber string No GID ID Number
gidCountry string No GID Country
gidState string No GID State
gidIssueDate string No GID Issue Date e.g. 2012-12-12
gidExpirationDate string No GID Expiration Date e.g. 2012-12-12
gidAddress object No
gidGender string No GID Gender
reRunComplianceCheck boolean No Re - Run Compliance Check
bankAccount boolean No bank account e.g. false
bankAccountDetails object Yes

Example Request

{
  "tenantId": "e1e9adb4-d3bd-4ba5-98b8-011c03a9d2b1",
  "customerAccountId": "cbf2f17a-d0d1-42da-a6cc-cb28f99484ea",
  "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"
    },
    {
      "description": "national id card of user",
      "fileName": "idCard.png",
      "side": "back",
      "type": "DriversLicense",
      "content": "string",
      "number": "123455",
      "issuedCountry": "INDIA",
      "expired": false,
      "validFromDate": "2012-12-12",
      "validTillDate": "2012-02-02"
    }
  ],
  "gidName": "string",
  "gidDOB": "2012-12-12",
  "gidPhoto": "string",
  "gidIdNumber": "string",
  "gidCountry": "string",
  "gidState": "string",
  "gidIssueDate": "2012-12-12",
  "gidExpirationDate": "2012-12-12",
  "gidAddress": {
    "fullAddress": "Lorem Ipsum 30, 13612 Tallinn, Estonia"
  },
  "gidGender": "string",
  "reRunComplianceCheck": true,
  "bankAccount": "false",
  "bankAccountDetails": {
    "bankName": "US Bank",
    "accountHolderName": "John Doe",
    "bankType": "Savings"
  }
}

Response Codes

Code Description
202 Success response
400 Error response

202 — Success response

{
  "type": "Success",
  "message": "Customer updated to silver Successfully"
}

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

PUT /tenant/customer/primary-wallet/{namespace}/{isPrimary}

Tag: Tenant Customers
Summary: TenantCustomerController_updatePrimaryWallet

Path Parameters

Parameter Type Required Description
namespace string Yes Namespace e.g. sans.ul
isPrimary boolean Yes true/false e.g. True

Response Codes

Code Description
200

PUT /tenant/customer/{customerId}

Tag: Tenant Customers
Summary: TenantCustomerController_updateCustomer

Request Body

Field Type Required Description
customNamespace string Yes Custom namespace of customer e.g. myNamespace

Example Request

{
  "customNamespace": "myNamespace"
}

Path Parameters

Parameter Type Required Description
customerId string Yes Customer Id e.g. 90a8983d-2aba-4a2c-b094-399f644ba1b1

Response Codes

Code Description
200

Verification APIs

POST /tenant/customer/get-auth-url

Tag: Verification APIs
Summary: Get VFP (Verification Fingerprint)

Request Body

Field Type Required Description
sourceIp string Yes Source Ip e.g. 127.0.0.1
finalTargetUrl string Yes Final Target Url e.g. https://google.com
mobileNumber string Yes Mobile Number e.g. 2001001686
dob string No DOB e.g. 01-01-1994
ssn string No ssn e.g. 1232

Example Request

{
  "sourceIp": "127.0.0.1",
  "finalTargetUrl": "https://google.com",
  "mobileNumber": "2001001686",
  "dob": "1994-01-01",
  "ssn": "1232"
}

Response Codes

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/validate-user

Tag: Verification APIs
Summary: validate user

Request Body

Field Type Required Description
vfp string Yes verification finger print of user
requestId string Yes Request Id

Example Request

{
  "vfp": "string",
  "requestId": "string"
}

Response Codes

Code Description
202 Success Response
400 Error response

202 — Success Response

{
  "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

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