{
    "variable": [
        {
            "id": "baseUrl",
            "key": "baseUrl",
            "type": "string",
            "name": "string",
            "value": "https:\/\/backend.genpage.ai"
        }
    ],
    "info": {
        "name": "GenPage API Reference",
        "_postman_id": "2167a9f7-b016-4310-acee-a4cfbb457ba3",
        "description": "Push leads into GenPage, read the personalised pages it generates, and keep your own system in sync.",
        "schema": "https:\/\/schema.getpostman.com\/json\/collection\/v2.1.0\/collection.json"
    },
    "item": [
        {
            "name": "Account",
            "description": "",
            "item": [
                {
                    "name": "Get the credit balance for a workspace.",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/external\/v1\/account\/credits",
                            "query": [
                                {
                                    "key": "workspace_id",
                                    "value": "55",
                                    "description": "The workspace to report on.",
                                    "disabled": false
                                }
                            ],
                            "raw": "{{baseUrl}}\/api\/external\/v1\/account\/credits?workspace_id=55"
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Enrichment and AI generation spend credits, so an integration can check\nwhat is left before starting work that would fail part-way through.\n\nCredits are pooled across an account: `remaining` is what the whole pool\nhas left, while `workspace_used` and `workspace_limit` describe this one\nworkspace's share of it. A null `workspace_limit` means uncapped \u2014 the\nworkspace can draw on the whole pool."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"plan\": \"scale\",\n  \"remaining\": 4200,\n  \"workspace_used\": 800,\n  \"workspace_limit\": null,\n  \"renews_at\": \"2026-09-01 00:00:00\"\n}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\n  \"message\": \"Workspace not found or you do not have permission to access this workspace.\"\n}",
                            "name": ""
                        }
                    ]
                }
            ]
        },
        {
            "name": "Audiences",
            "description": "",
            "item": [
                {
                    "name": "Get the list of audiences.",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/external\/v1\/audiences\/get-list",
                            "query": [
                                {
                                    "key": "workspace_id",
                                    "value": "55",
                                    "description": "The workspace to list audiences for.",
                                    "disabled": false
                                }
                            ],
                            "raw": "{{baseUrl}}\/api\/external\/v1\/audiences\/get-list?workspace_id=55"
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "This endpoint is used to get the list of audiences.\n\nAudience `0` is the built-in \"Default Audience\": every lead in the\nworkspace that has not been added to an audience of its own."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "[\n  {\n    \"id\": 0,\n    \"name\": \"Default Audience\",\n    \"description\": \"Leads that have not been added to a specific audience\",\n    \"color\": null,\n    \"lead_count\": 12,\n    \"project_id\": 55,\n    \"created_at\": \"2025-01-01T00:00:00.000000Z\",\n    \"updated_at\": \"2025-01-01T00:00:00.000000Z\"\n  },\n  {\n    \"id\": 1,\n    \"name\": \"Enterprise prospects\",\n    \"description\": null,\n    \"color\": \"#4F46E5\",\n    \"lead_count\": 340,\n    \"project_id\": 55,\n    \"created_at\": \"2026-08-01T10:00:00.000000Z\",\n    \"updated_at\": \"2026-08-01T10:00:00.000000Z\"\n  }\n]",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\n  \"message\": \"Unauthenticated.\"\n}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\n  \"message\": \"Workspace not found or you do not have permission to access this workspace.\"\n}",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "Create an audience.",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/external\/v1\/audiences\/create",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/external\/v1\/audiences\/create"
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"workspace_id\":55,\"name\":\"Enterprise prospects\",\"description\":\"Q3 outbound list\",\"color\":\"#4F46E5\",\"lead_ids\":[56789,56790]}"
                        },
                        "description": "An audience is a named segment of leads. Create one to group leads before\ngenerating pages for them, or to keep a list you can link to a campaign."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"audience_id\": 44,\n  \"name\": \"Enterprise prospects\",\n  \"description\": \"Q3 outbound list\",\n  \"lead_count\": 2\n}",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "Add leads to an audience.",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/external\/v1\/audiences\/add-leads",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/external\/v1\/audiences\/add-leads"
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"workspace_id\":55,\"audience_id\":44,\"lead_ids\":[56789]}"
                        },
                        "description": ""
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"audience_id\": 44,\n  \"added\": 1,\n  \"skipped\": 0,\n  \"lead_count\": 3\n}",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "Remove leads from an audience. The leads themselves are not deleted.",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/external\/v1\/audiences\/remove-leads",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/external\/v1\/audiences\/remove-leads"
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"workspace_id\":55,\"audience_id\":44,\"lead_ids\":[56789]}"
                        },
                        "description": ""
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"audience_id\": 44,\n  \"removed\": 1,\n  \"lead_count\": 2\n}",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "Link an audience to a campaign, so its leads get that campaign's pages.",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/external\/v1\/audiences\/link-to-campaign",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/external\/v1\/audiences\/link-to-campaign"
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"workspace_id\":55,\"audience_id\":44,\"campaign_id\":123}"
                        },
                        "description": ""
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"audience_id\": 44,\n  \"campaign_id\": 123,\n  \"message\": \"Audience linked to campaign.\"\n}",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "Detach an audience from a campaign.",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/external\/v1\/audiences\/unlink-from-campaign",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/external\/v1\/audiences\/unlink-from-campaign"
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"workspace_id\":55,\"audience_id\":44,\"campaign_id\":123}"
                        },
                        "description": "Removes the link only \u2014 the audience, its leads, and any pages already\ngenerated for them are untouched."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"audience_id\": 44,\n  \"campaign_id\": 123,\n  \"message\": \"Audience unlinked from campaign.\"\n}",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "Delete an audience. The leads in it are kept.",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/external\/v1\/audiences\/delete",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/external\/v1\/audiences\/delete"
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"workspace_id\":55,\"audience_id\":44}"
                        },
                        "description": "Only the segment is removed. Unlike the dashboard's version, this\nendpoint has no option to delete the leads themselves: that is\nirreversible, and nothing about removing a grouping implies destroying\nthe people in it. Leads that were only reachable through this audience\nremain in the workspace and are still findable with leads\/search."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"audience_id\": 44,\n  \"leads_kept\": 12,\n  \"message\": \"Audience deleted. Its leads were kept.\"\n}",
                            "name": ""
                        }
                    ]
                }
            ]
        },
        {
            "name": "Authentication",
            "description": "",
            "item": [
                {
                    "name": "Generate an API token. Should be done from the GenPage dashboard.",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/external\/v1\/generate-api-token",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/external\/v1\/generate-api-token"
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"name\":\"Zapier production\",\"workspace_id\":55}"
                        },
                        "description": "This endpoint returns the generated token to be used in the external integration.\nThe token is bound to the workspace it was generated for and cannot be used\nagainst any other workspace. It never expires; delete it to revoke access."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"token\": \"sk-proj-<Bearer token>\"\n}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\n  \"message\": \"Unauthenticated.\"\n}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\n  \"message\": \"API key generation requires a Scale plan or higher.\"\n}",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "List the API tokens of a workspace.",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/external\/v1\/get-api-tokens",
                            "query": [
                                {
                                    "key": "workspace_id",
                                    "value": "55",
                                    "description": "The workspace to list keys for.",
                                    "disabled": false
                                }
                            ],
                            "raw": "{{baseUrl}}\/api\/external\/v1\/get-api-tokens?workspace_id=55"
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Returns the workspace's own keys plus any legacy keys that were created\nbefore keys were bound to a workspace (those still work everywhere, so\nhiding them would leave the user unable to find and revoke them)."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"tokens\": [\n    {\n      \"id\": \"9f1c...\",\n      \"name\": \"Zapier production\",\n      \"created_at\": \"2026-08-16T10:00:00.000000Z\"\n    }\n  ]\n}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\n  \"message\": \"Unauthenticated.\"\n}",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "Delete (revoke) an API token.",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/external\/v1\/delete-api-token",
                            "query": [
                                {
                                    "key": "token_id",
                                    "value": "9f1c...",
                                    "description": "The id returned by get-api-tokens.",
                                    "disabled": false
                                }
                            ],
                            "raw": "{{baseUrl}}\/api\/external\/v1\/delete-api-token?token_id=9f1c..."
                        },
                        "method": "DELETE",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": ""
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"message\": \"API token deleted successfully\"\n}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\n  \"message\": \"API token not found\"\n}",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "Test authentication endpoint.",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/external\/v1\/hello-world",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/external\/v1\/hello-world"
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "This endpoint is used to test the authentication."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"message\": \"Hello World\"\n}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\n  \"message\": \"Unauthenticated.\"\n}",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "Test authentication and identify the key's owner.",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/external\/v1\/hello-world-user",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/external\/v1\/hello-world-user"
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Returns the account the API key belongs to, and the workspace the key is\nbound to (null for keys created before keys were workspace-bound, which\nmay act on every workspace the account can reach)."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"message\": \"Hello World\",\n  \"user\": {\n    \"id\": 123,\n    \"name\": \"John Doe\",\n    \"email\": \"john@example.com\"\n  },\n  \"workspace_id\": 55\n}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\n  \"message\": \"Unauthenticated.\"\n}",
                            "name": ""
                        }
                    ]
                }
            ]
        },
        {
            "name": "GenPages",
            "description": "",
            "item": [
                {
                    "name": "Get the list of campaigns.",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/external\/v1\/campaigns\/get-list",
                            "query": [
                                {
                                    "key": "workspace_id",
                                    "value": "55",
                                    "description": "The workspace to list campaigns for.",
                                    "disabled": false
                                }
                            ],
                            "raw": "{{baseUrl}}\/api\/external\/v1\/campaigns\/get-list?workspace_id=55"
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "This endpoint is used to get the list of campaigns."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "[\n  {\n    \"id\": 1,\n    \"name\": \"Test Campaign 1\",\n    \"slug\": \"test-campaign-1\"\n  },\n  {\n    \"id\": 2,\n    \"name\": \"Saas Outreach\",\n    \"slug\": \"saas-outreach\"\n  }\n]",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\n  \"message\": \"Unauthenticated.\"\n}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\n  \"message\": \"Workspace not found or you do not have permission to access this workspace.\"\n}",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "Create a campaign.",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/external\/v1\/campaigns\/create",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/external\/v1\/campaigns\/create"
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"workspace_id\":55,\"name\":\"Enterprise Outreach\",\"branding_id\":7,\"prompt\":\"outbound to fintech CTOs\"}"
                        },
                        "description": "A campaign holds the page template and branding that generated pages use.\nCreate one when an integration needs its own campaign rather than reusing\nan existing one.\n\nThe campaign is created empty \u2014 it still needs a page design. Give it\none over the API with `templates\/apply` or `pages\/generate` (or build\none in the GenPage dashboard) and publish it. Generating pages against\na campaign with no design will produce blank pages, so create-then-generate\nis not a complete flow on its own."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"campaign_id\": 231,\n  \"name\": \"Enterprise Outreach\",\n  \"slug\": \"enterprise-outreach\",\n  \"note\": \"The campaign has no page design yet \u2014 apply a template (templates\/apply) or generate a design (pages\/generate) and publish it before generating pages.\"\n}",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "Get performance metrics for a workspace's campaigns.",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/external\/v1\/campaigns\/analytics",
                            "query": [
                                {
                                    "key": "workspace_id",
                                    "value": "55",
                                    "description": "The workspace to report on.",
                                    "disabled": false
                                },
                                {
                                    "key": "campaign_ids[0]",
                                    "value": "123",
                                    "description": "Limit to these campaigns. Defaults to all of them.",
                                    "disabled": false
                                },
                                {
                                    "key": "campaign_ids[1]",
                                    "value": "124",
                                    "description": "Limit to these campaigns. Defaults to all of them.",
                                    "disabled": false
                                }
                            ],
                            "raw": "{{baseUrl}}\/api\/external\/v1\/campaigns\/analytics?workspace_id=55&campaign_ids[0]=123&campaign_ids[1]=124"
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Reports how the generated pages are doing: how many were visited, how\nmany visitors clicked, and how long they stayed.\n\n`visit_percentage` is pages visited as a share of pages generated, so it\nmeasures reach rather than conversion. `click_percentage` is the share of\nunique visitors who clicked something."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"campaigns\": [\n    {\n      \"campaign_id\": 123,\n      \"name\": \"Enterprise Outreach\",\n      \"visit_percentage\": 42.5,\n      \"click_percentage\": 18.2,\n      \"average_time_on_page_seconds\": 47,\n      \"pages_visited\": 85,\n      \"unique_visitors\": 71,\n      \"total_button_clicks\": 19\n    }\n  ]\n}",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "List the brandings in a workspace.",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/external\/v1\/brandings\/get-list",
                            "query": [
                                {
                                    "key": "workspace_id",
                                    "value": "55",
                                    "description": "The workspace to list for.",
                                    "disabled": false
                                }
                            ],
                            "raw": "{{baseUrl}}\/api\/external\/v1\/brandings\/get-list?workspace_id=55"
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "A branding is the visual identity a campaign renders with \u2014 logo,\ncolours, fonts. Call this to resolve a `branding_id` for\ncampaigns\/create; brandings themselves are built in the dashboard."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "[\n  {\"branding_id\": 7, \"name\": \"Acme Corp\", \"is_default\": true}\n]",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "Get a campaign's current page design.",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/external\/v1\/pages\/design",
                            "query": [
                                {
                                    "key": "workspace_id",
                                    "value": "55",
                                    "description": "The workspace the campaign belongs to.",
                                    "disabled": false
                                },
                                {
                                    "key": "campaign_id",
                                    "value": "231",
                                    "description": "From campaigns\/get-list.",
                                    "disabled": false
                                }
                            ],
                            "raw": "{{baseUrl}}\/api\/external\/v1\/pages\/design?workspace_id=55&campaign_id=231"
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Returns the HTML and CSS the campaign renders. Every generated page is\nthis design with the lead's variables substituted in, so this is what to\nread to see what the pages actually say."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"campaign_id\": 231,\n  \"has_design\": true,\n  \"is_live\": true,\n  \"has_unpublished_changes\": false,\n  \"html\": \"<section>\u2026<\/section>\",\n  \"css\": \"body{\u2026}\",\n  \"updated_at\": \"2026-08-17T09:00:00.000000Z\",\n  \"note\": null\n}",
                            "name": "has a design"
                        },
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"campaign_id\": 231,\n  \"has_design\": false,\n  \"is_live\": false,\n  \"html\": null,\n  \"css\": null,\n  \"note\": \"This campaign has no design yet. Apply a template or generate one.\"\n}",
                            "name": "no design yet"
                        }
                    ]
                },
                {
                    "name": "Ask the AI builder to design a campaign's page. Returns a run id.",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/external\/v1\/pages\/generate",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/external\/v1\/pages\/generate"
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"workspace_id\":55,\"campaign_id\":231,\"prompt\":\"A landing page for fintech CTOs, with a hero, three benefits, and a demo CTA.\",\"replace\":false}"
                        },
                        "description": "The builder writes its result straight onto the campaign, so once the run\nfinishes, pages\/design returns the new HTML and newly generated pages use\nit. Generation spends credits; with none left the request fails with 402.\n\nBy default the builder edits the campaign's existing design. Pass\n`replace: true` to have it start from a blank page instead."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"run_id\": \"run_01H\u2026\",\n  \"status\": \"queued\",\n  \"campaign_id\": 231\n}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 402,
                            "body": "{\n  \"message\": \"No credits remaining\"\n}",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "Check a design run's progress.",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/external\/v1\/pages\/generate\/status",
                            "query": [
                                {
                                    "key": "workspace_id",
                                    "value": "55",
                                    "description": "The workspace the run belongs to.",
                                    "disabled": false
                                },
                                {
                                    "key": "run_id",
                                    "value": "run_01H%E2%80%A6",
                                    "description": "From pages\/generate.",
                                    "disabled": false
                                }
                            ],
                            "raw": "{{baseUrl}}\/api\/external\/v1\/pages\/generate\/status?workspace_id=55&run_id=run_01H%E2%80%A6"
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "`status` is one of `queued`, `running`, `success`, `error`, `cancelled`.\nOn `success`, read the result with pages\/design."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"run_id\": \"run_01H\u2026\",\n  \"status\": \"running\",\n  \"campaign_id\": 231,\n  \"error\": null\n}",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "Publish a campaign's design, putting it live.",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/external\/v1\/pages\/publish",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/external\/v1\/pages\/publish"
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"workspace_id\":55,\"campaign_id\":231}"
                        },
                        "description": "A design is edited as a draft. Visitors are served the *published*\nsnapshot, so a campaign whose design has never been published shows a\n\"not live yet\" page to anyone who opens a generated link. This copies the\ncurrent draft over the published snapshot.\n\nPublishing replaces what is currently live, and takes effect immediately\nfor every page in the campaign \u2014 including ones generated earlier."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"campaign_id\": 231,\n  \"is_live\": true,\n  \"published_at\": \"2026-08-17T09:00:00.000000Z\",\n  \"message\": \"Design published. Pages in this campaign are now live.\"\n}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 409,
                            "body": "{\n  \"message\": \"This campaign has no design to publish. Apply a template or generate one first.\"\n}",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "Take a campaign's pages offline.",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/external\/v1\/pages\/unpublish",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/external\/v1\/pages\/unpublish"
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"workspace_id\":55,\"campaign_id\":231}"
                        },
                        "description": "Clears the published snapshot. Every generated link in the campaign then\nshows a \"not live yet\" page. The design itself is untouched \u2014 it stays as\na draft and can be published again."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"campaign_id\": 231,\n  \"is_live\": false,\n  \"message\": \"Pages in this campaign are no longer live. The design is kept as a draft.\"\n}",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "List the page templates available to a workspace.",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/external\/v1\/templates\/get-list",
                            "query": [
                                {
                                    "key": "workspace_id",
                                    "value": "55",
                                    "description": "The workspace to list for.",
                                    "disabled": false
                                },
                                {
                                    "key": "search",
                                    "value": "saas",
                                    "description": "Match on template name.",
                                    "disabled": false
                                }
                            ],
                            "raw": "{{baseUrl}}\/api\/external\/v1\/templates\/get-list?workspace_id=55&search=saas"
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Two kinds come back. `workspace` templates were built by this account in\nthe GenPage dashboard; `premade` ones ship with GenPage and are available\nto everyone. Either can be applied to a campaign."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "[\n  {\n    \"template_id\": 88,\n    \"name\": \"SaaS outbound\",\n    \"description\": \"Hero, social proof, single CTA\",\n    \"source\": \"workspace\"\n  },\n  {\n    \"template_id\": 12,\n    \"name\": \"Minimal landing\",\n    \"description\": null,\n    \"source\": \"premade\"\n  }\n]",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "Apply a template's design to a campaign.",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/external\/v1\/templates\/apply",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/external\/v1\/templates\/apply"
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"workspace_id\":55,\"campaign_id\":231,\"template_id\":88}"
                        },
                        "description": "Copies the page design onto the campaign, replacing whatever design it\nhad. Use it right after creating a campaign \u2014 until a campaign has a\ndesign, the pages generated for it are blank.\n\nThis overwrites: a campaign that already has a design loses it, and pages\ngenerated afterwards use the new one. Pages already generated keep what\nthey were built with until they are regenerated."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"campaign_id\": 231,\n  \"template_id\": 88,\n  \"is_live\": false,\n  \"message\": \"Template applied. Publish the design to make this campaign's pages live.\"\n}",
                            "name": "campaign was not live"
                        },
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"campaign_id\": 231,\n  \"template_id\": 88,\n  \"is_live\": true,\n  \"message\": \"Template applied as a draft. The campaign is still serving its previously published design \u2014 publish to switch pages over to this one.\"\n}",
                            "name": "campaign already live"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\n  \"message\": \"Template not found\"\n}",
                            "name": ""
                        }
                    ]
                }
            ]
        },
        {
            "name": "Leads",
            "description": "",
            "item": [
                {
                    "name": "Get the leads that were upserted by a job.",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/external\/v1\/zapier\/get-leads-from-job",
                            "query": [
                                {
                                    "key": "job_id",
                                    "value": "9f1c8b2e-...",
                                    "description": "The job id returned by an upsert endpoint.",
                                    "disabled": false
                                }
                            ],
                            "raw": "{{baseUrl}}\/api\/external\/v1\/zapier\/get-leads-from-job?job_id=9f1c8b2e-..."
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "This endpoint is used to get the leads that were upserted by a job."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "[\n  {\n    \"lead_id\": 56789,\n    \"genpage_url\": \"https:\/\/myworkspace.genpa.ge\/aws-john\",\n    \"name\": \"John Doe\",\n    \"email\": \"john@aws.com\",\n    \"company_name\": \"AWS\"\n  }\n]",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\n  \"message\": \"Unauthenticated.\"\n}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\n  \"status\": \"NOT_FOUND\"\n}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 503,
                            "body": "{\n  \"status\": \"NO_LEADS\",\n  \"message\": \"No leads have been processed for this job yet. Try again later.\"\n}",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "Search the leads in a workspace.",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/external\/v1\/leads\/search",
                            "query": [
                                {
                                    "key": "workspace_id",
                                    "value": "55",
                                    "description": "The workspace to search.",
                                    "disabled": false
                                },
                                {
                                    "key": "search",
                                    "value": "acme",
                                    "description": "Matches name, email, or company.",
                                    "disabled": false
                                },
                                {
                                    "key": "campaign_ids[0]",
                                    "value": "1",
                                    "description": "Only leads on these campaigns.",
                                    "disabled": false
                                },
                                {
                                    "key": "campaign_ids[1]",
                                    "value": "2",
                                    "description": "Only leads on these campaigns.",
                                    "disabled": false
                                },
                                {
                                    "key": "audience_ids[0]",
                                    "value": "3",
                                    "description": "Only leads in these audiences.",
                                    "disabled": false
                                },
                                {
                                    "key": "engagement[0]",
                                    "value": "form_submitted",
                                    "description": "Filter by engagement: all, page_viewed, button_clicked, scroll_100_percent, form_submitted.",
                                    "disabled": false
                                },
                                {
                                    "key": "limit",
                                    "value": "25",
                                    "description": "How many to return, 1-100. Defaults to 25.",
                                    "disabled": false
                                }
                            ],
                            "raw": "{{baseUrl}}\/api\/external\/v1\/leads\/search?workspace_id=55&search=acme&campaign_ids[0]=1&campaign_ids[1]=2&audience_ids[0]=3&engagement[0]=form_submitted&limit=25"
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Free-text search across name, email, and company, narrowed by campaign,\naudience, or how the lead has engaged with its page."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"total\": 340,\n  \"returned\": 25,\n  \"leads\": [\n    {\n      \"lead_id\": 56789,\n      \"name\": \"John Doe\",\n      \"email\": \"john@aws.com\",\n      \"company_name\": \"AWS\",\n      \"company_domain\": \"aws.com\",\n      \"genpage_url\": \"https:\/\/myworkspace.genpa.ge\/aws-john\",\n      \"created_at\": \"2026-08-16T10:00:00.000000Z\"\n    }\n  ]\n}",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "Get one lead, with every field and its enrichment state.",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/external\/v1\/leads\/get",
                            "query": [
                                {
                                    "key": "lead_id",
                                    "value": "56789",
                                    "description": "From search-leads or an upsert job.",
                                    "disabled": false
                                }
                            ],
                            "raw": "{{baseUrl}}\/api\/external\/v1\/leads\/get?lead_id=56789"
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": ""
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"lead_id\": 56789,\n  \"name\": \"John Doe\",\n  \"email\": \"john@aws.com\",\n  \"company_name\": \"AWS\",\n  \"company_domain\": \"aws.com\",\n  \"genpage_url\": \"https:\/\/myworkspace.genpa.ge\/aws-john\",\n  \"variables\": {\"linkedin_profile_url\": \"https:\/\/...\", \"pain_point\": \"...\"},\n  \"audiences\": [{\"id\": 3, \"name\": \"Enterprise\"}],\n  \"pending_enrichments\": [\"company_domain\"],\n  \"created_at\": \"2026-08-16T10:00:00.000000Z\"\n}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\n  \"message\": \"Lead not found\"\n}",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "Enrich existing leads, spending credits to research them.",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/external\/v1\/leads\/enrich",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/external\/v1\/leads\/enrich"
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"workspace_id\":55,\"lead_ids\":[56789,56790],\"enrichment_types\":[\"company_domain\"]}"
                        },
                        "description": "Each type is a separate piece of research, and each costs credits per\nlead. Ask for only what the pages actually use.\n\n- `linkedin_profile_url` \u2014 scrape the lead's LinkedIn profile\n- `company_domain` \u2014 AI analysis of the company\n- `person_analysis` \u2014 AI analysis of the person\n- `linkedin_posts_person` \u2014 the person's recent posts\n- `linkedin_posts_company` \u2014 the company page's recent posts\n\nA lead missing the inputs a type needs (no LinkedIn URL, no domain) is\nskipped rather than failing the batch \u2014 compare `leads_to_enrich` against\nwhat you sent, and check `skipped_leads`. Results land on the leads\nthemselves; poll `job_id` with get-status, then read them back with\nget-lead."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"job_id\": \"9f1c8b2e-...\",\n  \"message\": \"Enrichment job started\",\n  \"leads_to_enrich\": 2,\n  \"skipped_leads\": 0\n}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 400,
                            "body": "{\n  \"message\": \"No valid leads found for the given IDs.\"\n}",
                            "name": "no valid lead ids"
                        },
                        {
                            "header": [],
                            "code": 400,
                            "body": "{\n  \"message\": \"No leads have the required fields for enrichment. LinkedIn Profile requires linkedin_profile_url, Company Research requires a company name, domain, or LinkedIn profile, Prospect Research requires a name or LinkedIn profile, LinkedIn Posts require a profile or company page.\",\n  \"skipped_leads\": [\n    {\n      \"lead_id\": 56790,\n      \"reason\": \"Missing required fields for enrichment\"\n    }\n  ]\n}",
                            "name": "every lead skipped"
                        }
                    ]
                },
                {
                    "name": "Upsert leads.",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/external\/v1\/leads\/upsert-leads",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/external\/v1\/leads\/upsert-leads"
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"from\":\"MyCompanyName\",\"campaign_id\":1,\"audience_id\":1,\"callback_url\":\"https:\\\/\\\/example.com\\\/callback\",\"send_email\":false,\"is_generate_ai_analysis\":true,\"enrich_data\":false,\"generate_ai_variables\":false,\"leads\":[{\"values\":{\"last_name\":\"Doe\",\"company_domain\":\"amazon.com\",\"my_custom_variable\":\"My custom value\"}}]}"
                        },
                        "description": "This endpoint is used to upsert (update or insert) leads.\n\nThe leads are sent in the request body.\nThe leads are an array of objects.\nThe leads.*.values are key\/value pairs with the values of the lead.\n\n---\n### Required fields for creating or updating a lead\n\n**To create a new lead, at least one of:**\n- `email`\n- `linkedin_profile_url`\n\n**To update an existing lead, at least one of:**\n- `lead_id` (GenPage Lead ID)\n- `genpage_url` (GenPage URL)\n\n---\n### Optional but strongly recommended fields\n- `first_name`\n- `company_name`\n- `company_domain`\n---\n\nThe response is the job ID.\n\nThe job ID can be used to get the status of the job, and get all the leads that were upserted by this request."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"job_id\": \"9f1c8b2e-...\"\n}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\n  \"message\": \"Unauthenticated.\"\n}",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "Upsert (update or create) a single lead.",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/external\/v1\/leads\/upsert-lead",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/external\/v1\/leads\/upsert-lead"
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"from\":\"MyCompanyName\",\"campaign_id\":1,\"audience_id\":1,\"callback_url\":\"https:\\\/\\\/example.com\\\/callback\",\"send_email\":false,\"is_generate_ai_analysis\":true,\"enrich_data\":false,\"generate_ai_variables\":false,\"lead_id\":16,\"genpage_url\":\"https:\\\/\\\/myworkspace.genpa.ge\\\/aws-john\",\"values\":{\"first_name\":\"John\",\"email\":\"john@aws.com\",\"company_name\":\"Amazon Web Services\",\"linkedin_profile_url\":\"https:\\\/\\\/www.linkedin.com\\\/in\\\/john-doe-1234567890\"}}"
                        },
                        "description": "This endpoint is used to upsert a single lead.\n\nThe \"values\" object requires at least one of the following fields, otherwise it will throw an error:\n- first_name\n- email\n- company_name\n- company_domain\n- linkedin_profile_url"
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"job_id\": \"9f1c8b2e-...\"\n}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 400,
                            "body": "{\n  \"message\": \"Missing required fields: first_name, email, company_name, company_domain, or linkedin_profile_url.\"\n}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\n  \"message\": \"Unauthenticated.\"\n}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\n  \"message\": \"Campaign not found\"\n}",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "Import leads into a workspace, without a campaign.",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/external\/v1\/leads\/import-to-workspace",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/external\/v1\/leads\/import-to-workspace"
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"workspace_id\":55,\"leads\":[{\"values\":{\"first_name\":\"John\",\"email\":\"john@aws.com\",\"company_name\":\"Amazon Web Services\"}}],\"from\":\"MyCompanyName\",\"send_email\":false,\"is_generate_ai_analysis\":false,\"is_generate_person_analysis\":false,\"is_scrape_person_posts\":false,\"is_scrape_company_posts\":false,\"enrich_data\":false,\"audience_id\":3,\"sync\":false,\"campaign_ids\":[1,2],\"generate_ai_variables\":false,\"trigger_audience_summary\":false}"
                        },
                        "description": "Use this when the leads are not tied to a landing page yet; link them to\ncampaigns later through an audience.\n\nThe response depends on how the import ran. Queued imports (the default,\nand always the case when any enrichment or campaign is requested) answer\nwith a `job_id` to poll on `\/leads\/get-status`. Immediate imports\n(`sync: true` with no enrichment and no campaigns) answer with the result\ndirectly and carry a `job_id` of null."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"job_id\": \"9f1c8b2e-...\"\n}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"job_id\": null,\n  \"success\": true,\n  \"imported_count\": 2,\n  \"duplicate_count\": 1,\n  \"lead_ids\": [56789, 56790],\n  \"errors\": []\n}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 403,
                            "body": "{\n  \"message\": \"Workspace not found or you do not have permission to access this workspace.\"\n}",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "Get the status of the job.",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/external\/v1\/leads\/get-status",
                            "query": [
                                {
                                    "key": "job_id",
                                    "value": "9f1c8b2e-...",
                                    "description": "The job id returned by an upsert endpoint.",
                                    "disabled": false
                                }
                            ],
                            "raw": "{{baseUrl}}\/api\/external\/v1\/leads\/get-status?job_id=9f1c8b2e-..."
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "This endpoint is used to get the status of the job.\nOnce the job is completed, the status will be \"completed\".\n\nThe status can be:\n- pending\n- processing\n- step_linkedin\n- step_import\n- completed\n- error\n\nOnce the job is completed, please use the getLeads endpoint to get all the leads that were upserted by this request."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"status\": \"pending\",\n  \"processed_rows\": 10,\n  \"total_rows\": 100\n}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\n  \"message\": \"Unauthenticated.\"\n}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\n  \"status\": \"not_found\"\n}",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "Get the leads that were upserted by a job.",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/external\/v1\/leads\/get-leads",
                            "query": [
                                {
                                    "key": "job_id",
                                    "value": "9f1c8b2e-...",
                                    "description": "The job id returned by an upsert endpoint.",
                                    "disabled": false
                                }
                            ],
                            "raw": "{{baseUrl}}\/api\/external\/v1\/leads\/get-leads?job_id=9f1c8b2e-..."
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "This endpoint is used to get the leads that were upserted by a job."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "[\n  {\n    \"lead_id\": 56789,\n    \"genpage_url\": \"https:\/\/myworkspace.genpa.ge\/aws-john\",\n    \"name\": \"John Doe\",\n    \"email\": \"john@aws.com\",\n    \"company_name\": \"AWS\"\n  }\n]",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\n  \"message\": \"Unauthenticated.\"\n}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\n  \"status\": \"NOT_FOUND\"\n}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 503,
                            "body": "{\n  \"status\": \"NO_LEADS\",\n  \"message\": \"No leads have been processed for this job yet. Try again later.\"\n}",
                            "name": ""
                        }
                    ]
                }
            ]
        },
        {
            "name": "Workspaces",
            "description": "",
            "item": [
                {
                    "name": "Get the list of workspaces.",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/external\/v1\/workspaces\/get-list",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/external\/v1\/workspaces\/get-list"
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "This endpoint is used to get the list of workspaces the user has access to."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "[\n  {\n    \"id\": 1,\n    \"name\": \"My Company Name\",\n    \"slug\": \"my-company-name\"\n  },\n  {\n    \"id\": 2,\n    \"name\": \"SAAS Outreach\",\n    \"slug\": \"saas-outreach\"\n  }\n]",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\n  \"message\": \"Unauthenticated.\"\n}",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "Get the list of variables (or columns) for a workspace.",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/external\/v1\/workspaces\/get-variable-list",
                            "query": [
                                {
                                    "key": "workspace_id",
                                    "value": "55",
                                    "description": "The workspace to list the variables of.",
                                    "disabled": false
                                }
                            ],
                            "raw": "{{baseUrl}}\/api\/external\/v1\/workspaces\/get-variable-list?workspace_id=55"
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "This endpoint retrieves all available variables\/columns for a specific workspace.\nIt returns both default variables (first_name, email, company_name, company_domain)\nand any custom variables that have been created for the workspace.\n\nWhen updating or inserting a lead, you can use the variables\/columns from this endpoint\nto add the values to the specific variable\/column for the lead."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "[\n  {\n    \"key\": \"linkedin_profile_url\",\n    \"helpText\": \"LinkedIn profile URL (at least one of LinkedIn URL, Company Domain, or Email is required)\"\n  },\n  {\n    \"key\": \"email\",\n    \"helpText\": \"Email address (at least one of LinkedIn URL, Company Domain, or Email is required)\"\n  },\n  {\n    \"key\": \"company_domain\",\n    \"helpText\": \"Company domain (at least one of LinkedIn URL, Company Domain, or Email is required)\"\n  },\n  {\n    \"key\": \"first_name\",\n    \"helpText\": \"First name\"\n  },\n  {\n    \"key\": \"company_name\",\n    \"helpText\": \"Company name\"\n  },\n  {\n    \"key\": \"My Custom Variable1\"\n  },\n  {\n    \"key\": \"custom_variable2\"\n  }\n]",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\n  \"message\": \"Unauthenticated.\"\n}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 422,
                            "body": "{\n  \"message\": \"The given data was invalid.\",\n  \"errors\": {\n    \"workspace_id\": [\n      \"The workspace id field is required.\"\n    ]\n  }\n}",
                            "name": ""
                        }
                    ]
                }
            ]
        },
        {
            "name": "Zapier",
            "description": "",
            "item": [
                {
                    "name": "Test authentication endpoint.",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/external\/v1\/zapier\/test",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/external\/v1\/zapier\/test"
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "This endpoint is used to test the authentication."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"message\": \"Hello World\",\n  \"user\": {\n    \"id\": 123,\n    \"name\": \"John Doe\",\n    \"email\": \"john@example.com\"\n  }\n}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 401,
                            "body": "{\n  \"message\": \"Unauthenticated.\"\n}",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "Create a lead through Zapier.",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/external\/v1\/zapier\/upsert-lead",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/external\/v1\/zapier\/upsert-lead"
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"workspace_id\":55,\"campaign_id\":123,\"is_test\":false,\"linkedin_profile_url\":\"https:\\\/\\\/www.linkedin.com\\\/in\\\/williamhgates\\\/\",\"company_domain\":\"example.com\",\"email\":\"test@example.com\",\"callback_url\":\"https:\\\/\\\/example.com\\\/callback\",\"custom_data\":{\"key\":\"value\"}}"
                        },
                        "description": "Set `is_test` to true to have the endpoint answer with a sample page URL\nwithout importing anything \u2014 this is what Zapier calls when the user tests\nthe step while building a Zap."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"message\": \"Job started!\",\n  \"job_id\": \"9f1c8b2e-...\"\n}",
                            "name": "real import"
                        },
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"message\": \"Job started!\",\n  \"genpage_url\": \"https:\/\/myworkspace.genpa.ge\/aws-john\"\n}",
                            "name": "is_test=true"
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\n  \"message\": \"Campaign not found\"\n}",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "Create a lead through Zapier (no callback required).",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/external\/v1\/zapier\/upsert-lead-basic",
                            "query": [],
                            "raw": "{{baseUrl}}\/api\/external\/v1\/zapier\/upsert-lead-basic"
                        },
                        "method": "POST",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": {
                            "mode": "raw",
                            "raw": "{\"workspace_id\":55,\"campaign_id\":123,\"is_test\":false,\"callback_url\":\"https:\\\/\\\/example.com\\\/callback\",\"generate_ai_variables\":true,\"linkedin_profile_url\":\"https:\\\/\\\/www.linkedin.com\\\/in\\\/williamhgates\\\/\",\"company_domain\":\"example.com\",\"email\":\"test@example.com\",\"custom_data\":{\"key\":\"value\"}}"
                        },
                        "description": "Same as `upsert-lead`, but the callback URL is optional: use this when the\nZap does not need GenPage to call back once the page has been generated."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "{\n  \"message\": \"Job started!\",\n  \"job_id\": \"9f1c8b2e-...\"\n}",
                            "name": ""
                        },
                        {
                            "header": [],
                            "code": 404,
                            "body": "{\n  \"message\": \"Campaign not found\"\n}",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "Poll for leads created in a campaign.",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/external\/v1\/zapier\/get-leads",
                            "query": [
                                {
                                    "key": "workspace_id",
                                    "value": "55",
                                    "description": "The workspace to read from.",
                                    "disabled": false
                                },
                                {
                                    "key": "campaign_id",
                                    "value": "123",
                                    "description": "The campaign to read from.",
                                    "disabled": false
                                },
                                {
                                    "key": "created_after",
                                    "value": "2026-08-01T00%3A00%3A00Z",
                                    "description": "Only return leads created at or after this timestamp.",
                                    "disabled": false
                                },
                                {
                                    "key": "last_lead_id",
                                    "value": "4200",
                                    "description": "Only return leads with an id greater than this.",
                                    "disabled": false
                                },
                                {
                                    "key": "limit",
                                    "value": "50",
                                    "description": "How many leads to return, 1-100. Defaults to 50.",
                                    "disabled": false
                                },
                                {
                                    "key": "is_test",
                                    "value": "",
                                    "description": "Return the most recent lead when the filters match nothing, so a Zap test has sample data.",
                                    "disabled": true
                                }
                            ],
                            "raw": "{{baseUrl}}\/api\/external\/v1\/zapier\/get-leads?workspace_id=55&campaign_id=123&created_after=2026-08-01T00%3A00%3A00Z&last_lead_id=4200&limit=50&is_test="
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Returns the newest leads first. Pass `created_after` and\/or `last_lead_id`\nfrom the previous poll to only get what is new since then."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "[\n  {\n    \"id\": 56789,\n    \"created_at\": \"2026-08-16T10:00:00.000000Z\",\n    \"genpage_url\": \"https:\/\/myworkspace.genpa.ge\/aws-john\",\n    \"name\": \"John Doe\",\n    \"email\": \"john@aws.com\",\n    \"company_name\": \"AWS\",\n    \"domain\": \"aws.com\",\n    \"company_name_slug\": \"aws\"\n  }\n]",
                            "name": ""
                        }
                    ]
                },
                {
                    "name": "Poll for recent form submissions.",
                    "request": {
                        "url": {
                            "host": "{{baseUrl}}",
                            "path": "api\/external\/v1\/zapier\/get-form-submissions",
                            "query": [
                                {
                                    "key": "workspace_id",
                                    "value": "55",
                                    "description": "The workspace to read from.",
                                    "disabled": false
                                },
                                {
                                    "key": "campaign_id",
                                    "value": "123",
                                    "description": "Only return submissions from this campaign.",
                                    "disabled": false
                                },
                                {
                                    "key": "limit",
                                    "value": "50",
                                    "description": "How many submissions to return, 1-100. Defaults to 50.",
                                    "disabled": false
                                }
                            ],
                            "raw": "{{baseUrl}}\/api\/external\/v1\/zapier\/get-form-submissions?workspace_id=55&campaign_id=123&limit=50"
                        },
                        "method": "GET",
                        "header": [
                            {
                                "key": "Content-Type",
                                "value": "application\/json"
                            },
                            {
                                "key": "Accept",
                                "value": "application\/json"
                            }
                        ],
                        "body": null,
                        "description": "Without `workspace_id` this returns submissions from every workspace the\nAPI key can reach, newest first."
                    },
                    "response": [
                        {
                            "header": [],
                            "code": 200,
                            "body": "[\n  {\n    \"id\": 91,\n    \"form_id\": \"contact\",\n    \"page_url\": \"https:\/\/myworkspace.genpa.ge\/aws-john\",\n    \"ip_address\": \"203.0.113.10\",\n    \"created_at\": \"2026-08-16T10:00:00+00:00\",\n    \"email\": \"john@aws.com\"\n  }\n]",
                            "name": ""
                        }
                    ]
                }
            ]
        }
    ],
    "auth": {
        "type": "bearer",
        "bearer": [
            {
                "key": "Authorization",
                "type": "string"
            }
        ]
    }
}