> ## Documentation Index
> Fetch the complete documentation index at: https://docs.paysight.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Customer Leads API

> Create or update tenant-scoped customer leads and correlate them with current Paysight checkout transactions.

Use the Customer Leads API to capture contact and visit data before a customer completes the current Paysight checkout.

## Endpoint

```text theme={null}
POST https://ecom-service.vercel.app/api/public/customer-leads
```

Every request must include `email` and `session_id`. Reusing the same `session_id` updates the existing lead for your tenant instead of creating a duplicate.

<Info>
  Set `session_id` to the same value you send to the current Card Submit or Widget checkout as `partnerSession`. This allows Paysight to mark the lead paid when the successful transaction webhook arrives.
</Info>

## Authentication

### Browser

Use the publishable key generated in Platform. The browser origin must exactly match one of the configured allowed origins.

```http theme={null}
X-Paysight-Lead-Key: pk_lead_...
Content-Type: application/json
```

### Server

Use the secret key as a Bearer token. Never expose this key in browser code.

```http theme={null}
Authorization: Bearer sk_lead_...
Content-Type: application/json
```

## Example

```bash theme={null}
curl https://ecom-service.vercel.app/api/public/customer-leads \
  --request POST \
  --header "Authorization: Bearer sk_lead_YOUR_KEY" \
  --header "Content-Type: application/json" \
  --data '{
    "email": "buyer@example.com",
    "first_name": "Jane",
    "last_name": "Customer",
    "session_id": "visit-123",
    "scans": [{"page":"/pricing"}],
    "cfa_device": "mobile"
  }'
```

New leads return `201 Created`; updates return `200 OK`. API clients cannot set `tenant_id`, `status`, or payment fields.

## Paid lead webhooks

When a configured successful transaction matches the tenant, application ID, environment, and `session_id`, Paysight changes the lead to `paid` and sends a `customer_lead.paid` webhook. See [Customer lead integration](/guides/customer-leads) for configuration, payload signing, retries, and verification.
