Batch Labels
Add or update up to 100 labels across many wallets in a single request. Each item carries its own address; rows with an invalid address are quarantined and reported rather than failing the whole batch.
Historical (backfilled) labels
Each item extends the single-wallet label schema, so it accepts the same optionaltimestamp (ISO-8601). When set, that row is recorded at the given time instead of the server’s current time, letting you backfill historical values per wallet in one batch. Label-based retention then evaluates each value at the correct point in time.
timestamp must not be in the future. Unlike an invalid address (which is quarantined for that row only), a future timestamp fails request validation and rejects the whole batch with 400. When omitted, the row is recorded at server time.Authorizations
Workspace API key (e.g. formo_xxx). Create one in the Formo dashboard under Team Settings > API Keys.
Body
1 - 100 elementsLabel identifier (lowercased on write). e.g. vip, airdrop_eligible, coinbase.verified_account
Wallet address the label applies to. Literal EVM (0x...) or Solana address only; ENS names are not resolved in batch requests.
Optional label value (e.g. tier name, country code)
Optional chain identifier the label applies to
Optional ISO-8601 event-time for the label. When provided, the label is recorded at this time instead of the server's current time; used to backfill historical values (e.g. an open_interest reading from a past week) so label-based retention can evaluate them at the right point in time. Must not be in the future. Defaults to server time when omitted.
Response
Batch processed. Returns counts of forwarded vs quarantined rows, with a per-row errors entry for each quarantined row.
Acknowledgement for a batch write. successful_rows counts rows accepted and forwarded to ingest after a 2xx (ingestion is async/eventually-consistent; there is no follow-up read). quarantined_rows counts rows skipped for an invalid address or no valid keys; errors (omitted when nothing was quarantined) maps each skipped row back to its request index.