> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.partnerpage.io/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.partnerpage.io/_mcp/server.

# Partner lead webhook event

A partner organization's lead webhook sends one event, `contact_request_created`, each time a new lead is created on a profile the organization owns. This page describes that payload. For headers, the signature check and how to reply, see [Verify and handle webhook deliveries](/webhooks/verify-and-handle-webhook-deliveries).

Directory owners receive a different, larger payload under the same event name. That one is described in [Directory webhook events and payloads](/webhooks/directory-webhook-events-and-payloads).

## When it is sent

One delivery for every new lead on any profile the organization owns, however it was created:

* a visitor submits the contact form on the partner's profile
* the directory's team assigns a matchmaking request to the partner
* the directory owner creates the lead through the API

It is not sent when a lead changes later (accepted, declined, status updates). It is not sent for a directory whose owner has switched partner lead delivery off; it is on by default.

## Setting it up

A partner adds the webhook in the PartnerPage dashboard under **Settings**, then **Developers**, on the **Lead webhook** card. Each organization has one webhook and its own signing secret. The step-by-step guide is in the Help Center: [Send new leads to your own tools with a webhook](https://support.partnerpage.io/en/articles/17340351).

The URL must:

* start with `https://`
* resolve to a public address (not `localhost`, `.local`, `.internal` or a private network)
* not contain a username or password
* be at most 255 characters
* be the final address: redirects are not followed

## Payload

| Field                                                       | Meaning                                                                                                           |
| ----------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
| `entry_id`                                                  | Id of the partner profile that received the lead                                                                  |
| `directory_id`                                              | Id of the directory it came from                                                                                  |
| `organization_id`                                           | The partner organization's id, the same Organization ID shown on the Developers page                              |
| `contact_request.id`                                        | Lead id                                                                                                           |
| `contact_request.created`                                   | When the lead was created, in UTC, formatted `YYYY-MM-DD HH:MM`                                                   |
| `contact_request.state`                                     | `pending` for a new lead                                                                                          |
| `contact_request.project_status`                            | `null` for a new lead                                                                                             |
| `contact_request.first_name`, `last_name`, `email`, `phone` | The lead's contact details                                                                                        |
| `contact_request.company_name`, `company_website`           | The lead's company                                                                                                |
| `contact_request.comments`                                  | The message the lead wrote                                                                                        |
| `contact_request.utm_query_params`                          | UTM parameters captured on the page, or `null`                                                                    |
| `contact_request.source`                                    | `contact_request` (submitted on the profile) or `matchmaking` (assigned from a matchmaking request)               |
| `contact_request.decline_reason`, `decline_reason_detail`   | `null` for a new lead                                                                                             |
| `contact_request.entry`                                     | The profile: `id`, `title`, `owner` (the partner organization's id) and `is_deleted` (`false` for a new lead)     |
| `contact_request.directory`                                 | The directory: `id` and `name`                                                                                    |
| `custom_fields`                                             | Answers to the directory's custom form questions. Each item has `export_label`, `internal_label` and `text_value` |
| `partner_contact_request_url`                               | Link to the lead in the partner's PartnerPage dashboard                                                           |

```json
{
  "directory_id": "dddddddd-0000-4000-8000-000000000001",
  "entry_id": "eeeeeeee-0000-4000-8000-000000000001",
  "organization_id": "aaaaaaaa-0000-4000-8000-000000000002",
  "contact_request": {
    "id": "cccccccc-0000-4000-8000-000000000001",
    "created": "2025-11-05 16:19",
    "state": "pending",
    "project_status": null,
    "first_name": "Jane",
    "last_name": "Doe",
    "email": "jane.doe@example.com",
    "phone": "5555550100",
    "company_name": "Example Manufacturing",
    "company_website": "https://www.example.com/",
    "comments": "We need help rolling out the product to 200 users.",
    "utm_query_params": null,
    "source": "contact_request",
    "decline_reason": null,
    "decline_reason_detail": null,
    "entry": {
      "id": "eeeeeeee-0000-4000-8000-000000000001",
      "owner": "aaaaaaaa-0000-4000-8000-000000000002",
      "title": "Northwind Consulting",
      "is_deleted": false
    },
    "directory": {
      "id": "dddddddd-0000-4000-8000-000000000001",
      "name": "Acme Partner Directory"
    }
  },
  "custom_fields": [
    {
      "export_label": "Desired timeline",
      "internal_label": "desired_timeline",
      "text_value": "Q2"
    }
  ],
  "partner_contact_request_url": "https://directory.partnerpage.io/profiles/solutions/dddddddd-0000-4000-8000-000000000001/partner/eeeeeeee-0000-4000-8000-000000000001/contact-requests/cccccccc-0000-4000-8000-000000000001"
}
```

## Differences from the directory owner's payload

If you build one receiver for both kinds of webhook, note what the partner payload leaves out. It carries what the partner sees on the lead in their dashboard, and nothing the directory owner keeps to itself.

| Directory owner's payload                                                                         | Partner payload                           |
| ------------------------------------------------------------------------------------------------- | ----------------------------------------- |
| `directory_contact_request_url` (link into the owner's dashboard)                                 | Replaced by `partner_contact_request_url` |
| `contact_request.directory` with `org_id`, `org_name`, `contact_request_project_statuses_enabled` | Only `id` and `name`                      |
| `terms`, `privacy`, `share`                                                                       | Not included                              |
| `custom_form_response_id`, `match_origin`, `routing_source`, `legacy_filter_responses`            | Not included                              |
| `close_reason`, `close_reason_detail`                                                             | Not included                              |
| No `organization_id` at the top level                                                             | `organization_id` included                |