Documentation
API Reference

API Reference

Manage your Tenpace configuration programmatically with the REST API.

Authentication

All API requests require an API key passed in the Authorization header.

Authorization: Bearer tp_live_xxxxxxxxxxxxxxxxxx

Create API keys in Settings → API Keys. Keys can be scoped to specific permissions (read-only, manage-webhooks, admin).

Keep API keys secret. Never commit them to source control or expose them client-side.

Base URL

https://api.tenpace.com

All endpoints return JSON. Successful responses use HTTP 2xx status codes. Errors return a JSON object with an error field.

Webhooks

List webhooks

GET /api/webhooks

Response:
{
  "webhooks": [
    {
      "publicId": "wh_abc123",
      "url": "https://example.com/hooks/tenpace",
      "events": ["pr.opened", "pr.ready_to_merge"],
      "active": true,
      "description": "Production handler",
      "createdAt": "2025-01-01T00:00:00.000Z"
    }
  ]
}

Create webhook

POST /api/webhooks

{
  "url": "https://example.com/hooks/tenpace",
  "events": ["pr.ready_to_merge", "review.sla_breached"],
  "description": "Merge automation"
}

Response (201):
{
  "webhook": { "publicId": "wh_abc123", ... },
  "secret": "whsec_xxxxxxxx"   // Only shown once!
}

Get webhook

GET /api/webhooks/:id

Update webhook

PATCH /api/webhooks/:id

{
  "active": false,
  "events": ["*"]
}

Delete webhook

DELETE /api/webhooks/:id

List deliveries

GET /api/webhooks/:id/deliveries

Response:
{
  "deliveries": [
    {
      "publicId": "del_xyz",
      "event": "pr.ready_to_merge",
      "status": "delivered",
      "responseStatus": 200,
      "responseMs": 45,
      "attempt": 1,
      "deliveredAt": "2025-06-01T14:00:00.000Z"
    }
  ]
}

Channels

List channels

GET /api/channels

Get channel

GET /api/channels/:id

Update channel

PATCH /api/channels/:id

{
  "repoNameInMessages": true,
  "reviewerMentionPolicy": "connected_only"
}

Team members

List members

GET /api/team/members

Response:
{
  "members": [
    {
      "userId": "u_abc",
      "displayName": "Alice",
      "github": "alice-gh",
      "slackUserId": "U01ABC",
      "role": "member"
    }
  ]
}

Rate limits

TierRequests/min
Free60
Pro300
EnterpriseUnlimited

Rate limit headers are included in every response:

X-RateLimit-Limit: 60
X-RateLimit-Remaining: 45
X-RateLimit-Reset: 1717243260

Error responses

StatusMeaning
400Bad request — invalid parameters
401Unauthorized — missing or invalid API key
403Forbidden — key doesn't have required scope
404Resource not found
429Rate limit exceeded
500Internal server error