Records API

Create, read, update, and delete records within your modules

Records are the core data entries in Coherence. Each record belongs to a module and contains field values keyed by field slug. The Records API enables full CRUD operations, bulk actions, filtering, sorting, and pagination.

Overview

Records are individual entries within a module (e.g., a contact in the Contacts module, a deal in the Deals module). Each record has:

  • A unique ID (a UUID)
  • A display name for quick identification
  • Custom field values defined by the module schema
  • Optional labels and types for categorization
  • Metadata including creation/update timestamps and user attribution

Reading records requires the records:read scope; creating, updating, and deleting requires records:write.

Endpoints

MethodEndpointDescription
GET/modules/{moduleSlug}/recordsList records with filtering and pagination
GET/modules/{moduleSlug}/records/{recordId}Get a single record
POST/modules/{moduleSlug}/recordsCreate a new record
PATCH/modules/{moduleSlug}/records/{recordId}Update an existing record
DELETE/modules/{moduleSlug}/records/{recordId}Delete a record
POST/modules/{moduleSlug}/records/bulkBulk add/remove labels and types
POST/modules/{moduleSlug}/records/bulk-deleteBulk delete multiple records

Record Structure

A single-record response wraps the record in a record envelope:

{
  "record": {
    "recordId": "a1b2c3d4-e5f6-4890-abcd-ef1234567890",
    "moduleId": "0b6f2f4e-8a34-4b1a-9d2e-6f1c3a7e9b21",
    "moduleSlug": "contacts",
    "displayName": "John Smith",
    "fields": {
      "email": "[email protected]",
      "phone": "+1 (555) 123-4567",
      "company": "Acme Corporation",
      "job_title": "VP of Sales",
      "deal_value": 75000,
      "status": "active",
      "last_contacted": "2024-01-15"
    },
    "labelIds": ["1f2e3d4c-5b6a-4798-8c9d-0e1f2a3b4c5d"],
    "typeIds": ["2a3b4c5d-6e7f-4809-9d0e-1f2a3b4c5d6e"],
    "privacyLevel": "account",
    "descriptionHtml": "<p>Key decision maker for the enterprise deal.</p>",
    "createdDateTime": "2024-01-10T09:00:00Z",
    "updatedDateTime": "2024-01-15T14:30:00Z",
    "createdByUserId": "3b4c5d6e-7f80-4912-a0b1-c2d3e4f5a6b7",
    "createdByDisplayName": "Sarah Chen",
    "updatedByUserId": "4c5d6e7f-8091-4a23-b1c2-d3e4f5a6b7c8",
    "updatedByDisplayName": "Mike Johnson"
  }
}

Field Descriptions

FieldTypeDescription
recordIdstring (UUID)Unique record identifier
moduleIdstring (UUID)ID of the parent module
moduleSlugstringURL-friendly module identifier
displayNamestringPrimary display name for the record
fieldsobjectCustom field values (keys are field slugs)
labelIdsstring[]Applied label IDs (read-only here; manage via the bulk endpoint)
typeIdsstring[]Applied type IDs (read-only here; manage via the bulk endpoint)
privacyLevelstringVisibility level (e.g. account)
descriptionHtmlstringRich text description
createdDateTimestringISO 8601 creation timestamp
updatedDateTimestringISO 8601 last update timestamp
createdByUserIdstringUser ID who created the record
createdByDisplayNamestringDisplay name of the creator
updatedByUserIdstringUser ID who last updated the record
updatedByDisplayNamestringDisplay name of the last updater

Optional metadata properties may be omitted or null when not set, and additional informational properties (such as agent attribution) may appear over time.

List Records

Retrieve a paginated list of records from a module with optional filtering and sorting.

GET /modules/{moduleSlug}/records

Query Parameters

ParameterTypeDescriptionExample
pagenumberPage number (starts at 1)?page=2
pageSizenumberResults per page (default 25, max 100)?pageSize=50
searchstringFull-text search across indexed fields?search=john+smith
sortFieldstringField slug to sort by?sortField=created_at
sortDirectionstringSort order: asc or desc?sortDirection=desc
labelIdsstringComma-separated label IDs?labelIds=<uuid>,<uuid>
typeIdsstringComma-separated type IDs?typeIds=<uuid>
filter[field]stringFilter by field value?filter[status]=active
advancedFilterstringJSON-encoded advanced filterSee Advanced Filtering
fieldsstringComma-separated field slugs to include in each record's fields?fields=name,email

