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

# mapping.completed

> Fires when a mapping job finishes.

`mapping.completed` fires when one of your mapping jobs finishes processing. The event is delivered to every active subscription in the org that owns the inventory.

## When it fires

Immediately after the final job record is persisted. This includes both successful and partially successful runs — check the `matchedCount` and `unmatchedCount` to decide what to do next.

## Required plan

All plans.

## Payload

```json theme={null} theme={null}
{
  "id": "del_8e6c…",
  "eventId": "evt_4f1a…",
  "type": "mapping.completed",
  "apiVersion": "2026-06-01",
  "occurredAt": "2026-06-01T12:34:56Z",
  "organizationId": "org_…",
  "data": {
    "partnerInventoryId": "inv_…",
    "mappingJobId": "job_…",
    "rowCount": 1500,
    "matchedCount": 1432,
    "unmatchedCount": 68,
    "resultS3Url": "s3://exports/…",
    "resultPresignedUrl": "https://…signed-url…"
  }
}
```

Note: the legacy `mapping.completed` delivery from the older export-webhooks pipeline emits a flat payload (no envelope, no signing) for backwards compatibility. Subscribing via the new `/api/v1/webhook-subscriptions` endpoint uses the envelope shown above and is HMAC-signed.

## Fields

| Field                     | Type           | Notes                                                            |
| ------------------------- | -------------- | ---------------------------------------------------------------- |
| `data.partnerInventoryId` | UUID           | Inventory that was mapped.                                       |
| `data.mappingJobId`       | UUID           | Job that produced these results.                                 |
| `data.rowCount`           | int            | Total input rows.                                                |
| `data.matchedCount`       | int            | Rows that matched a reference hotel.                             |
| `data.unmatchedCount`     | int            | Rows that did not match.                                         |
| `data.resultS3Url`        | string \| null | Internal S3 URL of the result file.                              |
| `data.resultPresignedUrl` | string \| null | Time-limited public URL for downloading the result (1 hour TTL). |
