Skip to main content

Documentation Index

Fetch the complete documentation index at: https://usepike.com/docs/llms.txt

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

The Pike Open API is an HTTPS API for automation, internal tooling, and integrations. Responses are JSON with camelCase property names. Conceptually, the resources mirror what you manage in the product; see Core concepts, Projects, Task properties, Customers, and Members. Base URL: https://api.usepike.com
Versioning: Pike automatically routes each request to the correct API version. Do not put a version segment in the path (for example /v1); the gateway selects the version from your request.

Authentication

Every request must include a workspace API secret in the Authorization header:
Authorization: Bearer <secret>
Secrets are opaque strings issued per workspace. They are not user passwords and do not grant access to the Pike web app session.

Scopes

Each secret is created with one or more scopes. Requests are rejected if the secret lacks permission for the operation. Examples:
ScopeAccess
projects:readList and retrieve projects
tasks:readList and retrieve tasks
customers:readList and retrieve customers
members:readList and retrieve members
The API will grow over time. Additional scopes (for example write access or new resources) can be provisioned on request for your workspace—contact Pike when you need more than the defaults. When you receive a formal OpenAPI document from us, it can list the full scope catalogue available to you, including any extras agreed for your account. Documented endpoints on this page always state which scopes apply.

Creating and managing API secrets (admins)

Only workspace administrators can create, rename, rotate, and revoke API secrets—same class of control as other sensitive workspace settings.
  1. Open Workspace settingsIntegrationsOpen API
  2. Choose Create secret
  3. Give the secret a label (for example prod-etl, billing-cron) so you can audit usage later
  4. Select the scopes this integration needs (least privilege)
  5. Copy the secret value immediately when it is shown. Pike does not display the full secret again after you leave the screen. Store it in a secrets manager (Vault, AWS Secrets Manager, Doppler, etc.)
Rotation: create a new secret with the same scopes, update your systems, then revoke the old secret. Revocation takes effect immediately.
Treat secrets like production credentials: never commit them to git, never log them, and prefer environment variables or your platform’s secret injection.

Conventions

  • Encoding: UTF-8 JSON bodies and responses.
  • Timestamps: ISO 8601 strings in UTC (for example 2026-04-09T14:30:00.000Z).
  • IDs: opaque string identifiers.
  • Pagination: list endpoints return a paginated envelope; use cursor from the previous response to fetch the next page.
  • Errors: structured JSON with a stable shape for support and logging (see Errors).

Pagination

List endpoints accept:
QueryDescription
limitMax items per page (default and maximum are implementation-defined; typical default 50, max 200)
cursorOpaque cursor from the previous response’s nextCursor
{
  "items": [],
  "nextCursor": "eyJ...",
  "hasMore": true
}
When hasMore is false, omit nextCursor or set it to null.

Errors

Failed requests return JSON with HTTP 4xx or 5xx and a body like:
{
  "error": {
    "code": "forbidden",
    "message": "Insufficient scope for this resource.",
    "requestId": "6ba7b810-9dad-41d1-80b4-00c04fd430c8"
  }
}
Include requestId when contacting support. Common code values include unauthorized, forbidden, not_found, rate_limited, invalid_request, and internal_error.

Rate limits

Requests are rate-limited per secret and workspace. Responses may include Retry-After when throttled. Integrations should use exponential backoff and respect 429 responses.

Resources

Projects

Projects are the container for delivery work in Pike; see Project overview. Scopes: projects:read List: GET /projects
QueryDescription
limit, cursorPagination
statusFilter by project status key (workspace-defined)
teamIdFilter by team id
Retrieve: GET /projects/{projectId} Example: list response
{
  "items": [
    {
      "id": "8f2a1c9e-3b7d-4f60-9a2b-1c9e3b7d4f60",
      "projectNumber": "2026-0142",
      "title": "Acme — Phase 2 rollout",
      "status": "inProgress",
      "statusCategory": "inProgress",
      "teamId": "91ab2c3d-4e5f-4a6b-8c1d-2c3d4e5f6a7b",
      "customerId": "7d2e1f9a-4b8c-4e1d-9f2a-1f9a4b8c7d2e",
      "description": "Delivery and training for regional offices.",
      "createdAt": "2026-03-01T09:15:22.000Z",
      "updatedAt": "2026-04-08T16:42:11.000Z"
    }
  ],
  "nextCursor": "eyJwcm9qZWN0SWQiOiI4ZjJhMWM5ZS0zYjdkLTRmNjAtOWEyYi0xYzllM2I3ZDRmNjAifQ",
  "hasMore": false
}
Example: single project
{
  "id": "8f2a1c9e-3b7d-4f60-9a2b-1c9e3b7d4f60",
  "projectNumber": "2026-0142",
  "title": "Acme — Phase 2 rollout",
  "status": "inProgress",
  "statusCategory": "inProgress",
  "teamId": "91ab2c3d-4e5f-4a6b-8c1d-2c3d4e5f6a7b",
  "customerId": "7d2e1f9a-4b8c-4e1d-9f2a-1f9a4b8c7d2e",
  "description": "Delivery and training for regional offices.",
  "phases": [
    {
      "id": "a1b2c3d4-e5f6-4789-a012-3456789abcde",
      "name": "Discovery",
      "startDate": "2026-03-01",
      "endDate": "2026-03-21"
    }
  ],
  "createdAt": "2026-03-01T09:15:22.000Z",
  "updatedAt": "2026-04-08T16:42:11.000Z"
}
status reflects your workspace’s configured project statuses; statusCategory maps to the fixed buckets (for example backlog, planned, inProgress, completed, cancelled).