Example Request

curl -X GET "https://api.getcoherence.io/v1/modules/contacts/records?search=acme&filter[status]=active&sortField=created_at&sortDirection=desc&pageSize=25" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json"

Example Response

{
  "records": [
    {
      "recordId": "a1b2c3d4-e5f6-4890-abcd-ef1234567890",
      "moduleId": "0b6f2f4e-8a34-4b1a-9d2e-6f1c3a7e9b21",
      "moduleSlug": "contacts",
      "displayName": "John Smith",
      "fields": {
        "email": "[email protected]",
        "company": "Acme Corp",
        "status": "active"
      },
      "labelIds": [],
      "typeIds": ["2a3b4c5d-6e7f-4809-9d0e-1f2a3b4c5d6e"],
      "privacyLevel": "account",
      "createdDateTime": "2024-01-15T10:30:00Z",
      "updatedDateTime": "2024-01-15T14:22:00Z"
    },
    {
      "recordId": "b2c3d4e5-f6a7-4901-bcde-f23456789012",
      "moduleId": "0b6f2f4e-8a34-4b1a-9d2e-6f1c3a7e9b21",
      "moduleSlug": "contacts",
      "displayName": "Jane Doe",
      "fields": {
        "email": "[email protected]",
        "company": "Acme Corp",
        "status": "active"
      },
      "labelIds": ["1f2e3d4c-5b6a-4798-8c9d-0e1f2a3b4c5d"],
      "typeIds": [],
      "privacyLevel": "account",
      "createdDateTime": "2024-01-14T09:15:00Z",
      "updatedDateTime": "2024-01-14T09:15:00Z"
    }
  ],
  "total": 47,
  "page": 1,
  "pageSize": 25
}

Get Single Record

Retrieve a single record by ID.

GET /modules/{moduleSlug}/records/{recordId}

Example Request

curl -X GET "https://api.getcoherence.io/v1/modules/contacts/records/a1b2c3d4-e5f6-4890-abcd-ef1234567890" \
  -H "Authorization: Bearer YOUR_API_KEY"

Example Response

{
  "record": {
    "recordId": "a1b2c3d4-e5f6-4890-abcd-ef1234567890",
    "moduleId": "0b6f2f4e-8a34-4b1a-9d2e-6f1c3a7e9b21",
    "moduleSlug": "contacts",
    "displayName": "John Smith",
    "fields": {
      "email": "[email protected]",
      "phone": "+1 (555) 123-4567",
      "company": "Acme Corp",
      "job_title": "CEO",
      "status": "active",
      "deal_value": 150000
    },
    "labelIds": ["1f2e3d4c-5b6a-4798-8c9d-0e1f2a3b4c5d"],
    "typeIds": ["2a3b4c5d-6e7f-4809-9d0e-1f2a3b4c5d6e"],
    "privacyLevel": "account",
    "descriptionHtml": "<p>Key account, scheduled for quarterly review.</p>",
    "createdDateTime": "2024-01-10T09:00:00Z",
    "updatedDateTime": "2024-01-15T14:30:00Z",
    "createdByUserId": "3b4c5d6e-7f80-4912-a0b1-c2d3e4f5a6b7",
    "createdByDisplayName": "Sarah Chen",
    "updatedByUserId": "4c5d6e7f-8091-4a23-b1c2-d3e4f5a6b7c8",
    "updatedByDisplayName": "Mike Johnson"
  }
}

Create Record

Create a new record in a module.

POST /modules/{moduleSlug}/records

Request Body

FieldTypeRequiredDescription
displayNamestringYesRecord display name (1–500 characters)
fieldsobjectNoField values keyed by field slug
ownerUserIdstring (UUID)NoUser to set as the record owner

These are the only accepted body properties. To apply labels or types, use the bulk endpoint after creating the record.

Example Request

curl -X POST "https://api.getcoherence.io/v1/modules/contacts/records" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "displayName": "Alice Johnson",
    "fields": {
      "email": "[email protected]",
      "phone": "+1 (555) 987-6543",
      "company": "Tech Startup Inc",
      "job_title": "CTO",
      "status": "lead",
      "source": "conference"
    }
  }'

