Objects & CRM records
Current release · Updated October 2, 2026
DryKraft objects & crm records API: methods, permissions, request fields, response shapes, examples and current limits. Read authentication and error handling first.
/api/objectsList object definitions
Access: Workspace member · Success: 200
Built-in and custom definitions, including field schemas.
No request body is required.
Response
Object[]. Also tenant_id, built_in and timestamps
curl --request GET \
--url 'https://app.drykraft.com/api/objects' \
--cookie 'drykraft_session=<YOUR_SESSION_TOKEN>'/api/objectsCreate custom object
Access: Owner or admin · Success: 201
Unique key and field keys. Currency fields require a text currency-code field; one is added automatically if absent. Maximum 100 fields including currency.
JSON request
Use Object.
Response
Use Object.
curl --request POST \
--url 'https://app.drykraft.com/api/objects' \
--cookie 'drykraft_session=<YOUR_SESSION_TOKEN>' \
--header 'Content-Type: application/json' \
--data '{
"key": "projects",
"name": "Projects",
"singular_name": "Project",
"fields": [
{
"key": "name",
"name": "Project name",
"type": "text",
"required": true
}
]
}'/api/objects/{key}/fieldsAdd object field
Access: Owner or admin · Success: 200
Duplicate key is 409. Required fields cannot be added when records already exist. This release has no field-edit/delete route.
JSON request
Use Field.
Response
Use Object.
curl --request POST \
--url 'https://app.drykraft.com/api/objects/people/fields' \
--cookie 'drykraft_session=<YOUR_SESSION_TOKEN>' \
--header 'Content-Type: application/json' \
--data '{
"key": "region",
"name": "Region",
"type": "text",
"required": false
}'/api/records/{key}List records
Access: Workspace member · Success: 200
Latest created first. Saved list/filter intersects search/status. Financial records can be read here, but must be mutated through Finance.
Query parameters
| Parameter | Type | Required | Details |
|---|---|---|---|
search | string | No | Optional search in name/email/company/customer/vendor/invoice number, max 200 |
limit | integer | No | Default 50 Min 1. Max 100. |
cursor | string | No | Opaque next_cursor, max 500 |
status | string | No | Exact status, max 80 |
list | uuid | No | Optional saved smart-list ID |
filter | string | No | Optional JSON-encoded Filter; mutually exclusive with list, max 10,000 |
No request body is required.
Response
Use RecordPage.
curl --request GET \
--url 'https://app.drykraft.com/api/records/people' \
--cookie 'drykraft_session=<YOUR_SESSION_TOKEN>'/api/records/{key}Create record
Access: Owner, admin or member · Success: 201
Nonfinancial objects only. Field types, required values, relations and currencies are validated.
JSON request
| Field | Type | Required | Details |
|---|---|---|---|
data | object | Yes | Object field values. Only keys in the workspace object definition are allowed; required fields and field types are validated. |
Response
Use Record.
curl --request POST \
--url 'https://app.drykraft.com/api/records/people' \
--cookie 'drykraft_session=<YOUR_SESSION_TOKEN>' \
--header 'Content-Type: application/json' \
--data '{
"data": {
"name": "Example person"
}
}'/api/records/{key}/{id}Get record
Access: Workspace member · Success: 200
404 for a missing record in the selected workspace.
No request body is required.
Response
Use Record.
curl --request GET \
--url 'https://app.drykraft.com/api/records/people/00000000-0000-4000-8000-000000000001' \
--cookie 'drykraft_session=<YOUR_SESSION_TOKEN>'/api/records/{key}/{id}Replace record data
Access: Owner, admin or member · Success: 200
Supply the complete desired field data and latest version. This is not a partial patch. Nonfinancial objects only.
JSON request
| Field | Type | Required | Details |
|---|---|---|---|
data | object | Yes | Object field values. Only keys in the workspace object definition are allowed; required fields and field types are validated. |
version | integer | Yes | Positive optimistic version returned by the latest read. Refresh on 409; do not overwrite stale changes. Min 1. |
Response
Use Record.
curl --request PUT \
--url 'https://app.drykraft.com/api/records/people/00000000-0000-4000-8000-000000000001' \
--cookie 'drykraft_session=<YOUR_SESSION_TOKEN>' \
--header 'Content-Type: application/json' \
--data '{
"data": {
"name": "Example person"
},
"version": 1
}'/api/records/{key}/{id}Delete record
Access: Owner, admin or member · Success: 200
Nonfinancial only. Related records can prevent deletion. Supply version to protect against concurrent edits.
Query parameters
| Parameter | Type | Required | Details |
|---|---|---|---|
version | integer | No | Positive optimistic version returned by the latest read. Refresh on 409; do not overwrite stale changes. Min 1. |
No request body is required.
Response
Use OK.
curl --request DELETE \
--url 'https://app.drykraft.com/api/records/people/00000000-0000-4000-8000-000000000001' \
--cookie 'drykraft_session=<YOUR_SESSION_TOKEN>'/api/leads/{id}/convertConvert lead to person
Access: Owner, admin or member · Success: 200
Creates a person or reuses a matching email, sets lead Converted and adds converted_to link. Does not create a deal. Already converted returns 409.
No request body is required.
Response
| Field | Type | Required | Details |
|---|---|---|---|
person | Record | No |
curl --request POST \
--url 'https://app.drykraft.com/api/leads/00000000-0000-4000-8000-000000000001/convert' \
--cookie 'drykraft_session=<YOUR_SESSION_TOKEN>'/api/activitiesList recent activities
Access: Workspace member · Success: 200
Latest 50 with actor and record labels.
Query parameters
| Parameter | Type | Required | Details |
|---|---|---|---|
record_id | uuid | No |
No request body is required.
Response
object[]. id, record_id, actor_id, actor_name, record_name, object_key, type, body, created_at
curl --request GET \
--url 'https://app.drykraft.com/api/activities' \
--cookie 'drykraft_session=<YOUR_SESSION_TOKEN>'/api/activitiesAdd record activity
Access: Owner, admin or member · Success: 201
Notes/call/email/meeting entries record activity; they do not send a message or place a call.
JSON request
| Field | Type | Required | Details |
|---|---|---|---|
record_id | uuid | Yes | |
body | string | Yes | Nonblank note Max 10000 characters. |
type | note | call | email | meeting | No | Defaults note |
Response
object. Saved activity row
curl --request POST \
--url 'https://app.drykraft.com/api/activities' \
--cookie 'drykraft_session=<YOUR_SESSION_TOKEN>' \
--header 'Content-Type: application/json' \
--data '{
"record_id": "00000000-0000-4000-8000-000000000001",
"body": "<Nonblank note>"
}'/api/searchSearch records
Access: Workspace member · Success: 200
Matches record name, latest updated first, maximum 20 results.
Query parameters
| Parameter | Type | Required | Details |
|---|---|---|---|
q | string | Yes | Required query Max 100 characters. |
No request body is required.
Response
object[].
curl --request GET \
--url 'https://app.drykraft.com/api/search?q=%3CRequired%20query%3E' \
--cookie 'drykraft_session=<YOUR_SESSION_TOKEN>'