/api/v1/cards/:unique_id/transfer write:transfer Records a custody or ownership change for one of your cards without creating a shipment — for OTC or peer-to-peer transfers where the card stays in the warehouse. Holder strings are free-form and defined by you; we do not interpret them. A replay with the same idempotency_key returns the ORIGINAL transfer with the same 201 as the first call, so send one on every write. A card.transferred event is written to your activity log on success.
POST /api/v1/cards/CARD-EXAMPLE-1/transfer write These inputs are shared across all docs pages, so an id entered here carries over.
{
"to_holder": "demo-holder",
"note": "docs demo transfer",
"idempotency_key": "docs-transfer-CARD-EXAMPLE-1"
}Not run yet. Press Run to make a live call against https://service.rip.fun (through this demo's server-side proxy; the API key never reaches the browser).
curl -X POST 'https://service.rip.fun/api/v1/cards/CARD-EXAMPLE-1/transfer' \
-H 'X-API-Key: rip_…' \
-H 'Content-Type: application/json' \
-d '{"to_holder":"demo-holder","note":"docs demo transfer","idempotency_key":"docs-transfer-CARD-EXAMPLE-1"}' | Field | Type | Required | Description |
|---|---|---|---|
to_holder | string | yes | New holder, up to 255 chars |
from_holder | string | — | Previous holder, up to 255 chars |
note | string | — | Free-form note, up to 512 chars |
idempotency_key | string | — | Up to 128 chars. Unique per account; a replay returns the original record (201, not 409). Use a token your own system can regenerate deterministically |
data)| Field | Description |
|---|---|
transfer.id / tenant_card_id | Transfer row + the card it applies to |
transfer.from_holder / to_holder / note | What you submitted |
transfer.idempotency_key / api_key_id / created_at | Replay token, the key that wrote it, timestamp |
| Status | Code | When |
|---|---|---|
| 400 | to_holder required | to_holder missing or invalid |
| 404 | not found | card not part of your account |
See Errors for the response envelope and the full code list.