Example Response

Returns 201 Created with the new record:

{
  "record": {
    "recordId": "c3d4e5f6-a7b8-4012-cdef-345678901234",
    "moduleId": "0b6f2f4e-8a34-4b1a-9d2e-6f1c3a7e9b21",
    "moduleSlug": "contacts",
    "displayName": "Alice Johnson",
    "fields": {
      "email": "[email protected]",
      "phone": "+1 (555) 987-6543",
      "company": "Tech Startup Inc",
      "job_title": "CTO",
      "status": "lead",
      "source": "conference"
    },
    "labelIds": [],
    "typeIds": [],
    "privacyLevel": "account",
    "createdDateTime": "2024-01-16T11:00:00Z",
    "updatedDateTime": "2024-01-16T11:00:00Z",
    "createdByUserId": "3b4c5d6e-7f80-4912-a0b1-c2d3e4f5a6b7",
    "createdByDisplayName": "Sarah Chen"
  }
}

Fetch the module's fields first (GET /modules/{moduleSlug}/fields) and use each field's Slug as the key in fields — unknown keys are not part of the module schema.

Update Record

Update an existing record. Only include what you want to change.

PATCH /modules/{moduleSlug}/records/{recordId}

Request Body

FieldTypeDescription
displayNamestringNew display name (1–500 characters)
fieldsobjectField values to update, keyed by field slug

These are the only accepted body properties. Field values you omit are left unchanged.

Example Request

curl -X PATCH "https://api.getcoherence.io/v1/modules/contacts/records/a1b2c3d4-e5f6-4890-abcd-ef1234567890" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "fields": {
      "status": "customer",
      "deal_value": 200000,
      "last_contacted": "2024-01-16"
    }
  }'

Example Response

{
  "record": {
    "recordId": "a1b2c3d4-e5f6-4890-abcd-ef1234567890",
    "moduleId": "0b6f2f4e-8a34-4b1a-9d2e-6f1c3a7e9b21",
    "moduleSlug": "contacts",
    "displayName": "John Smith",
    "fields": {
      "email": "[email protected]",
      "phone": "+1 (555) 123-4567",
      "company": "Acme Corp",
      "status": "customer",
      "deal_value": 200000,
      "last_contacted": "2024-01-16"
    },
    "labelIds": ["1f2e3d4c-5b6a-4798-8c9d-0e1f2a3b4c5d"],
    "typeIds": ["2a3b4c5d-6e7f-4809-9d0e-1f2a3b4c5d6e"],
    "privacyLevel": "account",
    "createdDateTime": "2024-01-10T09:00:00Z",
    "updatedDateTime": "2024-01-16T15:45:00Z"
  }
}

Delete Record

Delete a record. Records are soft-deleted on the server side.

DELETE /modules/{moduleSlug}/records/{recordId}

Example Request

curl -X DELETE "https://api.getcoherence.io/v1/modules/contacts/records/a1b2c3d4-e5f6-4890-abcd-ef1234567890" \
  -H "Authorization: Bearer YOUR_API_KEY"

Example Response

HTTP 204 No Content

A successful delete returns 204 with an empty body.

There are no public REST endpoints for listing, restoring, or purging deleted records today.

Bulk Operations

Bulk Update (Labels & Types)

Add or remove labels and types across many records at once. This endpoint manages categorization only — it does not update field values.

POST /modules/{moduleSlug}/records/bulk

Request Body

FieldTypeRequiredDescription
recordIdsstring[] (UUIDs)YesRecord IDs to update (1–100)
addLabelIdsstring[] (UUIDs)NoLabels to add to all records
removeLabelIdsstring[] (UUIDs)NoLabels to remove from all records
addTypeIdsstring[] (UUIDs)NoTypes to add to all records
removeTypeIdsstring[] (UUIDs)NoTypes to remove from all records

Example Request

curl -X POST "https://api.getcoherence.io/v1/modules/contacts/records/bulk" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "recordIds": [
      "a1b2c3d4-e5f6-4890-abcd-ef1234567890",
      "b2c3d4e5-f6a7-4901-bcde-f23456789012"
    ],
    "addLabelIds": ["1f2e3d4c-5b6a-4798-8c9d-0e1f2a3b4c5d"],
    "removeLabelIds": ["0e1f2a3b-4c5d-4687-9b8a-7d6c5e4f3a2b"]
  }'

