Skip to content

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.

FieldTypeDescription
idstringUnique identifier for the campaign.
namestringDisplay name.
slugstringURL-safe identifier derived from the name. Unique per workspace.
descriptionstring | nullFree-text description. Snapshotted onto requests as campaign_source for attribution.
email_addressstring | nullScheduling email address for the campaign.
team_idstringID of the team this campaign routes to.
team_namestringDisplay name of the team.
activebooleantrue when the campaign is in use, false after deactivation or when the end date has passed.
starts_atstring | nullISO 8601 timestamp. Optional campaign start date.
ends_atstring | nullISO 8601 timestamp. Optional campaign end date.
deactivated_atstring | nullISO 8601 timestamp of when the campaign was deactivated.
meeting_request_countintegerTotal meeting requests attributed to this campaign.
meetings_booked_countintegerNumber of those requests that resulted in a booked meeting.
booking_ratenumbermeetings_booked_count / meeting_request_count as a percentage, rounded to one decimal. 0.0 when there are no requests yet.
created_atstringISO 8601 timestamp of creation.
updated_atstringISO 8601 timestamp of the last update.
GET /api/v1/campaigns

Returns a paginated list of campaigns in your workspace, sorted by creation date (newest first).

Scope required: campaigns.read

ParameterTypeDescription
activestringPass true to return only active campaigns.
limitintegerNumber of results per page. Default 25, max 100.
cursorstringCursor for fetching the next page. Use next_cursor from a previous response.
Terminal window
curl "https://api.skipup.ai/api/v1/campaigns?active=true" \
-H "Authorization: Bearer $SKIPUP_API_KEY"
{
"data": [
{
"id": "cmp_01HQ...",
"name": "NAA 2026",
"slug": "naa-2026",
"description": "National Apartment Association conference",
"email_address": "[email protected]",
"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 /api/v1/campaigns/:id

Scope required: campaigns.read

Terminal window
curl "https://api.skipup.ai/api/v1/campaigns/cmp_01HQ..." \
-H "Authorization: Bearer $SKIPUP_API_KEY"
{
"data": {
"id": "cmp_01HQ...",
"name": "NAA 2026",
"slug": "naa-2026",
"description": "National Apartment Association conference",
"email_address": "[email protected]",
"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"
}
}
POST /api/v1/campaigns

Scope required: campaigns.write

ParameterTypeRequiredDescription
namestringYesDisplay name.
team_idstringYesID of the team to route the campaign through.
descriptionstringNoFree-text description.
starts_atstringNoISO 8601 start date.
ends_atstringNoISO 8601 end date.
Terminal window
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"
}'

Returns 201 Created with the new campaign object.

PATCH /api/v1/campaigns/:id

Scope required: campaigns.write

Any of name, description, team_id, starts_at, ends_at.

Terminal window
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" }'
POST /api/v1/campaigns/:id/deactivate

Scope required: campaigns.write

Terminal window
curl -X POST "https://api.skipup.ai/api/v1/campaigns/cmp_01HQ.../deactivate" \
-H "Authorization: Bearer $SKIPUP_API_KEY"