Published

An invoice’s cost-centre metadata changes from 1004 to 1040. Its history says “updated by invoice-connector.” That identifies the service that made the API call, but leaves the reviewer asking who requested the correction, who approved it, and whether the service applied the approved change.
A useful audit trail connects the business request to the identities, authority, and outcome behind it. This matters whenever an application, support engineer, workflow, or AI agent acts for someone else.
Start with questions a reviewer can understand. In a direct user action, one person may fill several roles. In a workflow, those roles can belong to different people and services.
| Question | Evidence to retain |
|---|---|
| Who requested the change? | Maya, identified through the invoice application’s authenticated session, requested the correction. |
| Which identity called the document API? | The invoice-connector service used its authenticated credentials to perform the update. |
| Was anyone represented? | Any person or organisation on whose behalf the action occurred, and the validated basis for that attribution. |
| Who or what authorised it? | Rina approved this correction under the configured approval rule, with a reference to the decision. |
| What happened? | The identified invoice’s cost-centre metadata changed from 1004 to 1040, with a recorded outcome and time. |
Choose field names for your application, but keep these meanings distinct. An “on behalf of” identity is not proof that the named person approved the action. Preserve the actual caller even when the interface displays a represented user.
Derive the caller from authentication. Bind the initiating person to a validated application session, signed identity context, or another trusted record. A free-text username or client-supplied “on behalf of” header must not establish attribution or grant permission by itself.
For delegation, retain who granted authority, who may use it, the permitted actions and resources, validity period, reason, approval where required, and revocation state. Evaluate the applicable authority when the action executes, including after a queue delay. If permission has ended, record the denial rather than carrying out an old request.
AWS source identity can help trace configured role sessions through role chaining. The integration must still establish its trusted identity binding and connect cloud activity to the business request. A recognisable session name alone does not establish the whole chain.
Give each business request a stable reference and connect its proposal, decision, and execution events. Record what each decision covered: document or record revision, proposed values, rule version, and any conditions. If those inputs change before execution, decide whether approval must be repeated.
For AI-assisted work, retain a reference to the proposal, relevant input versions, model or processing configuration, validation results, and the human decision or automation policy that authorised execution. Keep sensitive inputs in appropriately controlled evidence storage rather than copying whole prompts and documents into every log.
Separate accepted, queued, completed, failed, and denied outcomes. An accepted API request does not establish that a background change finished. Retries should share the business request reference while retaining distinct attempt identifiers and outcomes.
The invoice application records the target invoice, the proposed change from cost centre 1004 to 1040, the correction reason, and Maya’s authenticated identity. It assigns one request reference for the rest of the workflow.
Rina reviews the proposed values and supporting evidence. The application retains the approval against that exact correction and the applicable approval rule. A rejected or revised proposal keeps its own history.
The invoice-connector checks that the request remains authorised, applies the approved update, and records the resulting values and outcome. Its service identity remains visible alongside the request and approval references.
A readable history can then say: “Maya requested the correction; Rina approved it; invoice-connector changed the cost centre from 1004 to 1040.” Keep the underlying identifiers and timestamps available for investigation. If execution failed, the history must say so even though approval succeeded.
Design the business update and its audit evidence together. Writing the change first and then making an unrelated logging call leaves a failure window. For integrations you build, consider a transactional outbox or change-data-capture pattern that durably connects committed changes to event publication. Consumers still need duplicate handling and reconciliation.
Retain event identity, business request reference, relevant resource/version, recorded and occurrence times, result, and links to the decision and prior step. Use those links to reconstruct order; timestamps alone can be misleading across systems. Monitor failed writes, delivery gaps, and records with no final outcome.
Use restricted audit writers, controlled retention, and separately administered storage where appropriate. If immutable copies are required, configure and verify their retention and deletion protections. Preserve corrections as new evidence linked to the earlier entry.
Cloud and application records answer different questions. CloudTrail data-event coverage must be configured for relevant operations such as direct S3 object access. A cloud event may identify a service role without recording the caseworker, approval, or business reason. Correlate the layers and test the access paths you permit.
Present a plain-language account of what changed and why, with authorised access to the supporting technical records. A case reviewer may need one invoice’s history, while security needs denied actions and unusual exports. Preserve common event references across those views.
Minimise sensitive values in the event itself and control access to detailed before-and-after data. Exported reports need stable identifiers, time-zone labels, and the same attribution as the underlying history. Keep evidence available when an employee leaves or a service account is renamed.
For temporary vendor access, pair this evidence model with a defined support-access process so the grant and the actions taken under it can be reviewed together.
Technical guidance reviewed: November 10, 2026. Validate attribution, authorization, and audit coverage in the deployed integration.
Connect the initiating actor, delegated authority, executing service, request, and actual outcome through trusted identifiers. Keep failed attempts, retries, and missing audit publication visible so reviewers can reconstruct one action without guessing how separate logs relate.
The open-source foundation — API-first, deployable into your own AWS account, and free to use. Right for architecture validation and early implementation.
Production-ready editions for departments and complex workflows. Start with a Proof-of-Value deployment or go straight to production.
For governance-heavy environments with residency, sovereignty, assurance, and multi-jurisdiction requirements. Talk to us about the right deployment model.