{"openapi":"3.1.0","info":{"title":"Spike.sh (BYOK) API","version":"0.1.0","description":"Spike.sh (BYOK) lets an AI assistant read your own Spike.sh data through the Spike.sh API with a key you supply (Spike API key). Read-only: 12 tools (list_teams, list_incidents, get_incident, list_incident_occurrences, list_services, get_service, list_integrations, list_escalations, list_alert_rules, list_on_call_schedules, list_status_pages, list_status_page_components). The BYOK key travels...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-spike-sh.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-spike-sh/docs"},"termsOfService":"https://connectorbay.com/byok-spike-sh/terms"},"servers":[{"url":"https://byok-spike-sh.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-spike-sh/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/list_teams":{"post":{"operationId":"list_teams","summary":"List all teams in the organization with id, name, short uid and privacy flag. Use a returned _id as the team id of this ","description":"List all teams in the organization with id, name, short uid and privacy flag. Use a returned _id as the team id of this connector. Use for \"Which Spike teams exist\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_teamsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_incidents":{"post":{"operationId":"list_incidents","summary":"List the team's incidents with status (NACK triggered, ACK acknowledged, RES resolved), priority, severity and times, pl","description":"List the team's incidents with status (NACK triggered, ACK acknowledged, RES resolved), priority, severity and times, plus counts of total and open incidents. Use for \"Which Spike incidents are open\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_incidentsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_incident":{"post":{"operationId":"get_incident","summary":"Get one incident by counterId (for example ab12-17): message, status, priority, severity, times and duration. Use for \"S","description":"Get one incident by counterId (for example ab12-17): message, status, priority, severity, times and duration. Use for \"Show Spike incident ab12-17\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"counter_id":{"description":"Incident counterId (the counterId or id shown in the list call).","maxLength":60,"title":"Counter Id","type":"string"}},"required":["counter_id"],"title":"get_incidentArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_incident_occurrences":{"post":{"operationId":"list_incident_occurrences","summary":"List incident occurrences in a time window across teams, filterable by status, service and integration. Paged. Use for \"","description":"List incident occurrences in a time window across teams, filterable by status, service and integration. Paged. Use for \"What incidents did Spike record last week\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"start":{"description":"Window start, ISO 8601 (for example 2026-10-01T00:00:00Z).","maxLength":40,"title":"Start","type":"string"},"end":{"description":"Window end, ISO 8601.","maxLength":40,"title":"End","type":"string"},"status":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated statuses to keep: NACK, ACK, RES.","title":"Status"},"service":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated service ids to keep.","title":"Service"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"Results per page (default 25, maximum 100).","title":"Per Page"}},"required":["start","end"],"title":"list_incident_occurrencesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_services":{"post":{"operationId":"list_services","summary":"List the team's services (scopes that group integrations and incidents) with name, description and counter id. Use for \"","description":"List the team's services (scopes that group integrations and incidents) with name, description and counter id. Use for \"Which services are set up in Spike\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_servicesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_service":{"post":{"operationId":"get_service","summary":"Get one service by counter id with the number of its open incidents. Use for \"How many open incidents does Spike service","description":"Get one service by counter id with the number of its open incidents. Use for \"How many open incidents does Spike service 3 have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"counter_id":{"description":"Service counterId (the counterId or id shown in the list call).","maxLength":60,"title":"Counter Id","type":"string"}},"required":["counter_id"],"title":"get_serviceArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_integrations":{"post":{"operationId":"list_integrations","summary":"List the team's alert integrations with name, type slug, linked service and escalation ids and creation time (tokens and","description":"List the team's alert integrations with name, type slug, linked service and escalation ids and creation time (tokens and webhook URLs are left out). Use for \"Which integrations feed alerts into Spike\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_integrationsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_escalations":{"post":{"operationId":"list_escalations","summary":"List the team's escalation policies (names and ids). Use for \"What escalation policies does the Spike team have\".","description":"List the team's escalation policies (names and ids). Use for \"What escalation policies does the Spike team have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_escalationsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_alert_rules":{"post":{"operationId":"list_alert_rules","summary":"List the team's alert routing rules with name, enabled flag and creation time. Use for \"Which alert rules are enabled in","description":"List the team's alert routing rules with name, enabled flag and creation time. Use for \"Which alert rules are enabled in Spike\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_alert_rulesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_on_call_schedules":{"post":{"operationId":"list_on_call_schedules","summary":"List the team's on-call schedules with timezone and active flag (the people in them are not returned). Use for \"What on-","description":"List the team's on-call schedules with timezone and active flag (the people in them are not returned). Use for \"What on-call schedules exist in Spike\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_on_call_schedulesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_status_pages":{"post":{"operationId":"list_status_pages","summary":"List the organization's status pages with name, custom domain and creation time. Use for \"Which status pages do we have ","description":"List the organization's status pages with name, custom domain and creation time. Use for \"Which status pages do we have in Spike\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_status_pagesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_status_page_components":{"post":{"operationId":"list_status_page_components","summary":"List all components of a status page with current status (operational, degraded-performance, partial-outage, critical-ou","description":"List all components of a status page with current status (operational, degraded-performance, partial-outage, critical-outage, planned-maintenance), parent and order. Use for \"Is everything operational on our Spike status page\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"status_page_id":{"description":"Status page id (the _id from list_status_pages).","maxLength":60,"title":"Status Page Id","type":"string"}},"required":["status_page_id"],"title":"list_status_page_componentsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}