Get started

Quickstart

Send your first works and read the response, in about five minutes.

This page takes you from nothing to a stored work. It uses one song, so you can read every field in the response. Load a full catalogue covers thousands of works.

Prerequisites#

Export the key. It starts with trk_live_.

bash
export TRK_API_KEY="trk_live_..."

Send your first request#

Start with ?dry_run=true. We store nothing. You still get the same gap and validation reports that a real commit returns, so you can check your field mapping before any data lands.

bash
curl -X POST "https://ingest.takerecord.com/api/v1/catalogue/works?dry_run=true" \
  -H "Authorization: Bearer $TRK_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "catalog_name": "My first catalogue",
    "works": [
      {
        "primary_title": "Midnight Drive",
        "client_work_ref": "ACME-0001",
        "recording": { "artist_name": "Nova Ray", "isrc": "USRC12345678" },
        "writers": [
          { "writer_first_name": "Alex", "writer_last_name": "Stone", "writer_ownership_pct": 100, "writer_controlled": true }
        ],
        "publishers": [
          {
            "publisher_name": "Acme Publishing",
            "publisher_collection_share": 50,
            "linked_writer_index": 0,
            "publisher_controlled": true
          }
        ]
      }
    ]
  }'

Read the response#

A dry-run returns 200.

json
{
  "catalog_id": "",
  "catalog_name": "My first catalogue",
  "mode": "validate",
  "works_created": 0,
  "work_ids": [],
  "results": [{ "client_work_ref": "ACME-0001", "work_id": null, "action": "created" }],
  "gaps": [{ "work_index": 0, "title": "Midnight Drive", "missing_fields": ["iswc", "writer_ipi"] }],
  "validation": { "total_works": 1, "works_flagged": 0, "attestation_ran": true, "issues": [] }
}

Read gaps before you go on. It lists what this work is missing. It does not list what is wrong with it. Validation and gaps explains both reports.

In a dry-run catalog_id is empty when the request would create a new catalogue. Do not store that value.

Commit the work#

Remove ?dry_run=true and add an Idempotency-Key. The key makes a network retry safe. The same key with the same body replays the first result instead of a second write.

bash
curl -X POST "https://ingest.takerecord.com/api/v1/catalogue/works" \
  -H "Authorization: Bearer $TRK_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d @work.json

A commit returns 201.

json
{
  "catalog_id": "cat-a1b2c3d4",
  "mode": "commit",
  "works_created": 1,
  "works_updated": 0,
  "work_ids": ["REC-2026-00001"],
  "results": [{ "client_work_ref": "ACME-0001", "work_id": "REC-2026-00001", "action": "created" }]
}

Store results[].work_id against your own client_work_ref. That pair is how you reconcile our records with yours later.

What to do next#

Send the same client_work_ref again with more fields. The work updates in place. You do not create a duplicate, and you do not need to store our catalog_id to do it.