Documentation Index
Fetch the complete documentation index at: https://developers.squads.so/llms.txt
Use this file to discover all available pages before exploring further.
You’ll learn how to set up your environment, make your first API call, and understand the basic concepts.
Prerequisites
Authentication
All Grid API requests require two headers:
The environment you’re using. Can be sandbox or production.
Bearer token authentication header. Format: Bearer YOUR_API_KEY
Basic Flow
Here’s a typical flow for using the Grid API:
- Create a smart account
- Request KYC verification (for fiat features)
- Create virtual accounts (for fiat features)
- Create and manage payment intents
1. Create a Smart Account
First, create a smart account with specific policies and authorities:
curl -X POST https://grid.squads.xyz/api/v0/grid/smart-accounts \
-H "x-grid-environment: sandbox" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"policies": {
"authorities": [
{
"address": "0x...",
"permissions": ["CAN_INITIATE", "CAN_VOTE", "CAN_EXECUTE"]
}
],
"threshold": 1
}
}'
The response will include your smart account details:
{
"data": {
"smart_account_address": "0x...",
"grid_user_id": "uuid",
"policies": {
"authorities": [
{
"address": "0x...",
"permissions": ["CAN_INITIATE", "CAN_VOTE", "CAN_EXECUTE"]
}
],
"admin_address": null,
"threshold": 1,
"time_lock": null
},
"created_at": "2025-05-28T19:20:28.425823409Z"
},
"metadata": {
"timestamp": "2025-05-28T19:20:28.425823819Z"
}
}
Make sure to save the grid_user_id from the response. This is the main
identifier for your smart account and will be required for subsequent API
calls.
2. Request KYC Verification
To enable banking features, request a KYC verification link:
The X-Idempotency-Key header is required on this endpoint, to prevent
multiple kyc processes from being initiated.
curl -X POST https://grid.squads.xyz/api/v0/grid/smart-accounts/{smart_account_address}/kyc \
-H "x-grid-environment: sandbox" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "X-Idempotency-Key: <uuid>" \
-H "Content-Type: application/json" \
-d '{
"grid_user_id": "uuid",
"type": "individual",
"email": "user@example.com",
"full_name": "John Doe",
"endorsements": ["endorsement1", "endorsement2"]
}'
The response includes a KYC verification as well as a Terms of Service URL:
{
"data": {
"id": "uuid",
"customer_id": "uuid",
"kyc_link": "https://kyc-verification-url",
"created_at": "2024-03-20T12:00:00Z"
},
"metadata": {
"timestamp": "2024-03-20T12:00:00Z",
"request_id": "req_123456789"
}
}
3. Check KYC Status
You can check the status of a KYC verification by calling the GET endpoint:
curl -X GET https://grid.squads.xyz/api/v0/grid/smart-accounts/{smart_account_address}/kyc/{kyc_id} \
-H "x-grid-environment: sandbox" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "X-Idempotency-Key: <uuid>" \
The response includes the status of the KYC verification:
In sandbox mode, the tos_status will always be pending.
{
"data": {
"id": "uuid",
"type": "individual",
"status": "approved",
"tos_status": "pending",
"rejection_reasons": [],
"requirements_due": [
"external_account"
],
"created_at": "2025-05-28T19:37:10.123+00:00",
"updated_at": "2025-05-28T19:37:10.123+00:00"
},
"metadata": {
"timestamp": "2025-05-28T19:52:33.846638786Z"
}
}
4. Create Virtual Accounts
Create virtual accounts for different currencies:
The X-Idempotency-Key header is required on this endpoint, to prevent
unnecessary virtual accounts from being created.
curl -X POST https://grid.squads.xyz/api/v0/grid/smart-accounts/{smart_account_address}/virtual-accounts \
-H "x-grid-environment: sandbox" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "X-Idempotency-Key: <uuid>" \
-H "Content-Type: application/json" \
-d '{
"grid_user_id": "uuid",
"currency": "usd"
}'
The response includes bank account details:
{
"data": {
"id": "9958f3dd-c974-4491-9e34-99ba510d77e6",
"customer_id": "7f05d965-1c30-4607-b7de-7b89a1de19bd",
"source_deposit_instructions": {
"currency": "usd",
"bank_beneficiary_name": "John Doe",
"bank_name": "Bank of Nowhere",
"bank_address": "1800 North Pole St., Orlando, FL 32801",
"bank_routing_number": "101019644",
"bank_account_number": "900956625572",
"payment_rails": ["ach_push", "wire"]
},
"destination": {
"currency": "usdc",
"payment_rail": "solana",
"address": "3zWyEvA2GGVwnmA8yCQppJYj14f1scPRoxguhWjhbmsM"
},
"status": "activated",
"developer_fee_percent": "0.0"
},
"metadata": {
"timestamp": "2025-05-28T20:18:50.842883132Z"
}
}
5. Create and Manage Payment Intents
Create a payment intent to transfer funds:
curl -X POST https://grid.squads.xyz/api/v0/grid/smart-accounts/{smart_account_address}/payment-intents \
-H "x-grid-environment: sandbox" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"amount": "1000000",
"grid_user_id": "uuid",
"source": {
"payment_rail": "solana",
"currency": "usdc",
"smart_account_address": "0x..."
},
"destination": {
"payment_rail": "ach",
"currency": "usd",
"details": {
"account_owner_name": "John Doe",
"address": {
"street_line_1": "123 Main St",
"city": "New York",
"state": "NY",
"country": "US"
},
"account_type": "us",
"idempotency_key": "unique-key-123",
"account": {
"checking_or_savings": "checking",
"routing_number": "987654321",
"last_4": "6789"
},
"bank_name": "Example Bank"
}
}
}'
If you’ve previously sent funds to a bank account, you can reuse the external
account ID instead of providing all the bank details again.
The response includes payment intent details:
{
"data": {
"id": "payment-intent-id",
"payment_rail": "ach",
"amount": "1000000",
"currency": "usd",
"source": {
"type": "SMART_ACCOUNT",
"address": "0x..."
},
"destination": {
"type": "NEW_EXTERNAL_ACCOUNT",
"details": {
"account_type": "checking",
"account_name": "My Account",
"account_holder_name": "John Doe",
"account_holder_type": "individual",
"routing_number": "987654321",
"account_number": "123456789",
"bank_name": "Example Bank"
}
},
"status": "awaiting_funds",
"created_at": "2024-03-20T12:00:00Z",
"updated_at": "2024-03-20T12:00:00Z",
"authorities": ["0x...", "0x..."],
"threshold": 2,
"intent_payload": "base64-encoded-payload",
"mpc_payload": "base64-encoded-mpc-payload"
},
"metadata": {
"timestamp": "2024-03-20T12:00:00Z",
"request_id": "req_123456789"
}
}
6. Confirm Payment Intent
Once you have the payment intent, authorize it with the required authorities:
curl -X POST https://grid.squads.xyz/api/v0/grid/smart-accounts/{smart_account_address}/payment-intents/{payment_intent_id}/confirm \
-H "x-grid-environment: sandbox" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"intent_payload": "base64-encoded-authorized-payload",
"mpc_payload": "base64-encoded-authorized-mpc-payload"
}'
When using MPC (Multi-Party Computation) for authorization, you’ll need to
provide both the intent_payload and mpc_payload. The mpc_payload
contains the authorization from the MPC provider.
The response includes the confirmed transfer details:
{
"data": {
"Bridge": {
"id": "transfer-id",
"state": "payment_submitted",
"on_behalf_of": "0x...",
"amount": "1000000",
"developer_fee": "100.00",
"source": {
"payment_rail": "solana",
"currency": "usdc"
},
"destination": {
"payment_rail": "ach",
"currency": "usd"
},
"receipt": {
"initial_amount": "1000000",
"developer_fee": "100.00",
"exchange_fee": "100.00",
"subtotal_amount": "1000000",
"remaining_prefunded_balance": "1000000",
"gas_fee": "100.00",
"final_amount": "1000000",
"exchange_rate": "1.00"
},
"created_at": "2024-03-20T12:00:00Z",
"updated_at": "2024-03-20T12:00:00Z"
}
},
"metadata": {
"timestamp": "2024-03-20T12:00:00Z",
"request_id": "req_123456789"
}
}
Error Handling
The API uses standard HTTP status codes and returns detailed error messages:
{
"code": "ERROR_CODE",
"message": "Human readable error message",
"details": {
"field": "field_name",
"code": "FIELD_ERROR_CODE",
"message": "Field-specific error message"
}
}
Supported Currencies
Grid currently supports the following currencies:
- USD (US Dollar)
- EUR (Euro)
- MXN (Mexican Peso)
- USDC (USD Coin)
- USDT (Tether)
- USDB (USD Base)
- DAI (Dai Stablecoin)
- PYUSD (PayPal USD)
- EURC (Euro Coin)
Supported Payment Rails
Grid supports the following payment rails:
- ACH
- ACH Push
- ACH Same Day
- SEPA
- SWIFT
- Wire
- Arbitrum
- Avalanche C-Chain
- Base
- Bridge Wallet
- Ethereum
- Optimism
- Polygon
- Solana
- Stellar
- Tron