Skip to content

Know your customer (KYC)

Know Your Customer (KYC) verification confirms a customer's identity before creating an account or activating certain features. Gravv requires KYC to comply with financial regulations and prevent fraud.

You can submit documents for verification using two methods.

Submit through a dedicated interface

Use the Start KYC verification endpoint to upload identity documents (IDs) through a dedicated interface. The endpoint requires the unique identity (ID) of the customer to make the request:

curl --request POST \
     --url https://api.gravv.xyz/v1/risk/start-kyc \
     --header 'Api-Key: <Api Key>' \
     --header 'Idempotency-Key: order_789_attempt_1' \
     --header 'accept: application/json' \
     --header 'content-type: application/json' \
     --data '
{
  "customer_id": "c239895a-0436-4287-a37a-c2664f68d187"
}
'

You’ll receive a response that includes the verification status and a web_url link. Share this link with the end user so they can upload their ID documents:

{
  "data": {
    "review_status": "pending",
    "status": "success",
    "web_url": "https://in.kyc.com/websdk/p/Cz3WKRuxvlmuS2kp"
  },
  "error": "null"
}

Submit through an API endpoint

You can submit IDs for verification by Base64-encoding them and using the Upload document and Initiate server-to-server verification endpoints. For more information, see Know Your Customer (KYC).

Upload documents

First, upload each required document using the Upload document endpoint. Encode each document in Base64 and provide it as the value of the content field.

curl --request POST \
     --url https://api.gravv.xyz/v1/risk/upload-document \
     --header 'Api-Key: <Api Key>' \
     --header 'Idempotency-Key: passport_upload_001' \
     --header 'content-type: application/json' \
     --data '
{
  "customer_id": "aabe0a33-6716-42e2-bbca-7abf1a8bd91c",
  "metadata": {
    "idDocType": "passport",
    "idDocSubType": "front_side",
    "country": "usa",
    "firstName": "John",
    "lastName": "Doe",
    "number": "P123456789",
    "issuedDate": "2020-01-15",
    "validUntil": "2030-01-15",
    "dob": "1990-05-20",
    "placeOfBirth": "New York, NY"
  },
  "content": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAY...",
  "filename": "passport_front.jpg",
  "return_doc_warnings": true
}
'

The response confirms upload and may include quality warnings:

{
  "data": {
    "document_id": "550e8400-e29b-41d4-a716-446655440000",
    "status": "uploaded",
    "message": "Document uploaded successfully",
    "warnings": [
      {
        "code": "low_quality",
        "message": "Document image quality is below recommended threshold"
      }
    ]
  },
  "error": null
}

Each document upload requires specific metadata fields:

Field Required For Description
idDocType All documents Document type: passport, id_card, drivers_license, selfie, or registration_certificate
idDocSubType All documents Document side: front_side or back_side
country All documents Issuing country 3-letter ISO code, such as usa, gbr, nga
firstName All documents First name on document
lastName All documents Last name on document
number ID documents Document identification number
issuedDate ID documents Issue date in YYYY-MM-DD format
validUntil ID documents Expiration date in YYYY-MM-DD format
dob ID documents Date of birth in YYYY-MM-DD format
placeOfBirth ID documents (optional) Place of birth as shown on document
middleName All documents (optional) Middle name on document

Initiate verification

After uploading all required documents, call the Initiate server-to-server verification endpoint to complete the intermediate KYC process:

curl --request POST \
     --url https://api.gravv.xyz/v1/risk/start-kyc-s2s \
     --header 'Api-Key: <Api Key>' \
     --header 'Idempotency-Key: kyc_initiate_001' \
     --header 'content-type: application/json' \
     --data '
{
  "customer_id": "aabe0a33-6716-42e2-bbca-7abf1a8bd91c"
}
'

The endpoint returns one of three possible outcomes:

  • Full success: all documents uploaded successfully, and verification started:
{
  "data": {
    "review_status": "pending",
    "status": "success",
    "applicant_id": "507f1f77bcf86cd799439011"
  },
  "error": null
}

If you get this response, then wait for the webhook notifications about verification status changes.

  • Missing documents: the required documents haven't been uploaded yet:
{
  "data": null,
  "error": {
    "code": "missing_documents",
    "message": "Required documents have not been uploaded for this customer",
    "details": {
      "missing_documents": ["selfie"]
    }
  }
}

If you get this response, then upload the missing documents listed in the error response and call the Initiate KYC verification endpoint again.

  • Partial success: some documents failed to upload automatically:
{
  "data": {
    "review_status": "partial_success",
    "status": "partial_success",
    "applicant_id": "507f1f77bcf86cd799439011",
    "failed_documents": [
      {
        "doc_type": "selfie",
        "reason": "Upload failed"
      }
    ]
  },
  "error": null
}

If you get this response, then retry uploading the failed documents and call the Initiate KYC verification endpoint again.

Required documents

For individual customers, upload one of the following government-issued IDs:

  • Passport
  • National ID card
  • Driver's license

For business customers, upload the business’s registration certificate.