API reference

All SoftSolz APIs share the same auth, error and pagination shapes. Learn once, integrate anywhere.

Base URL

https://app.softsolz.uk/api/services/<service-id>/...

Public v1 endpoints live under /api/v1/services/<service-id>/.... Internal cookie-auth endpoints are not part of the public contract.

Headers

HeaderRequiredUse
Authorization: Bearer sk_…YesIdentify your tenant + scope.
Content-Type: application/jsonPOST/PATCHJSON body.
Idempotency-Key: <uuid>RecommendedSafe retries - see below.
X-Request-Id: <uuid>OptionalEchoed back as Softsolz-Request-Id.

Idempotency

Add the same Idempotency-Key on a retry - we return the original response instead of acting twice. Keys are scoped to method + path + body hash, kept for 24 h.

Replaying the same key with a different body returns 409 idempotency_key_conflict.

Pagination

GET /api/v1/services/forms/forms?limit=50&offset=0

List responses include meta.has_more so you can stop paging without an extra round-trip:

{
  "data": [ ... ],
  "meta": { "limit": 50, "offset": 0, "has_more": true }
}

Rate limits

Each key has a rate_limit_per_minute (default 60). Responses include:

X-RateLimit-Limit: 60
X-RateLimit-Remaining: 47
X-RateLimit-Reset: 1715600000

Over the limit → 429 + Retry-After seconds.

Error shape

{
  "error": {
    "code": "validation_failed",
    "message": "Field 'email' is required.",
    "details": [ ... ]
  }
}

Common codes:

Versioning

Stable APIs live under /api/v1/.... Breaking changes ship as /api/v2/... with a 12-month deprecation window. Endpoints emit Deprecation + Sunset headers when scheduled for removal.


Forms endpoints

Full request and response shapes are on the Forms API page.

Method & pathScopeDoes
GET /api/v1/services/forms/formsservice.forms.viewList forms with counts.
GET /api/v1/services/forms/forms/by-slug/:slugservice.forms.viewFetch a form definition by slug.
POST /api/v1/services/forms/formsservice.forms.manageCreate a form.
PATCH /api/v1/services/forms/forms/:idservice.forms.manageUpdate a form.
DELETE /api/v1/services/forms/forms/:idservice.forms.manageDelete a form.
GET /api/v1/services/forms/forms/:id/submissionsservice.forms.viewList submissions for a form.
GET /api/v1/services/forms/forms/:id/submissions/:subIdservice.forms.viewRead a submission (marks it read).
PATCH /api/v1/services/forms/forms/:id/submissions/:subIdservice.forms.submissions.manageMark a submission read/unread.
DELETE /api/v1/services/forms/forms/:id/submissions/:subIdservice.forms.submissions.manageDelete a submission.
GET /api/v1/services/forms/forms/:id/submissions.csvservice.forms.exportExport submissions as CSV.
POST /api/v1/services/forms/forms/:slug/submitservice.forms.submitSubmit a response to a published form.

Blogs endpoints

Full request and response shapes are on the Blogs API page.

Method & pathScopeDoes
GET /api/v1/services/blogs/posts/publishedservice.blogs.readList published posts.
GET /api/v1/services/blogs/posts/published/:slugservice.blogs.readFetch a published post by slug.
GET /api/v1/services/blogs/postsservice.blogs.viewList posts of any status.
GET /api/v1/services/blogs/posts/:idservice.blogs.viewFetch a post by id.
POST /api/v1/services/blogs/postsservice.blogs.manageCreate a draft post.
PATCH /api/v1/services/blogs/posts/:idservice.blogs.manageUpdate a post.
POST /api/v1/services/blogs/posts/:id/statusservice.blogs.publishPublish, schedule or archive a post.
DELETE /api/v1/services/blogs/posts/:idservice.blogs.manageDelete a post.
GET /api/v1/services/blogs/subscribersservice.blogs.viewList subscribers.
POST /api/v1/services/blogs/subscribersservice.blogs.manageAdd a subscriber.
PATCH /api/v1/services/blogs/subscribers/:idservice.blogs.manageUpdate a subscriber status.
DELETE /api/v1/services/blogs/subscribers/:idservice.blogs.manageDelete a subscriber.
GET /api/v1/services/blogs/analyticsservice.blogs.viewBlog analytics.
GET /api/v1/services/blogs/categoriesservice.blogs.viewCategories in use.

Payments endpoints

The Payments service exposes these public v1 endpoints. Full request and response shapes are on the Payments API page.

Method & pathScopeDoes
POST /api/v1/services/payments/checkout-sessionsservice.payments.checkout.createCreate a hosted Checkout session for a one-off payment.
GET /api/v1/services/payments/payment-linksservice.payments.links.readList the payment links in your workspace.
GET /api/v1/services/payments/payment-links/:idservice.payments.links.readFetch a single payment link by id.
POST /api/v1/services/payments/payment-linksservice.payments.links.writeCreate a reusable payment link.
PATCH /api/v1/services/payments/payment-links/:idservice.payments.links.writeUpdate an existing payment link.

Per-service references