Graph

Transfers touching one address, newest first

A wallet's transaction feed, with the counterparty and signed direction resolved for each transfer. Optionally annotates each counterparty with its label, or filters the whole window down to transfers with a counterparty of one category ('did this wallet deposit to a casino last month').

The category filter is applied across the entire since/until range, not just the page being returned.

PAGING. Use cursor: pass back the next_cursor of the previous page and keep going until it is absent. Cost per page does not grow with depth. offset still works and is unchanged, but it is a skip, so on a busy address it gets slower the deeper it goes and is not a way to walk a whole history. The two are mutually exclusive in one request.

On bitcoin a page is rounded up to the end of a transaction (the feed's sort key is not unique there), so count may come back one or two over limit. No row is ever returned twice or skipped.

post/v1/address-transactions

Request

  • Base URL: https://intelapi.publicaml.org
  • URL: https://intelapi.publicaml.org/v1/address-transactions
  • Auth: one of:
    • API key in header X-API-Key
    • none

Request body

addressstring required

The address to look up, in its normal display form.

  • bitcoin — base58 (1…, 3…) or bech32/bech32m (bc1…, bc1p…). Case is SIGNIFICANT for base58; do not lowercase it. A 64-character lowercase TRANSACTION HASH is also accepted here: on bitcoin the graph is bipartite (address → transaction → address), so a transaction is a node with its own neighbours and its own findings. CoinJoin is classified on the transaction, not on the participants, and this is how you read it.
  • ethereum, bsc — 0x + 40 hex characters, any case.
  • tron — base58 (T…, 34 characters); the 0x 20-byte form is accepted too and is what the API stores and echoes.
chain'bitcoin' | 'ethereum' | 'bsc' | 'tron' required

Which blockchain the address belongs to. Send one of the four values in the enum. The short forms used by the older clients (ETH, BTC, TRX, BNB) and any capitalisation are still accepted, but responses always echo the canonical spelling.

Getting this wrong is the single commonest integration bug: the same 0x-prefixed address exists on ethereum, bsc and tron and means a different wallet on each, so the chain is part of the identity, never a hint. If it does not match the address format the call fails with invalid_address_format, which names the chain the address does look like.

tokenstring

Restrict to one token contract. EVM only.

limitinteger
offsetinteger

Skip-based paging. Kept for compatibility; prefer cursor — a deep offset re-reads everything it skips. Above 100000 the request is a 400 invalid_parameters (not pinned: a pinned offset would be a different page); page deeper with cursor.

cursorstring

The next_cursor of the previous page. '<block>:<tx_hash>' on bitcoin, '<block>:<log_index>:<internal_index>' elsewhere. Refused together with offset.

includestring[]

Adds what we know about each counterparty. Unknown values are a 400.

counterparty_categorystring

Keep only transfers whose counterparty carries this label category. Implies include: ['counterparty_labels'].

Response

A page of transfers, newest first.

addressstring
chainstring
countinteger
has_moreboolean
next_cursorstring

Pass as cursor for the next page. ABSENT at the end of the feed, which is how a loop knows to stop.

counterparty_scanobject

How much of the window the label scan covered. truncated: true makes the match count a lower bound.

request_idstring
processing_time_msinteger

Changes

No recorded changes to this operation across all 1 revision of this API.