FlowCamp REST API
Build integrations on top of your campaigns, cards, and projects. Automate workflows with Zapier, Make, or your own apps.
Authentication
All API requests must include your API key in the Authorization header using the Bearer scheme.
# Replace fc_live_... with your actual API key
curl https://app.flowcamp.app/api/v1/projects \
-H "Authorization: Bearer fc_live_your_key_here"
If you're using JavaScript / TypeScript:
const res = await fetch('https://app.flowcamp.app/api/v1/projects', {
headers: {
'Authorization': `Bearer ${process.env.FLOWCAMP_API_KEY}`,
},
});
const projects = await res.json();
Key format
All FlowCamp API keys start with fc_live_ followed by a 64-character hex string. Keys are shown once on creation — store them securely.
Base URL & Errors
All responses are JSON. Successful responses return HTTP 200 with the requested data. Errors return a non-2xx status with a JSON body:
{
"error": "Unauthorized."
}
| Status | Meaning |
|---|---|
| 200 | OK — request succeeded |
| 400 | Bad Request — missing or invalid parameters |
| 401 | Unauthorized — missing or invalid API key |
| 403 | Forbidden — not your resource |
| 404 | Not Found — resource doesn't exist |
| 500 | Server Error — something went wrong on our end |
Plans & API Limits
API access is available on paid plans. The number of API keys you can create depends on your plan.
- 1 project
- 3 campaigns
- No API access
- No file attachments
- Unlimited projects
- Unlimited campaigns
- Up to 3 API keys
- File attachments
- CSV export
- Everything in Pro
- Unlimited API keys
- Unlimited team members
- Unlimited library imports
- Priority support
Upgrade at app.flowcamp.app → Profile → Upgrade.
Endpoints
Returns the authenticated user's profile and current plan details.
Request
curl https://app.flowcamp.app/api/v1/me \
-H "Authorization: Bearer fc_live_..."
Response
{
"id": "usr_abc123",
"name": "Jane Smith",
"email": "jane@example.com",
"plan": "pro"
}
Returns card types, statuses, and team members for the workspace. Use this to get valid values for type, status, and assigneeId when creating or updating cards.
Request
curl https://app.flowcamp.app/api/v1/config \
-H "Authorization: Bearer fc_live_..."
Response
{
"cardTypes": [
{ "id": "task", "name": "Task", "color": "#6366f1" },
{ "id": "email", "name": "Email", "color": "#0ea5e9" }
],
"statuses": [
{ "id": "idea", "name": "Idea", "color": "#475569" },
{ "id": "in_progress", "name": "In Progress", "color": "#f59e0b" },
{ "id": "review", "name": "Review", "color": "#8b5cf6" },
{ "id": "done", "name": "Done", "color": "#10b981" }
],
"team": [
{ "id": 1, "name": "Jane Smith", "avatar": "JS", "color": "#6366f1" }
]
}
Returns all projects owned by the authenticated user.
Request
curl https://app.flowcamp.app/api/v1/projects \
-H "Authorization: Bearer fc_live_..."
Response
[
{
"id": "proj_abc",
"name": "Q3 Launch",
"created_at": "2025-09-01T10:00:00.000Z"
},
// ...
]
Returns all campaigns within a specific project.
Path parameters
| Param | Type | Description |
|---|---|---|
| id required | string | The project ID |
Request
curl https://app.flowcamp.app/api/v1/projects/proj_abc/campaigns \
-H "Authorization: Bearer fc_live_..."
Response
[
{
"id": "camp_xyz",
"name": "Email Nurture",
"color": "#6366f1",
"sort_order": 0,
"created_at": "2025-09-02T08:00:00.000Z"
},
// ...
]
Update the name or color of a project. Only fields you include are changed.
Body parameters
| Field | Type | Description |
|---|---|---|
| name | string | New project name |
| color | string | New hex color, e.g. #10b981 |
Request
curl -X PUT https://app.flowcamp.app/api/v1/projects/1 \
-H "Authorization: Bearer fc_live_..." \
-H "Content-Type: application/json" \
-d '{ "name": "Rebrand 2026", "color": "#ef4444" }'
Response
Returns the updated project object.
Request
curl -X DELETE https://app.flowcamp.app/api/v1/projects/1 \
-H "Authorization: Bearer fc_live_..."
Response
Returns 204 No Content on success.
Creates a new campaign inside a project.
Path parameters
| Param | Type | Description |
|---|---|---|
| id required | number | Project ID to create the campaign in |
Body parameters
| Field | Type | Description |
|---|---|---|
| name required | string | Campaign name |
| date | string | Target date, e.g. 2025-12-31 |
| color | string | Hex color, e.g. #6366f1. Defaults to indigo |
Request
curl -X POST https://app.flowcamp.app/api/v1/projects/1/campaigns \
-H "Authorization: Bearer fc_live_..." \
-H "Content-Type: application/json" \
-d '{
"name": "Q1 Launch",
"date": "2026-03-31",
"color": "#10b981"
}'
Response
{
"id": 42,
"name": "Q1 Launch",
"date": "2026-03-31",
"color": "#10b981",
"archived": false,
"created_at": "2026-01-15T10:00:00.000Z"
}
Returns a campaign and all of its cards (nodes on the board).
Path parameters
| Param | Type | Description |
|---|---|---|
| id required | string | The campaign ID |
Request
curl https://app.flowcamp.app/api/v1/campaigns/camp_xyz \
-H "Authorization: Bearer fc_live_..."
Response
{
"id": "camp_xyz",
"name": "Email Nurture",
"color": "#6366f1",
"cards": [
{
"id": "card_001",
"title": "Welcome email",
"description": "Intro email sent on day 1",
"status": "in_progress",
"positionX": 100,
"positionY": 200,
"assigneeId": 3,
"assigneeName": "Jane Smith",
"dueDate": "2025-09-10",
"created_at": "2025-09-03T09:00:00.000Z"
},
// ...
]
}
Update any field on a campaign. Only fields you include are changed.
Body parameters
| Field | Type | Description |
|---|---|---|
| name | string | New name |
| date | string | Target date, e.g. 2026-06-30 |
| color | string | Hex color |
| archived | boolean | true to archive, false to restore |
Request
curl -X PATCH https://app.flowcamp.app/api/v1/campaigns/camp_xyz \
-H "Authorization: Bearer fc_live_..." \
-H "Content-Type: application/json" \
-d '{ "archived": true }'
Response
Returns the updated campaign object.
Request
curl -X DELETE https://app.flowcamp.app/api/v1/campaigns/camp_xyz \
-H "Authorization: Bearer fc_live_..."
Response
Returns 204 No Content on success.
Returns a single card and all its comments.
Path parameters
| Param | Type | Description |
|---|---|---|
| id required | string | The card ID |
Request
curl https://app.flowcamp.app/api/v1/cards/card_001 \
-H "Authorization: Bearer fc_live_..."
Response
{
"id": "card_001",
"title": "Welcome email",
"description": "Intro email sent on day 1",
"status": "in_progress",
"type": "task",
"priority": "high",
"dueDate": "2025-09-10",
"assigneeId": 3,
"positionX": 100,
"positionY": 200,
"comments": [
{
"id": "cmt_1",
"text": "Subject line approved",
"author": "Jane Smith",
"created_at": "2025-09-04T11:00:00.000Z"
}
],
"created_at": "2025-09-03T09:00:00.000Z"
}
Creates a new card inside a campaign.
Path parameters
| Param | Type | Description |
|---|---|---|
| id required | string | Campaign ID to add the card to |
Body parameters
| Field | Type | Description |
|---|---|---|
| title required | string | Card title (max 200 chars) |
| description | string | Optional card body / notes |
| status | string | One of: idea in_progress review done |
| type | string | Card type slug (from /config). Defaults to task |
| priority | string | low medium high |
| dueDate | string | ISO date string, e.g. 2025-12-31 |
| assigneeId | number | User ID to assign the card to |
| positionX | number | Horizontal position on the board canvas (pixels). Defaults to 0 |
| positionY | number | Vertical position on the board canvas (pixels). Defaults to 0 |
Request
curl -X POST https://app.flowcamp.app/api/v1/campaigns/camp_xyz/cards \
-H "Authorization: Bearer fc_live_..." \
-H "Content-Type: application/json" \
-d '{
"title": "New card from API",
"description": "Created via Zapier",
"status": "idea",
"positionX": 400,
"positionY": 200
}'
Response
{
"id": "card_new",
"title": "New card from API",
"description": "Created via Zapier",
"status": "idea",
"positionX": 400,
"positionY": 200,
"created_at": "2025-10-01T14:30:00.000Z"
}
Updates one or more fields on an existing card. Only fields you send are changed (partial update).
Path parameters
| Param | Type | Description |
|---|---|---|
| id required | string | The card ID to update |
Body parameters
All fields are optional — only the fields you send are updated.
| Field | Type | Description |
|---|---|---|
| title | string | New title |
| description | string | New description |
| status | string | idea in_progress review done |
| type | string | Card type slug |
| priority | string | low medium high |
| dueDate | string | ISO date, e.g. 2025-12-31 |
| assigneeId | number | User ID to assign |
| positionX | number | Horizontal position on the board canvas |
| positionY | number | Vertical position on the board canvas |
Request
# Move a card to a new position and mark it done
curl -X PUT https://app.flowcamp.app/api/v1/cards/card_001 \
-H "Authorization: Bearer fc_live_..." \
-H "Content-Type: application/json" \
-d '{
"status": "done",
"positionX": 600,
"positionY": 300
}'
Response
Returns the full updated card object (same shape as GET /cards/:id, without comments).
Permanently deletes a card and its comments. Returns 204 No Content on success.
Request
curl -X DELETE https://app.flowcamp.app/api/v1/cards/card_001 \
-H "Authorization: Bearer fc_live_..."
Connections
Connections are the arrows between cards on the board canvas. Each connection has a source card and a target card.
Returns all connections (edges) for a campaign.
Request
curl https://app.flowcamp.app/api/v1/campaigns/camp_xyz/connections \
-H "Authorization: Bearer fc_live_..."
Response
[
{ "id": "e-card_001-card_002", "source": "card_001", "target": "card_002" },
{ "id": "e-card_002-card_003", "source": "card_002", "target": "card_003" }
]
Draws an arrow from one card to another. Both cards must belong to this campaign.
Body parameters
| Field | Type | Description |
|---|---|---|
| source required | string | ID of the card the arrow starts from |
| target required | string | ID of the card the arrow points to |
Request
curl -X POST https://app.flowcamp.app/api/v1/campaigns/camp_xyz/connections \
-H "Authorization: Bearer fc_live_..." \
-H "Content-Type: application/json" \
-d '{ "source": "card_001", "target": "card_002" }'
Response
{ "id": "e-card_001-card_002", "source": "card_001", "target": "card_002" }
Removes an arrow between two cards. Returns 204 No Content on success.
Path parameters
| Param | Type | Description |
|---|---|---|
| id required | string | Campaign ID |
| connId required | string | Connection ID (from the list endpoint) |
Request
curl -X DELETE https://app.flowcamp.app/api/v1/campaigns/camp_xyz/connections/e-card_001-card_002 \
-H "Authorization: Bearer fc_live_..."
Using with Zapier & Make
FlowCamp works with any automation platform that supports custom HTTP requests.
Zapier — Webhooks by Zapier
Use the Webhooks by Zapier action (GET or POST). Set the URL to the endpoint you need and add a custom header:
Authorization: Bearer fc_live_your_key
Make (formerly Integromat)
Use the HTTP → Make a request module. In the Headers section, add:
Authorization: Bearer fc_live_your_key
Content-Type: application/json
Rate Limits
To keep things fair for all users, API requests are rate-limited per key.
| Plan | Limit | Window |
|---|---|---|
| Pro | 300 requests | per minute |
| Team | 1,000 requests | per minute |
When you exceed the limit, the API returns a 429 Too Many Requests response. Back off and retry after a few seconds.