Iblai api crm
Manage an ibl.ai organization's CRM via the platform API — people, organizations, pipelines and stages, lead sources, deals (with stage-move/won/lost actions), activities, and tags. Org-wide sales/relationship management. Use for lead capture, pipelines, and deal flow.From its SKILL.md
npx -y skills add iblai/api --skill iblai-api-crmAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 15 stars15 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
11.3 KB, ~3.0k tokens by cl100k_base, as published. Nobody here has run it
iblai-api-crm
Manage an organization's CRM from the API: people and organizations, pipelines and their stages, lead sources, deals (with stage-move / won / lost actions), activities, and tags — all the sales and relationship-management records for one organization. Use for lead capture, pipelines, and deal flow.
Auth & conventions
- Base URL:
https://api.iblai.app/dm— CRM is a Data Manager (DM) endpoint, so the/dmprefix is required; the/api/crm/...paths below are appended to it (e.g.https://api.iblai.app/dm/api/crm/persons/). - Header:
Authorization: Api-Token $IBLAI_API_KEYon every request. (The CRM developer docs phrase this asAuthorization: Token <key>— it is the same Platform API Token.) - Scope: Platform-scoped. Every record belongs to the organization resolved
from the token, so there is no
{org}in the path. - Ids: integers for every resource except Person and Organization, whose ids are UUID strings.
- Not connected yet? Run
/iblai-api-loginfirst to populateIBLAI_ORG,IBLAI_USERNAME, andIBLAI_API_KEY.
Resources
| Resource | Path | Id |
|---|---|---|
| Person | /api/crm/persons/ | UUID |
| Organization | /api/crm/organizations/ | UUID |
| Pipeline | /api/crm/pipelines/ | int |
| Stage | /api/crm/pipelines/{pipeline_id}/stages/ | int (nested under a pipeline) |
| Lead Source | /api/crm/lead-sources/ | int |
| Deal | /api/crm/deals/ | int |
| Activity | /api/crm/activities/ | int |
| Tag | /api/crm/tags/ | int |
Each resource supports standard REST: GET (list), POST (create),
GET {id} (read), PATCH {id} (update), DELETE {id} (delete).
DELETE is destructive — confirm with the user first.
Useful filters
owner={user_id}— "my pipeline" / "my accounts".owner__isnull=true— unowned records.?is_default=trueon pipelines — the seeded pipeline; its response embeds its stages inline.
Pagination
List GETs are page-numbered. Navigate with ?page={n} and override the page
size with ?page_size={n} (default 50). The list envelope is:
{ "count": 137, "next_page": 3, "previous_page": 1, "results": [ /* … */ ] }
next_page / previous_page are page numbers (or null at the ends), not
URLs — a detail different from stock DRF pagination.
Reads
Person
- GET
/api/crm/persons/— list people. - GET
/api/crm/persons/{id}/— read a person.
Organization
- GET
/api/crm/organizations/— list organizations. - GET
/api/crm/organizations/{id}/— read an organization.
Pipeline
- GET
/api/crm/pipelines/— list pipelines. - GET
/api/crm/pipelines/{id}/— read a pipeline.
Stage
- GET
/api/crm/pipelines/{pipeline_id}/stages/— list a pipeline's stages. - GET
/api/crm/pipelines/{pipeline_id}/stages/{id}/— read a stage.
Lead Source
- GET
/api/crm/lead-sources/— list lead sources. - GET
/api/crm/lead-sources/{id}/— read a lead source.
Deal
- GET
/api/crm/deals/— list deals. - GET
/api/crm/deals/{id}/— read a deal.
Activity
- GET
/api/crm/activities/— list activities. - GET
/api/crm/activities/{id}/— read an activity.
Tag
- GET
/api/crm/tags/— list tags. - GET
/api/crm/tags/{id}/— read a tag.
Writes
Person
- POST
/api/crm/persons/— create a person. - PATCH
/api/crm/persons/{id}/— update a person. - DELETE
/api/crm/persons/{id}/— delete a person. Confirm with the user first.
Person actions:
- POST
/api/crm/persons/merge/— merge duplicates into one: body{ "primary_id": UUID, "duplicate_ids": [UUID, …] }; reparents the duplicates' deals / activities / tags onto the primary. Destructive — confirm first. - POST
/api/crm/persons/{id}/invite/— email an invitation to the person'sprimary_email. Body (all optional):is_admin(bool),is_staff(bool),enrollment_config(object, forwarded to auto-enroll the invitee),redirect_to(url). Success returns theinvitation_id;409if an active invitation already exists for that email (the response carries the existinginvitation_id, so you can track / resend it),422if the person is already linked to a platform user. Sends outward — confirm with the user first. - POST
/api/crm/persons/{id}/link-user/— link the CRM person to an existing platform user: body{ "user_id": int }(required; the user must already be an active member of your org, else403). Setsplatform_user.
Organization
- POST
/api/crm/organizations/— create an organization. - PATCH
/api/crm/organizations/{id}/— update an organization. - DELETE
/api/crm/organizations/{id}/— delete an organization. Confirm with the user first.
Pipeline
- POST
/api/crm/pipelines/— create a pipeline. - PATCH
/api/crm/pipelines/{id}/— update a pipeline. - DELETE
/api/crm/pipelines/{id}/— delete a pipeline. Confirm with the user first.
Stage
- POST
/api/crm/pipelines/{pipeline_id}/stages/— create a stage. - PATCH
/api/crm/pipelines/{pipeline_id}/stages/{id}/— update a stage. - DELETE
/api/crm/pipelines/{pipeline_id}/stages/{id}/— delete a stage. Confirm with the user first.
Lead Source
- POST
/api/crm/lead-sources/— create a lead source. - PATCH
/api/crm/lead-sources/{id}/— update a lead source. - DELETE
/api/crm/lead-sources/{id}/— delete a lead source. Confirm with the user first.
Deal
- POST
/api/crm/deals/— create a deal. - PATCH
/api/crm/deals/{id}/— update a deal. - DELETE
/api/crm/deals/{id}/— delete a deal. Confirm with the user first.
Deal actions (the canonical way to transition deals):
- PATCH
/api/crm/deals/{id}/— repositionstagewithin a pipeline (allowed). - POST
/api/crm/deals/{id}/move-stage/— transition stage; body acceptsstage_code(preferred) orstage_id. - POST
/api/crm/deals/{id}/won/— close the deal as won. Body optional:stage_codeto target a specificis_wonstage (defaults to the pipeline's firstis_wonstage bysort_order). - POST
/api/crm/deals/{id}/lost/— close the deal as lost. Body requires a non-emptylost_reason(≤255;400if missing); optionalstage_code(defaults to the firstis_loststage).
Activity
- POST
/api/crm/activities/— create an activity. - PATCH
/api/crm/activities/{id}/— update an activity. - DELETE
/api/crm/activities/{id}/— delete an activity. Confirm with the user first. - POST
/api/crm/activities/{id}/done/— mark the activity done (stampsdone_at; seeis_done/done_atin the schema).
Tag
- POST
/api/crm/tags/— create a tag. - PATCH
/api/crm/tags/{id}/— update a tag. - DELETE
/api/crm/tags/{id}/— delete a tag. Cascades — removes every assignment on every person / organization / deal. Confirm with the user first.
Attach / detach on a host ({host} = persons | organizations | deals;
both need Ibl.CRM/Tags/write, a separate RBAC bucket from host-write — see
references/workflows.md § Tagging):
- POST
/api/crm/{host}/{id}/tags/— attach an existing tag to a host record: body{ "tag_id": int }(≥ 1). Returns201with{ assignment_id, tag };409if already attached (idempotent — carries the existingassignment_id, so treat it as success);404if the tag isn't in your org. - DELETE
/api/crm/{host}/{id}/tags/{tag_id}/— detach a tag (removes the assignment row, not the tag).204on success;404if it wasn't attached. Not idempotent — a repeat DELETE returns404; treat that as a no-op success.
Example
Create a person:
curl -X POST \
"https://api.iblai.app/dm/api/crm/persons/" \
-H "Authorization: Api-Token $IBLAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Ada Lovelace",
"primary_email": "[email protected]",
"lifecycle_stage": "lead"
}'
Notes
- CRM is served via the DM gateway at
https://api.iblai.app/dm/api/crm/(equivalent to the legacyhttps://platform.iblai.app/api/crm/host; skills standardize on theapi.iblai.app/dmform). - Lifecycle stages are
lead | qualified | opportunity | customer | churned. - A CRM Person auto-links to a Platform user when a signup matches by email.
- Stages are nested under a pipeline; deal transitions go through the deal
actions (
move-stage/,won/,lost/) rather than ad-hoc edits. - Every read is scoped to your org (the token's
platform), so a record in another org returns404, not403— existence is never leaked. Treat404as "not found or not visible to you".
Schema
Field-level request/response shape (Mode req/opt/ro) for every resource, plus the
enums and the confirmed filter query params, live in a reference file to keep this skill
scannable: references/schema.md. Read it when you need exact
field names, types, defaults, or which filters a list GET accepts.
Reference material
The endpoints and field schemas above are the authoritative, code-verified surface. These companion files (ported from the CRM developer guide) preserve the surrounding concepts, workflows, and guidance — read them for depth, not for endpoint truth:
references/schema.md— field-level request/response shape (Modereq/opt/ro), enums, and the confirmed filter query params for every resource.references/guide.md— concepts & data model: system overview, write side-effects, the deal-status state machine, auth/security notes, the object graph, the resource map, and per-resource deletion/cascade behavior.references/quickstart.md— end-to-end worked walkthrough: capture a lead, find the seeded pipeline, open a deal, move it through stages, and close it won.references/workflows.md— subsystem lifecycles: person onboarding (link / invite / merge / auto-link), deal lifecycle, activity timeline & auto-records, tagging, and CRM notifications (cross-refs/iblai-api-notification).references/operations.md— filtering & pagination, the RBAC role/permission matrix (cross-refs/iblai-api-rbac), the error reference, and best practices.
What ships with it: 5 files
108.5 KB alongside SKILL.md
references/
- guide.md23.8 KB
- operations.md19.8 KB
- quickstart.md12.1 KB
- schema.md14.0 KB
- workflows.md38.8 KB
Gives 0 of the 12 instructions most sales audience skills give in ~3.0k tokens
Counted across 401 of the 401 authors here whose files we hold, read 2026-08-07
- Read product marketing context before asking questionsin 21 of 401, across 11 files
- Acknowledge competitor strengths honestlyin 18 of 401, across 7 files
- Start every page with a summaryin 15 of 401, across 4 files
- Use a single, low-friction call to actionin 15 of 401, across 7 files
- Create a single source of truth for each competitorin 14 of 401, across 3 files
- Make each follow-up email add new valuein 11 of 401, across 5 files
- Cut any sentence that does not drive a replyin 10 of 401, across 4 files
- Tie personalization directly to the problemin 10 of 401, across 4 files
- Write paragraph comparisons for each dimensionin 9 of 401, across 3 files
- Link between related competitor pagesin 9 of 401, across 3 files
- Keep subject lines short and lowercasein 9 of 401, across 3 files
- Define ideal customer profile from top customersin 9 of 401, across 3 files
Said here and by no other author read
- prepend the /dm prefix to all CRM paths
- send the Authorization header on every request
- run the login procedure before authenticating
- confirm destructive actions with the user first
- use deal actions to transition deal stages
- provide a non-empty lost_reason when closing lost deals
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.