Browse documentation

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.

POST/api/record-tools/{key}/import/preview

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

Request shape (illustrative)
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"
}'
POST/api/record-tools/{key}/import/commit

Apply 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

FieldTypeRequiredDetails
csvstringYesUTF-8 CSV content, not a file path. Header required; <=500 data rows. Max 300000 characters.
mappingstring or null[]No Max 100 items.
duplicatesskip | update | errorNoPeople email duplicate policy, default skip. Blank update cells preserve existing values.
iduuidYes

Response

FieldTypeRequiredDetails
iduuidNo
createdintegerNoCreated
updatedintegerNoUpdated
skippedintegerNoSkipped
rowsintegerNoRows
Request shape (illustrative)
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"
}'
POST/api/record-tools/{key}/bulk

Change 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

FieldTypeRequiredDetails
recordsobject[]Yes Min 1 items. Max 100 items.
actionupdate | deleteYesBulk operation
dataobjectNoObject field values. Only keys in the workspace object definition are allowed; required fields and field types are validated.

Response

FieldTypeRequiredDetails
changedintegerNoAffected records
Request shape (illustrative)
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"
}'
GET/api/record-lists/{key}

List smart lists

Access: Workspace member · Success: 200

Nonfinancial object only; alphabetical names.

No request body is required.

Response

SmartList[].

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

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

FieldTypeRequiredDetails
namestringYesNonblank list name Max 80 characters.
filterFilterYes
versionintegerYesPositive optimistic version returned by the latest read. Refresh on 409; do not overwrite stale changes. Min 1.

Response

Use SmartList.

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

ParameterTypeRequiredDetails
versionintegerYesRequired current list version Min 1.

No request body is required.

Response

Use OK.

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