API ReferenceContent

Custom Entities

Records of any custom entity type, addressed by the type’s identifier in the path, with their revisions and bulk changes.

Prefix /cdna-api/custom-entities ReferenceRecord model GuideCustom entities
Custom Entities in Postman

About custom entities

A custom entity type is a definition with its own layout; its records are content of that type. Every type answers on the same routes with its identifier in the path: the singular identifier for one record, the plural for a list.

Revisions Yes

Records keep their content in revisions. An edit makes one that is not live; a second request makes it live.

Revisions, publishing and approval
Hierarchy Optional

Records can nest under a parent record when the definition allows it.

Custom entities
Custom URLs Yes

A record can take a custom URL.

Taxonomy, URLs and SEO
Custom fields No

Records hold their data in the definition’s layout areas.

Custom entities
Bulk changes Published only

The bulk route changes published for many records at once, and nothing else.

Custom entities

List records#

GET /cdna-api/custom-entities/{pluralIdentifier}

Lists the records of one type, addressed by its plural identifier. The singular identifier answers a count with no rows.

Access
Admin users and integrations, with an OAuth access token or an API key.
Model
Record, in the Reference

Parameters

pluralIdentifierpathrequired
string
The type’s plural identifier, such as apiSandboxes. The singular returns a count and no rows.
propertiesquery
selector
The fields and relations to return, such as {id,slug}.
filtersquery
name=value
Any stored field, or a relation with a dot, such as parent.id=12. Prefix the name with !, >, <, % or |. Use stored field names exactly as in the model, and compare totalCount with the unfiltered list's to confirm a filter applied.
orderByquery
string
field:ASC or field:DESC, comma-separated. Stored fields only.
limitquery
integer
Records per response. There is no default.
offsetquery
integer
Records to skip.
retrieveUnpublishedquery
1
Include unpublished records.

Example

List records
GET /cdna-api/custom-entities/apiSandboxes?limit=2&properties={id,slug} HTTP/1.1
Host: hub.coredna.com
Authorization: Bearer YOUR_ACCESS_TOKEN
Accept: application/json
Response 200 OK
{
  "result": "success",
  "totalCount": 1,
  "data": [
    {
      "id": 2,
      "slug": "sandbox-record-one"
    }
  ]
}
Open in Postman docs Real response from this documentation site

Show a record#

GET /cdna-api/custom-entities/{identifier}/{id}

Reads one record, addressed by the type’s singular identifier and the record id.

Access
Admin users and integrations, with an OAuth access token or an API key.
Model
Record, in the Reference

Parameters

identifierpathrequired
string
The type’s singular identifier, such as apiSandbox. The plural is a 404 here.
idpathrequired
integer
The record id.
propertiesquery
selector
The fields and relations to return, such as {id,slug}.

Example

Show a record
GET /cdna-api/custom-entities/apiSandbox/2?properties={id,slug} HTTP/1.1
Host: hub.coredna.com
Authorization: Bearer YOUR_ACCESS_TOKEN
Accept: application/json
Response 200 OK
{
  "result": "success",
  "data": {
    "id": 2,
    "slug": "sandbox-record-one"
  }
}
Open in Postman docs Real response from this documentation site

Create a record#

POST /cdna-api/custom-entities/{definition.identifier}

Creates a record.

Access
Admin users and integrations, with an OAuth access token or an API key.

Parameters

definition.identifierpathrequired
string
The type’s singular identifier. The plural is a 404 here.
namebody
string
The name.
areasContentbody
object
Area values by name.
relatedRecordsbody
object
Related records, by id.

Example

Create a record
POST /cdna-api/custom-entities/event HTTP/1.1
Host: hub.coredna.com
Authorization: Bearer YOUR_ACCESS_TOKEN
Accept: application/json
Content-Type: application/json

