# Public Projects Acknowledge

Report the ERP/CRM import outcome for one project.
The partner POSTs `status` (`SUCCESS` / `FAILED`), optionally an
`external_id` (its own project/record id, e.g. its ERP document number)
and `metadata`, and a `message` (required on `FAILED` as the reason,
optional on `SUCCESS` as a free-text note). Idempotent and latest-wins:
a later acknowledgement overwrites the earlier one; `external_id` is
kept once provided. Returns the recorded acknowledgement (status,
sticky-aware external_id, message, metadata, acknowledged_at) — the same
shape as the `acknowledgement` field on `PublicProjectOut`, not the
whole project. A supplied `external_id` is also written to the project's
`object_number` (the Objektnummer) — the key Mercura echoes back as
`erp_object_id` on later tender/order exports — so one POST both records
the outcome and reconciles the identifier without a PATCH. It never alters
the project's lifecycle `status` and re-triggers no export. The
method-minimal alternative to PATCH for middlewares that cannot issue the
PATCH verb.

Endpoint: POST /projects/{project_id}/acknowledgements
Version: 1.79.2

## Path parameters:

  - `project_id` (string, required)

## Header parameters:

  - `authorization` (string | null)
    Bearer <mrc_live_…> API key

## Request fields (application/json):

  - `status` (string, required)
    Outcome a partner reports after importing a project into their ERP/CRM.
Translated from the internal `RequestAckStatus` (the identical axis the
tender/order acknowledgements use) via
`projects.service._PROJECT_ACK_STATUS_MAP`. A *separate axis* from
`PublicProjectStatus`: that is Mercura-side lifecycle, this is the
partner's import result.
    Enum: "SUCCESS", "FAILED"

  - `external_id` (string | null)
    Partner-side ERP/CRM id of the created project / record (e.g. the ERP document number). Typically set on SUCCESS.

  - `message` (string | null)
    Free-text note about the outcome. Required when `status` is `FAILED` (the failure reason); optional on `SUCCESS`.

  - `metadata` (object | null)
    Optional extra references / raw payload echoed back for traceability (e.g. other ERP/CRM ids).

## Response 200:

  - `200` (unknown)
    Successful Response

## Response 200 fields (application/json):

  - `status` (string, required)
    Outcome a partner reports after importing a project into their ERP/CRM.
Translated from the internal `RequestAckStatus` (the identical axis the
tender/order acknowledgements use) via
`projects.service._PROJECT_ACK_STATUS_MAP`. A *separate axis* from
`PublicProjectStatus`: that is Mercura-side lifecycle, this is the
partner's import result.
    Enum: "SUCCESS", "FAILED"

  - `external_id` (string | null)
    Partner-side ERP/CRM id of the created project / record (e.g. its ERP document number).

  - `message` (string | null)
    Free-text note about the outcome. On `FAILED` this is the failure reason (required); on `SUCCESS` an optional note.

  - `metadata` (object | null)
    Optional extra references / raw payload the partner echoed back for traceability.

  - `acknowledged_at` (string, required)
    When the partner reported this outcome (server receipt time).

## Response 400:

  - `400` (unknown)
    Validation failed (e.g. FAILED without message)

## Response 404:

  - `404` (unknown)
    Project not found

## Response 422:

  - `422` (unknown)
    Validation Error

## Response 422 fields (application/json):

  - `detail` (array)

  - `detail.loc` (array, required)

  - `detail.msg` (string, required)

  - `detail.type` (string, required)

  - `detail.input` (any)

  - `detail.ctx` (object)

