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
| Tier | Requests/min |
|---|---|
| Free | 60 |
| Pro | 300 |
| Enterprise | Unlimited |
Rate limit headers are included in every response:
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 45
X-RateLimit-Reset: 1717243260 Error responses
| Status | Meaning |
|---|---|
| 400 | Bad request — invalid parameters |
| 401 | Unauthorized — missing or invalid API key |
| 403 | Forbidden — key doesn't have required scope |
| 404 | Resource not found |
| 429 | Rate limit exceeded |
| 500 | Internal server error |