Developers
API for AI agents
Let an AI agent, like Meta's Muse, add Instagram leads to your Crustomer workspace and read them back. Leads land in your CRM for your team to review. The API never messages anyone.
Connect in three steps
- In Crustomer, open Settings → API keys and click Create API key. Copy the key; it's shown once.
- In your agent's custom connector, choose API key auth and paste the key. It's sent as a Bearer token.
- Set the base address to
https://crustomer.us/api/v1and point it at this page or the OpenAPI file below.
- Base address
https://crustomer.us/api/v1- Auth
Authorization: Bearer crsk_…- Format
- JSON in and out, over HTTPS
- OpenAPI
- https://crustomer.us/api/v1/openapi.json
- Limit
- 120 requests a minute per key
Add a lead
POST /v1/leads
curl https://crustomer.us/api/v1/leads \
-H "Authorization: Bearer $CRUSTOMER_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"instagram_username": "mayatorres",
"profile_url": "https://www.instagram.com/mayatorres/",
"full_name": "Maya Torres",
"bio": "Miami · house music · yoga teacher",
"follower_count": 12400,
"source_account": "reefrave",
"vetted": false,
"notes": "Posts about beach events every weekend."
}'A new lead comes back with 201 and { "data": { ...lead }, "created": true }. If the workspace already has that Instagram username, the lead is updated instead and comes back with 200 and "created": false: blanks are filled, the follower count and vetted are refreshed, and new notes are added once. The team's own name, bio and status are never overwritten.
To add up to 100 at once, send { "leads": [ {...}, {...} ] }. If any lead has a problem, nothing is saved and the error names it, like leads[3].instagram_username.
| Field | Type | Notes |
|---|---|---|
instagram_username | text | Required (or send profile_url). With or without @. |
profile_url | text | An instagram.com profile link. |
full_name | text | Up to 200 characters. |
bio | text | Their bio or a short summary. Up to 2,000 characters. |
follower_count | number | A whole number, or text like "12.4k". |
source_account | text | The account, hashtag or place they were found through. |
vetted | true / false | Whether they've been checked as a good fit. |
notes | text | Added to the lead's notes. Up to 5,000 characters. |
List leads
GET /v1/leads?limit=25
Newest first. limit is 1 to 100 (default 25). The response is { "data": [...], "next_cursor": "…" }; pass ?cursor= with that value for the next page. next_cursor is null on the last page. Filter with vetted=true or created_after=2026-09-01T00:00:00Z.
curl "https://crustomer.us/api/v1/leads?limit=50&vetted=true" \
-H "Authorization: Bearer $CRUSTOMER_API_KEY"Get one lead
GET /v1/leads/{id} returns { "data": { ...lead } }, or 404.
{
"data": {
"id": "5b0c7a4e-…",
"instagram_username": "mayatorres",
"profile_url": "https://www.instagram.com/mayatorres/",
"full_name": "Maya Torres",
"bio": "Miami · house music · yoga teacher",
"follower_count": 12400,
"source_account": "reefrave",
"vetted": false,
"notes": "Posts about beach events every weekend.",
"status": "New",
"category": "Unclear",
"contact_type": "Attendee Lead",
"source": "api",
"created_at": "2026-09-29T15:04:05.000Z",
"updated_at": "2026-09-29T15:04:05.000Z"
}
}Errors
Errors use normal HTTP status codes and one JSON shape:
{ "error": { "code": "validation_failed", "message": "Some fields need fixing. Nothing was saved.", "fields": { "follower_count": "Must be a whole number of followers, like 12400." } } }| Status | Code | Meaning |
|---|---|---|
| 400 | invalid_json | The body isn't JSON. |
| 401 | missing_key / invalid_key | No key, or the key is wrong or turned off. |
| 403 | workspace_locked | The workspace is paused (billing). |
| 404 | not_found | No lead with that id in this workspace. |
| 413 | too_large | Body over 1 MB. |
| 422 | validation_failed | A field needs fixing; see error.fields. Nothing was saved. |
| 429 | rate_limited | Too many requests; wait for Retry-After seconds. |
| 500 | server_error | Our side; try again in a minute. |
| 503 | unavailable | Couldn't check the key just now; wait for Retry-After seconds. |
Keys
- Each key belongs to one workspace and only sees that workspace's leads.
- Owners and admins make, rotate and turn off keys in Settings → API keys. Rotating makes a new key and turns the old one off at once.
- Crustomer only keeps a fingerprint of each key. If one is lost, rotate it.
Leads added through the API are for your team to review and reach out to by hand. Please only send what your agent may lawfully collect, and follow Instagram's rules on automated messaging.
Questions? Write to hello@crustomer.us. Setup help lives in the help center.