Example Response

Returns the updated records:

{
  "records": [
    {
      "recordId": "a1b2c3d4-e5f6-4890-abcd-ef1234567890",
      "moduleId": "0b6f2f4e-8a34-4b1a-9d2e-6f1c3a7e9b21",
      "moduleSlug": "contacts",
      "displayName": "John Smith",
      "fields": { "email": "[email protected]", "status": "active" },
      "labelIds": ["1f2e3d4c-5b6a-4798-8c9d-0e1f2a3b4c5d"],
      "typeIds": ["2a3b4c5d-6e7f-4809-9d0e-1f2a3b4c5d6e"],
      "createdDateTime": "2024-01-15T10:30:00Z",
      "updatedDateTime": "2024-01-16T09:00:00Z"
    },
    {
      "recordId": "b2c3d4e5-f6a7-4901-bcde-f23456789012",
      "moduleId": "0b6f2f4e-8a34-4b1a-9d2e-6f1c3a7e9b21",
      "moduleSlug": "contacts",
      "displayName": "Jane Doe",
      "fields": { "email": "[email protected]", "status": "active" },
      "labelIds": ["1f2e3d4c-5b6a-4798-8c9d-0e1f2a3b4c5d"],
      "typeIds": [],
      "createdDateTime": "2024-01-14T09:15:00Z",
      "updatedDateTime": "2024-01-16T09:00:00Z"
    }
  ]
}

Bulk Delete

Delete multiple records at once (soft-delete, same as single delete).

POST /modules/{moduleSlug}/records/bulk-delete

Request Body

FieldTypeRequiredDescription
recordIdsstring[] (UUIDs)YesRecord IDs to delete (1–100)

Example Request

curl -X POST "https://api.getcoherence.io/v1/modules/contacts/records/bulk-delete" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "recordIds": [
      "a1b2c3d4-e5f6-4890-abcd-ef1234567890",
      "b2c3d4e5-f6a7-4901-bcde-f23456789012",
      "c3d4e5f6-a7b8-4012-cdef-345678901234"
    ]
  }'

Example Response

{
  "deletedCount": 3
}

Duplicate IDs in the request are de-duplicated before deletion, so deletedCount reflects the number of unique records deleted.

Use the bulk endpoints when acting on multiple records to reduce API calls.

Filtering

Simple Field Filters

Filter records by exact field values using the filter[field] query parameter syntax.

# Single value filter
GET /modules/contacts/records?filter[status]=active
 
# Multiple values (OR logic)
GET /modules/contacts/records?filter[status]=active,pending
 
# Multiple fields (AND logic)
GET /modules/contacts/records?filter[status]=active&filter[industry]=technology

Advanced Filtering

For complex filter logic, use the advancedFilter parameter with a JSON-encoded filter object. Advanced filters support operators, grouping, and AND/OR logic.

Filter Operators

OperatorDescriptionExample
eqEquals{ "fieldSlug": "status", "operator": "eq", "value": "active" }
neqNot equals{ "fieldSlug": "status", "operator": "neq", "value": "closed" }
gtGreater than{ "fieldSlug": "deal_value", "operator": "gt", "value": 10000 }
gteGreater than or equal{ "fieldSlug": "deal_value", "operator": "gte", "value": 10000 }
ltLess than{ "fieldSlug": "deal_value", "operator": "lt", "value": 50000 }
lteLess than or equal{ "fieldSlug": "deal_value", "operator": "lte", "value": 50000 }
containsContains substring{ "fieldSlug": "email", "operator": "contains", "value": "@acme.com" }
notContainsDoes not contain{ "fieldSlug": "email", "operator": "notContains", "value": "spam" }
startsWithStarts with{ "fieldSlug": "name", "operator": "startsWith", "value": "John" }
endsWithEnds with{ "fieldSlug": "email", "operator": "endsWith", "value": ".edu" }
inIn list{ "fieldSlug": "status", "operator": "in", "values": ["active", "pending"] }
notInNot in list{ "fieldSlug": "status", "operator": "notIn", "values": ["closed", "lost"] }
isNullIs empty/null{ "fieldSlug": "phone", "operator": "isNull" }
isNotNullIs not empty{ "fieldSlug": "email", "operator": "isNotNull" }
betweenBetween two values{ "fieldSlug": "deal_value", "operator": "between", "values": [10000, 50000] }
beforeDate before{ "fieldSlug": "due_date", "operator": "before", "value": "2024-02-01" }
afterDate after{ "fieldSlug": "created_at", "operator": "after", "value": "2024-01-01" }

