Permissions
Permission requests control which scopes a machine can access. Use these endpoints to list, inspect, revoke, and revalidate permissions.
/api/permissionsList all permission requests for the authenticated user. Can optionally filter by machine.
API key, Session cookie, or Machine JWT
| Name | Type | Description |
|---|---|---|
| machineId | string | Filter permissions by a specific machine ID |
{
"permissions": [
{
"id": "pr_a1b2c3",
"name": "github-access",
"machineId": "m_8f3a...",
"userId": "user_abc123",
"status": "active",
"mode": "scoped",
"requestedScopes": ["github::repo"],
"scopeApprovals": { "github::repo": "2026-02-10T..." },
"createdAt": "2026-02-10T08:00:00.000Z",
"allowDelegation": true
}
]
}curl
curl https://keychains.dev/api/permissions \ -H "Authorization: Bearer kc_your_api_key" # Filter by machine curl "https://keychains.dev/api/permissions?machineId=m_8f3a..." \ -H "Authorization: Bearer kc_your_api_key"
Node.js
const res = await fetch("https://keychains.dev/api/permissions", {
headers: { Authorization: "Bearer kc_your_api_key" },
});
const { permissions } = await res.json();/api/permissions/:idGet details of a specific permission request.
API key, Session cookie, or Machine JWT
{
"id": "pr_a1b2c3",
"name": "github-access",
"machineId": "m_8f3a...",
"userId": "user_abc123",
"status": "active",
"mode": "scoped",
"requestedScopes": ["github::repo"],
"scopeApprovals": { "github::repo": "2026-02-10T..." },
"createdAt": "2026-02-10T08:00:00.000Z",
"allowDelegation": true,
"description": "Access to GitHub repositories"
}curl
curl https://keychains.dev/api/permissions/pr_a1b2c3 \ -H "Authorization: Bearer kc_your_api_key"
Node.js
const res = await fetch("https://keychains.dev/api/permissions/pr_a1b2c3", {
headers: { Authorization: "Bearer kc_your_api_key" },
});
const permission = await res.json();/api/permissions/:idRevoke a permission request. This immediately disables the permission and cascades to all delegates created from it.
API key, Session cookie, or Machine JWT
{
"id": "pr_a1b2c3",
"status": "revoked",
"revokedAt": "2026-02-17T10:00:00.000Z"
}curl
curl -X DELETE https://keychains.dev/api/permissions/pr_a1b2c3 \ -H "Authorization: Bearer kc_your_api_key"
Node.js
await fetch("https://keychains.dev/api/permissions/pr_a1b2c3", {
method: "DELETE",
headers: { Authorization: "Bearer kc_your_api_key" },
});/api/permissions/:id/revalidateTrigger revalidation for a permission. Sets the status to 'needs_revalidation', freezing the permission until the user re-confirms. Useful for periodic security reviews.
Session cookie only (not API key — requires full user session)
{
"id": "pr_a1b2c3",
"status": "needs_revalidation"
}curl
curl -X POST https://keychains.dev/api/permissions/pr_a1b2c3/revalidate \ -H "Authorization: Bearer <session-jwt>"