Loading…
Integrate SuperSig.ai into your workflow. Manage campaigns, users, signatures, and analytics programmatically. All endpoints require an API key passed via the Authorization header.
Enter your API key below. You can generate one from Settings. The key is used only in the copy-to-clipboard curl snippets below.
All API requests must include your API key in the Authorization header:
curl -H "Authorization: Bearer <YOUR_API_KEY>" \ https://www.supersig.ai/api/v1/campaigns
The word Bearer is not case-sensitive. A missing or unknown key gets a 401.
https://www.supersig.ai/api/v1
Webhooks live under /api/v2. Responses are JSON with the result in data. Errors return { "error": "message" } with a 4xx or 5xx status.
The v1 lists (campaigns, users, signatures, templates) return one page at a time, newest first. Pass page (from 1) and limit (at most 100; the default is 100). Anything else gets a 400. Keep asking for the next page while hasMore is true.
GET https://www.supersig.ai/api/v1/users?page=2&limit=50
{
"data": [
"…"
],
"pagination": {
"page": 2,
"limit": 50,
"hasMore": true
}
}A campaign that breaks one of these is refused with a 400 that names the field.
/api/v1/campaignsList your organization's campaigns, newest first. Paged: ?page= (from 1) and ?limit= (1 to 100, default 100).
curl -X GET \ -H "Authorization: Bearer <YOUR_API_KEY>" \ https://www.supersig.ai/api/v1/campaigns?page=1&limit=50
{
"data": [
{
"id": "cmp_abc123",
"orgId": "org_xyz",
"name": "Spring Promo",
"imageUrl": "https://cdn.example.com/spring.png",
"ctaUrl": "https://example.com/spring",
"ctaText": "See the offer",
"startDate": "2026-03-01T00:00:00.000Z",
"endDate": "2026-05-31T00:00:00.000Z",
"isActive": true,
"priority": 10,
"targetDepartments": [
"Sales"
],
"targetRoles": [],
"createdAt": "2026-02-20T17:04:00.000Z",
"updatedAt": "2026-02-20T17:04:00.000Z"
}
],
"pagination": {
"page": 1,
"limit": 50,
"hasMore": false
}
}/api/v1/campaignsCreate a campaign. name, imageUrl, ctaUrl and ctaText are required; startDate, endDate, isActive (default true), priority (default 0), targetDepartments and targetRoles are optional. See Campaign field rules below.
curl -X POST \
-H "Authorization: Bearer <YOUR_API_KEY>" \
-H "Content-Type: application/json" \
-d '{\n "name": "Summer Sale",\n "imageUrl": "https://cdn.example.com/summer.png",\n "ctaUrl": "https://example.com/summer",\n "ctaText": "Shop the sale",\n "startDate": "2026-06-01",\n "endDate": "2026-08-31",\n "priority": 5\n}' \
https://www.supersig.ai/api/v1/campaigns{
"name": "Summer Sale",
"imageUrl": "https://cdn.example.com/summer.png",
"ctaUrl": "https://example.com/summer",
"ctaText": "Shop the sale",
"startDate": "2026-06-01",
"endDate": "2026-08-31",
"priority": 5
}{
"data": {
"id": "cmp_abc123",
"orgId": "org_xyz",
"name": "Summer Sale",
"imageUrl": "https://cdn.example.com/spring.png",
"ctaUrl": "https://example.com/spring",
"ctaText": "See the offer",
"startDate": "2026-03-01T00:00:00.000Z",
"endDate": "2026-05-31T00:00:00.000Z",
"isActive": true,
"priority": 10,
"targetDepartments": [
"Sales"
],
"targetRoles": [],
"createdAt": "2026-02-20T17:04:00.000Z",
"updatedAt": "2026-02-20T17:04:00.000Z"
}
}/api/v1/campaigns/:idGet one campaign. 404 if it is not in your organization.
curl -X GET \ -H "Authorization: Bearer <YOUR_API_KEY>" \ https://www.supersig.ai/api/v1/campaigns/:id
{
"data": {
"id": "cmp_abc123",
"orgId": "org_xyz",
"name": "Spring Promo",
"imageUrl": "https://cdn.example.com/spring.png",
"ctaUrl": "https://example.com/spring",
"ctaText": "See the offer",
"startDate": "2026-03-01T00:00:00.000Z",
"endDate": "2026-05-31T00:00:00.000Z",
"isActive": true,
"priority": 10,
"targetDepartments": [
"Sales"
],
"targetRoles": [],
"createdAt": "2026-02-20T17:04:00.000Z",
"updatedAt": "2026-02-20T17:04:00.000Z"
}
}/api/v1/campaigns/:idChange a campaign. Send only the fields you are changing; the same rules apply as on create.
curl -X PUT \
-H "Authorization: Bearer <YOUR_API_KEY>" \
-H "Content-Type: application/json" \
-d '{\n "name": "Spring Promo (extended)",\n "endDate": "2026-06-15"\n}' \
https://www.supersig.ai/api/v1/campaigns/:id{
"name": "Spring Promo (extended)",
"endDate": "2026-06-15"
}{
"data": {
"id": "cmp_abc123",
"orgId": "org_xyz",
"name": "Spring Promo (extended)",
"imageUrl": "https://cdn.example.com/spring.png",
"ctaUrl": "https://example.com/spring",
"ctaText": "See the offer",
"startDate": "2026-03-01T00:00:00.000Z",
"endDate": "2026-06-15T00:00:00.000Z",
"isActive": true,
"priority": 10,
"targetDepartments": [
"Sales"
],
"targetRoles": [],
"createdAt": "2026-02-20T17:04:00.000Z",
"updatedAt": "2026-02-20T17:04:00.000Z"
}
}/api/v1/campaigns/:idDelete a campaign permanently.
curl -X DELETE \ -H "Authorization: Bearer <YOUR_API_KEY>" \ https://www.supersig.ai/api/v1/campaigns/:id
{
"data": {
"deleted": true
}
}/api/v1/usersList your organization's users, newest first. Paged: ?page= (from 1) and ?limit= (1 to 100, default 100).
curl -X GET \ -H "Authorization: Bearer <YOUR_API_KEY>" \ https://www.supersig.ai/api/v1/users?page=2&limit=50
{
"data": [
{
"id": "usr_abc123",
"email": "jane@company.com",
"name": "Jane Smith",
"role": "admin",
"department": "Marketing",
"platform": "google",
"signatureTemplateId": "tpl_xyz789",
"lastSeenAt": "2026-03-10T14:30:00.000Z",
"createdAt": "2026-01-15T00:00:00.000Z"
}
],
"pagination": {
"page": 2,
"limit": 50,
"hasMore": true
}
}/api/v1/users/:idGet one user. 404 if they are not in your organization.
curl -X GET \ -H "Authorization: Bearer <YOUR_API_KEY>" \ https://www.supersig.ai/api/v1/users/:id
{
"data": {
"id": "usr_abc123",
"email": "jane@company.com",
"name": "Jane Smith",
"role": "admin",
"department": "Marketing",
"platform": "google",
"signatureTemplateId": "tpl_xyz789",
"lastSeenAt": "2026-03-10T14:30:00.000Z",
"createdAt": "2026-01-15T00:00:00.000Z"
}
}/api/v1/signaturesList your organization's signatures, newest first. Paged: ?page= (from 1) and ?limit= (1 to 100, default 100).
curl -X GET \ -H "Authorization: Bearer <YOUR_API_KEY>" \ https://www.supersig.ai/api/v1/signatures
{
"data": [
{
"id": "sig_abc123",
"userId": "usr_abc123",
"name": "Work signature",
"templateKey": "professional",
"fullName": "Jane Smith",
"title": "VP of Marketing",
"company": "Acme Inc",
"phone": "+1 555-0123",
"deployedAt": "2026-03-10T14:30:00.000Z",
"createdAt": "2026-02-01T00:00:00.000Z",
"updatedAt": "2026-03-10T14:30:00.000Z"
}
],
"pagination": {
"page": 1,
"limit": 100,
"hasMore": false
}
}/api/v1/signaturesDeploys a signature to the user's live Gmail mailbox right away, replacing the signature they have now. It does not create a draft. Microsoft 365 users cannot be deployed to yet (the call returns 500 with the reason). userId is required. templateId is optional; without it the user's assigned template is used, and the call fails with 400 if they have none.
curl -X POST \
-H "Authorization: Bearer <YOUR_API_KEY>" \
-H "Content-Type: application/json" \
-d '{\n "userId": "usr_abc123",\n "templateId": "tpl_xyz789"\n}' \
https://www.supersig.ai/api/v1/signatures{
"userId": "usr_abc123",
"templateId": "tpl_xyz789"
}{
"data": {
"deployed": true,
"userId": "usr_abc123"
}
}/api/v1/templatesList your organization's templates, newest first. Paged: ?page= (from 1) and ?limit= (1 to 100, default 100).
curl -X GET \ -H "Authorization: Bearer <YOUR_API_KEY>" \ https://www.supersig.ai/api/v1/templates
{
"data": [
{
"id": "tpl_xyz789",
"name": "Company standard",
"htmlContent": "<table>…</table>",
"variables": [
"fullName",
"title"
],
"role": null,
"isActive": true,
"createdAt": "2026-01-10T00:00:00.000Z",
"updatedAt": "2026-01-10T00:00:00.000Z"
}
],
"pagination": {
"page": 1,
"limit": 100,
"hasMore": false
}
}/api/v1/templatesCreate a template. name and htmlContent are required; role and isActive (default true) are optional.
curl -X POST \
-H "Authorization: Bearer <YOUR_API_KEY>" \
-H "Content-Type: application/json" \
-d '{\n "name": "Sales team",\n "htmlContent": "<table>…</table>",\n "role": "sales"\n}' \
https://www.supersig.ai/api/v1/templates{
"name": "Sales team",
"htmlContent": "<table>…</table>",
"role": "sales"
}{
"data": {
"id": "tpl_new456",
"name": "Sales team",
"htmlContent": "<table>…</table>",
"role": "sales",
"isActive": true
}
}/api/v1/analyticsTotals and a per-campaign breakdown. Add &campaignId= to look at one campaign.
curl -X GET \ -H "Authorization: Bearer <YOUR_API_KEY>" \ https://www.supersig.ai/api/v1/analytics?days=30
{
"data": {
"period": {
"days": 30,
"since": "2026-02-08T12:00:00.000Z"
},
"totals": {
"impressions": 48200,
"clicks": 3120,
"ctr": "6.47"
},
"campaigns": [
{
"campaignId": "cmp_abc123",
"name": "Spring Promo",
"isActive": true,
"impressions": 4820,
"clicks": 312,
"ctr": "6.47"
}
]
}
}/api/v1/analytics/domainsImpressions and clicks grouped by the recipient's email domain, with a rough category (Business, Personal, Education…).
curl -X GET \ -H "Authorization: Bearer <YOUR_API_KEY>" \ https://www.supersig.ai/api/v1/analytics/domains?days=30
{
"data": {
"domains": [
{
"domain": "bigcorp.com",
"impressions": 1200,
"clicks": 96,
"ctr": "8.00",
"category": "Business"
}
]
}
}/api/v1/analytics/departmentsImpressions and clicks grouped by the sender's department.
curl -X GET \ -H "Authorization: Bearer <YOUR_API_KEY>" \ https://www.supersig.ai/api/v1/analytics/departments?days=30
{
"data": {
"period": {
"days": 30,
"since": "2026-02-08T12:00:00.000Z"
},
"departments": [
{
"department": "Sales",
"impressions": 9100,
"clicks": 640,
"ctr": "7.03"
}
]
}
}/api/v2/webhooksList your webhook endpoints.
curl -X GET \ -H "Authorization: Bearer <YOUR_API_KEY>" \ https://www.supersig.ai/api/v2/webhooks
{
"data": [
{
"id": "wh_abc123",
"url": "https://example.com/hooks/supersig",
"events": [
"campaign.created"
],
"isActive": true,
"createdAt": "2026-03-01T00:00:00.000Z"
}
]
}/api/v2/webhooksRegister an endpoint. url is required. events defaults to every event. secret is optional (at least 24 characters); without one we generate it. The secret is shown only in this response.
curl -X POST \
-H "Authorization: Bearer <YOUR_API_KEY>" \
-H "Content-Type: application/json" \
-d '{\n "url": "https://example.com/hooks/supersig",\n "events": [\n "campaign.created",\n "campaign.updated"\n ]\n}' \
https://www.supersig.ai/api/v2/webhooks{
"url": "https://example.com/hooks/supersig",
"events": [
"campaign.created",
"campaign.updated"
]
}{
"data": {
"id": "wh_abc123",
"url": "https://example.com/hooks/supersig",
"events": [
"campaign.created",
"campaign.updated"
],
"secret": "whsec_…",
"isActive": true,
"createdAt": "2026-03-01T00:00:00.000Z"
}
}/api/v2/webhooks/:idGet one webhook endpoint.
curl -X GET \ -H "Authorization: Bearer <YOUR_API_KEY>" \ https://www.supersig.ai/api/v2/webhooks/:id
{
"data": {
"id": "wh_abc123",
"url": "https://example.com/hooks/supersig",
"events": [
"campaign.created"
],
"isActive": true,
"createdAt": "2026-03-01T00:00:00.000Z"
}
}/api/v2/webhooks/:idChange url, events or isActive. Send only what you are changing.
curl -X PUT \
-H "Authorization: Bearer <YOUR_API_KEY>" \
-H "Content-Type: application/json" \
-d '{\n "isActive": false\n}' \
https://www.supersig.ai/api/v2/webhooks/:id{
"isActive": false
}{
"data": {
"id": "wh_abc123",
"url": "https://example.com/hooks/supersig",
"events": [
"campaign.created"
],
"isActive": false,
"createdAt": "2026-03-01T00:00:00.000Z"
}
}/api/v2/webhooks/:idRemove a webhook endpoint.
curl -X DELETE \ -H "Authorization: Bearer <YOUR_API_KEY>" \ https://www.supersig.ai/api/v2/webhooks/:id
{
"data": {
"deleted": true
}
}/api/v2/webhooks/testSend a signed test.ping event to a URL, so you can check your receiver.
curl -X POST \
-H "Authorization: Bearer <YOUR_API_KEY>" \
-H "Content-Type: application/json" \
-d '{\n "url": "https://example.com/hooks/supersig",\n "secret": "whsec_…"\n}' \
https://www.supersig.ai/api/v2/webhooks/test{
"url": "https://example.com/hooks/supersig",
"secret": "whsec_…"
}{
"data": {
"success": true,
"status": 200,
"statusText": "OK"
}
}Get campaign, deployment, click, user and A/B test events pushed to your server, signed and retried. Read the webhook guide.
API requests are rate-limited to 100 requests per minute per API key. If you exceed this limit, you will receive a 429 response. The Retry-After header indicates how many seconds to wait before retrying.