Artha API
    • Introduction
    • Authentication
    • KYC/KYB Requirements
    • API Setup Guide
    • Customers
      • Create Customer
        POST
      • List Customers
        GET
      • Get Customer
        GET
      • Update Customer
        PATCH
    • Cards
      • Submit KYC/KYB Applicant
        POST
      • Issue Card
        POST
      • Cards List
        GET
      • Get Card
        GET
      • Get Sensitive Card Details
        GET
    • Card Operations
      • Activate Card
        POST
      • Freeze Card
        POST
      • Unfreeze Card
        POST
      • Cancel Card
        POST
      • Replace Card
        POST
      • Set / Reset Card PIN
        POST
      • Get Card Limits
        GET
      • Update Card Limits
        POST
    • Funding
      • Top Up Card
        POST
      • Get Card Balance
        GET
      • List Top-Up History
        GET
    • Transactions
      • List All Transactions
        GET
      • List Card Transactions
        GET
      • List Customer Transactions
        GET
      • Get Transaction
        GET
    • Products
      • List Products
      • Get Product
    • Utilities
      • Upload Documents
    • Webhook's
      • Webhooks

    KYC/KYB Requirements

    How It Works#

    Before submitting a KYC/KYB application, you must check the Product Details to determine which KYC requirements apply. The product response includes a list of required KYC fields that must be provided when submitting the applicant.
    šŸ“Œ
    Need to do KYC/KYB Based on Each Product.
    Step 1: Get product KYC requirements  →  GET /api/v1/Products/{productId}
    Step 2: Upload required documents     →  POST /api/v1/uploadfile
    Step 3: Submit KYC with file URLs     →  POST /api/v1/customers/{customerId}/products/{productId}/applicant

    Step 1 — Check KYC Requirements#

    GET /api/v1/Products/{productId}
    The response will contain a kyc_requirements array listing which requirement types are needed for that product. Use this to determine which fields and documents you need to collect.

    Step 2 — Upload Documents#

    Before submitting KYC, upload all required documents (ID images, selfies, signatures, etc.) using the file upload API.
    POST /api/v1/uploadfile
    Supports images (JPEG, PNG) and PDFs
    Files are stored in Azure Blob Storage
    Returns a file URL for each uploaded file
    Response (200):
    {
      "data": [
        {
          "file_name": "passport_front.jpg",
          "file_url": "https://storage.blob.core.windows.net/docs/abc123.jpg"
        }
      ]
    }
    āš ļø Important: Save the returned file_url values — you will pass these URLs as field values (e.g., frontDoc, backDoc, selfie, photo) in Step 3.

    Step 3 — Submit KYC Application#

    Pass the uploaded file URLs along with the required KYC fields:
    POST /api/v1/customers/{customerId}/products/{productId}/applicant
    ParameterInTypeRequiredDescription
    customerIdpathuuidāœ…The customer identifier
    productIdpathuuidāœ…The product identifier
    bodybodyJSONāœ…KYC fields based on product requirements
    āš ļø Only send the fields that match the KYC requirements returned by the Product Details API. Requirements vary by product.

    Individual(KYC) Requirement Types#

    RequirementRequired Fields
    PassportOnlydocType, docId, frontDoc šŸ“Ž, backDoc šŸ“Ž
    PassportdocType, docId, frontDoc šŸ“Ž, backDoc šŸ“Ž, docExpireDate, docNeverExpire
    FullNameOnlyfirstName, lastName
    FullNamefirstName, lastName, gender, dob
    Commsemail, mobileCode, mobile
    EmergencyContactemergencyContact
    Addressaddress
    FullAddressaddress, town, city, state, zipCode, countryId, countryIsoThree
    HandedPassporthandHoldIdPhoto šŸ“Ž
    Facephoto šŸ“Ž
    SignsignImage šŸ“Ž
    Biomatricbiomatric šŸ“Ž
    IssueDatedocIssueDate
    IpAddressipAddress
    FinancialProfileoccupation, accountPurpose, annualSalary, expectedMonthlyVolume
    IdTypesdocType, docId, frontDoc šŸ“Ž, backDoc šŸ“Ž, docExpireDate, docNeverExpire
    šŸ“Ž = File field. Upload the file first via POST /api/v1/uploadfile, then pass the returned file_url as the value.

    Business(KYB) Requirement Types#

    Company Information#

    RequirementRequired Fields
    CompanyInformationcompanyName, type, description, industry, registrationNumber, taxId, website
    CompanyDocumentscertificateOfIncorporation šŸ“Ž, shareholderRegistry šŸ“Ž
    CompanyAddressline1, city, postalCode, country

    Personal Information (Primary Applicant)#

    RequirementRequired Fields
    PersonalInformationfirstName, lastName, dateOfBirth, email, phoneNumber, phoneCode
    PersonalInformationAddressline1, city, postalCode, country
    PersonalIdentificationidType, idNumber, country, docExpireDate, frontDocument šŸ“Ž, backDocument šŸ“Ž

    UBOs (Ultimate Beneficial Owners)#

    RequirementRequired Fields
    UBOfirstName, lastName, dateOfBirth, country, email, phoneCode, phoneNumber, shareHolderPercentage
    UBOAddressline1, city, postalCode, country
    UBOIdentificationidType, idNumber, frontDocument šŸ“Ž, backDocument šŸ“Ž
    UBOSelfieselfie šŸ“Ž

    Representatives#

    RequirementRequired Fields
    RepresentativesfirstName, lastName, dateOfBirth, country, email, phoneCode, phoneNumber, shareHolderPercentage
    RepresentativeAddressline1, city, postalCode, country
    RepresentativeIdentificationidType, idNumber, frontDocument šŸ“Ž, backDocument šŸ“Ž
    RepresentativeSelfieselfie šŸ“Ž

    Directors#

    RequirementRequired Fields
    DirectorsfirstName, lastName, dateOfBirth, country, email, phoneCode, phoneNumber, shareHolderPercentage
    DirectorAddressline1, city, postalCode, country
    DirectorIdentificationidType, idNumber, frontDocument šŸ“Ž, backDocument šŸ“Ž
    DirectorSelfieselfie šŸ“Ž

    Example 1: Individual KYC Submission#

    Assume the product requires: FullName, Comms, FullAddress, Passport, Face, Sign, FinancialProfile
    Step 1 — Upload documents:
    POST /api/v1/uploadfile
    
    → passport_front.jpg   → "https://storage.blob.../passport_front.jpg"
    → passport_back.jpg    → "https://storage.blob.../passport_back.jpg"
    → selfie.jpg           → "https://storage.blob.../selfie.jpg"
    → signature.png        → "https://storage.blob.../signature.png"
    Step 2 — Submit KYC:
    POST /api/v1/customers/{customerId}/products/{productId}/applicant
    
    {
      "kycDetails": {
        "customerId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
        "firstName": "Jane",
        "lastName": "Doe",
        "gender": "female",
        "dob": "1990-06-15",
        "email": "jane@example.com",
        "mobileCode": "+44",
        "mobile": "7700900000",
        "addressLine1": "10 Downing Street",
        "city": "London",
        "state": "England",
        "postalCode": "SW1A 2AA",
        "country": "GB",
        "town": "Westminster",
        "idType": "passport",
        "idNumber": "AB1234567",
        "profilePicFront": "https://storage.blob.../passport_front.jpg",
        "profilePicBack": "https://storage.blob.../passport_back.jpg",
        "docExpiryDate": "2030-01-01",
        "docIssueDate": "2020-01-01",
        "faceImage": "https://storage.blob.../selfie.jpg",
        "signature": "https://storage.blob.../signature.png",
        "occupation": "software_engineer",
        "accountPurpose": "personal_spending",
        "annualSalary": 75000,
        "expectedMonthlyVolume": 5000,
        "ipAddress": "192.168.1.1"
      }
    }

    Example 2: Business KYB Submission#

    Assume the product requires: CompanyInformation, CompanyDocuments, CompanyAddress, PersonalInformation, PersonalIdentification, PersonalInformationAddress, UBO, UBOAddress, UBOIdentification, UBOSelfie, Representatives, RepresentativeAddress, RepresentativeIdentification, RepresentativeSelfie, Directors, DirectorAddress, DirectorIdentification, DirectorSelfie
    Step 1 — Upload documents:
    POST /api/v1/uploadfile
    
    → certificate_of_inc.pdf     → "https://storage.blob.../certificate.pdf"
    → shareholder_registry.pdf   → "https://storage.blob.../shareholders.pdf"
    → personal_id_front.jpg      → "https://storage.blob.../personal_front.jpg"
    → personal_id_back.jpg       → "https://storage.blob.../personal_back.jpg"
    → ubo_id_front.jpg           → "https://storage.blob.../ubo_front.jpg"
    → ubo_id_back.jpg            → "https://storage.blob.../ubo_back.jpg"
    → ubo_selfie.jpg             → "https://storage.blob.../ubo_selfie.jpg"
    → rep_id_front.jpg            → "https://storage.blob.../rep_front.jpg"
    → rep_id_back.jpg             → "https://storage.blob.../rep_back.jpg"
    → rep_selfie.jpg              → "https://storage.blob.../rep_selfie.jpg"
    → dir_id_front.jpg            → "https://storage.blob.../dir_front.jpg"
    → dir_id_back.jpg             → "https://storage.blob.../dir_back.jpg"
    → dir_selfie.jpg              → "https://storage.blob.../dir_selfie.jpg"
    Step 2 — Submit KYB:
    POST /api/v1/customers/{customerId}/products/{productId}/applicant
    
    {
      "kybDetails": {
        "company": {
          "companyName": "Acme Corp Ltd",
          "type": "limited_company",
          "description": "Fintech payment solutions provider",
          "industry": "financial_services",
          "registrationNumber": "12345678",
          "taxId": "GB123456789",
          "website": "https://acmecorp.com",
          "certificateofincorporation": "https://storage.blob.../certificate.pdf",
          "shareholderregistry": "https://storage.blob.../shareholders.pdf",
          "companyAddress": {
            "addressType": "registered",
            "line1": "456 Business Avenue",
            "line2": "Floor 3",
            "city": "London",
            "postalCode": "EC1A 1BB",
            "country": "GB",
            "town": "City of London"
          }
        },
        "personaldetails": {
          "firstName": "Jane",
          "lastName": "Smith",
          "dateOfBirth": "1985-03-20",
          "country": "GB",
          "email": "jane.smith@acmecorp.com",
          "phoneCode": "+44",
          "phoneNumber": "7700900000",
          "identification": {
            "idType": "passport",
            "idNumber": "CD7654321",
            "countryOfIssue": "GB",
            "docExpireDate": "2029-06-15",
            "docIssueDate": "2019-06-15",
            "frontDocument": "https://storage.blob.../personal_front.jpg",
            "backDocument": "https://storage.blob.../personal_back.jpg"
          },
          "personalInfoAddress": {
            "line1": "789 Home Lane",
            "city": "London",
            "state": "England",
            "postalCode": "SW1A 1AA",
            "country": "GB"
          }
        },
        "ubos": [
          {
            "personDetails": {
              "firstName": "John",
              "lastName": "Doe",
              "dateOfBirth": "1980-01-10",
              "country": "GB",
              "email": "john.doe@acmecorp.com",
              "phoneCode": "+44",
              "phoneNumber": "7700800000",
              "shareHolderPercentage": "60",
              "gender": "male"
            },
            "identification": {
              "idType": "national_id",
              "idNumber": "NI12345678",
              "countryOfIssue": "GB",
              "docExpireDate": "2028-12-01",
              "frontDocument": "https://storage.blob.../ubo_front.jpg",
              "backDocument": "https://storage.blob.../ubo_back.jpg"
            },
            "selfie": "https://storage.blob.../ubo_selfie.jpg",
            "ubosAddress": {
              "line1": "100 Owner Street",
              "city": "Manchester",
              "postalCode": "M1 1AA",
              "country": "GB"
            }
          }
        ],
        "representatives": [
          {
            "personDetails": {
              "firstName": "Sarah",
              "lastName": "Connor",
              "dateOfBirth": "1988-07-25",
              "country": "GB",
              "email": "sarah@acmecorp.com",
              "phoneCode": "+44",
              "phoneNumber": "7700700000",
              "shareHolderPercentage": "0"
            },
            "identification": {
              "idType": "passport",
              "idNumber": "EF9876543",
              "countryOfIssue": "GB",
              "docExpireDate": "2031-03-10",
              "frontDocument": "https://storage.blob.../rep_front.jpg",
              "backDocument": "https://storage.blob.../rep_back.jpg"
            },
            "selfie": "https://storage.blob.../rep_selfie.jpg",
            "representativesAddress": {
              "line1": "50 Rep Road",
              "city": "Birmingham",
              "postalCode": "B1 1AA",
              "country": "GB"
            }
          }
        ],
        "directors": [
          {
            "personDetails": {
              "firstName": "Mike",
              "lastName": "Johnson",
              "dateOfBirth": "1975-11-30",
              "country": "GB",
              "email": "mike@acmecorp.com",
              "phoneCode": "+44",
              "phoneNumber": "7700600000",
              "shareHolderPercentage": "40"
            },
            "identification": {
              "idType": "driving_license",
              "idNumber": "DL98765432",
              "countryOfIssue": "GB",
              "docExpireDate": "2027-08-20",
              "frontDocument": "https://storage.blob.../dir_front.jpg",
              "backDocument": "https://storage.blob.../dir_back.jpg"
            },
            "selfie": "https://storage.blob.../dir_selfie.jpg",
            "directorAddress": {
              "line1": "25 Director Lane",
              "city": "Leeds",
              "postalCode": "LS1 1AA",
              "country": "GB"
            }
          }
        ]
      }
    }

    Responses#

    StatusMeaning
    200KYC/KYB submitted successfully
    404Customer not found
    422Validation error — missing or invalid fields
    Modified atĀ 2026-02-18 17:28:37
    Previous
    Authentication
    Next
    API Setup Guide
    Built with