tinyant

Developers

REST API and MCP server for Tiny Ant CRM and proposals

Everything you see in the app is available over a small JSON API, and the same API is exposed as an MCP server so Claude, Cursor and other assistants can read your pipeline and update it for you.

Authentication

Every request carries a workspace API key in the Authorization header:

Authorization: Bearer ta_live_...

Workspace admins create keys on the Settings page of the app (section API and MCP). A key is shown once when created and can be revoked at any time. It acts in the name of the admin who created it: notes, tasks and events are attributed to that person, and anything the key creates is visible to the whole workspace. The API and the MCP server are included in the Pro and Team plans and require the CRM to be enabled for the workspace.

Requests without a valid key get 401. A workspace on the Free plan gets 403.

Base URL

https://app.tinyant.io/api/v1

Bodies and responses are JSON (UTF-8). Ids look like de_, co_, pe_, ta_ and no_ followed by 12 characters; proposal ids are 12 characters without a prefix. Timestamps are Unix milliseconds. The paths, bodies and responses are the same the app itself uses, so what you see in the browser's network tab is what the API returns.

Endpoints

MethodPathWhat it does
GET/meWorkspace, plan and the user the key acts as
GET/deals?status=open|won|lost&q=List deals with stage, value, company, contact and proposal reading status
POST/dealsCreate a deal (name, company_id or company_name, person_id, value, currency, stage_id, expected_close)
GET PUT DELETE/deals/:idOne deal with timeline; update fields, stage or status (open, won, lost); delete
POST/deals/:id/proposalsLink a proposal to the deal ({proposal_id})
DELETE/deals/:id/proposals/:pidUnlink a proposal
GET POST/companiesList or create companies
GET PUT DELETE/companies/:idOne company with people, deals and timeline
GET POST/peopleList or create people (contacts)
GET PUT DELETE/people/:idOne person with deals and timeline
GET POST/tasksList (scope=mine|all, done=0|1) or create tasks
PUT DELETE/tasks/:idUpdate or complete a task; delete
POST/notesAdd a note to a deal, person or company
PUT DELETE/notes/:idEdit or delete a note
GET/stagesPipeline stages, members and currency
PUT/stagesReplace the stage list
GET/activity?since=&limit=&deal_id=&person_id=&company_id=Structured event log, newest first. since is a Unix millisecond timestamp
GET/search?q=Companies, people and deals in one search
GET/visitors?days=7|30|90Tiny Ant Visitors: companies that visited your website, pages, last visit, CRM link and the share of home, mobile and data centre visits
GET POST/visitors/settingsVisitors status and snippet; switch on or off ({enabled}), connect or remove ipapi.is ({ipapi_key})
POST/visitors/companies/:id/addAdd a visiting company to the CRM
GET/proposals?status=active|won|closed|archivedProposals with visits, reading time and linked deal
GET/proposals/:idOne proposal with reading time per page, recipients, activity and versions
POST/proposalsUpload a proposal (same body as the app: multipart with a PDF file, name and pages)
POST/proposals/:id/statusSet the status ({status: active|closed|won})

Examples

List open deals:

curl https://app.tinyant.io/api/v1/deals?status=open \
  -H "Authorization: Bearer ta_live_..."

Create a deal and let Tiny Ant create or match the company by name:

curl -X POST https://app.tinyant.io/api/v1/deals \
  -H "Authorization: Bearer ta_live_..." \
  -H "Content-Type: application/json" \
  -d '{"name": "Website redesign", "company_name": "Acme Oy", "value": 12500}'

Everything that happened since a timestamp, for example to sync your own system:

curl "https://app.tinyant.io/api/v1/activity?since=1760000000000&limit=100" \
  -H "Authorization: Bearer ta_live_..."

MCP server

The MCP (Model Context Protocol) server lives at:

https://app.tinyant.io/mcp

Transport is Streamable HTTP, stateless, JSON-RPC over POST. Authentication is the same Bearer key. There are no server-initiated streams, so a plain HTTP client is enough.

Claude Code. One line in your terminal, then ask Claude about your deals:

claude mcp add --transport http tiny-ant https://app.tinyant.io/mcp --header "Authorization: Bearer ta_live_..."

Cursor, Make, Zapier and other clients. Add a remote MCP server of type HTTP (sometimes called Streamable HTTP) with the address above and an Authorization header whose value is Bearer followed by your key. Clients that only support stdio servers can use a bridge such as mcp-remote.

claude.ai. Custom connectors in claude.ai sign in with OAuth rather than a static key. OAuth support for the Tiny Ant MCP server is planned; until then use Claude Code or the REST API.

MCP tools

Each tool calls the same API as above and returns the JSON response as text.

ToolDescription
searchSearch companies, people and deals in the CRM by name, email or domain.
list_dealsList deals.
get_dealFull view of one deal: details, company, contact, proposals with reading data, tasks and the timeline of notes and events.
create_dealCreate a deal.
update_dealUpdate a deal: rename, change value, move to a stage, mark won or lost, link a company or contact.
list_companiesList companies with people count, open deals and open value.
get_companyOne company with its people, deals and timeline.
create_companyCreate a company.
list_peopleList people (contacts), optionally for one company.
get_personOne person with deals and timeline.
create_personCreate a contact.
add_noteAdd a note to a deal, person or company.
list_tasksList open tasks for the key owner (mine) or everyone.
create_taskCreate a task, optionally linked to a deal, person or company.
complete_taskMark a task done (or reopen it with done=false).
list_stagesPipeline stages in order, workspace members and currency.
activityStructured event log of the workspace, newest first: deals created and moved, won and lost, notes, tasks, proposals linked and read.
list_proposalsProposals with reading status: visits, total reading time, reading now, linked deal.
get_proposalOne proposal: reading time per page, recipients, activity, versions, linked deal.
list_visitorsCompanies that visited your website (Tiny Ant Visitors): named company networks with pages viewed, last visit and the CRM company if linked, plus how many visits came from home, mobile or data centre networks.
link_proposalLink an existing proposal to a deal so its reading shows on the deal timeline.

Rate limits and fair use

There is no per-key rate limit yet. Our edge applies the same protections to the API as to the rest of the service, so sustained bursts from one address may be throttled with 429. Poll /activity with since instead of re-reading whole lists, keep to one key per integration so you can revoke it alone, and do not share a key with people outside your workspace. A workspace can have up to 10 active keys.

Webhooks

If you want Tiny Ant to call you instead, outgoing webhooks are set up on the same Settings page. They send a signed JSON POST when a proposal is opened, when a reading ends, when a status changes and when a deal is created or moves between stages.

Questions

Write to hello@tinyant.io. Changes to the API are announced on this page.