Version 1
Server API reference.
These operations accept a Fendsy server credential. Each entry names its required scope. Workspace session and internal operations are excluded.
Send Authorization: Bearer $FENDSY_API_KEY over HTTPS. Use the returned request ID when asking for support. Limits return429 with Retry-After; invalid keys return401 and missing scopes return 403.
Operations
56 of 56 operations
GET/v1/credentials/verify
Verify a server API key
Validates any supported developer key and returns safe metadata. No event, dispatch or provider message is created. The response is private/no-store. Revoked or expired keys return 401.
Required scope: valid key
POST/v1/events
Ingest a public event
Requires events:write. The credential determines tenant ownership and Event Source; body source is a descriptive label. Reuse the same JSON body and idempotencyKey on retries. New receipts return 202; exact replays return 200; changed content under the same source/key returns 409. A 202 quarantined receipt has validationErrors and no queued dispatch. Analytics/report visibility is asynchronous. Limit: 120 requests per minute per key when the coordination service is available. Retry 429 after Retry-After; never retry a 409 blindly.
Required scope: events:write
POST/v1/sites/{publicId}/identity-tokens
Create onsite identity token
Trusted-server operation. Requires identity:write (legacy events:write keys remain supported). Both Site and customerProfileId must belong to the key's organization. Pass the short-lived token to Fendsy.identify; never expose the API key.
Required scope: identity:write or events:write
GET/v1/catalog/items
List merchant Catalog Items
Cursor-paginated Catalog Items for an organization credential.
Required scope: catalog:read
POST/v1/catalog/items
Create merchant Catalog Item
Create a manual Catalog Item with an Idempotency-Key.
Required scope: catalog:write
GET/v1/catalog/items/{itemId}
Get merchant Catalog Item
Read an Item and its active Variants.
Required scope: catalog:read
GET/v1/orders
List merchant orders
Read a bounded page of merchant-confirmed orders.
Required scope: orders:read
POST/v1/orders
Confirm merchant order
Submit a signed, retry-safe confirmed order with immutable item and money snapshots.
Required scope: orders:write
GET/v1/orders/{orderId}
Get merchant order
Read the confirmed order and its immutable item and shipping snapshots.
Required scope: orders:read
POST/v1/orders/{orderId}/milestones
Record order milestone
Record payment, fulfillment, delivery, cancellation or refund evidence.
Required scope: orders:write
GET/v1/audience/profiles
List Customer Profiles
Read a bounded organization-wide page without private identity evidence.
Required scope: audience:read
POST/v1/audience/profiles
Create or resolve Customer Profile
Use a contact identity and Idempotency-Key; this does not grant marketing consent.
Required scope: audience:write
GET/v1/audience/profiles/{profileId}
Get Customer Profile
Read allowlisted profile fields.
Required scope: audience:read
PATCH/v1/audience/profiles/{profileId}
Update Customer Profile
Update allowlisted identity fields without changing consent.
Required scope: audience:write
GET/v1/audience/lists
List static Lists
Read a bounded page of static Audience Lists.
Required scope: audience:read
POST/v1/audience/lists
Create static List
Create an explicit static List with an Idempotency-Key.
Required scope: audience:write
GET/v1/audience/lists/{listId}
Get static List
Read List lifecycle and member count.
Required scope: audience:read
PATCH/v1/audience/lists/{listId}
Update static List
Update List name or description without changing members.
Required scope: audience:write
POST/v1/audience/lists/{listId}/archive
Archive static List
Archive a List and preserve its provenance for restore.
Required scope: audience:write
POST/v1/audience/lists/{listId}/restore
Restore static List
Restore an archived List with credential audit.
Required scope: audience:write
GET/v1/audience/lists/{listId}/members
List List members
Read bounded member pages with original join provenance.
Required scope: audience:read
POST/v1/audience/lists/{listId}/members
Add List member
Add an existing Profile without changing marketing consent or its original join source.
Required scope: audience:write
DELETE/v1/audience/lists/{listId}/members/{profileId}
Remove List member
Remove a Profile from a static List with lifecycle evidence.
Required scope: audience:write
GET/v1/audience/segments
List Segments
Read bounded Segment Definition and lifecycle pages.
Required scope: audience:read
POST/v1/audience/segments
Create Segment draft
Create a version 1 draft with an Idempotency-Key.
Required scope: audience:write
GET/v1/audience/segments/catalog
Get condition catalog
Read the authorized condition catalog and source health.
Required scope: audience:read
GET/v1/audience/segments/{segmentId}
Get Segment
Read a Segment Definition and its revision state.
Required scope: audience:read
PATCH/v1/audience/segments/{segmentId}
Update Segment draft
Update a draft with its expected version.
Required scope: audience:write
POST/v1/audience/segments/{segmentId}/activate
Activate Segment draft
Publish the exact draft revision and queue evaluation; accepted is not ready membership.
Required scope: audience:write
GET/v1/analytics/event-definitions
List Event Definitions
Read bounded definitions and governance state.
Required scope: analytics:read
GET/v1/analytics/receipts/{receiptId}
Get event receipt
Read accepted and downstream processing status without raw event payload.
Required scope: analytics:read
GET/v1/analytics/reports
List reports
Read bounded approved report definitions.
Required scope: analytics:read
GET/v1/analytics/dashboards
List dashboards
Read bounded saved Dashboard card summaries.
Required scope: analytics:read
GET/v1/analytics/dashboards/{dashboardId}/cards/{cardId}/query
Query saved Dashboard card
Read a bounded 31-day aggregate from a permitted saved card.
Required scope: analytics:read
GET/v1/customers/{profileId}/orders
List Customer orders
Read allowlisted confirmed order history for one Customer Profile.
Required scope: customer_history:read
GET/v1/billing/account
Read Fendsy account billing
Read Organization plan, usage and invoice summary without payment actions.
Required scope: account_billing:read
GET/v1/templates
List published Templates
Read bounded published Email Template pages.
Required scope: templates:read
POST/v1/templates
Create Template draft
Create an organization Email Template draft with an Idempotency-Key; credential is the actor.
Required scope: templates:write
GET/v1/templates/{templateId}/draft
Read Template draft
Read an organization Template draft with templates:write scope.
Required scope: templates:write
PUT/v1/templates/{templateId}/draft
Replace Template draft
Save a validated draft with its expected version.
Required scope: templates:write
POST/v1/templates/{templateId}/versions/{version}/edit
Edit published Template
Create a new editable draft from a published version.
Required scope: templates:write
POST/v1/templates/{templateId}/publish
Publish Template draft
Publish the exact draft revision using a separately scoped credential and Idempotency-Key.
Required scope: templates:publish
GET/v1/templates/{templateId}/versions/{version}
Get published Template version
Read one immutable Template version and document.
Required scope: templates:read
GET/v1/campaigns
List Campaigns
Read a bounded Campaign page for the credential organization.
Required scope: campaigns:read
POST/v1/campaigns
Create Campaign draft
Create a credential-authored Campaign through the workspace domain service.
Required scope: campaigns:write
GET/v1/campaigns/{campaignId}
Get Campaign
Read the current Campaign revision and latest run ID.
Required scope: campaigns:read
PUT/v1/campaigns/{campaignId}/revision
Replace Campaign draft revision
Save a Campaign draft with an expected version; no send occurs.
Required scope: campaigns:write
POST/v1/campaigns/{campaignId}/validate
Validate Campaign
Pin a ready revision only after audience, sender and content checks pass.
Required scope: campaigns:write
POST/v1/campaigns/{campaignId}/schedule
Schedule Campaign
Queue a ready Campaign through the same recipient pipeline as the workspace.
Required scope: campaigns:publish
GET/v1/campaigns/{campaignId}/runs
List Campaign runs
Read a bounded page of aggregate Campaign run status.
Required scope: campaigns:read
GET/v1/campaigns/{campaignId}/runs/{runId}
Get Campaign run
Read aggregate delivery and failure counts for one run.
Required scope: campaigns:read
POST/v1/campaigns/{campaignId}/runs/{runId}/{action}
Control Campaign run
Pause, resume or cancel one run with an Idempotency-Key.
Required scope: campaigns:publish
POST/v1/saas/events
Report SaaS lifecycle fact
Report a Customer-bound account, trial or plan outcome from a scoped server credential.
Required scope: saas:write
POST/v1/sends/marketing
Queue one marketing email
Send one eligible Customer a published Template with an Idempotency-Key; returns a delivery ID.
Required scope: sends:marketing
POST/v1/sends/service
Queue one order confirmation
Send one confirmed merchant order with an explicit reason and published service Template. Shopify orders remain on Shopify confirmation by default.
Required scope: sends:service
GET/v1/sends/{deliveryId}
Get send status
Read a delivery authorized for this credential's send scope.
Required scope: sends:marketing or sends:service