list_transactions

Read the user's transaction history exactly as the Envoy app shows it, newest first, with an opaque pagination cursor.

POST https://api.envoy.money/tools/list_transactions

Read the user's transaction history exactly as the Envoy app shows it, newest first, with an opaque pagination cursor. from must not be later than to.

TitleServiceRead onlyDestructiveIdempotentExternal sites
List transactionssharedtruefalsetruefalse

Send a Central Auth bearer with agent scope. A key-bound connection also sends Envoy-Installation-Proof over this exact request. JSON bodies are limited to 64 KB; a larger body returns HTTP 413 with INVALID_INPUT.

Input

FieldRequiredTypeDescription and rules
fromNostringStart date. format date
toNostringEnd date. format date
limitNointegerMaximum transactions. minimum 1; maximum 50
cursorNostringOpaque pagination cursor bound to this connection, date range and page size. minLength 1; maxLength 2048

Unknown fields are rejected. The exact input schema is on the schemas page.

Synthetic request

{
  "limit": 10
}

Success data

Every reply uses the shared envelope: ok, the purchase, next, user_action and error. Follow next; outputs may gain fields, so ignore ones you do not recognize.

This tool returns its payload in data:

Field in dataRequiredTypeDescription and rules
transactionsYesarray of object—
transactions[].idYesstringOpaque statement line identifier, stable for this connection and client. It contains no card binding and grants no access. minLength 1; maxLength 128
transactions[].occurred_atYesstringWhen it happened. format date-time
transactions[].amountYesobject—
transactions[].directionYes"debit" | "credit" | "none"debit: money left the account. credit: money came back or was added. none: no money moved, e.g. a declined payment.
transactions[].titleYesstringWhat the user sees as the line's name: the merchant for a purchase. minLength 1; maxLength 200
transactions[].subtitleYesstring or nullThe line's second row in the app. For an agent purchase, the agent's name. maxLength 200
transactions[].by_agentYesbooleanTrue when an agent made this purchase through Envoy.
transactions[].kindYes"purchase" | "reversal" | "refund" | "load" | "withdraw" | "fee" | "decline" | "card_issued" | "card_funded" | "card_closed" | "adjustment" | "other"What happened. other: a kind this version does not name.
transactions[].statusYes"completed" | "pending" | "failed" | "unknown"completed: done. pending: still in progress (the app shows "In progress"). failed: did not complete (the app shows "Didn't complete").
transactions[].cardYes"envoy" | "elixir_card" | "unknown"Which card it was on. elixir_card: the user's Elixir card, badged "Elixir card" in the app.
next_cursorYesstring or nullOpaque next cursor.

Synthetic result

Example synthetic-compatible-payload (synthetic data):

{
  "ok": true,
  "contract": "envoy@2026-10",
  "tool": "list_transactions",
  "request_id": "req_synthetic",
  "trace_id": "4bf92f3577b34da6a3ce929d0e0e4736",
  "server_time": "2026-09-29T12:00:00Z",
  "replayed": false,
  "purchase": null,
  "data": {
    "transactions": [
      {
        "id": "synthetic-line",
        "occurred_at": "2026-09-29T11:00:00Z",
        "amount": {
          "minor": 10000,
          "currency": "INR",
          "display": "₹100.00"
        },
        "direction": "debit",
        "title": "Example Store",
        "subtitle": "Example Agent",
        "by_agent": true,
        "kind": "purchase",
        "status": "completed",
        "card": "envoy"
      }
    ],
    "next_cursor": null
  },
  "next": {
    "action": "continue",
    "tool": null,
    "args": null,
    "instruction": "Envoy needs nothing more. Carry on with the user's task.",
    "after_seconds": null,
    "by": null
  },
  "user_action": null,
  "follow_ups": [],
  "error": null
}

Errors

A failure has ok: false, changes nothing, and carries error plus one next. Branch on error.code and next, not on the HTTP status. The contract declares every code below for every tool; which one a call returns depends on the request and the purchase state.

CodeHTTP statusMeaningWhat the agent does
INVALID_INPUT400Fix the supplied input.Fix every field listed in error.fields, then call the same tool once more.
UNAUTHENTICATED401Reconnect through Central Auth.Ask the user to reconnect Envoy, then retry this call.
NOT_ALLOWED403The operation is not allowed.This connection may not do that. Tell the user; do not retry.
SERVICE_NOT_ENABLED403The service is not enabled.This Envoy service is not enabled for the user. Tell the user; do not retry.
NOT_FOUND404Purchase absent or owned by another user.No purchase matches that reference. Check the purchase id from this task; do not start a new purchase to recover.
IDEMPOTENCY_CONFLICT409The same key has different input.Retry with the original inputs unchanged, or use a new idempotency_key only for a genuinely new purchase.
ACTIVE_PURCHASE_EXISTS409An active purchase already exists.Another purchase is in progress. Show the user the user_action message and stop this attempt.
STATE_CONFLICT409The operation conflicts with the current state.This conflicts with the current state. Tell the user; do not retry.
NO_RAIL422No rail can serve this purchase; nothing was created.Envoy cannot pay this purchase. Tell the user why using error.message; do not retry or split it.
RATE_LIMITED429Wait before retrying.Wait next.after_seconds, then retry the same call unchanged.
UNAVAILABLE503The service is unavailable; follow retryable and next.Wait next.after_seconds, then retry the same call unchanged; never pay elsewhere meanwhile.
CLIENT_UPDATE_REQUIRED426Update the client.This client is too old. Tell the user to update it.

Downloads

OpenAPI · MCP catalog · Synthetic examples · Schemas

On this page