Skip to main content
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

{
  "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

FieldTypeNotes
data.partnerInventoryIdUUIDInventory that was mapped.
data.mappingJobIdUUIDJob that produced these results.
data.rowCountintTotal input rows.
data.matchedCountintRows that matched a reference hotel.
data.unmatchedCountintRows that did not match.
data.resultS3Urlstring | nullInternal S3 URL of the result file.
data.resultPresignedUrlstring | nullTime-limited public URL for downloading the result (1 hour TTL).