An HTTP API over your own CRM: meetings and their AI summaries, contacts, companies, tags and action items. Read only by default, with optional write access. Use it from your own apps, or plug it into Claude with the official MCP server and just ask questions about your meetings.
Security model
✓Read only by default. A key can only write if you explicitly gave it the write scope when you created it. Scopes are fixed at creation and cannot be widened later.
✓No delete endpoints in the documented API. Write-scoped keys can create or update data, so keep them secret and revoke them if exposed.
✓Writes obey your plan. API writes go through the same quota and ownership rules as the app, so they cannot be used to bypass plan limits, and they never trigger AI transcription or summarising.
✓Account and organization scope. API keys use the account and organization permissions associated with their owner.
✓Hashed at rest. We store only a SHA-256 of your key. It is shown once at creation and is not recoverable.
✓Revocable and expiring. Revoke instantly, or set an expiry when you create the key.
✓Rate limited. 120 requests per minute per key.
!Treat a key like a password. It grants read access to your whole CRM. Keep it in an environment variable, never in a public repo, a browser, or a chat message.
Authentication
Create a key in Settings → API. Keys start with talicrm_sk_. Send it as a bearer token:
An X-API-Key header works too. Unknown, revoked and expired keys all return the same 401.
Use it with Claude (MCP)
TaliCRM hosts a remote MCP server at https://talicrm.com/mcp — no install. It connects Claude to your CRM so you can ask things like "what did I agree to with Acme last month?" or "summarise everything tagged pricing". The easiest way is the Integrations page: add the connector and log in with TaliCRM — no key to paste (OAuth). The commands below use an API key instead, for scripts or clients without login support.
Restart Claude, then ask it to run talicrm_whoami. Tools available: search/get meetings, search/get contacts, list/get companies, list tags, list tasks. All read only.
Endpoints
Base URL https://talicrm.com/api/v1
GET/me
Your account and the organizations it can see.
GET/meetings
Your meetings, newest first. Filters: query, tag, contact_id, company_id, from, to, archived, limit, offset. Free text searches title, summary, transcript and participants.
GET/meetings/:id
One meeting in full, including the transcript.
GET/contacts
Your contacts. Filters: query, tag, tag_id, company_id, limit, offset.
GET/contacts/:id
One contact, with company, tags and their 20 most recent meetings.
GET/companies
Your companies, with contact counts. Filters: query, limit, offset.
GET/companies/:id
One company, with its contacts.
GET/tags
Your tag vocabulary, with contact and meeting counts.
GET/tasks
Open follow ups: standalone tasks plus AI-extracted meeting action items. status=open|done|all.
Writes requires write scope
Create and update only. A read only key gets 403 on every one of these. Rate limited to 30 writes per minute, separately from reads.
POST/contacts
Create a contact. Needs at least one of first_name, last_name, email. Optional company_id, tag_ids, org_id.
PATCH/contacts/:id
Update a contact. Only the fields you send change.
PUT/contacts/:id/tags
Replace a contact's tags. { tag_ids: [1,2] }
POST/companies
Create a company. name required.
PATCH/companies/:id
Update a company.
POST/tasks
Create a follow up. text required; optional due_at, contact_id.
PATCH/tasks/:id
Update a task, e.g. { done: true }.
POST/meetings
Log a typed meeting note. No audio and no AI: transcription and summarising stay an in-app action.
PATCH/meetings/:id
Update a meeting's title or notes. AI fields (summary, transcript, action items) are not writable.
PUT/meetings/:id/tags
Replace a meeting's tags.
Responses
Lists share one envelope. limit defaults to 25 and caps at 100.