Skip to content

Get started

Conventions: envelopes, pagination, errors

Every endpoint shares the same response envelope, pagination model, idempotency rules, and error format. Learn them once and they apply across the whole API.

Developer docs

6 min read

Response envelopes

Single resources return { data, meta }. Collections return { data, page, meta }. meta.correlationId is the request's trace id — include it when contacting support.

{
  "data": [ { "object": "client", "id": "…" }, … ],
  "page": { "cursor": null, "nextCursor": "eyJ…", "hasMore": true },
  "meta": { "correlationId": "c-…" }
}
List envelope.

Pagination

Lists use keyset (cursor) pagination — stable under inserts and fast at any depth. Pass limit (1–100) and the nextCursor from the previous page as cursor. Iterate until hasMore is false.

curl "https://api.skedcast.com/v1/posts?limit=50&cursor=eyJ…" \
  -H "Authorization: Bearer sked_live_YOUR_KEY"

Idempotency

Every POST must carry an Idempotency-Key header (any unique string — a UUID is ideal). Replaying the same key returns the original result instead of creating a duplicate, so a network retry is always safe.

Standard headers

HeaderDirectionPurpose
AuthorizationrequestBearer sked_… (API key) or Bearer <token> (OAuth)
Idempotency-KeyrequestRequired on POST; dedupes retries
X-Correlation-IdbothTrace id; echoed in meta.correlationId
RateLimit-*responseRemaining quota + reset (on throttle: Retry-After)

Errors

Errors are RFC 9457 application/problem+json. Every error carries a stable machine code, an HTTP status, a human title/detail, and the correlationId. Validation failures (422) add a per-field errors array.

{
  "type": "https://docs.skedcast.com/errors/validation_failed",
  "title": "Validation failed",
  "status": 422,
  "category": "bad-body",
  "code": "validation_failed",
  "detail": "One or more fields are invalid.",
  "correlationId": "c-…",
  "errors": [ { "path": "content", "message": "Required" } ]
}
Error shape.

Status codes

StatusMeaning
400 / 422Malformed request / validation failed
401Missing or invalid credentials
403Authenticated but lacking the scope/role
404Resource not found
409Conflict (idempotency or state)
429Rate limited — back off per Retry-After
5xxTransient/server error — safe to retry
conventionspaginationerrorsidempotency

FAQ

Why keyset pagination instead of page numbers?
Keyset (cursor) pagination is stable when rows are inserted or deleted mid-iteration and stays fast at any depth, unlike offset pagination. Just follow nextCursor until hasMore is false.

Be first in line when SkedCast opens

Join the waitlist — agencies on it get early access and launch-day onboarding.