Advanced Filter Structure

{
  "root": {
    "id": "group_1",
    "conjunction": "AND",
    "conditions": [
      {
        "id": "cond_1",
        "fieldSlug": "status",
        "operator": "eq",
        "value": "active"
      },
      {
        "id": "group_2",
        "conjunction": "OR",
        "conditions": [
          {
            "id": "cond_2",
            "fieldSlug": "deal_value",
            "operator": "gte",
            "value": 50000
          },
          {
            "id": "cond_3",
            "fieldSlug": "priority",
            "operator": "eq",
            "value": "high"
          }
        ]
      }
    ]
  }
}

Example: Complex Filter Request

Find active contacts with deal value over $50k OR high priority:

curl -X GET "https://api.getcoherence.io/v1/modules/contacts/records" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -G \
  --data-urlencode 'advancedFilter={"root":{"id":"g1","conjunction":"AND","conditions":[{"id":"c1","fieldSlug":"status","operator":"eq","value":"active"},{"id":"g2","conjunction":"OR","conditions":[{"id":"c2","fieldSlug":"deal_value","operator":"gte","value":50000},{"id":"c3","fieldSlug":"priority","operator":"eq","value":"high"}]}]}}'

If advancedFilter is not valid JSON, the API responds with 400 and the message advancedFilter must be valid JSON.

Sorting

Sort records by a single field using sortField and sortDirection parameters.

# Sort by created date, newest first
GET /modules/contacts/records?sortField=created_at&sortDirection=desc
 
# Sort by name alphabetically
GET /modules/contacts/records?sortField=name&sortDirection=asc
 
# Sort by deal value, highest first
GET /modules/deals/records?sortField=deal_value&sortDirection=desc

Sort Direction

ValueDescription
ascAscending (A-Z, 0-9, oldest first)
descDescending (Z-A, 9-0, newest first)

Pagination

Coherence uses offset-based pagination for record lists. There is no cursor pagination — request pages by number.

Pagination Parameters

ParameterTypeDefaultMaxDescription
pagenumber1-Page number (1-indexed)
pageSizenumber25100Records per page

Example: Paginated Request

# First page
GET /modules/contacts/records?page=1&pageSize=50
 
# Second page
GET /modules/contacts/records?page=2&pageSize=50
 
# Third page
GET /modules/contacts/records?page=3&pageSize=50

Pagination Response

{
  "records": [...],
  "total": 247,
  "page": 2,
  "pageSize": 50
}

Calculating Pages

const totalPages = Math.ceil(response.total / response.pageSize);
const hasNextPage = response.page < totalPages;
const hasPrevPage = response.page > 1;

For large datasets with frequent updates, consider using search with filters to narrow results rather than paginating through all records.

Field Selection

Request only specific fields to reduce response size and improve performance.

Query Parameter

Use the fields parameter with comma-separated field slugs:

GET /modules/contacts/records?fields=name,email,status

Example Response

{
  "records": [
    {
      "recordId": "a1b2c3d4-e5f6-4890-abcd-ef1234567890",
      "moduleId": "0b6f2f4e-8a34-4b1a-9d2e-6f1c3a7e9b21",
      "moduleSlug": "contacts",
      "displayName": "John Smith",
      "fields": {
        "name": "John Smith",
        "email": "[email protected]",
        "status": "active"
      },
      "createdDateTime": "2024-01-15T10:30:00Z",
      "updatedDateTime": "2024-01-15T14:22:00Z"
    },
    {
      "recordId": "b2c3d4e5-f6a7-4901-bcde-f23456789012",
      "moduleId": "0b6f2f4e-8a34-4b1a-9d2e-6f1c3a7e9b21",
      "moduleSlug": "contacts",
      "displayName": "Jane Doe",
      "fields": {
        "name": "Jane Doe",
        "email": "[email protected]",
        "status": "lead"
      },
      "createdDateTime": "2024-01-14T09:15:00Z",
      "updatedDateTime": "2024-01-14T09:15:00Z"
    }
  ],
  "total": 247,
  "page": 1,
  "pageSize": 25
}