{
  "name": "Forever in Berlin",
  "areasContent": {
    "description": "An evening with Forever Green Socks at the Olympiastadion."
  },
  "relatedRecords": {
    "location": 11,
    "artists": [
      17
    ]
  }
}
Response 200 OK
{
  "result": "success",
  "data": {
    "id": 50,
    "areasContent": {
      "description": {
        "id": 214665,
        "type": "Richtext",
        "category": "text",
        "editor": "richtext",
        "text": "Join us for an electrifying evening as the acclaimed alternative rock sensation, Forever Green Socks, takes the stage at…"
      },
      "date": {
        "id": null,
        "type": "Date",
        "category": "text",
        "editor": "date",
        "content": null
      },
      "doors": {
        "id": null,
        "type": "Text",
        "category": "text",
        "editor": "text",
        "content": null
      }
    }
  },
  "message": "The Record has been added successfully."
}
Open in Postman docs Saved response from the Postman collection, shortened

Edit a record#

PUT /cdna-api/custom-entities/{definition.identifier}/{id}

Changes a record. Fields left out keep their values.

Access
Admin users and integrations, with an OAuth access token or an API key.

Parameters

definition.identifierpathrequired
string
The type’s singular identifier. The plural is a 404 here.
idpathrequired
integer
The record id.
namebody
string
The name.
areasContentbody
object
Area values by name.
relatedRecordsbody
object
Related records, by id.

An edit makes a new revision that is not live unless "activeRevision": true is sent inside patchRevision or revisions. At the top level of the body activeRevision takes a revision id, and true there is a 422. To change one area and keep the rest, send patchRevision with originRevision and areaContent(name); a top-level areaContent(name) answers success and changes nothing.

Example

Edit a record
PUT /cdna-api/custom-entities/event/19 HTTP/1.1
Host: hub.coredna.com
Authorization: Bearer YOUR_ACCESS_TOKEN
Accept: application/json
Content-Type: application/json

{
  "name": "Forever Green Socks in Berlin",
  "areasContent": {
    "description": "An evening with Forever Green Socks at the Olympiastadion.",
    "doors": "19:00"
  },
  "relatedRecords": {
    "location": 11,
    "artists": [
      17
    ]
  }
}
Response 200 OK
{
  "result": "success",
  "data": {
    "record": {
      "name": "Forever Green Socks in Berlin",
      "layout": 131,
      "originalPath": "/event/forever-in-berlin",
      "fullSlug": "forever-in-berlin",
      "fullPath": "/event/forever-in-berlin",
      "url": "//www.example.com/event/forever-in-berlin",
      "id": 19,
      "slug": "forever-in-berlin",
      "position": null,
      "created": "2024-02-06T15:35:42+00:00"
    }
  },
  "message": "The Record has been saved successfully."
}
Open in Postman docs Saved response from the Postman collection, shortened

Delete a record#

DELETE /cdna-api/custom-entities/{definition.identifier}/{id}

Deletes a record.

Access
Admin users and integrations, with an OAuth access token or an API key.

Parameters

definition.identifierpathrequired
string
The type’s singular identifier. The plural is a 404 here.
idpathrequired
integer
The record id.

Example

Delete a record
DELETE /cdna-api/custom-entities/event/51 HTTP/1.1
Host: hub.coredna.com
Authorization: Bearer YOUR_ACCESS_TOKEN
Accept: application/json
Response 200 OK
{
  "result": "success",
  "data": {
    "record": {
      "name": "Forever in Berlin",
      "layout": 131,
      "originalPath": "/event/forever-in-berlin-1",
      "fullSlug": "forever-in-berlin-1",
      "fullPath": "/event/forever-in-berlin-1",
      "url": "//www.example.com/event/forever-in-berlin-1",
      "id": 51,
      "slug": "forever-in-berlin-1",
      "position": null,
      "created": "2024-02-12T15:44:30+00:00"
    }
  },
  "message": "The Record has been successfully deleted."
}
Open in Postman docs Saved response from the Postman collection, shortened

List custom entity types#

GET /cdna-api/custom-entities/definitions

Lists custom entity types. Without limit every match comes back.

Access
Admin users and integrations, with an OAuth access token or an API key.
Model
Definition, in the Reference

Parameters

propertiesquery
selector
The fields and relations to return, such as {id,name,identifier,pluralIdentifier}.
filtersquery
name=value
Any stored field, or a relation with a dot, such as parent.id=12. Prefix the name with !, >, <, % or |. Use stored field names exactly as in the model, and compare totalCount with the unfiltered list's to confirm a filter applied.
orderByquery
string
field:ASC or field:DESC, comma-separated. Stored fields only.
limitquery
integer
Records per response. There is no default.
offsetquery
integer
Records to skip.
retrieveUnpublishedquery
1
Include unpublished records.

