{"openapi":"3.1.0","info":{"title":"Teliri API","version":"1.0.0","description":"Add and read follow-ups, customers and notes from your own systems. Everything you write appears on every phone and browser of your team within seconds.\n\nAuthenticate with an API key from the web workspace (Developers): `Authorization: Bearer tl_live_…`. Keys have scopes. Up to 120 requests a minute per key.\n\nWebhooks: Teliri POSTs JSON `{id, type, createdAt, data}` to your endpoint with headers `X-Teliri-Event`, `X-Teliri-Delivery` and `X-Teliri-Signature: t=<unix seconds>,v1=<hex HMAC-SHA256 of \"<t>.<raw body>\" with your signing secret>`. Reply 2xx within 10 seconds; failures are retried after 1 min, 5 min, 30 min, 2 h and 12 h.\n\nEvents: followup.created, followup.updated, followup.done, followup.overdue, call.missed, note.created, customer.updated, reminder.done."},"servers":[{"url":"https://api.teliri.com/v1"}],"security":[{"apiKey":[]}],"components":{"securitySchemes":{"apiKey":{"type":"http","scheme":"bearer","bearerFormat":"tl_live_…"}},"schemas":{"Error":{"type":"object","properties":{"error":{"type":"string"},"message":{"type":"string"}}},"Person":{"type":"object","properties":{"userId":{"type":"string"},"name":{"type":"string"}}},"Followup":{"type":"object","properties":{"id":{"type":"string"},"externalId":{"type":["string","null"]},"number":{"type":"string","example":"+919876543210","description":"Mobile number; 10 digits are read as Indian (+91)."},"name":{"type":["string","null"]},"reason":{"type":["string","null"]},"due":{"type":"string","format":"date-time"},"status":{"enum":["open","overdue","snoozed","done"]},"snoozedUntil":{"type":["string","null"],"format":"date-time"},"assignee":{"oneOf":[{"$ref":"#/components/schemas/Person"},{"type":"null"}]},"source":{"enum":["phone","web","api"]},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}}},"NewFollowup":{"type":"object","required":["number","due"],"properties":{"number":{"type":"string","example":"+919876543210","description":"Mobile number; 10 digits are read as Indian (+91)."},"name":{"type":"string"},"due":{"oneOf":[{"type":"string","format":"date-time"},{"type":"integer","description":"Unix time in seconds or milliseconds"}]},"reason":{"type":"string","maxLength":300},"assignee":{"type":"string","description":"Person id or mobile number (see GET /api/people)"},"externalId":{"type":"string","description":"Your id. Sending the same externalId again returns the existing follow-up instead of a duplicate."}}},"Customer":{"type":"object","properties":{"number":{"type":"string","example":"+919876543210","description":"Mobile number; 10 digits are read as Indian (+91)."},"name":{"type":["string","null"]},"business":{"type":["string","null"]},"details":{"type":["string","null"]},"keyPoints":{"type":"array","items":{"type":"string"}},"type":{"type":["string","null"],"example":"customer"}}}}},"paths":{"/api/followups":{"get":{"summary":"List follow-ups","x-scope":"followups:read","parameters":[{"name":"status","in":"query","schema":{"enum":["open","done","all"],"default":"open"}},{"name":"updatedSince","in":"query","schema":{"oneOf":[{"type":"string","format":"date-time"},{"type":"integer","description":"Unix time in seconds or milliseconds"}]},"description":"Only follow-ups changed after this time."},{"name":"cursor","in":"query","schema":{"type":"integer"},"description":"Paging and incremental sync: pass nextCursor from the previous response to get only newer changes."},{"name":"number","in":"query","schema":{"type":"string","example":"+919876543210","description":"Mobile number; 10 digits are read as Indian (+91)."}},{"name":"limit","in":"query","schema":{"type":"integer","maximum":500,"default":100}}],"responses":{"200":{"description":"Follow-ups","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Followup"}},"hasMore":{"type":"boolean"},"nextCursor":{"type":["integer","null"]}}}}}},"401":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"summary":"Create a follow-up (a promised callback)","x-scope":"followups:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewFollowup"}}}},"responses":{"200":{"description":"Already created with this externalId"},"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Followup"}}}},"400":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/followups/{id}":{"get":{"summary":"Get a follow-up","x-scope":"followups:read","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Follow-up","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Followup"}}}},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"summary":"Mark done, reopen, reschedule, snooze or reassign","x-scope":"followups:write","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"status":{"enum":["open","done"]},"due":{"oneOf":[{"type":"string","format":"date-time"},{"type":"integer","description":"Unix time in seconds or milliseconds"}]},"snoozeUntil":{"oneOf":[{"type":"string","format":"date-time"},{"type":"integer","description":"Unix time in seconds or milliseconds"}]},"reason":{"type":"string"},"assignee":{"type":["string","null"]}}}}}},"responses":{"200":{"description":"Updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Followup"}}}},"404":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/people":{"get":{"summary":"People in your organization (for assignee)","x-scope":"followups:read","responses":{"200":{"description":"People"}}}},"/api/customers":{"post":{"summary":"Create or update a customer","x-scope":"customers:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["number"],"properties":{"number":{"type":"string","example":"+919876543210","description":"Mobile number; 10 digits are read as Indian (+91)."},"name":{"type":"string"},"business":{"type":"string"},"details":{"type":"string"},"keyPoints":{"type":"array","maxItems":3,"items":{"type":"string"}},"type":{"type":["string","null"],"description":"customer, supplier, lead, partner, personal, spam or one of your own"}}}}}},"responses":{"200":{"description":"Updated"},"201":{"description":"Created"},"400":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/customers/{number}":{"get":{"summary":"Customer profile with notes, open follow-ups and call summary","x-scope":"customers:read","parameters":[{"name":"number","in":"path","required":true,"schema":{"type":"string","example":"+919876543210","description":"Mobile number; 10 digits are read as Indian (+91)."}}],"responses":{"200":{"description":"Customer"}}}},"/api/notes":{"post":{"summary":"Add a note to a customer","x-scope":"notes:write","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["number","text"],"properties":{"number":{"type":"string","example":"+919876543210","description":"Mobile number; 10 digits are read as Indian (+91)."},"text":{"type":"string","maxLength":2000},"tags":{"type":"array","items":{"type":"string"}},"name":{"type":"string"}}}}}},"responses":{"201":{"description":"Created"},"400":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/calls":{"get":{"summary":"Calls (only when the owner shares call history)","x-scope":"calls:read","parameters":[{"name":"since","in":"query","schema":{"oneOf":[{"type":"string","format":"date-time"},{"type":"integer","description":"Unix time in seconds or milliseconds"}]}},{"name":"cursor","in":"query","schema":{"type":"integer"}},{"name":"limit","in":"query","schema":{"type":"integer","maximum":1000,"default":200}}],"responses":{"200":{"description":"Calls"},"403":{"description":"Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}