Skip to navigation

Card API quickstart

Run the full card flow end to end
View as Markdown

This walks through the whole flow against the sandbox (https://public-api.demo.alphax.asia). Set your key and company once:

export ALPHAX_KEY="<YOUR_API_KEY>"
export BASE="https://public-api.demo.alphax.asia/v1"

1. Onboard a company

curl -X POST "$BASE/companies" \
-H "X-API-Key: $ALPHAX_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Acme Ltd",
"countryCode": "HK",
"directorName": "Jane Director",
"directorEmail": "jane@acme.example",
"directorPhone": "+85251234567",
"addressLine1": "10 Queens Road",
"addressLine2": "Central",
"city": "Hong Kong",
"state": "Hong Kong",
"postalCode": "999077",
"products": ["Card"]
}'

The response returns the company id — export it as CID and send it as X-Company-Id on the calls below.

export CID="<company id from the response>"

2. Submit KYB

industry is a NAICS code, not free text.

curl -X POST "$BASE/kyb-profiles" \
-H "X-API-Key: $ALPHAX_KEY" -H "X-Company-Id: $CID" \
-H "Content-Type: application/json" \
-d '{
"companyName": "Acme Ltd",
"industry": "541511",
"registrationCountry": "HK",
"registrationNumber": "12345678",
"website": "https://acme.example",
"uboFirstName": "Jane",
"uboLastName": "Owner",
"uboGender": "FEMALE",
"uboCountryCode": "HK",
"uboIdType": "PASSPORT",
"uboIdNumber": "P1234567",
"uboDob": "1990-01-15"
}'

3. Create a wallet and open a deposit address

curl -X POST "$BASE/wallets" \
-H "X-API-Key: $ALPHAX_KEY" -H "X-Company-Id: $CID" \
-H "Content-Type: application/json" \
-d '{ "currency": "USDC" }'
# Open an address to deposit into (see the sandbox note below for the chain).
curl -X POST "$BASE/wallets/<WALLET_ID>/addresses" \
-H "X-API-Key: $ALPHAX_KEY" -H "X-Company-Id: $CID" \
-H "Content-Type: application/json" \
-d '{ "chain": "ETH" }'

Funding on sandbox uses testnet assets — there is no mock-balance endpoint. For USDC, deposits are only enabled on Ethereum Sepolia (contract 0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238). Open an ETH address, get test USDC from a faucet such as faucet.circle.com, and send it to that address. We credit the wallet and fire wallet.deposit_received.

Confirm the balance landed:

curl "$BASE/wallets/<WALLET_ID>" \
-H "X-API-Key: $ALPHAX_KEY" -H "X-Company-Id: $CID"

4. Top up the spending account

curl -X POST "$BASE/card-spending-account/topups" \
-H "X-API-Key: $ALPHAX_KEY" -H "X-Company-Id: $CID" \
-H "Content-Type: application/json" \
-d '{ "walletCurrency": "USDC", "amount": 100 }'

Check the spending balance any time:

curl "$BASE/card-spending-account" \
-H "X-API-Key: $ALPHAX_KEY" -H "X-Company-Id: $CID"

5. Create a card holder and a card

curl -X POST "$BASE/card-holders" \
-H "X-API-Key: $ALPHAX_KEY" -H "X-Company-Id: $CID" \
-H "Content-Type: application/json" \
-d '{
"firstName": "John", "lastName": "Holder",
"email": "john@acme.example", "dateOfBirth": "1992-05-20",
"phone": "+14155550123",
"addressLine1": "1 Market St", "addressLine2": "Suite 200",
"city": "San Francisco", "state": "CA",
"countryCode": "US", "postalCode": "94105"
}'
# Pick a BIN the company can issue on.
curl "$BASE/card-bins" -H "X-API-Key: $ALPHAX_KEY" -H "X-Company-Id: $CID"
curl -X POST "$BASE/cards" \
-H "X-API-Key: $ALPHAX_KEY" -H "X-Company-Id: $CID" \
-H "Content-Type: application/json" \
-d '{
"cardHolderId": "<CARD_HOLDER_ID>",
"name": "Marketing Card",
"category": "MarketingExpenses",
"bin": "<BIN>"
}'

6. Reveal the card

POST /v1/cards/{id}/details returns a short-lived token; render it with the card widget to show the PAN, expiry, and CVV.

curl -X POST "$BASE/cards/<CARD_ID>/details" \
-H "X-API-Key: $ALPHAX_KEY" -H "X-Company-Id: $CID"