Integration Tutorial
This section describes how to set up your environment, configure the MCP client, and start using Interlace Agent Card tools.
Integration Workflow
To start using the Interlace Agent Card, complete the following steps.
Step 1 — Create a Developer Account
- Visit the Agent Developer Page and register a developer account.
- Sandbox: https://agent-card-staging.interlace.money/
- Production: https://agent-card.interlace.money/
- Sign in to access the developer dashboard.
Step 2 — Generate an API Key
- In the Developer Page, navigate to API Key Management.
- Click Create New API Key. The system will generate an API key in the format:
itl_sk_xxxxxxxx....
Step 3 — Configure the MCP Client
- Configure the generated API key in your agent client. Supported clients include OpenCode, Codex, and other MCP-compatible clients.
- After configuration, restart your agent client. The agent will automatically connect to the MCP server and discover available tools.
Example Configuration (OpenCode)
{
"mcpServers": {
"interlace": {
"type": "remote",
"url": "https://mcp.interlace.money/sse",
"headers": {
"Authorization": "Bearer itl_sk_xxxxxxxxxxxxxxxxxxxxxxxx"
}
}
}
}Usage Examples
The following examples illustrate how an agent can perform common tasks using natural language instructions and corresponding MCP tools.
1. Create a Card
- User request: Create a $10 card.
- Tool invoked:
issue_card
Required Parameters
| Parameter | Description | Required |
|---|---|---|
| currency | Funding currency. Supported values: USDC or USDT | Yes |
| chain | Blockchain network (e.g., ETH, ARB). See the Supported Chains and Currencies for the full list. | Yes |
| amount | Funding amount. Maximum allowed amount: $20 | Yes |
Response Fields
| Field | Type | Description |
|---|---|---|
| cardId | string | Card ID (returned if the card is issued immediately after funding) |
| currency | string | Funding currency |
| chain | string | Blockchain network |
| expectedAmount | string | Expected funding amount |
| depositAddress | string | Funding address |
| depositQrCodeUrl | string | QR code URL for funding |
| message | string | Response message |
After the user transfers sufficient funds (USDC or USDT) to the depositAddress, the system will automatically load the balance onto the card. The card can then be used for online payments.
The funding address can be displayed as a static QR code for direct on-chain payment.
2. Get Card Details
When an online payment needs to be completed (for example, subscribing to a service), the agent invokes get_card to retrieve payment details such as the card number and CVV.
Response Fields
| Field | Type | Description |
|---|---|---|
| cardId | string | Card ID |
| pan | string | Card number |
| cvv | string | CVV |
| expMonth | string | Expiration month |
| expYear | string | Expiration year |
| bin | string | Card BIN |
| cardLastFour | string | Last four digits of the card number |
| status | string | Card status (e.g., ACTIVE) |
| balance | string | Card balance |
3. View Transaction History
- User request: How much has my card spent?
- Tool invoked:
get_transactions
Request Parameters
| Parameter | Description |
|---|---|
| limit | Number of recent transactions to return. Default: 10. Maximum: 100 |
Response Fields
| Field | Type | Description |
|---|---|---|
| cardId | string | Card ID |
| transactions | array | List of transactions |
| transactions[].transactionId | string | Transaction ID |
| transactions[].amount | string | Transaction amount |
| transactions[].currency | string | Transaction currency (e.g., USD) |
| transactions[].merchant | string | Merchant name |
| transactions[].status | string | Transaction status (e.g., SETTLED) |
| transactions[].occurredAt | string | Transaction timestamp |
4. Delete a Card
- User request: Delete this card and return the remaining balance.
- Tool invoked:
delete_card
Response Fields
| Field | Type | Description |
|---|---|---|
| cardId | string | Card ID |
| deleted | boolean | Whether the card was successfully deleted |
| refundAmount | string | Refunded amount |
| message | string | Response message |
After the card is deleted, the remaining balance is automatically returned to the user's crypto wallet in the original funding currency (USDC or USDT). Withdrawal functionality will be introduced in a future release.
5. View On-Chain Top-Up History
- User request: How much has been deposited into my wallet?
- Tool invoked:
list_topup
Request Parameters
| Parameter | Description |
|---|---|
| limit | Number of recent top-up records to return. Default: 10. Maximum: 100 |
Response Fields
| Field | Type | Description |
|---|---|---|
| depositAddress | string | Funding address from the most recent top-up record |
| topups | array | List of top-up transactions |
| topups[].transferId | string | Transfer ID |
| topups[].amount | string | Transfer amount |
| topups[].currency | string | Currency (e.g., USDC, USDT) |
| topups[].chain | string | Blockchain network (e.g., BASE, ETH) |
| topups[].address | string | Funding address |
| topups[].status | string | Transfer status (e.g., COMPLETE, ONHOLD, PENDING) |
| topups[].transactionHash | string | On-chain transaction hash |
| topups[].riskResult | string | Risk assessment result (e.g., PASS, HIGH, REJECTED) |
| topups[].createTime | string | Record creation time (format: yyyy-MM-dd HH:mm:ss) |
| topups[].completeTime | string | Transfer completion time (format: yyyy-MM-dd HH:mm:ss) |
6. Refund High-Risk Top-Up Funds
- User request: Refund my funds on hold.
- Tool invoked:
refund_topup
Request Parameters
| Parameter | Description | Required |
|---|---|---|
| address | Blockchain address to receive the refund. If multiple ONHOLD top-ups exist, all refunds will be sent to this address. Required. | Yes |
Response Fields
| Field | Type | Description |
|---|---|---|
| address | string | Masked refund address |
| refundedCount | integer | Number of refunds processed in this request |
| refunds | array | List of refund records |
| refunds[].transferId | string | Original transfer ID |
| refunds[].refundId | string | Refund ID (returned if successful) |
| refunds[].amount | string | Refund amount |
| refunds[].currency | string | Currency |
| refunds[].status | string | Refund status (SUCCESS or FAILED) |
| refunds[].message | string | Failure reason; typically null if successful |
7. View Wallet Balances
- User request: What's my current wallet balance?
- Tool invoked:
list_wallet_balances
Response Fields
| Field | Type | Description |
|---|---|---|
| balances | array | List of wallet balances |
| balances[].currency | enum | Stablecoin currency |
| balances[].available | string | Available balance |
| balances[].pending | string | Pending balance |
| balances[].frozen | string | Frozen balance |
| balances[].walletId | string | Upstream wallet identifier |
| balances[].updatedAt | long | Query timestamp in milliseconds |
| message | string | Display message |
8. Withdraw Wallet Balance
- User request: Withdraw funds from my wallet.
- Tool invoked:
get_withdraw_link
Response Fields
| Field | Type | Description |
|---|---|---|
| url | string | Withdrawal page URL |
| message | string | Display message |
After receiving the withdrawal URL, the user can open the page and submit the withdrawal request by providing the currency, blockchain network, destination address, and withdrawal amount.
9. View On-Chain Withdrawal Status
- User request: Check my withdrawal status.
- Tool invoked:
list_withdraw_transfers
Request Parameters
| Parameter | Description |
|---|---|
| limit | Number of recent withdrawal records to return. Default: 20. Maximum: 100 |
Response Fields
| Field | Type | Description |
|---|---|---|
| transfers | array | List of withdrawal records |
| transfers[].id | string | Upstream transfer identifier |
| transfers[].accountId | string | Account identifier |
| transfers[].referenceId | string | Idempotency reference ID |
| transfers[].source | object | Transfer source information |
| transfers[].source.type | string | Source type |
| transfers[].source.chain | string | Blockchain network |
| transfers[].source.address | string | Source address |
| transfers[].source.id | string | Business identifier |
| transfers[].destination | object | Destination information |
| transfers[].destination.type | string | Destination type |
| transfers[].destination.chain | string | Blockchain network |
| transfers[].destination.address | string | Destination address |
| transfers[].destination.id | string | Business identifier |
| transfers[].amount | object | Transfer amount information |
| transfers[].amount.amount | string | Transfer amount |
| transfers[].amount.currency | string | Currency |
| transfers[].fees | array | List of fees |
| transfers[].fees[].amount | string | Fee amount |
| transfers[].fees[].currency | string | Fee currency |
| transfers[].fees[].type | string | Fee type |
| transfers[].status | string | Upstream transfer status |
| transfers[].transactionHash | string | On-chain transaction hash |
| transfers[].riskLevel | string | Risk level |
| transfers[].createTime | long | Creation timestamp in milliseconds |
| transfers[].completeTime | long | Completion timestamp in milliseconds |
| transfers[].blockchainTime | long | On-chain timestamp in milliseconds |
| message | string | Display message |
Important Notes
- Card Limit
- Only one active card is allowed per user. A new card cannot be created until the existing card is deleted.
- Card with status
CONTROL,ACTIVE,PENDING, orFROZENis considered active.INACTIVEindicates a deleted card.
- Spending Limit
- Each card has a lifecycle spending limit of $20. Once the limit is reached, the card is automatically disabled.
- Transaction Restrictions
- Agent Card supports online transactions only, such as e-commerce, subscriptions, and other digital services.
- POS and ATM transactions are not supported.
- Merchant category restrictions (MCC controls) apply.
- Data Security
- Full card details (e.g., PAN, CVV) are available only through MCP tools and are not displayed in the Developer Page.
- Ensure your agent client securely stores and handles sensitive payment data.
- Balance Refund
- After deletion, any remaining balance is automatically returned to the user's crypto wallet in the original funding currency (USDC or USDT).
- Wallet balances can be withdrawn to external blockchain addresses at any time via the
get_withdraw_linktool.
- Funding Requirements
- Use supported currencies (USDC / USDT) and networks. See the Supported Chains and Currencies for the full list.
- The deposited amount must be equal to or greater than the expected funding amount. Funds are automatically credited once sufficient.
- If the deposited amount is insufficient, funding will not be processed. You may send additional funds to the same address.
- When the funding status is
ONHOLD, the funds are temporarily held and can be refunded using therefund_topuptool.
Updated 6 days ago