Skip to content

Reporting lifecycle events

  • POST /tenders/{tender_id}/events — report a lifecycle event your own system recorded for a tender after the initial acknowledgement: the tender was marked Won, Lost, or Cancelled in your CRM, and so on. Unlike an acknowledgement (one latest-wins outcome), events are append-only — one row per report — so the full timeline is preserved.
  • Send an event_type (a normalised token: uppercase letters, digits, and underscores, e.g. WON / LOST / CANCELLED), and optionally a status_label (your verbatim label, e.g. "Closed Won"), a message, an occurred_at (when it happened on your side), and any metadata.
  • Supply an external_event_id to make retries safe: reposting the same id with the same payload returns the already-stored event with 200 (instead of recording a duplicate), while reusing the id with a different payload is a 409. Without it, every call records a new event.
  • The response is the recorded event — { id, event_type, status_label, message, metadata, external_event_id, occurred_at, recorded_at } — with 201 for a newly recorded event.
  • Recording-only: reporting an event never changes the tender's lifecycle status or re-triggers an export. These are events you report to Mercura — not the webhook deliveries Mercura sends you (see the Webhooks chapter).