Imports & smart lists
Current release · Updated October 2, 2026
DryKraft imports & smart lists API: methods, permissions, request fields, response shapes, examples and current limits. Read authentication and error handling first.
/api/record-tools/{key}/import/previewPreview CSV import
Access: Owner, admin or member · Success: 200
Nonfinancial objects only. Validates all rows without writing business records. First 20 errors and first five planned rows are returned.
JSON request
Use Import.
Response
Use ImportReport.
curl --request POST \
--url 'https://app.drykraft.com/api/record-tools/people/import/preview' \
--cookie 'drykraft_session=<YOUR_SESSION_TOKEN>' \
--header 'Content-Type: application/json' \
--data '{
"csv": "name,email\nExample Person,person@example.com\n",
"duplicates": "skip"
}'/api/record-tools/{key}/import/commitApply CSV import
Access: Owner, admin or member · Success: 200
Whole import is transactional. Reuse the same UUID with identical CSV/mapping/policy to safely retry; different content with that UUID is 409. Preview is advisory: commit revalidates current records.
JSON request
| Field | Type | Required | Details |
|---|---|---|---|
csv | string | Yes | UTF-8 CSV content, not a file path. Header required; <=500 data rows. Max 300000 characters. |
mapping | string or null[] | No | Max 100 items. |
duplicates | skip | update | error | No | People email duplicate policy, default skip. Blank update cells preserve existing values. |
id | uuid | Yes |
Response
| Field | Type | Required | Details |
|---|---|---|---|
id | uuid | No | |
created | integer | No | Created |
updated | integer | No | Updated |
skipped | integer | No | Skipped |
rows | integer | No | Rows |
curl --request POST \
--url 'https://app.drykraft.com/api/record-tools/people/import/commit' \
--cookie 'drykraft_session=<YOUR_SESSION_TOKEN>' \
--header 'Content-Type: application/json' \
--data '{
"csv": "name,email\nExample Person,person@example.com\n",
"duplicates": "skip",
"id": "00000000-0000-4000-8000-000000000001"
}'/api/record-tools/{key}/bulkChange selected records
Access: Owner, admin or member · Success: 200
1-100 unique IDs and versions. Updates merge provided fields with existing data; deletes respect relation protection. Atomic: a changed/missing record rejects the whole operation. Nonfinancial only.
JSON request
| Field | Type | Required | Details |
|---|---|---|---|
records | object[] | Yes | Min 1 items. Max 100 items. |
action | update | delete | Yes | Bulk operation |
data | object | No | Object field values. Only keys in the workspace object definition are allowed; required fields and field types are validated. |
Response
| Field | Type | Required | Details |
|---|---|---|---|
changed | integer | No | Affected records |
curl --request POST \
--url 'https://app.drykraft.com/api/record-tools/people/bulk' \
--cookie 'drykraft_session=<YOUR_SESSION_TOKEN>' \
--header 'Content-Type: application/json' \
--data '{
"records": [
{
"id": "00000000-0000-4000-8000-000000000001",
"version": 1
}
],
"action": "update"
}'/api/record-lists/{key}List smart lists
Access: Workspace member · Success: 200
Nonfinancial object only; alphabetical names.
No request body is required.
Response
SmartList[].
curl --request GET \
--url 'https://app.drykraft.com/api/record-lists/people' \
--cookie 'drykraft_session=<YOUR_SESSION_TOKEN>'/api/record-lists/{key}Create smart list
Access: Owner, admin or member · Success: 201
Maximum 100 lists per object. Currency amount comparisons require match=all and currency eq rule. Dynamic rules do not copy records.
JSON request
Use ListInput.
Response
Use SmartList.
curl --request POST \
--url 'https://app.drykraft.com/api/record-lists/people' \
--cookie 'drykraft_session=<YOUR_SESSION_TOKEN>' \
--header 'Content-Type: application/json' \
--data '{
"name": "<Nonblank list name>",
"filter": {
"match": "all",
"conditions": [
{
"field": "people",
"operator": "eq"
}
]
}
}'/api/record-lists/{key}/{id}Update smart list
Access: Owner, admin or member · Success: 200
Current version required. Duplicate name or stale change returns 409.
JSON request
| Field | Type | Required | Details |
|---|---|---|---|
name | string | Yes | Nonblank list name Max 80 characters. |
filter | Filter | Yes | |
version | integer | Yes | Positive optimistic version returned by the latest read. Refresh on 409; do not overwrite stale changes. Min 1. |
Response
Use SmartList.
curl --request PUT \
--url 'https://app.drykraft.com/api/record-lists/people/00000000-0000-4000-8000-000000000001' \
--cookie 'drykraft_session=<YOUR_SESSION_TOKEN>' \
--header 'Content-Type: application/json' \
--data '{
"name": "<Nonblank list name>",
"filter": {
"match": "all",
"conditions": [
{
"field": "people",
"operator": "eq"
}
]
},
"version": 1
}'/api/record-lists/{key}/{id}Delete smart list
Access: Owner, admin or member · Success: 200
Removes rules, retains records. Current version is required.
Query parameters
| Parameter | Type | Required | Details |
|---|---|---|---|
version | integer | Yes | Required current list version Min 1. |
No request body is required.
Response
Use OK.
curl --request DELETE \
--url 'https://app.drykraft.com/api/record-lists/people/00000000-0000-4000-8000-000000000001?version=1' \
--cookie 'drykraft_session=<YOUR_SESSION_TOKEN>'