Appearance
List programs
GET
/programs
Every card template the shop owns — published or not, of every type. Cursor-paginated, newest first, and filterable by type. Programs are SHOP-WIDE and carry no location, so a location-restricted key sees the same list an unrestricted one does; that is the model, not a leak. This is the call that gets you the program_id every card write needs.
Authorizations
ApiKeyBearer
A shop-scoped API key created in the dashboard and shown exactly once. An MCP tmk_ key presented here returns a 401 that names the mistake.
Type
HTTP (bearer)
Parameters
Query Parameters
limit
Page size. Clamped to the maximum (100 by default, PUBLIC_API_MAX_PAGE_SIZE) rather than rejected.
Type
integer
Minimum
1cursor
Opaque cursor from a previous response's next_cursor. Absent next_cursor (null) means the end.
Type
string
type
Type
string
Responses
List programs
application/json
JSON "data": [ { "id": "prg_docsfixture0001", "name": "Coffee Card", "description": "Ten coffees, the eleventh on us.", "category": "bar", "type": "standard", "active": true, "published_at": "2026-09-04T10:15:00.000Z", "suspended_at": null, "total_stamps": 10, "repeat_after_reset": true, "discount_percent": null, "initial_balance_cents": null, "default_expire_after_days": 365, "logo_url": "https://cdn.tesserapp.eu/shops/caffe-docsfixture/logo.png", "access_image_url": null, "brand_color_hex": "#6F4E37", "bg_color_hex": "#FFF8F0", "text_color_hex": "#2B1B12", "icon_key": "mug-hot", "location_scope": "all_locations", "scoped_location_ids": [ "loc_docsfixture0001" ], "created_at": "2026-08-05T10:15:00.000Z", "updated_at": "2026-09-04T10:15:00.000Z" } ], "next_cursor": "eyJjIjoiMjAyNi0wOC0wNVQxMDoxNTowMC4wMDBaIiwiaSI6ImNpbl9kb2NzZml4dHVyZTAwMDEifQ", "limit": 25
{
}
GET
/programs