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:
| Scope | Access |
|---|
projects:read | List and retrieve projects |
tasks:read | List and retrieve tasks |
customers:read | List and retrieve customers |
members:read | List 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.
- Open Workspace settings → Integrations → Open API
- Choose Create secret
- Give the secret a label (for example
prod-etl, billing-cron) so you can audit usage later
- Select the scopes this integration needs (least privilege)
- 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).
List endpoints accept:
| Query | Description |
|---|
limit | Max items per page (default and maximum are implementation-defined; typical default 50, max 200) |
cursor | Opaque 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
| Query | Description |
|---|
limit, cursor | Pagination |
status | Filter by project status key (workspace-defined) |
teamId | Filter 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
| Query | Description |
|---|
limit, cursor | Pagination |
projectId | Filter by project |
status | Filter by task status (toDo, inProgress, inReview, done, cancelled, duplicate, backlog) |
teamId | Filter 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 Do → toDo, In Progress → inProgress, In Review → inReview, Done → done, Cancelled → cancelled, Duplicate → duplicate, Backlog → backlog). 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
| Query | Description |
|---|
limit, cursor | Pagination |
q | Search 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
| Query | Description |
|---|
limit, cursor | Pagination |
status | active, 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.