API Keys Endpoints
Endpoints for managing API keys programmatically.
List API Keys
Get all API keys for your organization.
GET /v1/api-keys
Query Parameters
| Parameter | Type | Description |
|---|---|---|
page | integer | Page number (default: 1) |
per_page | integer | Items per page (default: 20, max: 100) |
status | string | Filter: active, revoked, expired |
Response
{
"success": true,
"data": [
{
"id": "key_123",
"name": "Production Server",
"description": "Main production API key",
"prefix": "pk_live_abc",
"status": "active",
"created_at": "2024-01-15T10:30:00Z",
"last_used": "2024-01-20T15:45:00Z",
"expires_at": null,
"permissions": {
"mcps": "*"
},
"usage": {
"total_requests": 5000,
"requests_today": 250
}
}
],
"pagination": {
"page": 1,
"per_page": 20,
"total": 2,
"total_pages": 1
}
}
Get API Key Details
Get details about a specific API key.
GET /v1/api-keys/{key_id}
Response
{
"success": true,
"data": {
"id": "key_123",
"name": "Production Server",
"description": "Main production API key",
"prefix": "pk_live_abc",
"status": "active",
"created_at": "2024-01-15T10:30:00Z",
"created_by": {
"id": "user_123",
"email": "alice@example.com"
},
"last_used": "2024-01-20T15:45:00Z",
"expires_at": null,
"permissions": {
"mcps": "*"
},
"usage": {
"total_requests": 5000,
"requests_today": 250,
"requests_this_week": 1200,
"requests_this_month": 5000
},
"recent_activity": [
{
"timestamp": "2024-01-20T15:45:00Z",
"mcp_id": "mcp_123",
"tool": "get_weather",
"status": "success"
}
]
}
}
Create API Key
Generate a new API key.
POST /v1/api-keys
Request Body
{
"name": "Development Key",
"description": "For local development",
"expires_at": "2024-06-15T00:00:00Z",
"permissions": {
"mcps": ["mcp_123", "mcp_456"]
}
}
Permissions Options
All MCPs:
{
"permissions": {
"mcps": "*"
}
}
Specific MCPs:
{
"permissions": {
"mcps": ["mcp_123", "mcp_456"]
}
}
Response
{
"success": true,
"data": {
"id": "key_789",
"name": "Development Key",
"key": "pk_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"prefix": "pk_live_xxx",
"status": "active",
"created_at": "2024-01-20T16:00:00Z",
"expires_at": "2024-06-15T00:00:00Z",
"permissions": {
"mcps": ["mcp_123", "mcp_456"]
}
}
}
warning
The full API key is only returned once during creation. Store it securely before leaving this page.
Update API Key
Update API key metadata.
PATCH /v1/api-keys/{key_id}
Request Body
{
"name": "Updated Key Name",
"description": "Updated description"
}
Note: Permissions and expiration cannot be modified after creation. Create a new key instead.
Response
{
"success": true,
"data": {
"id": "key_123",
"name": "Updated Key Name",
"description": "Updated description",
"updated_at": "2024-01-20T16:00:00Z"
}
}
Revoke API Key
Immediately disable an API key.
DELETE /v1/api-keys/{key_id}
Response
{
"success": true,
"data": {
"id": "key_123",
"status": "revoked",
"revoked_at": "2024-01-20T16:00:00Z"
}
}
Get Key Usage Statistics
Get detailed usage for a specific key.
GET /v1/api-keys/{key_id}/usage
Query Parameters
| Parameter | Type | Description |
|---|---|---|
period | string | day, week, month |
start_date | string | Start date (ISO 8601) |
end_date | string | End date (ISO 8601) |
Response
{
"success": true,
"data": {
"key_id": "key_123",
"period": "week",
"total_requests": 1200,
"by_mcp": [
{
"mcp_id": "mcp_123",
"name": "Weather API",
"requests": 800
},
{
"mcp_id": "mcp_456",
"name": "Calculator",
"requests": 400
}
],
"by_day": [
{ "date": "2024-01-14", "requests": 150 },
{ "date": "2024-01-15", "requests": 180 },
{ "date": "2024-01-16", "requests": 200 }
],
"by_status": {
"success": 1150,
"error": 50
}
}
}
Errors
400 Bad Request
{
"success": false,
"error": {
"code": "invalid_request",
"message": "Invalid permissions format"
}
}
403 Forbidden
{
"success": false,
"error": {
"code": "forbidden",
"message": "Cannot revoke your only active key"
}
}
404 Not Found
{
"success": false,
"error": {
"code": "not_found",
"message": "API key not found"
}
}
422 Validation Error
{
"success": false,
"error": {
"code": "validation_error",
"message": "Validation failed",
"details": {
"expires_at": "Must be a future date"
}
}
}