Skip to main content
mapping.error.resolved fires when a mismatch report transitions to a terminal state — either FIXED (we agreed and corrected the mapping) or REJECTED (we kept the existing mapping). Use it to stop nagging your ops team and to mark the issue closed in your downstream system.

When it fires

On the state transition from OPEN or IN_PROGRESS to FIXED or REJECTED. Subsequent state changes (e.g., reopening) do not re-fire.

Required plan

Pro and above.

Recipients

Only the organization that owns the mismatch report (i.e., the one that originally reported the mismatch).

Payload

{
  "id": "del_…",
  "eventId": "evt_…",
  "type": "mapping.error.resolved",
  "apiVersion": "2026-06-01",
  "occurredAt": "2026-06-01T12:34:56Z",
  "organizationId": "org_…",
  "data": {
    "reportId": "rep_…",
    "partnerInventoryId": "inv_…",
    "partnerHotelId": "EXP-12345",
    "referenceHotelId": "ref_…",
    "resolution": "FIXED",
    "resolvedAt": "2026-06-01T12:34:56Z"
  }
}

Fields

FieldTypeNotes
data.reportIdUUIDThe mismatch report that was resolved.
data.partnerInventoryIdUUID | nullThe inventory the reported mapping belongs to.
data.partnerHotelIdstring | nullYour hotel identifier from the inventory.
data.referenceHotelIdstring | nullThe reference hotel the mapping was pointing at.
data.resolution"FIXED" | "REJECTED"How the report was closed.
data.resolvedAtISO timestampWhen the report transitioned to its terminal state.

Example handler (Node)

app.post('/hooks/mapping', async (req, res) => {
  if (!verifyWebhook(req.header('X-Webhook-Signature')!, req.rawBody, SECRET)) {
    return res.status(401).end();
  }
  const payload = JSON.parse(req.rawBody.toString());
  if (payload.type !== 'mapping.error.resolved') return res.status(204).end();

  await ops.closeTicketFor(payload.data.reportId, payload.data.resolution);
  res.status(200).end();
});