Skip to main content

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/json on every request with a body.
  • Path parameters are denoted with curly braces in the endpoint documentation (e.g. {code}).
  • Many list endpoints are POST .../list rather than GET with query parameters, so they can accept a structured request body (pagination, search, and a filters object) — 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 CodeDescription
200Success — request completed successfully
400Bad Request — invalid request parameters
401Unauthorized — invalid or missing API key
403Forbidden — insufficient permissions
404Not Found — resource not found
409Conflict — resource conflict (e.g. duplicate code)
422Unprocessable Entity — validation error
429Too Many Requests — rate limit exceeded
500Internal 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.submission event, 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

  1. Get an API key from your Stack9 administrator.
  2. Make a test request, e.g. GET /api/tenant/info (see the Tenant API).
  3. Read the reference page for the resource you're integrating with.
  4. 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

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.