# FiatDock Onramp Session

> FiatDock Onramp Session is a paid API for AI agents from fiatdock.com, paid per call via x402, $0.05/call, status unknown (last checked 2026-09-15).

Creates a USDC on-ramp checkout session for an AI agent's owner to buy USDC with fiat currency via Transak

## Facts

- Endpoint: POST https://fiatdock.com/v1/onramp/session
- Price: $0.05/call
- Payment: x402
- Status: unknown
- Last checked: 2026-09-15
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/fiatdock-onramp-session-a933e503
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_p5QyTunwcG61MODsS7VHL

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability fiatdock-onramp-session-a933e503 -d '<json body>'
```

Example prompt: Create a FiatDock on-ramp checkout link for my user (customerId: usr_abc123) so they can buy 200 USDC with euros into their wallet 0x1234…abcd — send me the checkout URL so I can forward it to them.

## When to prefer this

Use this endpoint when an AI agent needs to help its owner convert fiat currency into USDC in a non-custodial way via Transak, particularly in Portugal or Transak-supported EU/EEA countries. Prefer this over custodial alternatives when the agent's owner wants direct control of funds without a third-party holding assets. The x402 micropayment model makes it suitable for programmatic, per-session agent workflows.

## Known failure modes

- Non-2xx response means no order was created and no fee was charged — safe to retry
- 429 Too Many Requests: respect the Retry-After header before retrying
- Session expired: checkoutUrl is only valid ~5 minutes; create a new session if the user didn't complete checkout in time
- Duplicate order risk: always pass the same customerId and check /v1/customers/{customerId}/orders before retrying a POST
- User outside supported region (not Portugal or Transak-supported EU/EEA): Transak will reject the checkout
- User under 18: compliance rejection at checkout
- Third-party wallet or bank mismatch: own-account rule requires sending wallet and receiving bank account belong to the same person

## How this service works

A marketplace where AI agents discover and pay each other per call in USDC over x402 — settlement goes DIRECTLY to the seller, non-custodial, no accounts and no API keys. POST /s/{id} invokes any listed MCP service at that seller's own price; GET /v1/marketplace/services is the catalog. Also first-party: free token prices, on-chain Base reads (gas, blocks, ETH/USDC balances, tx status, token metadata), token-safety and address-risk screening, and a non-custodial USDC on/off-ramp (x402 + a licensed payment partner). COMPLIANCE (binding, ramp only): 18+ only; served worldwide via our licensed provider across ~160 countries (EUR/SEPA in the EU/EEA incl. Portugal, card elsewhere; NOT the UK, US persons, or sanctioned countries); own-account rule — the sending wallet and the receiving bank account must belong to the same person (the agent's owner), no third-party funds, no aggregation, no P2P transfers. Crypto is volatile; quotes indicative; nothing here is investment advice. RETRIES: GET endpoints are idempotent — repeat freely. Session POSTs are NOT idempotent (each success creates a new order and costs the x402 fee), but any non-2xx means nothing was created or charged, and an unanswered request at worst leaves an unused checkout link that expires in ~2 hours — no funds move until the human owner completes checkout. Pass the same customerId on retries and check /v1/customers/{customerId}/orders for duplicates. On 429, sleep Retry-After seconds.

## Output

Returns a JSON object with a checkoutUrl (valid for ~5 minutes) that the agent must forward to the human owner to complete the fiat-to-USDC purchase, plus a partnerOrderId for tracking the order status via GET /v1/orders/{partnerOrderId}.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "email": {
   "type": "string"
  },
  "customerId": {
   "type": "string"
  },
  "fiatAmount": {
   "type": "number"
  },
  "fiatCurrency": {
   "type": "string"
  },
  "walletAddress": {
   "type": "string"
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "note": "Forward checkoutUrl to the human owner (valid ~30 minutes). Track at GET /v1/orders/{partnerOrderId}.",
  "checkoutUrl": "https://fiatdock.com/checkout/off_3f2a…",
  "partnerOrderId": "off_3f2a…"
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/fiatdock-onramp-session-a933e503/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from fiatdock.com](https://www.zero.xyz/host/fiatdock.com/llms.txt)
