{
  "info": {
    "_postman_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "name": "ValidPeak API",
    "description": "Complete ValidPeak API collection.\n\n## Setup\n1. Set the `apiKey` collection variable to your `VP-Api-Key`.\n2. Set `baseUrl` to your environment (e.g. `https://api.validpeak.com`).\n3. Replace `*Id` variables with real IDs after your first requests.\n\n## Authentication\nAll requests use the `VP-Api-Key` header, pre-configured via the collection-level `apiKey` variable.\n\n## Scopes\n| Scope | Endpoints |\n|---|---|\n| `email_validation` | Email Validation |\n| `blacklist_read` | GET Blacklist |\n| `blacklist_write` | POST/DELETE Blacklist |\n| `campaign_read` | Campaign Intelligence + Send Engine |\n| `dmarc_read` | DMARC Monitoring |\n| `warmup_read` | Email Warmup |\n| `webhook_read` | GET Webhooks |\n| `webhook_write` | POST/PUT/DELETE Webhooks, Automation subscribe/unsubscribe |",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "auth": {
    "type": "apikey",
    "apikey": [
      { "key": "key",   "value": "VP-Api-Key",  "type": "string" },
      { "key": "value", "value": "{{apiKey}}",   "type": "string" },
      { "key": "in",    "value": "header",        "type": "string" }
    ]
  },
  "variable": [
    { "key": "baseUrl",                "value": "https://api.validpeak.com",             "type": "string" },
    { "key": "apiKey",                 "value": "",                                       "type": "string", "description": "Your VP-Api-Key" },
    { "key": "bulkValidationId",       "value": "00000000-0000-0000-0000-000000000000",   "type": "string" },
    { "key": "campaignDomainId",       "value": "00000000-0000-0000-0000-000000000000",   "type": "string" },
    { "key": "blacklistMonitorId",     "value": "00000000-0000-0000-0000-000000000000",   "type": "string" },
    { "key": "dmarcDomainId",          "value": "00000000-0000-0000-0000-000000000000",   "type": "string" },
    { "key": "warmupDomainId",         "value": "00000000-0000-0000-0000-000000000000",   "type": "string" },
    { "key": "webhookSubscriptionId",  "value": "00000000-0000-0000-0000-000000000000",   "type": "string" },
    { "key": "webhookDeliveryId",      "value": "00000000-0000-0000-0000-000000000000",   "type": "string" },
    { "key": "integrationId",          "value": "00000000-0000-0000-0000-000000000000",   "type": "string" }
  ],
  "item": [

    {
      "name": "Email Validation",
      "description": "Validate individual emails synchronously or submit lists/files for bulk async processing.\n\nRequired scope: `email_validation`",
      "item": [
        {
          "name": "Validate single email (sync)",
          "request": {
            "method": "POST",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"email\": \"test@example.com\"\n}",
              "options": { "raw": { "language": "json" } }
            },
            "url": {
              "raw": "{{baseUrl}}/api/v1/emails/validate/single",
              "host": ["{{baseUrl}}"],
              "path": ["api", "v1", "emails", "validate", "single"]
            },
            "description": "Validates a single email address synchronously. Returns deliverability verdict, MX, SMTP, and syntax checks.\n\nTypical latency: 200–800 ms. Rate-limited to 120 req/min per organization."
          }
        },
        {
          "name": "Submit bulk validation — email list",
          "request": {
            "method": "POST",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"emails\": [\n    \"alice@example.com\",\n    \"bob@example.com\",\n    \"invalid@notareal.domain\"\n  ],\n  \"jobName\": \"My Campaign List\"\n}",
              "options": { "raw": { "language": "json" } }
            },
            "url": {
              "raw": "{{baseUrl}}/api/v1/emails/validate",
              "host": ["{{baseUrl}}"],
              "path": ["api", "v1", "emails", "validate"]
            },
            "description": "Submits a list of emails for async bulk validation. Returns a job ID immediately. Poll `GET /jobs/{bulkId}` for results."
          }
        },
        {
          "name": "Submit bulk validation — file upload",
          "request": {
            "method": "POST",
            "header": [],
            "body": {
              "mode": "formdata",
              "formdata": [
                {
                  "key": "file",
                  "type": "file",
                  "src": "",
                  "description": ".csv or .txt file with one email per line"
                },
                {
                  "key": "jobName",
                  "value": "My Uploaded List",
                  "type": "text"
                }
              ]
            },
            "url": {
              "raw": "{{baseUrl}}/api/v1/emails/validate/file",
              "host": ["{{baseUrl}}"],
              "path": ["api", "v1", "emails", "validate", "file"]
            },
            "description": "Uploads a CSV or TXT file for async bulk validation. Returns a job ID immediately."
          }
        },
        {
          "name": "List bulk validation jobs",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/emails/jobs?limit=25&page=0",
              "host": ["{{baseUrl}}"],
              "path": ["api", "v1", "emails", "jobs"],
              "query": [
                { "key": "status", "value": "completed", "disabled": true, "description": "Filter by state (pending, processing, completed, failed)" },
                { "key": "since",  "value": "2026-01-01T00:00:00Z", "disabled": true, "description": "ISO 8601 — return jobs created after this date" },
                { "key": "limit",  "value": "25" },
                { "key": "page",   "value": "0" }
              ]
            },
            "description": "Returns a paginated list of bulk validation jobs for your organization, newest first. Use `?status=completed&since=` for polling-based automation."
          }
        },
        {
          "name": "Get bulk validation job status & results",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/emails/status/{{bulkValidationId}}",
              "host": ["{{baseUrl}}"],
              "path": ["api", "v1", "emails", "status", "{{bulkValidationId}}"]
            },
            "description": "Returns the current status, progress, and summary results for a specific bulk validation job."
          }
        }
      ]
    },

    {
      "name": "Blacklist Monitoring",
      "description": "Monitor sending IPs and domains across 100+ blacklists.\n\nRequired scope: `blacklist_read` (GET) / `blacklist_write` (POST)",
      "item": [
        {
          "name": "List blacklist monitors",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/blacklist/monitors",
              "host": ["{{baseUrl}}"],
              "path": ["api", "v1", "blacklist", "monitors"]
            },
            "description": "Returns all blacklist monitors configured for the authenticated organization."
          }
        },
        {
          "name": "Create blacklist monitor",
          "request": {
            "method": "POST",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"ipOrDomain\": \"192.0.2.1\",\n  \"displayName\": \"My Sending IP\"\n}",
              "options": { "raw": { "language": "json" } }
            },
            "url": {
              "raw": "{{baseUrl}}/api/v1/blacklist/monitors",
              "host": ["{{baseUrl}}"],
              "path": ["api", "v1", "blacklist", "monitors"]
            },
            "description": "Creates a new monitor for an IP address or domain. ValidPeak will scan it periodically and send alerts when it appears on a blacklist."
          }
        },
        {
          "name": "Get monitor dashboard",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/blacklist/monitors/{{blacklistMonitorId}}/dashboard",
              "host": ["{{baseUrl}}"],
              "path": ["api", "v1", "blacklist", "monitors", "{{blacklistMonitorId}}", "dashboard"]
            },
            "description": "Returns the full blacklist status dashboard for a specific monitor: current listings, last scan time, and historical trend."
          }
        },
        {
          "name": "Get monitor alerts",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/blacklist/monitors/{{blacklistMonitorId}}/alerts",
              "host": ["{{baseUrl}}"],
              "path": ["api", "v1", "blacklist", "monitors", "{{blacklistMonitorId}}", "alerts"]
            },
            "description": "Returns the alert history for a monitor (new listings, delistings)."
          }
        },
        {
          "name": "Trigger on-demand scan",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/blacklist/monitors/{{blacklistMonitorId}}/scan",
              "host": ["{{baseUrl}}"],
              "path": ["api", "v1", "blacklist", "monitors", "{{blacklistMonitorId}}", "scan"]
            },
            "description": "Queues an immediate blacklist scan for the monitor. Useful after a delisting request to verify removal."
          }
        }
      ]
    },

    {
      "name": "Campaign Intelligence",
      "description": "Deliverability analysis for email campaigns: score, risk, bounce estimates, and actionable recommendations.\n\nRequired scope: `campaign_read`",
      "item": [
        {
          "name": "Analysis",
          "item": [
            {
              "name": "List campaign domains",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/api/v1/campaign/domains",
                  "host": ["{{baseUrl}}"],
                  "path": ["api", "v1", "campaign", "domains"]
                },
                "description": "Returns all campaign domains configured for your organization."
              }
            },
            {
              "name": "Trigger analysis",
              "request": {
                "method": "POST",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/api/v1/campaign/domains/{{campaignDomainId}}/analyze",
                  "host": ["{{baseUrl}}"],
                  "path": ["api", "v1", "campaign", "domains", "{{campaignDomainId}}", "analyze"]
                },
                "description": "Queues a new deliverability analysis. Returns immediately — poll `GET /analysis` for results. Rate-limited to 10 req/hour per organization."
              }
            },
            {
              "name": "Get latest analysis",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/api/v1/campaign/domains/{{campaignDomainId}}/analysis",
                  "host": ["{{baseUrl}}"],
                  "path": ["api", "v1", "campaign", "domains", "{{campaignDomainId}}", "analysis"]
                },
                "description": "Returns the most recent deliverability analysis: campaign score (0–100), risk level, estimated bounce rate, and recommendations."
              }
            },
            {
              "name": "Get analysis history",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/api/v1/campaign/domains/{{campaignDomainId}}/analysis/history?page=0&pageSize=10",
                  "host": ["{{baseUrl}}"],
                  "path": ["api", "v1", "campaign", "domains", "{{campaignDomainId}}", "analysis", "history"],
                  "query": [
                    { "key": "page",     "value": "0" },
                    { "key": "pageSize", "value": "10" }
                  ]
                },
                "description": "Returns paginated history of past analyses, newest first."
              }
            },
            {
              "name": "Get deliverability snapshot",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/api/v1/campaign/domains/{{campaignDomainId}}/deliverability",
                  "host": ["{{baseUrl}}"],
                  "path": ["api", "v1", "campaign", "domains", "{{campaignDomainId}}", "deliverability"]
                },
                "description": "Returns the current aggregated deliverability score and component breakdown (DNS health, blacklist status, domain reputation, etc.)."
              }
            },
            {
              "name": "Get deliverability history",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/api/v1/campaign/domains/{{campaignDomainId}}/deliverability/history?days=30",
                  "host": ["{{baseUrl}}"],
                  "path": ["api", "v1", "campaign", "domains", "{{campaignDomainId}}", "deliverability", "history"],
                  "query": [
                    { "key": "days", "value": "30" }
                  ]
                },
                "description": "Returns daily deliverability score history for the past N days."
              }
            },
            {
              "name": "Get domain insights",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/api/v1/campaign/domains/{{campaignDomainId}}/insights",
                  "host": ["{{baseUrl}}"],
                  "path": ["api", "v1", "campaign", "domains", "{{campaignDomainId}}", "insights"]
                },
                "description": "Returns actionable deliverability insights and prioritized recommendations for the campaign domain."
              }
            }
          ]
        },
        {
          "name": "Send Engine — Score Rules",
          "description": "Configure score-threshold rules that automatically block or allow campaign sends based on deliverability score.",
          "item": [
            {
              "name": "Get send rule",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/api/v1/campaign/domains/{{campaignDomainId}}/send-rule",
                  "host": ["{{baseUrl}}"],
                  "path": ["api", "v1", "campaign", "domains", "{{campaignDomainId}}", "send-rule"]
                },
                "description": "Returns the active score-threshold rule. Sends are blocked when the domain score falls below `scoreThreshold` and a `campaign.send.blocked` webhook is fired."
              }
            },
            {
              "name": "Configure send rule",
              "request": {
                "method": "PUT",
                "header": [],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"scoreThreshold\": 70.0,\n  \"sendMode\": 1,\n  \"scheduledAt\": null\n}",
                  "options": { "raw": { "language": "json" } }
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/campaign/domains/{{campaignDomainId}}/send-rule",
                  "host": ["{{baseUrl}}"],
                  "path": ["api", "v1", "campaign", "domains", "{{campaignDomainId}}", "send-rule"]
                },
                "description": "Creates or updates the score-threshold rule.\n\n`sendMode`: `1` = Immediate, `2` = Scheduled (requires `scheduledAt`).\n\n`scoreThreshold`: 0–100. Sends are blocked if the domain score falls below this value."
              }
            },
            {
              "name": "Deactivate send rule",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/api/v1/campaign/domains/{{campaignDomainId}}/send-rule",
                  "host": ["{{baseUrl}}"],
                  "path": ["api", "v1", "campaign", "domains", "{{campaignDomainId}}", "send-rule"]
                },
                "description": "Deactivates the active send rule. Sends will no longer be evaluated against a score threshold."
              }
            },
            {
              "name": "List send attempts",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/api/v1/campaign/domains/{{campaignDomainId}}/send-rule/attempts?page=0&pageSize=20",
                  "host": ["{{baseUrl}}"],
                  "path": ["api", "v1", "campaign", "domains", "{{campaignDomainId}}", "send-rule", "attempts"],
                  "query": [
                    { "key": "page",     "value": "0" },
                    { "key": "pageSize", "value": "20" }
                  ]
                },
                "description": "Returns paginated history of send attempts for this domain. Statuses: `Sent`, `Blocked`, `Failed`, `Skipped`."
              }
            }
          ]
        },
        {
          "name": "Send Engine — ESP Link",
          "description": "Link an ESP campaign (Mailchimp, Klaviyo, HubSpot, ActiveCampaign) so ValidPeak can trigger or schedule sends automatically.",
          "item": [
            {
              "name": "Get ESP campaign link",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/api/v1/campaign/domains/{{campaignDomainId}}/esp-link",
                  "host": ["{{baseUrl}}"],
                  "path": ["api", "v1", "campaign", "domains", "{{campaignDomainId}}", "esp-link"]
                },
                "description": "Returns the ESP campaign currently linked to this domain for automated sending."
              }
            },
            {
              "name": "Link ESP campaign",
              "request": {
                "method": "POST",
                "header": [],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"integrationId\": \"{{integrationId}}\",\n  \"espType\": 1,\n  \"espCampaignId\": \"esp-campaign-id-here\"\n}",
                  "options": { "raw": { "language": "json" } }
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/campaign/domains/{{campaignDomainId}}/esp-link",
                  "host": ["{{baseUrl}}"],
                  "path": ["api", "v1", "campaign", "domains", "{{campaignDomainId}}", "esp-link"]
                },
                "description": "Links an ESP campaign to this domain.\n\n`espType`: `1` = Mailchimp, `2` = Klaviyo, `3` = HubSpot, `4` = ActiveCampaign.\n\nGet `integrationId` from your ValidPeak integrations settings."
              }
            },
            {
              "name": "Unlink ESP campaign",
              "request": {
                "method": "DELETE",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/api/v1/campaign/domains/{{campaignDomainId}}/esp-link",
                  "host": ["{{baseUrl}}"],
                  "path": ["api", "v1", "campaign", "domains", "{{campaignDomainId}}", "esp-link"]
                },
                "description": "Removes the ESP campaign link. The send rule remains active but sends will be skipped."
              }
            }
          ]
        }
      ]
    },

    {
      "name": "DMARC Monitoring",
      "description": "Monitor DMARC alignment, authentication failures, and sending source analysis.\n\nRequired scope: `dmarc_read`",
      "item": [
        {
          "name": "List DMARC monitors",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/dmarc/monitors",
              "host": ["{{baseUrl}}"],
              "path": ["api", "v1", "dmarc", "monitors"]
            },
            "description": "Returns all DMARC monitors configured for your organization."
          }
        },
        {
          "name": "Get DMARC alerts",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/dmarc/monitors/{{dmarcDomainId}}/alerts",
              "host": ["{{baseUrl}}"],
              "path": ["api", "v1", "dmarc", "monitors", "{{dmarcDomainId}}", "alerts"]
            },
            "description": "Returns DMARC failure alerts for the monitored domain."
          }
        },
        {
          "name": "Get DMARC time series",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/dmarc/monitors/{{dmarcDomainId}}/time-series",
              "host": ["{{baseUrl}}"],
              "path": ["api", "v1", "dmarc", "monitors", "{{dmarcDomainId}}", "time-series"]
            },
            "description": "Returns time-series DMARC pass/fail data for charting authentication trends."
          }
        },
        {
          "name": "Get organization analysis",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/dmarc/monitors/{{dmarcDomainId}}/organization-analysis",
              "host": ["{{baseUrl}}"],
              "path": ["api", "v1", "dmarc", "monitors", "{{dmarcDomainId}}", "organization-analysis"]
            },
            "description": "Returns a breakdown of sending organizations detected in DMARC reports (authorized senders, unknown sources, spoofing attempts)."
          }
        }
      ]
    },

    {
      "name": "Email Warmup",
      "description": "Monitor sending reputation and inbox placement during email warmup campaigns.\n\nRequired scope: `warmup_read`",
      "item": [
        {
          "name": "List warmup domains",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/warmup/domains",
              "host": ["{{baseUrl}}"],
              "path": ["api", "v1", "warmup", "domains"]
            },
            "description": "Returns all domains currently enrolled in a warmup program."
          }
        },
        {
          "name": "Get latest reputation snapshot",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/warmup/domains/{{warmupDomainId}}/reputation",
              "host": ["{{baseUrl}}"],
              "path": ["api", "v1", "warmup", "domains", "{{warmupDomainId}}", "reputation"]
            },
            "description": "Returns the latest sender reputation snapshot for the warmup domain."
          }
        },
        {
          "name": "Get reputation history",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/warmup/domains/{{warmupDomainId}}/reputation/history",
              "host": ["{{baseUrl}}"],
              "path": ["api", "v1", "warmup", "domains", "{{warmupDomainId}}", "reputation", "history"]
            },
            "description": "Returns daily reputation score history for trend analysis."
          }
        },
        {
          "name": "Get inbox placement summary",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/warmup/domains/{{warmupDomainId}}/inbox-summary",
              "host": ["{{baseUrl}}"],
              "path": ["api", "v1", "warmup", "domains", "{{warmupDomainId}}", "inbox-summary"]
            },
            "description": "Returns inbox vs spam placement percentages across seed mailboxes."
          }
        }
      ]
    },

    {
      "name": "Webhooks",
      "description": "Manage outgoing webhook subscriptions. ValidPeak will POST to your URL when events occur.\n\n**Signature verification:** Each delivery includes `X-ValidPeak-Signature: sha256=HMAC(secret, timestamp + '.' + body)` and `X-ValidPeak-Timestamp`.\n\nRequired scope: `webhook_read` (GET) / `webhook_write` (POST/PUT/DELETE)",
      "item": [
        {
          "name": "Get event catalog",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/webhooks/events",
              "host": ["{{baseUrl}}"],
              "path": ["api", "v1", "webhooks", "events"]
            },
            "description": "Returns all supported webhook event types with their payload schemas."
          }
        },
        {
          "name": "List subscriptions",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/webhooks/subscriptions",
              "host": ["{{baseUrl}}"],
              "path": ["api", "v1", "webhooks", "subscriptions"]
            },
            "description": "Returns all webhook subscriptions for your organization."
          }
        },
        {
          "name": "Create subscription",
          "request": {
            "method": "POST",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"https://your-server.com/webhooks/validpeak\",\n  \"eventTypes\": [\"email.validation.bulk.completed\", \"campaign.send.blocked\"],\n  \"description\": \"My automation webhook\"\n}",
              "options": { "raw": { "language": "json" } }
            },
            "url": {
              "raw": "{{baseUrl}}/api/v1/webhooks/subscriptions",
              "host": ["{{baseUrl}}"],
              "path": ["api", "v1", "webhooks", "subscriptions"]
            },
            "description": "Creates a new webhook subscription. Returns the subscription ID and `secret` (only shown once — store it securely for signature verification).\n\n**Supported events:**\n- `email.validation.bulk.completed`\n- `campaign.analysis.completed`\n- `campaign.send.blocked`\n- `blacklist.alert.triggered`\n- `dmarc.alert.triggered`"
          }
        },
        {
          "name": "Update subscription",
          "request": {
            "method": "PUT",
            "header": [],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"https://your-server.com/webhooks/validpeak\",\n  \"eventTypes\": [\"email.validation.bulk.completed\"],\n  \"description\": \"Updated webhook\",\n  \"isActive\": true\n}",
              "options": { "raw": { "language": "json" } }
            },
            "url": {
              "raw": "{{baseUrl}}/api/v1/webhooks/subscriptions/{{webhookSubscriptionId}}",
              "host": ["{{baseUrl}}"],
              "path": ["api", "v1", "webhooks", "subscriptions", "{{webhookSubscriptionId}}"]
            },
            "description": "Updates a webhook subscription's URL, event types, description, or active status."
          }
        },
        {
          "name": "Delete subscription",
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/webhooks/subscriptions/{{webhookSubscriptionId}}",
              "host": ["{{baseUrl}}"],
              "path": ["api", "v1", "webhooks", "subscriptions", "{{webhookSubscriptionId}}"]
            },
            "description": "Permanently deletes a webhook subscription."
          }
        },
        {
          "name": "Send test event",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/webhooks/subscriptions/{{webhookSubscriptionId}}/test",
              "host": ["{{baseUrl}}"],
              "path": ["api", "v1", "webhooks", "subscriptions", "{{webhookSubscriptionId}}", "test"]
            },
            "description": "Sends a test `webhook.test` event to the subscription URL. Useful to verify your endpoint is reachable and signature verification works."
          }
        },
        {
          "name": "List deliveries",
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/webhooks/subscriptions/{{webhookSubscriptionId}}/deliveries",
              "host": ["{{baseUrl}}"],
              "path": ["api", "v1", "webhooks", "subscriptions", "{{webhookSubscriptionId}}", "deliveries"]
            },
            "description": "Returns delivery history for a subscription: HTTP status, duration, success/failure, and retry schedule."
          }
        },
        {
          "name": "Retry delivery",
          "request": {
            "method": "POST",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/api/v1/webhooks/subscriptions/{{webhookSubscriptionId}}/deliveries/{{webhookDeliveryId}}/retry",
              "host": ["{{baseUrl}}"],
              "path": ["api", "v1", "webhooks", "subscriptions", "{{webhookSubscriptionId}}", "deliveries", "{{webhookDeliveryId}}", "retry"]
            },
            "description": "Manually retries a failed webhook delivery."
          }
        }
      ]
    },

    {
      "name": "Automation (n8n / Make / Zapier)",
      "description": "REST Hooks and polling triggers for automation platforms.\n\n**REST Hooks** (subscribe/unsubscribe) are used by Zapier, Make, and n8n to register webhook URLs automatically — they call these endpoints when a user enables/disables a trigger.\n\n**Polling triggers** return flat arrays (newest first) for platforms that prefer polling over push.",
      "item": [
        {
          "name": "REST Hooks",
          "item": [
            {
              "name": "Subscribe (REST Hooks)",
              "request": {
                "method": "POST",
                "header": [],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"hookUrl\": \"https://hooks.zapier.com/hooks/catch/abc123\",\n  \"event\": \"email.validation.bulk.completed\"\n}",
                  "options": { "raw": { "language": "json" } }
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/automation/subscribe",
                  "host": ["{{baseUrl}}"],
                  "path": ["api", "v1", "automation", "subscribe"]
                },
                "description": "Registers your platform's webhook URL for a specific event type. Returns `{id, secret}` — store `id` to use in DELETE /unsubscribe.\n\nRequired scope: `webhook_write`"
              }
            },
            {
              "name": "Unsubscribe (REST Hooks)",
              "request": {
                "method": "DELETE",
                "header": [],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"id\": \"{{webhookSubscriptionId}}\",\n  \"hookUrl\": null\n}",
                  "options": { "raw": { "language": "json" } }
                },
                "url": {
                  "raw": "{{baseUrl}}/api/v1/automation/unsubscribe",
                  "host": ["{{baseUrl}}"],
                  "path": ["api", "v1", "automation", "unsubscribe"]
                },
                "description": "Removes a webhook subscription. Pass `id` (preferred) or `hookUrl`. Idempotent — returns 200 even if not found.\n\nRequired scope: `webhook_write`"
              }
            }
          ]
        },
        {
          "name": "Polling Triggers",
          "item": [
            {
              "name": "Poll — bulk email validation completed",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/api/v1/automation/triggers/email-validation-completed?limit=25",
                  "host": ["{{baseUrl}}"],
                  "path": ["api", "v1", "automation", "triggers", "email-validation-completed"],
                  "query": [
                    { "key": "since", "value": "2026-01-01T00:00:00Z", "disabled": true, "description": "ISO 8601 — only return jobs completed after this date" },
                    { "key": "limit", "value": "25" }
                  ]
                },
                "description": "Flat array of completed bulk validation jobs, newest first. Deduplication key: `id`.\n\nRequired scope: `email_validation`"
              }
            },
            {
              "name": "Poll — campaign analysis completed",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/api/v1/automation/triggers/campaign-analysis-completed?limit=25",
                  "host": ["{{baseUrl}}"],
                  "path": ["api", "v1", "automation", "triggers", "campaign-analysis-completed"],
                  "query": [
                    { "key": "since", "value": "2026-01-01T00:00:00Z", "disabled": true },
                    { "key": "limit", "value": "25" }
                  ]
                },
                "description": "Flat array of recent campaign deliverability analyses across all monitored domains, newest first. Deduplication key: `id`.\n\nRequired scope: `campaign_read`"
              }
            },
            {
              "name": "Poll — campaign send blocked",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/api/v1/automation/triggers/campaign-send-blocked?limit=25",
                  "host": ["{{baseUrl}}"],
                  "path": ["api", "v1", "automation", "triggers", "campaign-send-blocked"],
                  "query": [
                    { "key": "since", "value": "2026-01-01T00:00:00Z", "disabled": true },
                    { "key": "limit", "value": "25" }
                  ]
                },
                "description": "Flat array of sends recently blocked because the domain score fell below the configured threshold, newest first. Deduplication key: `id`.\n\nUse this trigger to pause a Mailchimp campaign, alert your team in Slack, or re-trigger an analysis.\n\nRequired scope: `campaign_read`"
              }
            }
          ]
        }
      ]
    }

  ]
}
