{"openapi":"3.1.0","info":{"title":"Eavesy API","version":"1.0.0","description":"Read and change your Eavesy library: recordings, dictations, notes, screenshots and other captures, and action items, and get webhooks when new ones arrive. It runs on the same tools as the Eavesy MCP server. Authenticate with an API key from Eavesy settings (AI apps and API keys → New key) as `Authorization: Bearer <key>`. A key is read-only unless you allowed writes when you made it, and it stops working after 90 days unused. Errors come back as `{ \"error\": { \"code\", \"message\" } }`."},"servers":[{"url":"https://mcp.eavesy.com/v1"}],"security":[{"apiKey":[]}],"tags":[{"name":"Library","description":"Everything you recorded, dictated, wrote or captured."},{"name":"Action items","description":"Tasks from your recordings’ summaries."},{"name":"Webhooks","description":"Signed POSTs to your URL when something new arrives."},{"name":"Account"}],"paths":{"/me":{"get":{"tags":["Account"],"operationId":"getAccount","summary":"The account and key in use","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Account"}}}},"400":{"description":"The request is not valid. `error.message` says why.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or one that is not valid or has expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key (120 a minute), or a daily limit was reached. See `retry-after`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/projects":{"get":{"tags":["Library"],"operationId":"listProjects","summary":"List projects","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"projects":{"type":"array","items":{"$ref":"#/components/schemas/Project"}}},"required":["projects"]}}}},"400":{"description":"The request is not valid. `error.message` says why.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or one that is not valid or has expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key (120 a minute), or a daily limit was reached. See `retry-after`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/items":{"get":{"tags":["Library"],"operationId":"listItems","summary":"List the newest items","description":"Newest first, across every kind unless `kinds` narrows it.","parameters":[{"name":"kinds","in":"query","description":"Only these kinds, comma-separated. Leave out for everything.","schema":{"type":"array","items":{"type":"string","enum":["meeting","dictation","note","image","video","audio"]}},"style":"form","explode":false},{"name":"project","in":"query","description":"Only items filed under this project, by name. Leaves dictations out.","schema":{"type":"string"}},{"name":"since","in":"query","description":"From this ISO 8601 date or time on. Times without an offset are UTC.","schema":{"type":"string","example":"2026-10-01"}},{"name":"until","in":"query","description":"Up to this ISO 8601 date or time. A bare date includes that whole UTC day.","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":50,"default":10}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ItemList"}}}},"400":{"description":"The request is not valid. `error.message` says why.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or one that is not valid or has expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key (120 a minute), or a daily limit was reached. See `retry-after`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/search":{"get":{"tags":["Library"],"operationId":"searchItems","summary":"Search the library","description":"Matches titles and text, including text read from screenshots. Recordings and dictations also match by meaning, and a search that includes them counts against the daily search limit (1,000).","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":1000}},{"name":"kinds","in":"query","description":"Only these kinds, comma-separated. Leave out for everything.","schema":{"type":"array","items":{"type":"string","enum":["meeting","dictation","note","image","video","audio"]}},"style":"form","explode":false},{"name":"project","in":"query","description":"Only items filed under this project, by name. Leaves dictations out.","schema":{"type":"string"}},{"name":"since","in":"query","description":"From this ISO 8601 date or time on. Times without an offset are UTC.","schema":{"type":"string","example":"2026-10-01"}},{"name":"until","in":"query","description":"Up to this ISO 8601 date or time. A bare date includes that whole UTC day.","schema":{"type":"string"}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":50,"default":10}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ItemList"}}}},"400":{"description":"The request is not valid. `error.message` says why.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or one that is not valid or has expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key (120 a minute), or a daily limit was reached. See `retry-after`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/items/{id}":{"get":{"tags":["Library"],"operationId":"getItem","summary":"Get one item in full","description":"A recording comes with its summary, your notes and the transcript; a dictation with its text; a note with its Markdown; a capture with any text read from it. For a capture’s file, use /items/{id}/file.","parameters":[{"name":"id","in":"path","required":true,"description":"An id from a list, search or webhook.","schema":{"type":"string"}},{"name":"transcript_format","in":"query","description":"A recording’s transcript cleaned up for an AI agent (`agent`), or every line as heard with timestamps (`raw`).","schema":{"type":"string","enum":["agent","raw"],"default":"agent"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ItemDetail"}}}},"400":{"description":"The request is not valid. `error.message` says why.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or one that is not valid or has expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No item of yours has that id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key (120 a minute), or a daily limit was reached. See `retry-after`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"tags":["Library"],"operationId":"updateItem","summary":"Rename an item or file it under a project","description":"Send `title`, `project` or both. Dictations have no project. The project is changed first: if the rename then fails, the project change stays. Both are safe to repeat, so send the same request again.","parameters":[{"name":"id","in":"path","required":true,"description":"The item’s id.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":200},"project":{"type":["string","null"],"description":"A project name, or null to take the item out of its project."}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["meeting","dictation","note","image","video","audio"]},"title":{"type":"string"},"project":{"type":["string","null"]}},"required":["id","kind"]}}}},"400":{"description":"The request is not valid. `error.message` says why.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or one that is not valid or has expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key is read-only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No item of yours has that id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key (120 a minute), or a daily limit was reached. See `retry-after`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/items/{id}/file":{"get":{"tags":["Library"],"operationId":"getItemFile","summary":"Download a capture’s file","description":"The original bytes of a note, screenshot, image, video or audio capture, with its content type.","parameters":[{"name":"id","in":"path","required":true,"description":"A capture id (`cap_…`).","schema":{"type":"string"}}],"responses":{"200":{"description":"The file.","content":{"*/*":{"schema":{"type":"string","contentMediaType":"application/octet-stream"}}}},"400":{"description":"The request is not valid. `error.message` says why.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or one that is not valid or has expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No capture of yours has that id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key (120 a minute), or a daily limit was reached. See `retry-after`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/notes":{"post":{"tags":["Library"],"operationId":"createNote","summary":"Save a note","description":"Keeps Markdown as a note in the library. It syncs to your signed-in Macs and counts against the daily capture limit (300).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"Markdown, up to 1 MB."},"title":{"type":"string","maxLength":200,"description":"Defaults to the first line."},"project":{"type":"string","description":"A project name to file it under."}},"required":["text"]}}}},"responses":{"201":{"description":"Saved.","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"kind":{"const":"note"},"title":{"type":"string"},"project":{"type":["string","null"]},"created_at":{"type":"string","format":"date-time"}},"required":["id","kind","title","project","created_at"]}}}},"400":{"description":"The request is not valid. `error.message` says why.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or one that is not valid or has expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key is read-only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key (120 a minute), or a daily limit was reached. See `retry-after`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/action-items":{"get":{"tags":["Action items"],"operationId":"listActionItems","summary":"List action items","description":"From the 200 newest recordings with a summary, at most 200 items.","parameters":[{"name":"status","in":"query","schema":{"type":"string","enum":["open","completed","all"],"default":"open"}},{"name":"owner","in":"query","description":"Only items owned by exactly this name.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"action_items":{"type":"array","items":{"$ref":"#/components/schemas/ActionItem"}}},"required":["action_items"]}}}},"400":{"description":"The request is not valid. `error.message` says why.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or one that is not valid or has expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key (120 a minute), or a daily limit was reached. See `retry-after`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/meetings/{id}/action-items/{index}":{"patch":{"tags":["Action items"],"operationId":"updateActionItem","summary":"Mark an action item done or open","description":"Take `index` from the list. Send the item’s `text` too, and a list that changed since you read it is refused with 409 instead of changing the wrong item.","parameters":[{"name":"id","in":"path","required":true,"description":"The recording’s id.","schema":{"type":"string"}},{"name":"index","in":"path","required":true,"description":"The item’s `index`.","schema":{"type":"integer","minimum":0}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"completed":{"type":"boolean"},"text":{"type":"string","description":"The item’s text as you read it."}},"required":["completed"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActionItemUpdate"}}}},"400":{"description":"The request is not valid. `error.message` says why.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or one that is not valid or has expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key is read-only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such recording or item.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"The list changed since it was read. Read it again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key (120 a minute), or a daily limit was reached. See `retry-after`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/webhooks":{"get":{"tags":["Webhooks"],"operationId":"listWebhooks","summary":"List webhook endpoints","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"webhooks":{"type":"array","items":{"$ref":"#/components/schemas/Webhook"}}},"required":["webhooks"]}}}},"400":{"description":"The request is not valid. `error.message` says why.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or one that is not valid or has expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key (120 a minute), or a daily limit was reached. See `retry-after`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"tags":["Webhooks"],"operationId":"createWebhook","summary":"Add a webhook endpoint","description":"At most 10 per account. The response is the only time the signing secret is shown. A webhook added with a key sends only while that key works: revoking the key stops it.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"An https URL with a public host name."},"events":{"type":"array","items":{"type":"string","enum":["recording.completed","dictation.created","capture.created"]},"minItems":1,"description":"Defaults to every event."},"description":{"type":"string","maxLength":200}},"required":["url"]}}}},"responses":{"201":{"description":"Added.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/Webhook"},{"type":"object","properties":{"secret":{"type":"string","description":"The `whsec_…` key that signs deliveries. Keep it; it is not shown again."}},"required":["secret"]}]}}}},"400":{"description":"The request is not valid. `error.message` says why.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or one that is not valid or has expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key is read-only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key (120 a minute), or a daily limit was reached. See `retry-after`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/webhooks/{id}":{"get":{"tags":["Webhooks"],"operationId":"getWebhook","summary":"Get a webhook endpoint","parameters":[{"name":"id","in":"path","required":true,"description":"The endpoint’s id (`whk_…`).","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Webhook"}}}},"400":{"description":"The request is not valid. `error.message` says why.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or one that is not valid or has expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No endpoint of yours has that id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key (120 a minute), or a daily limit was reached. See `retry-after`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"tags":["Webhooks"],"operationId":"updateWebhook","summary":"Change a webhook endpoint, or turn it on or off","description":"`enabled: true` turns an endpoint back on after Eavesy turned it off for failing, and clears its failures.","parameters":[{"name":"id","in":"path","required":true,"description":"The endpoint’s id.","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","format":"uri"},"events":{"type":"array","items":{"type":"string","enum":["recording.completed","dictation.created","capture.created"]},"minItems":1},"description":{"type":"string","maxLength":200},"enabled":{"type":"boolean"}}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Webhook"}}}},"400":{"description":"The request is not valid. `error.message` says why.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or one that is not valid or has expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key is read-only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No endpoint of yours has that id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key (120 a minute), or a daily limit was reached. See `retry-after`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Webhooks"],"operationId":"deleteWebhook","summary":"Remove a webhook endpoint","parameters":[{"name":"id","in":"path","required":true,"description":"The endpoint’s id.","schema":{"type":"string"}}],"responses":{"204":{"description":"Removed. Deliveries still queued for it are dropped."},"400":{"description":"The request is not valid. `error.message` says why.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or one that is not valid or has expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key is read-only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No endpoint of yours has that id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key (120 a minute), or a daily limit was reached. See `retry-after`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/webhooks/{id}/test":{"post":{"tags":["Webhooks"],"operationId":"testWebhook","summary":"Send a test event now","description":"POSTs one `webhook.test` event straight away, without retries, and says how the endpoint answered.","parameters":[{"name":"id","in":"path","required":true,"description":"The endpoint’s id.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"delivered":{"type":"boolean"},"status":{"type":["integer","null"],"description":"The HTTP status the endpoint answered with."},"error":{"type":["string","null"]},"event_id":{"type":"string"}},"required":["delivered","status","error","event_id"]}}}},"400":{"description":"The request is not valid. `error.message` says why.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"No API key, or one that is not valid or has expired.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"The key is read-only.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No endpoint of yours has that id.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests for this key (120 a minute), or a daily limit was reached. See `retry-after`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"webhooks":{"event":{"post":{"summary":"An event, POSTed to each endpoint that subscribes to it","description":"Signed as Standard Webhooks (standardwebhooks.com) sign: `webhook-signature` is `v1,` and the base64 HMAC-SHA256 of `{webhook-id}.{webhook-timestamp}.{body}`, keyed with the base64-decoded part of the secret after `whsec_`. Answer with any 2xx within 15 seconds. Anything else is retried 7 times over about 27 hours, with the same `webhook-id`; an endpoint is turned off after 5 events in a row fail every attempt. Events can arrive more than once and out of order.","parameters":[{"name":"webhook-id","in":"header","required":true,"schema":{"type":"string"},"description":"The event’s id. Use it to drop repeats."},{"name":"webhook-timestamp","in":"header","required":true,"schema":{"type":"string"},"description":"Unix seconds when this attempt was signed."},{"name":"webhook-signature","in":"header","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookEvent"}}}},"responses":{"200":{"description":"Received. Any 2xx will do."}}}}},"components":{"securitySchemes":{"apiKey":{"type":"http","scheme":"bearer","description":"An Eavesy API key (`nt_…`) or an MCP OAuth access token."}},"schemas":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_request","unauthorized","insufficient_scope","not_found","method_not_allowed","conflict","rate_limited","internal_error"]},"message":{"type":"string"}},"required":["code","message"]}},"required":["error"]},"Account":{"type":"object","properties":{"email":{"type":["string","null"]},"name":{"type":["string","null"]},"connection":{"type":"object","properties":{"name":{"type":"string"},"access":{"type":"array","items":{"type":"string","enum":["read","write"]}},"kind":{"type":"string","enum":["token","oauth"]},"created_at":{"type":"string","format":"date-time"},"expires_at":{"type":["string","null"],"format":"date-time"}}}}},"Project":{"type":"object","properties":{"name":{"type":"string"},"about":{"type":"string"},"terms":{"type":"array","items":{"type":"string"}},"people":{"type":["string","null"]},"recordings":{"type":"integer"}}},"Item":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["meeting","dictation","note","image","video","audio"],"description":"`meeting` is any recording, not only calls."},"title":{"type":"string"},"excerpt":{"type":["string","null"]},"project":{"type":["string","null"]},"created_at":{"type":"string","format":"date-time","description":"When it was recorded or captured."},"duration_sec":{"type":["number","null"]},"url":{"type":["string","null"],"description":"Where to open it in Eavesy."},"score":{"type":"number","description":"Search only: 1 for a word match, lower for a match by meaning."}},"required":["id","kind","title","excerpt","project","created_at","duration_sec","url"]},"ItemList":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/Item"}}},"required":["items"]},"ItemDetail":{"type":"object","description":"An item in full. The fields beyond `id`, `kind` and `title` depend on the kind.","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["meeting","dictation","note","image","video","audio"]},"title":{"type":"string"},"description":{"type":["string","null"],"description":"Recording."},"started_at":{"type":"string","format":"date-time","description":"Recording."},"created_at":{"type":"string","format":"date-time","description":"Dictation or capture."},"duration_sec":{"type":["number","null"]},"summary":{"description":"Recording: the summary, or your own Markdown if you replaced it.","oneOf":[{"type":"null"},{"type":"string"},{"$ref":"#/components/schemas/Summary"}]},"notes":{"type":["string","null"],"description":"Recording: what you wrote about it yourself."},"project":{"type":["string","null"]},"transcript":{"type":["string","null"]},"text":{"type":["string","null"],"description":"Dictation, note or capture: its text."},"content_type":{"type":"string","description":"Capture."},"bytes":{"type":"integer","description":"Capture."},"url":{"type":["string","null"]}},"required":["id","kind","title"],"additionalProperties":true},"Summary":{"type":"object","properties":{"tldr":{"type":"string"},"decisions":{"type":"array","items":{"type":"object","properties":{"text":{"type":"string"}}}},"action_items":{"type":"array","items":{"type":"object"}},"follow_ups":{"type":"array","items":{"type":"object"}},"open_questions":{"type":"array","items":{"type":"object"}},"topics":{"type":"array","items":{}},"mentions":{"type":"array","items":{}}}},"ActionItem":{"type":"object","properties":{"index":{"type":"integer","description":"Its place in the recording’s list; the update takes it."},"text":{"type":"string"},"owner":{"type":"string"},"due":{"type":"string"},"completed":{"type":"boolean"},"meeting_id":{"type":"string"},"meeting_title":{"type":"string"}},"required":["index","text","completed","meeting_id","meeting_title"]},"ActionItemUpdate":{"type":"object","properties":{"meeting_id":{"type":"string"},"index":{"type":"integer"},"text":{"type":"string"},"owner":{"type":"string"},"due":{"type":"string"},"completed":{"type":"boolean"}},"required":["meeting_id","index","text","completed"]},"Webhook":{"type":"object","properties":{"id":{"type":"string"},"url":{"type":"string"},"description":{"type":"string"},"events":{"type":"array","items":{"type":"string","enum":["recording.completed","dictation.created","capture.created"]}},"enabled":{"type":"boolean"},"disabled_reason":{"type":["string","null"]},"created_at":{"type":"string","format":"date-time"},"last_attempt_at":{"type":["string","null"],"format":"date-time"},"last_success_at":{"type":["string","null"],"format":"date-time"},"last_status":{"type":["integer","null"]},"last_error":{"type":["string","null"]},"created_by_key_id":{"type":["string","null"],"description":"The key that added it over the API. It sends only while that key works; null when added in Eavesy settings."}},"required":["id","url","description","events","enabled","disabled_reason","created_at","last_attempt_at","last_success_at","last_status","last_error","created_by_key_id"]},"WebhookEvent":{"type":"object","properties":{"id":{"type":"string","description":"Also sent as `webhook-id`."},"type":{"type":"string","enum":["recording.completed","dictation.created","capture.created","webhook.test"],"description":"`recording.completed`: a recording finished processing (its summary is ready if it has one). `dictation.created`: a dictation was saved. `capture.created`: a note, screenshot, image, video or audio capture was saved. `webhook.test`: sent only by the test call."},"timestamp":{"type":"string","format":"date-time"},"data":{"type":"object","description":"The item, as listed. Get the rest from /items/{id}. A test event carries `endpoint_id` and `message` instead.","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["meeting","dictation","note","image","video","audio"]},"title":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"url":{"type":["string","null"]}}}},"required":["id","type","timestamp","data"]}}}}