Case notes and timeline
Every case has an append-only timeline: creation, uploads, status changes, assignments, notes and more. Changes made with an API key appear under the key’s name.
| Method | Path | What it does |
|---|---|---|
POST |
/cases/{id}/notes |
Add a note |
GET |
/cases/{id}/events |
List timeline events |
Add a note
Section titled “Add a note”POST
/cases/{id}/notesChanges dataAPI key| Field | Type | Required | Description |
|---|---|---|---|
text |
string | yes | The note, 1–4,000 characters. |
curl https://api.recovai.ai/cases/5b0e2c1a-7d4f-4c2b-9a61-2f8e3d4c5b6a/notes \ -H "X-API-Key: $RECOVAI_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "text": "Account holder called; promised a payment proposal by Friday." }'<?php$ch = curl_init('https://api.recovai.ai/cases/5b0e2c1a-7d4f-4c2b-9a61-2f8e3d4c5b6a/notes');curl_setopt_array($ch, [ CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_RETURNTRANSFER => true, CURLOPT_POSTFIELDS => json_encode([ 'text' => 'Account holder called; promised a payment proposal by Friday.', ]), CURLOPT_HTTPHEADER => ['X-API-Key: ' . getenv('RECOVAI_API_KEY'), 'Content-Type: application/json'],]);$body = curl_exec($ch);$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);curl_close($ch);
$result = json_decode($body, true);if ($status >= 400) { throw new RuntimeException($result['error'] . ': ' . ($result['details'] ?? ''));}const res = await fetch('https://api.recovai.ai/cases/5b0e2c1a-7d4f-4c2b-9a61-2f8e3d4c5b6a/notes', { method: 'POST', headers: { 'X-API-Key': process.env.RECOVAI_API_KEY, 'Content-Type': 'application/json' }, body: JSON.stringify({ "text": "Account holder called; promised a payment proposal by Friday." }),});const data = await res.json();if (!res.ok) throw new Error(`${data.error}: ${data.details ?? ''}`);import osimport requests
r = requests.post( "https://api.recovai.ai/cases/5b0e2c1a-7d4f-4c2b-9a61-2f8e3d4c5b6a/notes", headers={"X-API-Key": os.environ["RECOVAI_API_KEY"]}, json={ "text": "Account holder called; promised a payment proposal by Friday.", }, timeout=60,)data = r.json()if not r.ok: raise RuntimeError(f"{data['error']}: {data.get('details', '')}")Response 201 Created
Section titled “Response 201 Created”{ "note": { "id": "a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d", "case_id": "5b0e2c1a-7d4f-4c2b-9a61-2f8e3d4c5b6a", "event_type": "note_added", "description": "Account holder called; promised a payment proposal by Friday.", "created_at": "2026-10-14T16:05:31.000Z" }}Notes are part of the audit record. They cannot be edited, and only an administrator can remove one in the web app.
List timeline events
Section titled “List timeline events”GET
/cases/{id}/eventsRead onlyAPI key| Parameter | Type | Default | Description |
|---|---|---|---|
take |
integer | 100 |
Page size, up to 500. |
skip |
integer | 0 |
Number of events to skip. |
Newest first.
Example
Section titled “Example”curl "https://api.recovai.ai/cases/5b0e2c1a-7d4f-4c2b-9a61-2f8e3d4c5b6a/events?take=50" \ -H "X-API-Key: $RECOVAI_API_KEY"<?php$ch = curl_init('https://api.recovai.ai/cases/5b0e2c1a-7d4f-4c2b-9a61-2f8e3d4c5b6a/events?take=50');curl_setopt_array($ch, [ CURLOPT_CUSTOMREQUEST => 'GET', CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => ['X-API-Key: ' . getenv('RECOVAI_API_KEY')],]);$body = curl_exec($ch);$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);curl_close($ch);
$result = json_decode($body, true);if ($status >= 400) { throw new RuntimeException($result['error'] . ': ' . ($result['details'] ?? ''));}const res = await fetch('https://api.recovai.ai/cases/5b0e2c1a-7d4f-4c2b-9a61-2f8e3d4c5b6a/events?take=50', { method: 'GET', headers: { 'X-API-Key': process.env.RECOVAI_API_KEY },});const data = await res.json();if (!res.ok) throw new Error(`${data.error}: ${data.details ?? ''}`);import osimport requests
r = requests.get( "https://api.recovai.ai/cases/5b0e2c1a-7d4f-4c2b-9a61-2f8e3d4c5b6a/events?take=50", headers={"X-API-Key": os.environ["RECOVAI_API_KEY"]}, timeout=60,)data = r.json()if not r.ok: raise RuntimeError(f"{data['error']}: {data.get('details', '')}")Response 200 OK
Section titled “Response 200 OK”{ "events": [ { "id": "b2c3d4e5-f6a7-4b8c-9d0e-1f2a3b4c5d6e", "event_type": "document_uploaded", "description": "Uploaded Contract: agreement.pdf", "metadata": { "type": "contract" }, "created_at": "2026-10-14T15:44:12.000Z", "users": null } ], "total": 7, "skip": 0, "take": 100, "has_more": false}users names the person who made the change; it is null for changes made by an API key or by RecovAI itself.