Skip to content

List Card Headers

Returns the virtual card headers your account can apply for. A "card header" is defined by BIN + brand + region + business scene.

Endpoint

ItemValue
MethodPOST
Path/api/v1/openapi/card_headers/list
AuthHMAC (4 signing headers)
IdempotencyNot required
Rate limit600 / min

Request Fields

FieldTypeRequiredDescription
pageintNoDefault 1
page_sizeintNoDefault 20, max 100
card_brandstringNoBrand code, e.g. VISA / MASTER
card_areastringNoRegion code, e.g. US
currencystringNoCurrency filter, e.g. USD

Don't send card_type

This endpoint only returns virtual card headers — card_type is not needed.

Listed = applicable (account-manager-controlled headers are filtered per account)

Some headers are handed over to account managers, who open them per customer. Such a header appears in this list only if your account is bound to an active account manager who has opened it for you (a per-account setting beats the manager-wide one); otherwise it is filtered server-side and not counted in total. Calling /card_configs/list, /card/first_deposit/preview or /card/apply with a header you cannot apply for returns 400 account_manager_bind_required / account_manager_unavailable / account_manager_open_disabled. Do not reuse header IDs seen elsewhere — always take them from this endpoint.

Example Request

json
{
  "page": 1,
  "page_size": 20,
  "card_brand": "VISA"
}

Response Fields

Each item in data.list[]:

FieldTypeDescription
header_idstringhdr_<id> format (used in apply)
card_binstring6-digit BIN
card_typestringLowercase: virtual_l / virtual_p / virtual_v / virtual_r / virtual_g / virtual_a (informational only — not sent on apply)
card_brandstringBrand display name
card_areastringRegion display name
business_scenestringBusiness scene
descriptionobjecti18n: {"zh-CN": "...", "en-US": "..."}
featuresstring[]Feature tags (e.g. ["3DS", "EMV"])
require_phoneboolWhether phone / phone_code are required when applying (effective value, same rules the apply validation uses — see Integration tips)
require_emailboolWhether email is required when applying (effective value, same rules; always true for virtual_a)
kyc_requirementobjectPreview of the platform KYC requirement for opening cards on this header (card type + header merged); see kyc_requirement below. The authoritative value is the per-package kyc_requirement on the package list (full three-level merge)

data also contains pagination fields (total / page / page_size / total_pages / has_next / has_prev).

kyc_requirement

FieldTypeDescription
require_kycboolWhether the end account must complete platform identity verification; when true and the account does not meet the requirement, /card/apply returns 400 kyc_required
kyc_typestringRequired verification type: personal / corporate
kyc_levelstringRequired verification level: l1 / l2 / l3

When require_kyc=false, kyc_type / kyc_level are reference defaults only — do not surface any verification requirement to users based on them.

Example Response

json
{
  "code": 200,
  "message": "OK",
  "data": {
    "list": [
      {
        "header_id": "hdr_5",
        "card_bin": "424242",
        "card_type": "virtual_v",
        "card_brand": "VISA",
        "card_area": "United States",
        "business_scene": "Cross-border spending",
        "description": {
          "zh-CN": "适合电商订阅",
          "en-US": "For e-commerce subscriptions"
        },
        "features": ["3DS", "EMV"],
        "require_phone": false,
        "require_email": true,
        "kyc_requirement": {
          "require_kyc": false,
          "kyc_type": "personal",
          "kyc_level": "l1"
        }
      }
    ],
    "total": 12,
    "page": 1,
    "page_size": 20,
    "total_pages": 1,
    "has_next": false,
    "has_prev": false
  }
}

Common Errors

HTTPmessage_keyDescription
401openapi_invalid_credentialsAuth failure
500openapi_list_card_headers_failedServer error

Integration Tips

  • Don't hardcode header_id. Always call this endpoint when integrating a new account.
  • Only headers returned here can be applied for. Account-manager-controlled headers appear once your account manager opens them for you and disappear if the permission is revoked, so refresh this list before applying rather than caching IDs long-term. If a header you expect is missing, ask your account manager to open it for your account.
  • The description i18n dict is server-rendered — no client-side translation needed.
  • require_phone / require_email determine whether you must include those fields when applying.

Released under MIT-equivalent terms.