1. API reference
  2. Records
  3. Create a record.
  • API reference
  • GETIdentify the calling credential.
  • GETList the webhook events you can subscribe to.
  • GETList the webhook subscriptions this credential owns.
  • POSTSubscribe an HTTPS endpoint to record events on one object.
  • GETGet one webhook subscription by slug.
  • DELETEDelete a webhook subscription.
  • GETList the field types you can create.
  • GETList the file formats a file field can accept.
  • GETList the active tag fields of all objects, one page at a time.
  • GETList every field in the workspace, one page at a time.
  • GETList the fields of an object, one page at a time.
  • POSTAdd a field to an object.
  • GETList all fields an object owns, active and inactive.
  • GETList the active fields of an object, relations included.
  • GETList the select, status and priority fields of an object.
  • GETList the fields that can make another field required.
  • GETGet one field by slug.
  • POSTCopy fields of an object into other objects.
  • POSTAdd one choice to a choice field.
  • PUTChange the order of an object's fields.
  • PUTUpdate a field's settings.
  • DELETEDelete a field and its values.
  • PUTTurn a field on or off on an object.
  • GETList the workspace tags.
  • POSTAdd a tag to the workspace list.
  • PUTReorder the workspace tags.
  • POSTAdd a tag from a record of one object.
  • GETGet one tag with its usage.
  • DELETEDelete a tag, or retire it when records still hold it.
  • PATCHRename or recolor a tag.
  • GETList which optional record features this deployment has turned on.
  • GETList objects, one page at a time.
  • POSTCreate an object.
  • GETList the active objects the credential can read.
  • GETCount records and saved views for each active object.
  • GETGet workspace totals for records, saved views and objects.
  • GETList the duplicate-detection rule of every object.
  • GETCheck whether an object name is free to use.
  • GETGet one object by slug.
  • PUTUpdate an object's name, description, icon, status or folder.
  • DELETEDelete an object and all of its records.
  • GETList the other active objects, for picking a relation target.
  • GETList the active fields of an object.
  • GETGet the duplicate-detection rule of an object.
  • PUTSet the duplicate-detection rule of an object.
  • PUTChange the display order of objects.
  • PUTTurn an object on or off.
  • PUTTurn an object's public form on or off.
  • GETList records as slug and name pairs, for pickers.
  • GETList an object's records, with filters and sorting.
  • POSTCreate a record.
  • POSTSearch an object's records by free text.
  • GETList the records you can link through every relation of an object.
  • GETList the records you can link through one relation field.
  • GETList the records that share a value in one field.
  • GETList the values of dependent filter fields.
  • GETList the records linked to one record through one relation.
  • POSTList the distinct values stored in one field, most common first.
  • POSTGet badge counts for a set of records.
  • GETList the options a select-type field allows.
  • GETGet one record by slug, with its columns and change history.
  • PUTUpdate a record.
  • DELETEDelete a record.
  • GETList every change to one record, newest first.
  • GETList one page of a record's change history, with filters.
  • POSTDuplicate a record.
  • POSTCreate a record from a quick-add row in a table or board.
  • POSTUpdate, assign or delete many records in one call.
  • POSTDuplicate many records in one call.
  • POSTCancel a queued or running bulk job.
  • GETGet the report of a bulk job.
  • POSTDelete up to 500 records by slug.
  • POSTSet the assignees of up to 500 records.
  • PATCHReplace the assignees of a record.
  • PATCHMove a record between two others in manual board order.
  • POSTApply the same change to up to 500 records.
  • DELETEDelete all records of an object.
  • GETGet a short-lived URL for one stored file.
  • GETDownload one stored file.
  • POSTGet short-lived URLs for up to 100 stored files in one call.
POST/api/v1/object/data/{objectSlug}

Create a record.

Create a record.

Put field values in data, keyed by field slug, never by field name or label. Find the slugs with GET /object/{objectSlug}/fields. A choice field takes the option id, or an array of ids for multi-value fields. Keys that are not fields of the object are ignored. Fields you leave out get their default value.

relations links other records, keyed by relation slug, each value a record slug or an array of record slugs (at most 1,000). admin_slug sets the owner; it is ignored when the credential may not assign records, and the owner is then the credential's user. parent_link also points a relation of an existing record at the new one, in the same transaction; the response then carries that record in parent_record.

Some values are never written: computed fields (calculation, serial_number, lookup, rollup); fields marked API-only unless you call with an API key or OAuth token; and source_name, session_name and provider_id fields when you call with a user session. The keys removed are listed in dropped_fields. Non-fatal problems are listed in warnings.

To upload files, send multipart/form-data: put data and relations as JSON strings, and add each file as a part named after its file or photo field's slug. A file may be up to 100 MB; the field's own settings can narrow the size and the formats.

The response is the new record, in the same shape as a record read.

Scope: create.<object slug>, for example create.contacts.

Errors:

  • 400 — a value is invalid or a required field is missing (the message starts Validation failed:), a required relation is missing, a linked record in relations cannot be found or seen, a file is rejected, a linked or parent record does not exist, another record already has the same values for a field set marked as a possible duplicate, or no active object has that slug.
  • 409 — another record already has the same value in a unique field.
  • 422 — the body is invalid, for example data is not an object.

Request:

