Overview and Authorization
Overview
The Stack9 Experience API provides endpoints for managing marketing, content, and AI services on the Stack9 Digital Experience Platform (DXP): email campaigns and templates, marketing lists/audiences/subscribers, forms, the Pages headless CMS, file storage, webhooks, journeys, and AI assistants.
Base URL
https://apis.app.stack9.co/api
For local development:
http://localhost:3000/api
Authentication
All endpoints require an API key, sent as a request header:
X-API-Key: your-api-key-here
Example request
curl -X GET \
https://apis.app.stack9.co/api/email_settings \
-H 'X-API-Key: your-api-key-here' \
-H 'Content-Type: application/json'
Request format
- Send
Content-Type: application/jsonon every request with a body. - Path parameters are denoted with curly braces in the endpoint documentation (e.g.
{code}). - Many list endpoints are
POST .../listrather thanGETwith query parameters, so they can accept a structured request body (pagination,search, and afiltersobject) — check each resource page for the exact method.
Response format
There is no single global response envelope — the shape depends on the endpoint. The most common patterns you'll see across this reference are:
- A single resource: the resource fields directly, e.g.
{ "id": "...", "name": "...", ... }. - A create/update/delete acknowledgement: typically just
{ "id": "..." }. - A list: either
{ "results": [...], "total": N, "totalPages": N }or{ "results": [...], "metadata": { "page": N, "limit": N, "total": N, "total_pages": N } }depending on the resource — see the specific endpoint's documentation.
Error response
{
"message": "Human-readable error description",
"code": "ERROR_CODE",
"issues": [
{ "message": "Field-level detail, when applicable" }
]
}
message and code are always present; issues is included for validation-style errors.
HTTP status codes
| Status Code | Description |
|---|---|
| 200 | Success — request completed successfully |
| 400 | Bad Request — invalid request parameters |
| 401 | Unauthorized — invalid or missing API key |
| 403 | Forbidden — insufficient permissions |
| 404 | Not Found — resource not found |
| 409 | Conflict — resource conflict (e.g. duplicate code) |
| 422 | Unprocessable Entity — validation error |
| 429 | Too Many Requests — rate limit exceeded |
| 500 | Internal Server Error — server error |
Pagination
Most list endpoints accept page (1-based) and limit (items per page), either as query parameters on a GET or as body fields on a POST .../list. The maximum limit and default sort vary per resource — see the specific endpoint's documentation.
Filtering and searching
Where a POST .../list endpoint supports filtering, filters are passed as an object keyed by field name, each with an operation and a value:
{
"page": 1,
"limit": 20,
"search": "optional free-text search",
"filters": {
"status": { "operation": "eq", "value": "active" },
"created_at": { "operation": "gte", "value": "2026-01-01T00:00:00.000Z" }
}
}
Supported operation values (availability varies slightly by resource): eq, ne, between, like, nlike, gt, lt, gte, lte, in, nin, empty, nempty, nemptyarray.
Webhooks
Two independent, unrelated things are both called "webhooks" in this API:
- The Webhooks API — outbound notifications for the
form.submissionevent, which you register and manage directly. - Email event webhooks configured on Email Settings — SparkPost-backed notifications for delivery/bounce/open/click events, configured as part of your email sending setup.
They have different schemas and different registration surfaces — see each page for details.
Quick start
- Get an API key from your Stack9 administrator.
- Make a test request, e.g.
GET /api/tenant/info(see the Tenant API). - Read the reference page for the resource you're integrating with.
- Make direct HTTP requests with your language/framework's standard HTTP client — there is no officially published client SDK referenced in this documentation today.
Resource documentation
Marketing
- Email Settings — sending domains, sender identities, suppressions, and email event webhooks.
- Email Templates — reusable email templates and snippets.
- Email Transmissions — send one-off or bulk email directly, independent of a campaign.
- Marketing Campaigns — campaigns, campaign emails, and engagement tracking.
- Marketing Lists & Audiences — organize subscribers into lists and audiences.
- Marketing Subscribers — subscriber data, preferences, and engagement.
- Marketing Events — the raw event stream and cross-campaign engagement queries.
- Journeys — event- and time-triggered marketing automation workflows.
- Reports — asynchronous CSV exports.
Forms
- Forms — form builder, themes, and submissions.
- Webhooks — get notified in real time when a form is submitted.
Content
- Pages & Documents — headless CMS: projects, document/slice models, documents, redirects, site settings, live preview, and duplication.
- File Manager — the shared asset library behind Pages, Marketing, and Email.
Platform
- Business Units — data segregation for multi-brand/multi-dealership tenants.
- Tenant — tenant identity and health checks.
- Entity Versioning & Audit — version history and deleted-record recovery, applicable across most resources above.
- AI Assistants — configure and interact with AI assistants.