All docs

API reference: Orders

Read-only access to orders, line items, refunds, disputes, and per-currency totals.

Updated . 3 min read.

Three read-only endpoints over the shared payment ledger. Every payment taken through a form, funnel, booking page, or bio page is one order. Orders change only when a confirmed payment event arrives, so the API cannot create, edit, or refund an order.

Base URL: https://formspring.io/api/v1

Method Path Ability
GET /orders orders:read
GET /orders/summary orders:read
GET /orders/{order} orders:read

An order that belongs to another workspace answers 404. Amounts are integers in the smallest currency unit, so 4900 with currency usd is $49.00.

List orders

http
GET /orders?status=paid&from=2026-10-01&per_page=25
Query Meaning
status pending, paid, partially_refunded, refunded, disputed, failed, or canceled
source_type form_payment, booking_payment, bio_payment, funnel_checkout, funnel_payment, or subscription_invoice
subject_type, subject_id Orders taken on one form, funnel, booking page, or bio page
from, to Created on or after, and on or before, a date
q Customer email or name contains the text
per_page 1 to 100, default 25

Response 200:

json
{
  "data": [
    {
      "id": "01JA1B2C3D4E5F6G7H8J9K0M1N",
      "status": "partially_refunded",
      "kind": "form_payment",
      "source_type": "form_payment",
      "currency": "usd",
      "amount_total": 4900,
      "amount_refunded": 1000,
      "amount_disputed": 0,
      "net_amount": 3900,
      "application_fee": 0,
      "subject": { "type": "form", "id": "AbC12xyz", "name": "Workshop signup" },
      "customer": { "email": "buyer@example.com", "name": null },
      "submission": { "type": "form_submission", "id": "01JA1B2C3D4E5F6G7H8J9K0M1P" },
      "dispute": null,
      "subscription_id": null,
      "parent_order_id": null,
      "paid_at": "2026-10-20T09:15:00+00:00",
      "failed_at": null,
      "canceled_at": null,
      "refunded_at": null,
      "created_at": "2026-10-20T09:14:41+00:00"
    }
  ],
  "links": {},
  "meta": {}
}

Show an order

http
GET /orders/{order}

Returns the same fields plus payment_intent_id, checkout_session_id, charge_id, the items list, and the events timeline.

json
{
  "data": {
    "id": "01JA1B2C3D4E5F6G7H8J9K0M1N",
    "status": "paid",
    "amount_total": 4900,
    "items": [
      {
        "position": 0,
        "description": "Workshop seat",
        "quantity": 2,
        "unit_amount": 2450,
        "amount": 4900,
        "field_ref": "fld_seat",
        "price_ref": null
      }
    ],
    "events": [
      { "type": "payment_intent.succeeded", "outcome": "applied", "occurred_at": "2026-10-20T09:15:00+00:00" }
    ]
  }
}

field_ref is the stable id of the field the line came from. It does not change when the field is renamed or translated.

Totals

http
GET /orders/summary

Totals of paid orders, one row per currency. Net is gross minus refunds minus the amount of lost disputes. The endpoint accepts the same filters as the list.

json
{
  "data": [
    { "currency": "usd", "orders": 12, "gross": 58800, "refunded": 4900, "disputed_open": 0, "disputed_lost": 4900, "net": 49000 }
  ]
}

See Orders, refunds and disputes for statuses and the webhook events a refund or dispute needs.