Example

List custom entity types
GET /cdna-api/custom-entities/definitions?limit=2&properties={id,name,identifier,pluralIdentifier} HTTP/1.1
Host: hub.coredna.com
Authorization: Bearer YOUR_ACCESS_TOKEN
Accept: application/json
Response 200 OK
{
  "result": "success",
  "totalCount": 1,
  "data": [
    {
      "id": 2,
      "name": "API sandbox",
      "identifier": "apiSandbox",
      "pluralIdentifier": "apiSandboxes"
    }
  ]
}
Open in Postman docs Real response from this documentation site

Show a custom entity type#

GET /cdna-api/custom-entities/definition/{id}

Reads one custom entity type by its id.

Access
Admin users and integrations, with an OAuth access token or an API key.
Model
Definition, in the Reference

Parameters

idpathrequired
integer
The custom entity type id.
propertiesquery
selector
The fields and relations to return, such as {id,name,identifier,pluralIdentifier}.

Example

Show a custom entity type
GET /cdna-api/custom-entities/definition/2?properties={id,name,identifier,pluralIdentifier} HTTP/1.1
Host: hub.coredna.com
Authorization: Bearer YOUR_ACCESS_TOKEN
Accept: application/json
Response 200 OK
{
  "result": "success",
  "data": {
    "id": 2,
    "name": "API sandbox",
    "identifier": "apiSandbox",
    "pluralIdentifier": "apiSandboxes"
  }
}
Open in Postman docs Real response from this documentation site

Create a custom entity type#

POST /cdna-api/custom-entities/definition

Creates a custom entity type: its name, singular and plural identifiers, and layout.

Access
Admin users and integrations, with an OAuth access token or an API key.

Parameters

namebody
string
The name.
identifierbody
string
The identifier: unique, and used in routes and templates.
iconbody
string
The admin icon class, such as fa-calendar.
pathbody
string
The path segment of the type’s listing.
recordPathbody
string
The path pattern of one record.
sitedbody
boolean
Whether records belong to one site.
urlAddressablebody
boolean
Whether records have their own URL.
seoSettingsEnabledbody
boolean
Whether records have SEO settings.
publishablebody
boolean
Whether records can be published and unpublished.
positionedbody
boolean
Whether records have a position among their siblings.
categorizablebody
boolean
Whether records take categories.
taggablebody
boolean
Whether records take tags.

Example

Create a custom entity type
POST /cdna-api/custom-entities/definition HTTP/1.1
Host: hub.coredna.com
Authorization: Bearer YOUR_ACCESS_TOKEN
Accept: application/json
Content-Type: application/json

{
  "name": "Event",
  "identifier": "event",
  "icon": "fa-calendar",
  "path": "events",
  "recordPath": "event",
  "sited": true,
  "urlAddressable": true,
  "seoSettingsEnabled": true,
  "publishable": true,
  "positioned": false,
  "categorizable": false,
  "taggable": false
}

Edit a custom entity type#

PUT /cdna-api/custom-entities/definition/{id}

Changes a custom entity type. Types are not versioned: the change applies at once.

Access
Admin users and integrations, with an OAuth access token or an API key.

Parameters

idpathrequired
integer
The custom entity type id.
namebody
string
The name.
identifierbody
string
The identifier: unique, and used in routes and templates.
iconbody
string
The admin icon class, such as fa-calendar.
taggablebody
boolean
Whether records take tags.

Example

Edit a custom entity type
PUT /cdna-api/custom-entities/definition/2 HTTP/1.1
Host: hub.coredna.com
Authorization: Bearer YOUR_ACCESS_TOKEN
Accept: application/json
Content-Type: application/json

{
  "name": "Event",
  "identifier": "event",
  "icon": "fa-calendar",
  "taggable": true
}

Delete a custom entity type#

DELETE /cdna-api/custom-entities/definition/{id}

Deletes a custom entity type. A type that still has records is refused unless cascade=1 is sent, which deletes the records too.

Access
Admin users and integrations, with an OAuth access token or an API key.

Parameters

idpathrequired
integer
The custom entity type id.

Example

