Appearance
Apply for platform cards
Submit a card application before issuing cards. Individual applicants complete KYC; companies complete KYB and verification for their beneficial owners. An approved identity can receive additional cards without repeating verification.
These operations use platform user authentication. To onboard your own customers as a partner, use partner onboarding.
Individual application
Individual applications collect personal identity information and submit it to Agio for KYC/AML review.
Submit an application
graphql
mutation CreateCardApplication($input: CreateCardApplicationInput!) {
createCardApplication(input: $input) {
success
applicantId
cardApplicationId
cardApplicationExternalId
applicationStatus
applicationCompletionUrl
shareToken
error
}
}json
{
"input": {
"walletAddress": "0x1234...abcd",
"occupation": "Software Developers",
"annualSalary": "100000_TO_150000",
"accountPurpose": "PERSONAL_SPENDING",
"expectedMonthlyVolume": "1000_TO_5000",
"isTermsOfServiceAccepted": true,
"cardNickname": "My Card",
"requestedLimitAmount": 25000,
"requestedLimitFrequency": "30 day"
}
}Input fields
| Field | Type | Description |
|---|---|---|
walletAddress | String! | EVM wallet address (0x...). Required for this platform operation. |
occupation | String! | SOC code ("15-1252") or description ("Software Developers") — see Occupation Codes |
annualSalary | String! | Salary range (e.g., "100000_TO_150000") |
accountPurpose | String! | Purpose of the account (e.g., "PERSONAL_SPENDING", "BUSINESS_EXPENSES") |
expectedMonthlyVolume | String! | Expected monthly volume range (e.g., "1000_TO_5000") |
isTermsOfServiceAccepted | Boolean! | Must be true to proceed |
cardNickname | String | Optional display name for the first card |
requestedLimitAmount | Int | Desired credit limit in dollars (e.g., 25000) |
requestedLimitFrequency | String | Limit period (e.g., "30 day", "7 day") |
sessionId | String | Session ID from generateEncryptionKeys (required if setting PIN at application) |
encryptedPin | String | Pre-encrypted PIN to stage for the first card |
Response
| Field | Type | Description |
|---|---|---|
success | Boolean | Whether the application was accepted by the issuer |
applicantId | String | Card user UUID |
cardApplicationId | Int | Numeric application ID. Pass this to createCard once the application is approved |
cardApplicationExternalId | String | Issuer-side application UUID |
applicationStatus | String | UPPERCASE status string — e.g. PENDING, APPROVED, NEEDSVERIFICATION, DENIED. See Application Status Values |
applicationCompletionUrl | String | Signed URL for the hosted verification page. Open it exactly as returned — see Hosted verification links |
shareToken | String | Verification share token, when the share-token flow is enabled |
walletAddress | String | The collateral wallet for this application — echoes the supplied wallet address |
error | String | Human-readable failure reason (when success is false) |
errorCode | String | Machine-readable failure code (when success is false) — pair with error for handling |
If the response includes an applicationCompletionUrl, redirect the user to that URL to complete additional verification steps (e.g., document upload, selfie).
Hosted verification links
The hosted verification page is reached through a signed URL. The signature authorizes the session, and the page rejects a request that arrives without it.
Two rules follow:
- Open the URL exactly as Agio returns it. Do not rebuild it from its parts, drop query parameters, or re-encode it.
- Never construct the URL yourself from a card user id. A hand-built link carries no signature and will fail.
Corporate application
Corporate applications onboard a company and its beneficial owners. The process triggers KYB for the company entity and individual KYC for each Ultimate Beneficial Owner (UBO).
Submit a corporate application
graphql
mutation CreateCardCorporateApplication($input: CreateCardCorporateApplicationInput!) {
createCardCorporateApplication(input: $input) {
success
companyId
name
applicationStatus
error
}
}json
{
"input": {
"name": "Acme Corp",
"address": {
"line1": "123 Business Ave",
"city": "Miami",
"region": "FL",
"postalCode": "33101",
"countryCode": "US"
},
"entity": {
"name": "Acme Corporation",
"description": "Software development",
"industry": "541512",
"registrationNumber": "12345678",
"taxId": "12-3456789",
"website": "https://acme.com",
"type": "LLC",
"expectedSpend": "10000_TO_50000"
},
"initialUser": {
"firstName": "John",
"lastName": "Doe",
"birthDate": "1980-01-15",
"nationalId": "123456789",
"countryOfIssue": "US",
"email": "[email protected]",
"address": {
"line1": "123 Main St",
"city": "Miami",
"region": "FL",
"postalCode": "33101",
"countryCode": "US"
},
"isTermsOfServiceAccepted": true,
"walletAddress": "0x1234...abcd"
},
"representatives": [
{
"firstName": "Jane",
"lastName": "Smith",
"birthDate": "1985-06-20",
"nationalId": "987654321",
"countryOfIssue": "US",
"email": "[email protected]",
"address": {
"line1": "456 Oak Ave",
"city": "Miami",
"region": "FL",
"postalCode": "33101",
"countryCode": "US"
}
}
],
"ultimateBeneficialOwners": [
{
"firstName": "John",
"lastName": "Doe",
"birthDate": "1980-01-15",
"nationalId": "123456789",
"countryOfIssue": "US",
"email": "[email protected]",
"address": {
"line1": "123 Main St",
"city": "Miami",
"region": "FL",
"postalCode": "33101",
"countryCode": "US"
}
}
],
"sourceKey": "your-app-key"
}
}Key corporate fields
| Section | Fields | Notes |
|---|---|---|
| Entity | name, description, industry (NAICS), registrationNumber, taxId, website, type, expectedSpend | website is required by Agio Card API |
| Initial User | Personal details + walletAddress + isTermsOfServiceAccepted | First user/admin of the company |
| Representatives | Array of persons authorized to act on behalf of the company | At least one required |
| UBOs | Array of persons with 25%+ ownership | Each triggers individual KYC |
After corporate approval, add users to the company, then issue cards to each user.
Application status values
applicationStatus is returned as an UPPERCASE string. The canonical set:
| Status | Description | Action |
|---|---|---|
APPROVED / ACTIVE | Verified. Cards can be issued. createCard accepts both values. | Proceed to createCard |
PENDING | Under review. No action required. | Wait for a final decision |
NEEDSINFORMATION | Additional information required from the applicant. | Follow the requested verification steps |
NEEDSVERIFICATION | Identity verification pending. | Redirect user to applicationCompletionUrl |
MANUALREVIEW | Flagged for manual review by Agio compliance. | Wait for resolution |
DENIED | Application denied. | Display denial to user |
LOCKED | Account locked by compliance. | Contact Agio support |
CANCELED | Application canceled. | Resubmit if needed |
Monitoring application status
Partner integrations can check application status and receive application webhooks. Follow that API's authentication and onboarding flow when building a customer integration.