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
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:
{
"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
GET /orders/{order}
Returns the same fields plus payment_intent_id, checkout_session_id, charge_id, the items list, and the events timeline.
{
"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
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.
{
"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.