Delete a custom entity type
DELETE /cdna-api/custom-entities/definition/2?cascade=1 HTTP/1.1
Host: hub.coredna.com
Authorization: Bearer YOUR_ACCESS_TOKEN
Accept: application/json

Duplicate a record#

POST /cdna-api/custom-entities/duplicate-record/{id}

Copies a record. The copy is unpublished.

Access
Admin users and integrations, with an OAuth access token or an API key.

Parameters

idpathrequired
integer
The record id.

Example

Duplicate a record
POST /cdna-api/custom-entities/duplicate-record/2 HTTP/1.1
Host: hub.coredna.com
Authorization: Bearer YOUR_ACCESS_TOKEN
Accept: application/json

Delete several records#

DELETE /cdna-api/custom-entities/{definition.identifier}/records

Deletes several records of one type at once: their ids in ids.

Access
Admin users and integrations, with an OAuth access token or an API key.

Parameters

definition.identifierpathrequired
string
The type’s singular identifier. The plural is a 404 here.
idsbody
list
The ids of the records.

Example

Delete several records
DELETE /cdna-api/custom-entities/apiSandbox/records HTTP/1.1
Host: hub.coredna.com
Authorization: Bearer YOUR_ACCESS_TOKEN
Accept: application/json
Content-Type: application/json

{
  "ids": [
    1,
    2,
    3
  ]
}

Publish or unpublish several records#

PUT /cdna-api/custom-entities/{definition.identifier}/records

Changes published on several records of one type at once. Any other field is refused with 400.

Access
Admin users and integrations, with an OAuth access token or an API key.

Parameters

definition.identifierpathrequired
string
The type’s singular identifier. The plural is a 404 here.
idsbody
list
The ids of the records.
publishedbody
string
true publishes now, a future datetime schedules, false or null unpublishes.

Example

Publish or unpublish several records
PUT /cdna-api/custom-entities/apiSandbox/records HTTP/1.1
Host: hub.coredna.com
Authorization: Bearer YOUR_ACCESS_TOKEN
Accept: application/json
Content-Type: application/json

{
  "ids": [
    1,
    2,
    3
  ],
  "published": "2026-09-18 09:00:00"
}

Make an earlier revision live#

PUT /cdna-api/custom-entities/activate-revision/{record.id}/{revision.id}

Makes a revision of a record live, without making a new one. "activeRevision": <revision id> on the edit route does the same.

Access
Admin users and integrations, with an OAuth access token or an API key.

Parameters

record.idpathrequired
integer
The record id.
revision.idpathrequired
integer
The revision id.

Example

Make an earlier revision live
PUT /cdna-api/custom-entities/activate-revision/2/5 HTTP/1.1
Host: hub.coredna.com
Authorization: Bearer YOUR_ACCESS_TOKEN
Accept: application/json
Response 200 OK
{
  "result": "success",
  "data": [],
  "message": "The active revision has been set"
}
Open in Postman docs Real response from this documentation site

Delete a revision#

DELETE /cdna-api/custom-entities/record-revision/{record.id}/{revision.id}

Deletes one revision of a record. The live revision cannot be deleted.

Access
Admin users and integrations, with an OAuth access token or an API key.

Parameters

record.idpathrequired
integer
The record id.
revision.idpathrequired
integer
The revision id.

Example

Delete a revision
DELETE /cdna-api/custom-entities/record-revision/2/6 HTTP/1.1
Host: hub.coredna.com
Authorization: Bearer YOUR_ACCESS_TOKEN
Accept: application/json

Check a slug#

POST /cdna-api/custom-entities/check-record-slug/{definition.id}

Checks whether a slug is free for a record of a type, under a parent when the type is hierarchical.

Access
Admin users and integrations, with an OAuth access token or an API key.

Parameters

definition.idpathrequired
integer
The custom entity type id.
slugbody
string
The path segment. Made from the name when left out.
parentbody
number
The parent record, by id.

Example

Check a slug
POST /cdna-api/custom-entities/check-record-slug/2 HTTP/1.1
Host: hub.coredna.com
Authorization: Bearer YOUR_ACCESS_TOKEN
Accept: application/json
Content-Type: application/json

{
  "slug": "forever-in-berlin",
  "parent": 1
}