metadata field — a flat map of string-to-string key-value pairs you can use to tie API objects back to records in your own system (invoice IDs, customer IDs, order numbers, internal references, and so on).
The same metadata schema is used across:
- Deposit destinations — track the purpose or source of inbound deposits
- Transfers — tag outbound or internal movements with your own references
- Webhook subscriptions — annotate subscriptions for routing or organization
Constraints and limitations
| Property | Constraint |
|---|---|
| Maximum key-value pairs | 10 per resource |
| Maximum key length | 40 characters |
| Maximum value length | 500 characters |
| Type | Strings only (both keys and values) |
| Immutable | Yes — cannot be updated or deleted after creation |
| Searchable / filterable | No |
| Included in webhook event payloads | No |
Deposit destinations have a temporary additional restriction: metadata values must currently be in UUID format or integer string format. Free-form values are accepted on transfers and webhook subscriptions today and will be supported on deposit destinations in a future release.
Usage
Include the optionalmetadata field on the create request for the resource.
On a transfer
On a deposit destination
On a webhook subscription
Best practices
- Use consistent key names across resources (e.g., always
invoiceId, never sometimesinvoice_id) so you can correlate records across your own systems. - Store IDs, not full data. Reference your system’s records by ID rather than duplicating information into metadata.
- Keep keys concise — they’re capped at 40 characters and count toward the 10-pair limit.
- Plan for immutability. Treat metadata as write-once: if you need a mutable annotation, store it in your own database keyed by the resource ID.