Developers
The Really Fast CRM API
Add leads from your forms, sync deals with other tools, or script your own reports. A plain REST API with JSON, and a key per workspace.
Keys
- Make a key in the app: Integrations → REST API, give it a name (for example “Zapier”), and copy it. It’s shown once.
- Send it in every request:
Authorization: Bearer rfc_… - A key acts as you, in that workspace only. Changes show in each record’s history under your name.
- A key can’t delete anything, send email, or change settings, members or billing.
- It stops working at once when you revoke it, when you leave the workspace, or when the workspace is deleted. Owners can revoke any key in their workspace.
- Up to 120 requests a minute per key. When the free trial ends without a subscription, reads still work and writes return 403.
Base address
https://app.reallyfastcrm.com/api/v1
Example
curl -X POST https://app.reallyfastcrm.com/api/v1/deals \
-H "Authorization: Bearer $RFCRM_KEY" \
-H "Content-Type: application/json" \
-d '{"title": "Website redesign", "value": 12000, "currency": "USD"}' Endpoints
| Method | Path | What it does |
|---|---|---|
GET | /me | The key’s workspace and member. Use it to test a key. |
GET | /people | People, newest first. ?limit= up to 50. |
POST | /people | name, optional email, phone, job_title, company_id. |
GET | /people/{id} | A person with their company, deals, open tasks and latest notes. |
GET | /companies | Companies, newest first. |
POST | /companies | name, optional domain. |
GET | /companies/{id} | A company with its people, deals, open tasks and latest notes. |
GET | /deals | Deals, newest first. |
POST | /deals | title, optional value, currency (ISO code, default EUR), stage_id, person_id, company_id, expected_close (YYYY-MM-DD). Without a stage, it goes to the first stage of the first pipeline. |
GET | /deals/{id} | A deal with its person, company, open tasks and latest notes. |
PATCH | /deals/{id} | Any of stage_id, status (open, won, lost), lost_reason, value, expected_close. |
GET | /tasks | Tasks, newest first. |
POST | /tasks | title, optional type (call, meeting, email, todo), due_date, due_time (HH:MM), description, record_type and record_id, assignee_id. |
POST | /tasks/{id}/complete | Marks a task done. |
POST | /notes | record_type (person, company, deal), record_id, body (Markdown). |
GET | /pipelines | Pipelines and their stages, with stage ids and open deals per stage. |
GET | /members | The workspace’s members, with the ids to use as assignee_id. |
GET | /search?q= | People, companies and deals whose name contains the text. |
GET | /today | Your day, as on the Today page: overdue tasks, tasks due today, deals that need something. |
Errors and limits
Errors come back as JSON with a status code: {"error": "invalid", "message": "…"}, where the message says what to fix. 401: no valid key. 403: the trial has ended, or no access. 404: no such record in this workspace. 429: too many requests.
Using ChatGPT or Claude instead? They connect without a key: Use it from ChatGPT and Claude.
Try it on your own pipeline
Bring in your Pipedrive, HubSpot or spreadsheet export, and check the preview before anything is saved. Or try the live demo first, with no sign-up.
Start free trial Try the live demo
14 days free, no card. Then $5 per user a month, billed yearly.