API v1 ← Back to app Get API key →

FlowCamp REST API

Build integrations on top of your campaigns, cards, and projects. Automate workflows with Zapier, Make, or your own apps.

REST / JSON Bearer token auth Available on Pro & Team
🔑
API keys require a Pro or Team plan. Generate your key in FlowCamp → Profile → API Keys.

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();
⚠️
Keep your key secret. API keys provide full read/write access to your account. Never expose them in client-side code or public repos. Revoke and regenerate if compromised.

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

Base URL https://app.flowcamp.app/api/v1

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."
}
StatusMeaning
200OK — request succeeded
400Bad Request — missing or invalid parameters
401Unauthorized — missing or invalid API key
403Forbidden — not your resource
404Not Found — resource doesn't exist
500Server 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.

Free
$0/mo
  • 1 project
  • 3 campaigns
  • No API access
  • No file attachments
Pro
$12/mo per seat
  • Unlimited projects
  • Unlimited campaigns
  • Up to 3 API keys
  • File attachments
  • CSV export

Upgrade at app.flowcamp.app → Profile → Upgrade.

Endpoints

GET /api/v1/me Get current user info

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"
}
GET /api/v1/config Workspace config

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" }
  ]
}
GET /api/v1/projects List all projects

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"
  },
  // ...
]
GET /api/v1/projects/:id/campaigns List campaigns in a project

Returns all campaigns within a specific project.

Path parameters

ParamTypeDescription
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"
  },
  // ...
]
PUT /api/v1/projects/:id Update a project

Update the name or color of a project. Only fields you include are changed.

Body parameters

FieldTypeDescription
namestringNew project name
colorstringNew 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.

DELETE /api/v1/projects/:id Delete a project
⚠️
Destructive. Deletes the project and all its campaigns, cards, and connections permanently.

Request

curl -X DELETE https://app.flowcamp.app/api/v1/projects/1 \
  -H "Authorization: Bearer fc_live_..."

Response

Returns 204 No Content on success.

POST /api/v1/projects/:id/campaigns Create a campaign

Creates a new campaign inside a project.

Path parameters

ParamTypeDescription
id required number Project ID to create the campaign in

Body parameters

FieldTypeDescription
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"
}
GET /api/v1/campaigns/:id Get campaign with cards

Returns a campaign and all of its cards (nodes on the board).

Path parameters

ParamTypeDescription
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"
    },
    // ...
  ]
}
PATCH /api/v1/campaigns/:id Update a campaign

Update any field on a campaign. Only fields you include are changed.

Body parameters

FieldTypeDescription
namestringNew name
datestringTarget date, e.g. 2026-06-30
colorstringHex color
archivedbooleantrue 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.

DELETE /api/v1/campaigns/:id Delete a campaign
⚠️
Destructive. Permanently deletes the campaign and all its cards and connections.

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.

GET /api/v1/cards/:id Get card with comments

Returns a single card and all its comments.

Path parameters

ParamTypeDescription
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"
}
POST /api/v1/campaigns/:id/cards Create a card

Creates a new card inside a campaign.

Path parameters

ParamTypeDescription
id required string Campaign ID to add the card to

Body parameters

FieldTypeDescription
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"
}
PUT /api/v1/cards/:id Update a card

Updates one or more fields on an existing card. Only fields you send are changed (partial update).

Path parameters

ParamTypeDescription
id required string The card ID to update

Body parameters

All fields are optional — only the fields you send are updated.

FieldTypeDescription
titlestringNew title
descriptionstringNew description
statusstringidea in_progress review done
typestringCard type slug
prioritystringlow medium high
dueDatestringISO date, e.g. 2025-12-31
assigneeIdnumberUser ID to assign
positionXnumberHorizontal position on the board canvas
positionYnumberVertical 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).

DELETE /api/v1/cards/:id Delete a card

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.

GET /api/v1/campaigns/:id/connections List connections in a campaign

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" }
]
POST /api/v1/campaigns/:id/connections Create a connection

Draws an arrow from one card to another. Both cards must belong to this campaign.

Body parameters

FieldTypeDescription
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" }
DELETE /api/v1/campaigns/:id/connections/:connId Delete a connection

Removes an arrow between two cards. Returns 204 No Content on success.

Path parameters

ParamTypeDescription
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
💡
Common automation ideas: Create a card when a new row appears in Google Sheets · Mark a card as done when a Notion task is completed · Post to Slack when a card status changes.

Rate Limits

To keep things fair for all users, API requests are rate-limited per key.

PlanLimitWindow
Pro300 requestsper minute
Team1,000 requestsper minute

When you exceed the limit, the API returns a 429 Too Many Requests response. Back off and retry after a few seconds.

© 2026 FlowCamp · API v1
Privacy Terms Contact