Developer access
Current release · Updated October 2, 2026
DryKraft Developer access reference: methods, permissions, request fields, response shapes, examples and current limits. Read authentication and error handling first.
/api/developer/accountsList service accounts
Access: Owner or admin · Success: 200
25 identities per cursor page, including disabled identities. Credentials cannot use these administrator endpoints.
Query parameters
| Parameter | Type | Required | Details |
|---|---|---|---|
cursor | uuid | No |
No request body is required.
Response
| Field | Type | Required | Details |
|---|---|---|---|
accounts | ServiceAccount[] | No | |
next_cursor | string or null | No |
curl --request GET \
--url 'https://app.drykraft.com/api/developer/accounts' \
--cookie 'drykraft_session=<YOUR_SESSION_TOKEN>'/api/developer/accountsCreate service account
Access: Owner or admin · Success: 201
Current password approval required, limited to 30 approval attempts per account per 15 minutes. Up to 100 active identities. Reuse the same UUID/settings to recover creation without another identity; a completed retry returns 200.
JSON request
| Field | Type | Required | Details |
|---|---|---|---|
id | uuid | Yes | |
name | string | Yes | Service account name Max 100 characters. |
permissions | DeveloperPermissions | Yes | |
password | string | Yes | Max 128 characters. |
Response
Use ServiceAccount.
curl --request POST \
--url 'https://app.drykraft.com/api/developer/accounts' \
--cookie 'drykraft_session=<YOUR_SESSION_TOKEN>' \
--header 'Content-Type: application/json' \
--data '{
"id": "00000000-0000-4000-8000-000000000001",
"name": "<Service account name>",
"permissions": {
"people": [
"read"
]
},
"password": "<CURRENT_PASSWORD>"
}'/api/developer/accounts/{id}Update service account
Access: Owner or admin · Success: 200
Current version required. Expanding permissions or enabling a disabled identity requires current password. Reductions permanently narrow existing keys; empty keys revoke. Later expansion does not restore their former permissions. Disable waits for in-flight transactions; future requests fail. Keys/identities remain for audit history.
JSON request
| Field | Type | Required | Details |
|---|---|---|---|
name | string | Yes | Name Max 100 characters. |
permissions | DeveloperPermissions | Yes | |
disabled | boolean | Yes | Disable all keys |
version | integer | Yes | Positive optimistic version returned by the latest read. Refresh on 409; do not overwrite stale changes. Min 1. |
password | string | No | Max 128 characters. |
Response
Use ServiceAccount.
curl --request PUT \
--url 'https://app.drykraft.com/api/developer/accounts/00000000-0000-4000-8000-000000000001' \
--cookie 'drykraft_session=<YOUR_SESSION_TOKEN>' \
--header 'Content-Type: application/json' \
--data '{
"name": "<Name>",
"permissions": {
"people": [
"read"
]
},
"disabled": false,
"version": 1
}'/api/developer/accounts/{id}/keysList account keys
Access: Owner or admin · Success: 200
25 keys per cursor page. Includes revoked/expired keys; secrets and token hashes are never returned.
Query parameters
| Parameter | Type | Required | Details |
|---|---|---|---|
cursor | uuid | No |
No request body is required.
Response
| Field | Type | Required | Details |
|---|---|---|---|
account | ServiceAccount | No | |
keys | APIKey[] | No | |
next_cursor | string or null | No |
curl --request GET \
--url 'https://app.drykraft.com/api/developer/accounts/00000000-0000-4000-8000-000000000001/keys' \
--cookie 'drykraft_session=<YOUR_SESSION_TOKEN>'/api/developer/accounts/{id}/keysIssue a scoped key
Access: Owner or admin · Success: 201
Current password/account version required. Permissions cannot exceed the saved account ceiling. Up to 10 active keys per identity, expiry 1-365 days. Secret appears only in the first 201 response; repeated UUID/settings return 200 and secret=null. This is not a retrievable credential.
JSON request
| Field | Type | Required | Details |
|---|---|---|---|
id | uuid | Yes | |
name | string | Yes | Name Max 100 characters. |
permissions | DeveloperPermissions | Yes | |
days | integer | Yes | Days to expiry Min 1. Max 365. |
account_version | integer | Yes | Positive optimistic version returned by the latest read. Refresh on 409; do not overwrite stale changes. Min 1. |
password | string | Yes | Max 128 characters. |
Response
Use KeyReceipt.
curl --request POST \
--url 'https://app.drykraft.com/api/developer/accounts/00000000-0000-4000-8000-000000000001/keys' \
--cookie 'drykraft_session=<YOUR_SESSION_TOKEN>' \
--header 'Content-Type: application/json' \
--data '{
"id": "00000000-0000-4000-8000-000000000001",
"name": "<Name>",
"permissions": {
"people": [
"read"
]
},
"days": 1,
"account_version": 1,
"password": "<CURRENT_PASSWORD>"
}'/api/developer/accounts/{id}/keys/{keyId}/rotateRotate a key
Access: Owner or admin · Success: 201
Atomically issue a successor with the old key’s current capped permissions and revoke the old key. In-flight work can finish; old-key future requests fail. Requires current password, key/account versions and a new UUID. Same completed rotation returns 200/secret=null; another rotation of a revoked key conflicts.
JSON request
| Field | Type | Required | Details |
|---|---|---|---|
id | uuid | Yes | |
version | integer | Yes | Positive optimistic version returned by the latest read. Refresh on 409; do not overwrite stale changes. Min 1. |
account_version | integer | Yes | Positive optimistic version returned by the latest read. Refresh on 409; do not overwrite stale changes. Min 1. |
days | integer | Yes | Days to expiry Min 1. Max 365. |
password | string | Yes | Max 128 characters. |
Response
Use KeyReceipt.
curl --request POST \
--url 'https://app.drykraft.com/api/developer/accounts/00000000-0000-4000-8000-000000000001/keys/00000000-0000-4000-8000-000000000001/rotate' \
--cookie 'drykraft_session=<YOUR_SESSION_TOKEN>' \
--header 'Content-Type: application/json' \
--data '{
"id": "00000000-0000-4000-8000-000000000001",
"version": 1,
"account_version": 1,
"days": 1,
"password": "<CURRENT_PASSWORD>"
}'/api/developer/accounts/{id}/keys/{keyId}/revokeRevoke a key
Access: Owner or admin · Success: 200
Current key version required. Revoked keys are retained in history; repeated revocation is safe. Revocation waits for an in-flight business transaction before completing.
JSON request
| Field | Type | Required | Details |
|---|---|---|---|
version | integer | Yes | Positive optimistic version returned by the latest read. Refresh on 409; do not overwrite stale changes. Min 1. |
Response
Use APIKey.
curl --request POST \
--url 'https://app.drykraft.com/api/developer/accounts/00000000-0000-4000-8000-000000000001/keys/00000000-0000-4000-8000-000000000001/revoke' \
--cookie 'drykraft_session=<YOUR_SESSION_TOKEN>' \
--header 'Content-Type: application/json' \
--data '{
"version": 1
}'/api/developer/requestsRead API request history
Access: Owner or admin · Success: 200
25 normalized operation/status rows per cursor page. No authorization values, bodies, raw URLs or query strings are recorded. History completes asynchronously after the response; process loss can omit a terminal history row. Valid authenticated attempts are metered before dispatch.
Query parameters
| Parameter | Type | Required | Details |
|---|---|---|---|
cursor | uuid | No |
No request body is required.
Response
| Field | Type | Required | Details |
|---|---|---|---|
items | object[] | No | |
next_cursor | string or null | No |
curl --request GET \
--url 'https://app.drykraft.com/api/developer/requests' \
--cookie 'drykraft_session=<YOUR_SESSION_TOKEN>'