Check feature eligibility

See what a customer still needs before you activate cards for them. An eligible value of false is normal before activation.

Check what a customer still needs before you activate the card feature (virtual_cards). The eligibility check shows which requirements the customer meets and which ones remain unmet.

A money example. Ada will spend about 300 USD a month on her card. The check shows her KYC is completed and lists annual_remuneration and estimated_monthly_limit as pending. You send 24000 and 300 at activation.

Check eligibility for a feature

Use the Check feature eligibility endpoint to check whether a customer can activate a feature. Send customer_id and feature_id in the request body. The endpoint only reads data, but it is a POST, so it needs an Idempotency-Key. Send a new key for every check, or you get the stored result of the earlier check:

curl --request POST \
     --url https://api.gravv.xyz/v1/risk/features/eligibility \
     --header 'Api-Key: <API_KEY>' \
     --header 'Idempotency-Key: 6cdc7e56-a82b-4877-a00a-37a0c86ad823' \
     --header 'Content-Type: application/json' \
     --data '
{
  "customer_id": "5b0f6c1e-2a8f-4c39-9d0e-0c7e3b9a1f42",
  "feature_id": "virtual_cards"
}
'

Understanding the response

For virtual_cards, eligible stays false until you activate. You send the provider_data fields in the activation request, and Gravv does not store them before activation. Treat each pending provider_data item as a field to send to Activate feature. Once kyc_status is fulfilled, the customer is ready for activation.

The response shows eligible: false and lists the unmet requirements under requirements_pending:

{
  "data": {
    "customer_id": "5b0f6c1e-2a8f-4c39-9d0e-0c7e3b9a1f42",
    "eligible": false,
    "feature_id": "virtual_cards",
    "requirements_fulfilled": [
      {
        "type": "kyc_status",
        "value": "completed",
        "fulfilled_at": "2025-12-16T10:52:29Z"
      }
    ],
    "requirements_pending": [
      {
        "type": "provider_data",
        "required": "annual_remuneration",
        "action": {
          "type": "provider_data",
          "data_key": "annual_remuneration"
        }
      },
      {
        "type": "provider_data",
        "required": "estimated_monthly_limit",
        "action": {
          "type": "provider_data",
          "data_key": "estimated_monthly_limit"
        }
      },
      {
        "type": "provider_data",
        "required": "ip_address",
        "action": {
          "type": "provider_data",
          "data_key": "ip_address"
        }
      }
    ]
  },
  "error": null
}

In this example, the customer has completed KYC, and you send the provider data at activation. Gravv fills in the ip_address item at activation from the address your request comes from. Pending items carry type, required and action. There is no provider field.

If kyc_status is in requirements_pending, verify the customer first (Verify a cardholder).

Every error from this endpoint is HTTP 400 Failed to check feature eligibility, whether the feature_id is unknown or the customer has no KYC record. The exception is an invalid or unknown customer_id, which returns its own message.

Was this page helpful?