1. API
  2. Records

Records: Get

Description

A record is a piece of structured, queryable data captured from a story, the API, or the UI. See Records in the Tines docs to learn more.

Fetch a single record by numeric ID. Get supports sparse fieldsets, inline expansion of artifact-backed fields, and embedding its record type, child records, and cases. Every response includes a bare parent record reference when one exists.

You can find record IDs in the response from the Search records API.

Request

HTTP Method: GET

Path parameter Description
id The ID of the record to retrieve.
Query parameter Description
record_type_id Optional Scope the lookup to this record type — faster, and returns 404 if the record does not belong to it.
include Optional Accepted values are record_type, parent_record, child_records, child_record_ids, and cases. record_type, child_records, and cases embed bodies under included; parent_record does not change the response because its bare reference is always present in relationships; child_record_ids adds an IDs-only list under relationships.child_record_ids rather than any body. To-many embeds are capped at 20 and flagged truncated.
expand Optional Artifact-backed fields to hydrate inline instead of returning a handle, for example fields.payload or fields.* for all of them.
fields Optional Sparse fieldset: fields[record]=status,severity. Omit for all fields.
timezone Optional IANA timezone name for timestamp output. Defaults to UTC.
curl -X GET \
  https://<tenant-domain>/api/v2/records/<<record_id>> \
  -H 'content-type: application/json' \
  -H 'Authorization: Bearer <<CREDENTIAL.tines_api_key>>'

For a faster lookup, scope to the record type:

curl -X GET \
  "https://<tenant-domain>/api/v2/records/<<record_id>>?record_type_id=<<record_type_id>>" \
  -H 'content-type: application/json' \
  -H 'Authorization: Bearer <<CREDENTIAL.tines_api_key>>'

Example request embedding relationships

curl -X GET \
  "https://<tenant-domain>/api/v2/records/<<record_id>>?include=record_type,child_records,cases" \
  -H 'content-type: application/json' \
  -H 'Authorization: Bearer <<CREDENTIAL.tines_api_key>>'

Example request expanding an artifact field

curl -X GET \
  "https://<tenant-domain>/api/v2/records/<<record_id>>?expand=fields.payload" \
  -H 'content-type: application/json' \
  -H 'Authorization: Bearer <<CREDENTIAL.tines_api_key>>'

Response

A successful request returns a JSON object with a data object representing the record, a field_ids map, and (when requested) an included object.

Field description

Field Description
data The record object (see below).
field_ids Map of each returned field's slug key to its immutable field ID, so callers can pin to the ID across renames.
included Present only when include is used. Holds the embedded bodies: record_type (a one-element array of { id, name, slug }) when include=record_type, and child_records and/or cases when those are requested.

The data object contains:

Field Description
id Integer ID of the record.
fields Field values keyed by field slug (field_<id> when two fields share a slug). Scalar fields hold their typed value; TIMESTAMP fields are ISO 8601 strings; an unexpanded artifact-backed field is returned as a handle (see Artifact-backed fields).
relationships record_type ({ "id" }) and parent_record ({ "id" }, or null), regardless of include. When child_records/cases are included, each also appears here as { "truncated": <bool> }. When child_record_ids is included, it appears here as { "ids": [<int>], "truncated": <bool> } — every direct child's ID, including children the caller cannot read.
created_at ISO 8601 creation timestamp (UTC unless a timezone is supplied).
updated_at ISO 8601 last-updated timestamp (UTC unless a timezone is supplied).

When include=child_records or include=cases is used, the top-level included object holds the embedded bodies:

  • child_records — an array of record bodies (same shape as data), capped at 20.
  • cases — an array of { id, name, status, priority, linked_at, created_at, updated_at }, capped at 20. id is the public case number (for example 42).

child_record_ids is not embedded under included; its IDs live in relationships.child_record_ids and expose every direct child, including children the caller cannot read.

When a to-many embed is capped, its relationships entry carries "truncated": true. Use the List child records API, List child record IDs API, and List linked cases API to page through the full set.

Artifact-backed fields

By default, JSON and ARTIFACT field values are returned as a handle rather than inlined, whatever their size:

{ "expandable": true, "href": "/api/v2/records/<id>/fields/<field_id>" }

Either follow the href with the Get record field API, or pass expand=fields.<key> (or expand=fields.*) to hydrate the value inline in this response.

Sample response

{
  "data": {
    "id": 555,
    "fields": {
      "status": "open",
      "payload": {
        "expandable": true,
        "href": "/api/v2/records/555/fields/103"
      }
    },
    "relationships": {
      "record_type": {
        "id": 42
      },
      "parent_record": null
    },
    "created_at": "2026-07-02T00:00:00Z",
    "updated_at": "2026-07-02T00:00:00Z"
  },
  "field_ids": {
    "status": 101,
    "payload": 103
  }
}

Errors

Errors are returned as a JSON object with an error field, along with an appropriate HTTP status code:

{
  "error": {
    "type": "not_found",
    "message": "Record not found"
  }
}
Status Meaning
400 Invalid request — unknown query parameter, field, include, expand target, or timezone.
403 The tenant does not have access to records.
404 Record not found, or (with record_type_id) the record does not belong to that type.
422 A scalar field value could not be read for the requested representation.
500 A stored artifact could not be read, for example because an expanded JSON artifact contains invalid JSON.

The error object always carries type and message; validation errors add a field pointer, and some add a hint suggesting a correction.

Was this helpful?
Records: Get | API | Tines