Tasks

Tasks are work items with status, priority, assignees, and dates; see Task properties. Scopes: tasks:read List: GET /tasks
QueryDescription
limit, cursorPagination
projectIdFilter by project
statusFilter by task status (toDo, inProgress, inReview, done, cancelled, duplicate, backlog)
teamIdFilter by team
Retrieve: GET /tasks/{taskId} Example: list response
{
  "items": [
    {
      "id": "4e9a1b2c-3d4e-5f60-a4e9-1b2c3d4e5f60",
      "title": "Configure SSO for Acme",
      "description": "<p>Enable SAML and test IdP metadata.</p>",
      "status": "inProgress",
      "priority": "high",
      "projectId": "8f2a1c9e-3b7d-4f60-9a2b-1c9e3b7d4f60",
      "teamId": "91ab2c3d-4e5f-4a6b-8c1d-2c3d4e5f6a7b",
      "assigneeIds": [
        "c3d4e5f6-a7b8-4901-c234-56789abcdef0",
        "d4e5f6a7-b8c9-4012-d345-6789abcdef01"
      ],
      "startDate": "2026-04-01",
      "dueDate": "2026-04-15",
      "billableStatus": "billable",
      "customerId": "7d2e1f9a-4b8c-4e1d-9f2a-1f9a4b8c7d2e",
      "phaseId": "a1b2c3d4-e5f6-4789-a012-3456789abcde",
      "labelIds": ["b2c3d4e5-f6a7-4890-b123-456789abcdef"],
      "createdAt": "2026-03-28T11:00:00.000Z",
      "updatedAt": "2026-04-09T08:20:33.000Z"
    }
  ],
  "nextCursor": null,
  "hasMore": false
}
Status values match task statuses in the app (for example To DotoDo, In ProgressinProgress, In ReviewinReview, Donedone, Cancelledcancelled, Duplicateduplicate, Backlogbacklog). Priority matches task priority: none, low, medium, high, urgent. billableStatus may be billable, nonBillable, or null when the project has no customer.

Customers

Customer records used across projects and finance; see Customers overview. Scopes: customers:read List: GET /customers
QueryDescription
limit, cursorPagination
qSearch by name or number (optional)
Retrieve: GET /customers/{customerId} Example: list response
{
  "items": [
    {
      "id": "7d2e1f9a-4b8c-4e1d-9f2a-1f9a4b8c7d2e",
      "customerName": "Acme Corporation",
      "customerNumber": "C-10492",
      "taxVatId": "GB123456789",
      "mainCurrency": "GBP",
      "createdAt": "2025-11-10T10:00:00.000Z",
      "updatedAt": "2026-02-01T14:30:00.000Z"
    }
  ],
  "nextCursor": null,
  "hasMore": false
}
mainCurrency is an ISO 4217 code (for example USD, EUR, DKK).

Members

Workspace members (users and invitations); see Members. Scopes: members:read List: GET /members
QueryDescription
limit, cursorPagination
statusactive, invited, inactive (optional)
Retrieve: GET /members/{memberId} Example: list response
{
  "items": [
    {
      "id": "c3d4e5f6-a7b8-4901-c234-56789abcdef0",
      "email": "jane@example.com",
      "displayName": "Jane Doe",
      "status": "active",
      "workspaceRole": "member",
      "teamIds": [
        "91ab2c3d-4e5f-4a6b-8c1d-2c3d4e5f6a7b",
        "e5f6a7b8-c9d0-4123-e456-789abcdef012"
      ],
      "positionId": "f6a7b8c9-d0e1-4234-f567-89abcdef0123",
      "invitedAt": null,
      "joinedAt": "2025-06-01T12:00:00.000Z",
      "createdAt": "2025-06-01T12:00:00.000Z",
      "updatedAt": "2026-04-01T09:00:00.000Z"
    },
    {
      "id": "d4e5f6a7-b8c9-4012-d345-6789abcdef01",
      "email": "alex@example.com",
      "displayName": "Alex Kim",
      "status": "invited",
      "workspaceRole": "member",
      "teamIds": [],
      "positionId": null,
      "invitedAt": "2026-04-08T15:00:00.000Z",
      "joinedAt": null,
      "createdAt": "2026-04-08T15:00:00.000Z",
      "updatedAt": "2026-04-08T15:00:00.000Z"
    }
  ],
  "nextCursor": null,
  "hasMore": false
}
workspaceRole reflects coarse access (for example admin, member). Use teamIds to see which teams a member belongs to.

Example request

curl -sS \
  -H "Authorization: Bearer $PIKE_API_SECRET" \
  -H "Accept: application/json" \
  "https://api.usepike.com/projects?limit=10"

Request lifecycle

OpenAPI specification

A machine-readable OpenAPI 3.x document for this API can be provided on request. It can include your full scope catalogue, including additional scopes provisioned for your workspace. Contact usepike.com/contact or your Pike customer contact if you need a formal spec for procurement or gateway tooling.