ยง9 Step 3 โ€” Submission Authorisations

Captures the operator's explicit "I authorize Epoch to file this DDS to TRACES on my behalf" acknowledgement before fm-api fires the SOAP envelope to TRACES. Without an authorisation on file, the on-behalf-of route (Submit DDS with mode: "submit") refuses to file with a 422 PRE_SUBMISSION_BLOCKED response whose details.blockers[] carries an authorization_missing entry.

What gets recorded

Each successful POST appends a version.authorization_granted row to the audit log (Audit Log). The row captures:

  • Who acknowledged โ€” the API-key holder's user id (when the key is member-level) and org id (always).
  • When โ€” occurred_at timestamp.
  • Which text version โ€” the AUTHORIZATION_TEXTS key the operator saw on screen (today: "v2"). The text-version is immutable on the row; revising the legal text bumps the current version without invalidating prior acknowledgements.
  • Who signed (optional) โ€” a human-readable signee name (free-text, 1โ€“200 chars) for when the API key isn't the person actually clicking the checkbox.

Scope

Per-version. Authorisation is recorded against the record's current version (latest version_number). Cutting v_{n+1} resets the requirement because the data has changed โ€” the operator must re-acknowledge before the new version can be submitted via mode: "submit".

Mode behaviour

Submit modeAuthorisation required?
submit (on-behalf-of, Epoch files via SOAP)Yes โ€” mode: "submit" is refused with 422 when no authorisation exists for the current version with the current text-version
manual (operator filed externally via the EU portal)No โ€” the operator is reporting an already-filed submission; Epoch isn't acting as authorised representative

Endpoints

SeqMethodPathPurpose
1POST/dds/:recordId/authorisationsRecord an acknowledgement for the current version
2GET/dds/:recordId/authorisationsPer-record history (newest first)

Visibility

Same rule as the rest of the DDSv2 surface: dds_record.organization_id โˆˆ ctx.effectiveOrgIds. Cross-org GETs and POSTs return 404.

Required scope: ingestions:write for POST, ingestions:read for GET.