{
  "data": {
    "title-mpoc3dn1": "Sara Ali",
    "email-p0zx7c1v": "sara@example.com",
    "stage-k2j9h4g7": "6a1f3c9e-2b7d-4e8a-9f0c-1d2e3f4a5b6c"
  },
  "relations": { "company-mf3k2p9a": "2e8b5d1f7c4a" },
  "admin_slug": "a3f1b2c8e9d7"
}

Response 201:

{
  "status": 201,
  "message": "Data created successfully",
  "data": {
    "title-mpoc3dn1": "Sara Ali",
    "assignees": [
      {
        "type": "user",
        "slug": "a3f1b2c8e9d7",
        "name": "Omar Hassan",
        "email": "omar@example.com",
        "profile_image": null
      }
    ],
    "email-p0zx7c1v": "sara@example.com",
    "stage-k2j9h4g7": [
      {
        "id": "6a1f3c9e-2b7d-4e8a-9f0c-1d2e3f4a5b6c",
        "value": "lead",
        "label": "Lead",
        "color": "#3B82F6",
        "icon": null
      }
    ],
    "name": "Sara Ali",
    "relations": {
      "company-mf3k2p9a": {
        "items": [
          {
            "type": "relation",
            "name": "Acme Inc",
            "label": "Acme Inc",
            "slug": "2e8b5d1f7c4a",
            "random_id": "7d3e9a1c",
            "object_slug": "companies",
            "object_name": "Companies",
            "object_icon": "tabler-building"
          }
        ],
        "pagination": {
          "total": 1,
          "page": 1,
          "limit": 10,
          "totalPages": 1,
          "nextPage": null,
          "prevPage": null
        }
      }
    },
    "slug": "9f2c4b7a1e03",
    "random_id": "5c0e7a9b",
    "createdAt": "2026-09-14T10:00:00.000Z",
    "updatedAt": "2026-09-14T10:00:00.000Z",
    "position": "1000",
    "creator": {
      "type": "user",
      "slug": "a3f1b2c8e9d7",
      "name": "Omar Hassan",
      "email": "omar@example.com",
      "profile_image": null
    },
    "updater": {
      "type": "user",
      "slug": "a3f1b2c8e9d7",
      "name": "Omar Hassan",
      "email": "omar@example.com",
      "profile_image": null
    },
    "linked_record": null,
    "capabilities": {
      "can_edit": true,
      "can_delete": true,
      "can_assign": true
    }
  }
}

Send request

Use the documented inputs to call this endpoint directly.

API serverbase URL
Bearer tokenbearerAuthoptional
Stored only in this browser for the bearerAuth security scheme and reused on every API page in this group.

Parameters

Values are applied to the request and the example on the right.

objectSlugpath · stringrequired

Request body

application/jsonrequired
dataobjectrequired

Data object where keys are field slugs (not field names) Example: { "first_name": "John", "email_address": "john@example.com" }

relationsobjectoptional

Relations object where keys are field slugs for relation fields

admin_slugobjectoptional
linked_data_slugobjectoptional

Optional slug of another data record to link this record to. Primarily used for linking tasks to other objects (customers, orders, etc.)

linked_object_slugobjectoptional

Slug of the object that owns linked_data_slug.

Optional for back-compat: a client that sends only linked_data_slug still links, resolved by scanning object tables for that slug. Sending it here skips the scan and, more importantly, removes the ambiguity — slugs are unique per table, not per workspace, so two objects can hold the same one.

parent_linkobjectoptional

Optional atomic parent link — creates this record AND points a relation field on a pre-existing parent record at the newly created row, inside one transaction. Replaces the legacy two-step FE flow (POST → PUT). See ParentLinkDto.

Responses

200application/json

Successful response

{
  "dropped_fields": "string",
  "warnings": "string",
  "parent_record": "string",
  "message": "string",
  "data": "string"
}
dropped_fieldsobjectoptional
warningsobjectoptional
parent_recordobjectoptional
messagestringrequired
dataobjectoptional
400application/json

Bad request

{
  "status": 1,
  "message": "string",
  "code": "string",
  "data": {}
}
statusintegerrequired

The HTTP status code of the response.

messagestringrequired

What went wrong. Several validation messages are joined with ", ".

codestringoptional

A stable, machine-readable reason. Only some errors set it.

dataobjectoptional

Extra detail about the error. Only some errors set it.

401application/json

Unauthorized

{
  "status": 1,
  "message": "string",
  "code": "string",
  "data": {}
}
statusintegerrequired

The HTTP status code of the response.

messagestringrequired

What went wrong. Several validation messages are joined with ", ".

codestringoptional

A stable, machine-readable reason. Only some errors set it.

dataobjectoptional

Extra detail about the error. Only some errors set it.

500application/json

Internal server error

{
  "status": 1,
  "message": "string",
  "code": "string",
  "data": {}
}
statusintegerrequired

The HTTP status code of the response.

messagestringrequired

What went wrong. Several validation messages are joined with ", ".

codestringoptional

A stable, machine-readable reason. Only some errors set it.

dataobjectoptional

Extra detail about the error. Only some errors set it.

List an object's records, with filters and sorting.< PreviousSearch an object's records by free text.Next >

Powered by heyo-docs

curl --request POST \  'https://corteksa.info/api/v1/object/data/string' \  --header 'Content-Type: application/json' \  --data '{  "data": "string",  "relations": "string",  "admin_slug": "string",  "linked_data_slug": "string",  "linked_object_slug": "string",  "parent_link": "string"}'
{
  "dropped_fields": "string",
  "warnings": "string",
  "parent_record": "string",
  "message": "string",
  "data": "string"
}