Skip to the page

API reference

One endpoint adds people, timeline entries and tasks to a workspace. It is the same one Damaruka uses, so anything you send looks and behaves like a call does.

Keys

An owner makes a key in the workspace, under Connections. It starts with tlk_, is shown once and is stored only as a fingerprint. Send it as a bearer token from your server, never from a browser. Removing a key stops it at once.

curl https://tieloom.com/api/v1/workspace \
  -H "Authorization: Bearer tlk_your_key"

{"id": "5c2f...", "name": "Maple Street Dental", "kind": "clinic"}

Sending events

POST /api/v1/events takes one event as JSON. For anything that is not a call, use activity.created:

curl https://tieloom.com/api/v1/events \
  -H "Authorization: Bearer tlk_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "event": "activity.created",
    "id": "form-1042",
    "person": {"name": "Dee Shah", "email": "dee@example.com", "phone": "(415) 555-0142", "company": "Shah Dental"},
    "activity": {"kind": "form", "title": "Asked for a quote", "body": "Wants 40 units.", "link": "https://example.com/forms/1042"},
    "task": {"title": "Send Dee a quote", "due_on": "2026-10-21"}
  }'

{"person_id": "9b1e...", "duplicate": false, "new_person": true}
FieldWhat it does
idRequired. Your own id for this event. Send the same id again and Tieloom keeps one entry.
person.phone, person.emailAt least one, so Tieloom can find the person. A phone number without a country code is read as the workspace's country.
person.name, person.companyFilled in when the record has none; never written over.
activity.kindOne of call, message, email, booking, request, note, meeting or form.
activity.titleRequired. One line, shown on the timeline.
activity.body, activity.link, activity.occurred_atOptional. A link must start with http or https; the time is ISO 8601 and defaults to now.
task.title, task.due_on, task.urgentOptional. A task for the person, due on a date like 2026-10-21.

Calls

A call.ended event is the body Damaruka's webhooks carry. Tieloom finds or makes the person by the number that called, hangs the call on their timeline with the summary and details, adds a call back task for a message, an enquiry, an intake, a repair request or an emergency, and moves the person forward on a booking. A call with "mode": "test" is shown as a test and leaves no task.

{
  "event": "call.ended",
  "id": "a delivery id",
  "call": {
    "id": "c1", "mode": "live", "caller_phone": "+14155550123",
    "started_at": "2026-10-18T15:04:00+00:00", "duration_seconds": 94,
    "summary": "Wants a cleaning before the 30th.", "urgent": false,
    "outcomes": [{"kind": "message", "fields": {"name": "Ana Ruiz"}}],
    "details": [{"label": "Message", "value": "Cleaning before the 30th"}],
    "link": "https://damaruka.com/c/abc123"
  }
}

Answers and errors

A 200 answer says which person the event landed on, whether they are new, and whether it was a repeat ("duplicate": true, nothing changed). Otherwise:

401No key, or a key that is not this workspace's (or was removed).
400The body is not JSON.
413The event is over 256 KB.
422The event cannot be used as sent. The message says what to change; sending it again unchanged will not help.
409Two events for one new person arrived at the same moment and this one lost. Send it again.

Questions or something missing? See how connections work, or write to augusta@4ugusta.agency.