Campaigns
Create, update, and report on campaigns for attribution and routing.
Campaigns are named buckets that group inbound meeting requests for attribution and reporting. Each campaign is bound to a team and gets its own scheduling email address. You can attach a campaign to a request at creation time so SkipUp surfaces booking metrics back per campaign.
The campaign object
Section titled “The campaign object”| Field | Type | Description |
|---|---|---|
id | string | Unique identifier for the campaign. |
name | string | Display name. |
slug | string | URL-safe identifier derived from the name. Unique per workspace. |
description | string | null | Free-text description. Snapshotted onto requests as campaign_source for attribution. |
email_address | string | null | Scheduling email address for the campaign. |
team_id | string | ID of the team this campaign routes to. |
team_name | string | Display name of the team. |
active | boolean | true when the campaign is in use, false after deactivation or when the end date has passed. |
starts_at | string | null | ISO 8601 timestamp. Optional campaign start date. |
ends_at | string | null | ISO 8601 timestamp. Optional campaign end date. |
deactivated_at | string | null | ISO 8601 timestamp of when the campaign was deactivated. |
meeting_request_count | integer | Total meeting requests attributed to this campaign. |
meetings_booked_count | integer | Number of those requests that resulted in a booked meeting. |
booking_rate | number | meetings_booked_count / meeting_request_count as a percentage, rounded to one decimal. 0.0 when there are no requests yet. |
created_at | string | ISO 8601 timestamp of creation. |
updated_at | string | ISO 8601 timestamp of the last update. |
List campaigns
Section titled “List campaigns”GET /api/v1/campaignsReturns a paginated list of campaigns in your workspace, sorted by creation date (newest first).
Scope required: campaigns.read
Query parameters
Section titled “Query parameters”| Parameter | Type | Description |
|---|---|---|
active | string | Pass true to return only active campaigns. |
limit | integer | Number of results per page. Default 25, max 100. |
cursor | string | Cursor for fetching the next page. Use next_cursor from a previous response. |
Request
Section titled “Request”curl "https://api.skipup.ai/api/v1/campaigns?active=true" \ -H "Authorization: Bearer $SKIPUP_API_KEY"Response
Section titled “Response”{ "data": [ { "id": "cmp_01HQ...", "name": "NAA 2026", "slug": "naa-2026", "description": "National Apartment Association conference", "team_id": "tm_01HQ...", "team_name": "Sales", "active": true, "starts_at": "2026-06-01T00:00:00Z", "ends_at": "2026-06-30T23:59:59Z", "deactivated_at": null, "meeting_request_count": 42, "meetings_booked_count": 18, "booking_rate": 42.9, "created_at": "2026-04-01T10:00:00Z", "updated_at": "2026-04-25T14:30:00Z" } ], "meta": { "limit": 25, "has_more": false }}Get a campaign
Section titled “Get a campaign”GET /api/v1/campaigns/:idScope required: campaigns.read
Request
Section titled “Request”curl "https://api.skipup.ai/api/v1/campaigns/cmp_01HQ..." \ -H "Authorization: Bearer $SKIPUP_API_KEY"Response
Section titled “Response”{ "data": { "id": "cmp_01HQ...", "name": "NAA 2026", "slug": "naa-2026", "description": "National Apartment Association conference", "team_id": "tm_01HQ...", "team_name": "Sales", "active": true, "starts_at": "2026-06-01T00:00:00Z", "ends_at": "2026-06-30T23:59:59Z", "deactivated_at": null, "meeting_request_count": 42, "meetings_booked_count": 18, "booking_rate": 42.9, "created_at": "2026-04-01T10:00:00Z", "updated_at": "2026-04-25T14:30:00Z" }}Create a campaign
Section titled “Create a campaign”POST /api/v1/campaignsScope required: campaigns.write
Body parameters
Section titled “Body parameters”| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Display name. |
team_id | string | Yes | ID of the team to route the campaign through. |
description | string | No | Free-text description. |
starts_at | string | No | ISO 8601 start date. |
ends_at | string | No | ISO 8601 end date. |
Request
Section titled “Request”curl -X POST "https://api.skipup.ai/api/v1/campaigns" \ -H "Authorization: Bearer $SKIPUP_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "NAA 2026", "team_id": "tm_01HQ...", "starts_at": "2026-06-01T00:00:00Z", "ends_at": "2026-06-30T23:59:59Z" }'Response
Section titled “Response”Returns 201 Created with the new campaign object.
Update a campaign
Section titled “Update a campaign”PATCH /api/v1/campaigns/:idScope required: campaigns.write
Body parameters
Section titled “Body parameters”Any of name, description, team_id, starts_at, ends_at.
Request
Section titled “Request”curl -X PATCH "https://api.skipup.ai/api/v1/campaigns/cmp_01HQ..." \ -H "Authorization: Bearer $SKIPUP_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "NAA 2026 East" }'Deactivate a campaign
Section titled “Deactivate a campaign”POST /api/v1/campaigns/:id/deactivateScope required: campaigns.write
curl -X POST "https://api.skipup.ai/api/v1/campaigns/cmp_01HQ.../deactivate" \ -H "Authorization: Bearer $SKIPUP_API_KEY"