Field selection trims only the fields object. Top-level record properties like recordId, displayName, createdDateTime, and updatedDateTime are always included.

Coherence supports references that link records across modules. Use the reference endpoints to work with related data. All reference reads require the records:read scope.

List Module References

Get all references defined on a module:

GET /modules/{moduleSlug}/references

Example Response

{
  "references": [
    {
      "moduleReferenceId": "5e4d3c2b-1a09-4876-b5c4-d3e2f1a0b9c8",
      "sourceModuleId": "0b6f2f4e-8a34-4b1a-9d2e-6f1c3a7e9b21",
      "sourceFieldId": null,
      "sourceFieldSlug": null,
      "slug": "account",
      "relationshipType": "many_to_one",
      "targetType": "module",
      "targetFilters": null,
      "isRequired": false,
      "cascadeDelete": false,
      "cascadeUpdate": false,
      "target": {
        "moduleId": "3d92c1a7-45b8-4f0e-b6d1-92e4a8c05f7d",
        "moduleSlug": "accounts",
        "moduleName": "Accounts"
      }
    },
    {
      "moduleReferenceId": "6f5e4d3c-2b1a-4987-c6d5-e4f3a2b1c0d9",
      "sourceModuleId": "0b6f2f4e-8a34-4b1a-9d2e-6f1c3a7e9b21",
      "sourceFieldId": null,
      "sourceFieldSlug": null,
      "slug": "owner",
      "relationshipType": "many_to_one",
      "targetType": "user",
      "targetFilters": null,
      "isRequired": false,
      "cascadeDelete": false,
      "cascadeUpdate": false,
      "target": {
        "moduleId": null,
        "moduleSlug": null,
        "moduleName": null
      }
    }
  ]
}

Get Linked Record IDs

Retrieve the IDs of records linked to a source record via a reference:

GET /modules/{moduleSlug}/references/{referenceSlug}/records/{recordId}

Example Request

curl -X GET "https://api.getcoherence.io/v1/modules/contacts/references/account/records/a1b2c3d4-e5f6-4890-abcd-ef1234567890" \
  -H "Authorization: Bearer YOUR_API_KEY"

Example Response

{
  "targetRecordIds": ["7a8b9c0d-1e2f-4304-a5b6-c7d8e9f0a1b2"]
}

Fetch each target with GET /modules/{targetModuleSlug}/records/{recordId} to get its full details.

Reference Picker

Search for records that can be linked via a reference:

GET /modules/{moduleSlug}/references/{referenceSlug}/picker?search=acme&limit=10

Example Response

{
  "referenceSlug": "account",
  "targetType": "module",
  "targetModuleSlug": "accounts",
  "items": [
    {
      "recordId": "7a8b9c0d-1e2f-4304-a5b6-c7d8e9f0a1b2",
      "displayName": "Acme Corporation",
      "fields": {}
    },
    {
      "recordId": "8b9c0d1e-2f3a-4415-b6c7-d8e9f0a1b2c3",
      "displayName": "Acme Startup Labs",
      "fields": {}
    }
  ]
}

Error Responses

Errors use a consistent envelope with a machine-readable code, message, and statusCode. Validation failures (code: "validation_error") also include an issues array describing each problem; some errors include additional context under data.

Common Errors

StatusDescription
400Validation failed — invalid request body or parameters
401Missing or invalid API key
403Insufficient permissions or missing scope
404Record or module not found
429Too many requests

Error Response Format

{
  "error": {
    "code": "not_found",
    "message": "Record not found",
    "statusCode": 404
  }
}

Validation Error Example

{
  "error": {
    "code": "validation_error",
    "message": "Validation failed",
    "statusCode": 400,
    "issues": [
      {
        "code": "too_small",
        "minimum": 1,
        "path": ["displayName"],
        "message": "String must contain at least 1 character(s)"
      }
    ]
  }
}

Related: API Overview | Search API | Activity Log | Modules