Documentation Index
Fetch the complete documentation index at: https://help.scribe-mail.com/llms.txt
Use this file to discover all available pages before exploring further.
Scribe API
Scribe is a B2B SaaS for email signature management. This skill lets you query Scribe’s public REST API to retrieve signature status, campaign analytics, user/team data, and conversion tracking information.
Base URL: https://api.scribe.com/v1
Authentication
Every request requires an API key scoped to an organization:
Authorization: Bearer sk_live_<org_api_key>
Get API keys from Settings → API in the Scribe dashboard at https://app.scribe.com/settings/api.
All responses are JSON with a consistent envelope:
{
"data": [ ... ],
"meta": {
"page": 1,
"per_page": 25,
"total": 142,
"total_pages": 6
}
}
Single-resource responses use "data": { ... } (object, not array).
Errors return:
{
"error": {
"code": "not_found",
"message": "Campaign with id 'abc' not found",
"status": 404
}
}
Use ?page=N&per_page=N on list endpoints. Default is 25 per page, max 100.
Core endpoints
Signatures
| Method | Path | Description |
|---|
| GET | /signatures | List all signatures. Filter: ?status=active|pending|disabled&team_id=<id>&user_id=<id> |
| GET | /signatures/ | Get a single signature with deployment details |
| GET | /signatures/stats | Aggregated signature stats (total, active, pending, disabled) |
Common task — find pending signatures:
curl -H "Authorization: Bearer $SCRIBE_API_KEY" \
"https://api.scribe.com/v1/signatures?status=pending"
Campaigns
| Method | Path | Description |
|---|
| GET | /campaigns | List all campaigns. Filter: ?status=active|paused|ended |
| GET | /campaigns/ | Get campaign details including banner info |
| GET | /campaigns//analytics | Campaign analytics: CTR, impressions, clicks. Filter: ?date_from=YYYY-MM-DD&date_to=YYYY-MM-DD |
Common task — get campaign CTR:
curl -H "Authorization: Bearer $SCRIBE_API_KEY" \
"https://api.scribe.com/v1/campaigns/camp_abc123/analytics?date_from=2026-01-01&date_to=2026-03-19"
The analytics response includes:
{
"data": {
"campaign_id": "camp_abc123",
"impressions": 45200,
"clicks": 1356,
"ctr": 3.0,
"unique_clicks": 892,
"date_from": "2026-01-01",
"date_to": "2026-03-19"
}
}
Users and Teams
| Method | Path | Description |
|---|
| GET | /users | List users. Filter: ?team_id=<id>&status=active|invited|disabled |
| GET | /users/ | Get user details and signature assignment |
| GET | /teams | List teams |
| GET | /teams/ | Get team with deployment status |
| GET | /teams//members | List team members with signature status |
Common task — find users with pending installs:
curl -H "Authorization: Bearer $SCRIBE_API_KEY" \
"https://api.scribe.com/v1/users?status=invited"
Analytics
| Method | Path | Description |
|---|
| GET | /analytics/clicks | Aggregated click data. Filter: ?date_from=&date_to=&group_by=day|week|month |
| GET | /analytics/impressions | Aggregated impression data. Same filters. |
| GET | /analytics/summary | High-level overview: total clicks, impressions, CTR, active signatures |
Conversion Tracking
| Method | Path | Description |
|---|
| GET | /conversions | List conversion events. Filter: ?date_from=&date_to=&campaign_id=<id> |
| GET | /conversions/config | Current tracking configuration |
Webhooks
| Method | Path | Description |
|---|
| POST | /webhook_endpoints | Create a webhook endpoint. Body: { "url", "events", "description" } |
| GET | /webhook_endpoints | List all webhook endpoints. Filter: ?status=active|paused|disabled |
| PATCH | /webhook_endpoints/ | Update endpoint URL, events, description, or status |
| DELETE | /webhook_endpoints/ | Delete an endpoint and its delivery history |
| POST | /webhook_endpoints//test | Send a test.ping event to verify the endpoint |
| POST | /webhook_endpoints//rotate_secret | Rotate the HMAC signing secret |
| GET | /webhook_endpoints//deliveries | List delivery history. Filter: ?status=delivered|failed |
Available webhook event types: conversion.completed, campaign.created, campaign.updated, signature_template.updated, teammate.added, teammate.removed, test.ping. Use ["*"] to subscribe to all.
Rate limits
- 100 requests per minute per API key
- Rate limit headers:
X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
- On 429: back off and retry after
Retry-After seconds
Common agent workflows
-
“How many teammates have pending signatures?”
→
GET /signatures/stats → read pending count
→ Or GET /signatures?status=pending for the full list
-
“What’s the CTR on our spring campaign?”
→
GET /campaigns → find campaign by name
→ GET /campaigns/{id}/analytics → read ctr
-
“Show me click trends this quarter”
→
GET /analytics/clicks?date_from=2026-01-01&group_by=week
-
“Which teams haven’t finished deploying?”
→
GET /teams → check each team’s deployment_status
→ Or GET /users?status=invited for individual pending users
-
“Pull conversion data for retargeting”
→
GET /conversions?date_from=2026-03-01&campaign_id=camp_abc123
-
“Set up a webhook for conversion events”
→
POST /webhook_endpoints with { "url": "https://...", "events": ["conversion.completed"] }
→ Save the secret from the response for HMAC verification
-
“Check for failed webhook deliveries”
→
GET /webhook_endpoints → find the endpoint
→ GET /webhook_endpoints/{id}/deliveries?status=failed
Edge cases
- Date filters use
YYYY-MM-DD format. Omitting dates returns last 30 days.
- Empty results return
"data": [] with "total": 0, not an error.
- Campaign analytics return
"ctr": 0 when there are zero impressions (no division error).
- IDs use prefixed format:
sig_, camp_, team_, usr_, conv_.
Full docs
OpenAPI spec and interactive playground: https://scribe.mintlify.app