Skip to main content

Documentation Index

Fetch the complete documentation index at: https://apidocs.scripe.io/llms.txt

Use this file to discover all available pages before exploring further.

Projects

A project is a named container for content inside a workspace — typically one personal-brand profile or one company page. Notes, posts, sources, and queue slots all attach to a project. The v1 API exposes a paginated list of the workspace’s projects and a single-project read. Both are read-only in v1; mutating projects (creation, archive, pause) is dashboard-only.

GET /v1/projects

List the projects the authenticated workspace owns, ordered by creation time descending.
curl -i 'https://api.scripe.io/v1/projects?limit=50' \
  -H "Authorization: Bearer scripe_sk_live_…" \
  -H "Scripe-Api-Version: 2026-08-01"

Query parameters

NameTypeDefaultNotes
limitinteger50Page size. Clamped to 1…200; out of range → 400 bad_pagination.
cursorstringOpaque cursor from a previous response. See conventions.

Response

HTTP/1.1 200 OK
Content-Type: application/json

{
  "data": [
    {
      "id": "proj_01J9ZA…",
      "name": "Personal Brand",
      "type": "PERSONAL_BRAND",
      "status": "ACTIVE",
      "url": "https://www.linkedin.com/in/example",
      "createdAt": "2026-05-15T08:21:00.000Z"
    }
  ],
  "pagination": {
    "next_cursor": "eyJjcmVhdGVkQXQiOiIyMDI2L…",
    "has_more": true
  }
}

Field reference

PathTypeNotes
idstring (proj_*)Stable identifier. Use it everywhere else in the API.
namestringDisplay name set in the dashboard. May contain emoji.
typestringPERSONAL_BRAND | COMPANY_PAGE. More may land in additive minor releases.
statusstringACTIVE | PAUSED | ARCHIVED | ERROR. Filter clients should treat unknown values as ACTIVE.
urlstring | nullThe LinkedIn URL the project represents, if connected.
createdAtstring (ISO 8601)UTC, millisecond precision.
Internal fields like the workspace’s owner user id, billing customer id, and onboarding flags are intentionally not in this response. If you need them, use the dashboard.

GET /v1/projects/{projectId}

Single project read. Returns the same shape as above, wrapped in a data field for symmetry with future write endpoints.
curl -i https://api.scripe.io/v1/projects/proj_01J9ZA… \
  -H "Authorization: Bearer scripe_sk_live_…" \
  -H "Scripe-Api-Version: 2026-08-01"

Response

HTTP/1.1 200 OK
Content-Type: application/json

{
  "data": {
    "id": "proj_01J9ZA…",
    "name": "Personal Brand",
    "type": "PERSONAL_BRAND",
    "status": "ACTIVE",
    "url": "https://www.linkedin.com/in/example",
    "createdAt": "2026-05-15T08:21:00.000Z"
  }
}

Errors

StatusCodeWhen
400bad_cursor, bad_paginationCursor invalid / out-of-range limit. List endpoint only.
401unauthenticated, invalid_token, key_revoked, key_expired
403plan_not_eligible
404not_foundUnknown project id, OR a project that exists but belongs to another workspace. We do not distinguish — see conventions.
429rate_limited

Cross-workspace isolation

Every project read is scoped by the API key’s workspace. A request for proj_<other-workspace> returns 404 not_found — never a 403, so attackers cannot enumerate which project ids exist outside their workspace. The same isolation applies to the list endpoint: you only see your own workspace’s projects, and the pagination cursor is bound to that filter. You cannot inflate the result set by replaying another workspace’s cursor — the embedded (createdAt, id) keyset is workspace-agnostic, so it just no-ops against your own data.

What’s NOT here (yet)

  • Filtering by status / type. v1 returns all projects, regardless of status. Filter client-side. A ?status= parameter will land in v1.1 if there’s demand.
  • Project metrics. Engagement and analytics live behind the dashboard for now. Aggregated metrics endpoints are queued for Phase 4.
  • Write endpoints. Creating, pausing, or archiving a project is dashboard-only in v1.