Browse documentation

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.

GET/api/objects

List 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

Request shape (illustrative)
curl --request GET \
  --url 'https://app.drykraft.com/api/objects' \
  --cookie 'drykraft_session=<YOUR_SESSION_TOKEN>'
POST/api/objects

Create 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.

Request shape (illustrative)
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
    }
  ]
}'
POST/api/objects/{key}/fields

Add 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.

Request shape (illustrative)
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
}'
GET/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

ParameterTypeRequiredDetails
searchstringNoOptional search in name/email/company/customer/vendor/invoice number, max 200
limitintegerNoDefault 50 Min 1. Max 100.
cursorstringNoOpaque next_cursor, max 500
statusstringNoExact status, max 80
listuuidNoOptional saved smart-list ID
filterstringNoOptional JSON-encoded Filter; mutually exclusive with list, max 10,000

No request body is required.

Response

Use RecordPage.

Request shape (illustrative)
curl --request GET \
  --url 'https://app.drykraft.com/api/records/people' \
  --cookie 'drykraft_session=<YOUR_SESSION_TOKEN>'
POST/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

FieldTypeRequiredDetails
dataobjectYesObject field values. Only keys in the workspace object definition are allowed; required fields and field types are validated.

Response

Use Record.

Request shape (illustrative)
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"
  }
}'
GET/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.

Request shape (illustrative)
curl --request GET \
  --url 'https://app.drykraft.com/api/records/people/00000000-0000-4000-8000-000000000001' \
  --cookie 'drykraft_session=<YOUR_SESSION_TOKEN>'
PUT/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

FieldTypeRequiredDetails
dataobjectYesObject field values. Only keys in the workspace object definition are allowed; required fields and field types are validated.
versionintegerYesPositive optimistic version returned by the latest read. Refresh on 409; do not overwrite stale changes. Min 1.

Response

Use Record.

Request shape (illustrative)
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
}'
DELETE/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

ParameterTypeRequiredDetails
versionintegerNoPositive 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.

Request shape (illustrative)
curl --request DELETE \
  --url 'https://app.drykraft.com/api/records/people/00000000-0000-4000-8000-000000000001' \
  --cookie 'drykraft_session=<YOUR_SESSION_TOKEN>'
POST/api/leads/{id}/convert

Convert 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

FieldTypeRequiredDetails
personRecordNo
Request shape (illustrative)
curl --request POST \
  --url 'https://app.drykraft.com/api/leads/00000000-0000-4000-8000-000000000001/convert' \
  --cookie 'drykraft_session=<YOUR_SESSION_TOKEN>'
GET/api/activities

List recent activities

Access: Workspace member · Success: 200

Latest 50 with actor and record labels.

Query parameters

ParameterTypeRequiredDetails
record_iduuidNo

No request body is required.

Response

object[]. id, record_id, actor_id, actor_name, record_name, object_key, type, body, created_at

Request shape (illustrative)
curl --request GET \
  --url 'https://app.drykraft.com/api/activities' \
  --cookie 'drykraft_session=<YOUR_SESSION_TOKEN>'
POST/api/activities

Add 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

FieldTypeRequiredDetails
record_iduuidYes
bodystringYesNonblank note Max 10000 characters.
typenote | call | email | meetingNoDefaults note

Response

object. Saved activity row

Request shape (illustrative)
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>"
}'