Validate and submit
Dry-run and persistence use the same endpoint. The credential grant determines whether real writes are allowed.
POST ${CFO_BASE_URL}/integrations/facilities/${CFO_FACILITY_ID}/activity-imports
Authorization: Bearer ${CFO_ACCESS_TOKEN}
Idempotency-Key: ${DURABLE_IDEMPOTENCY_KEY}
Content-Type: application/json
The payload includes schema_version, external_batch_id, source_system, retention_id, scope,
dry_run, and rows. With dry_run=true, a successful row is expected to be would_create and no
business row is created.
Freeze the canonical payload and durable identity before the network call. Dry-run every granted tuple, poll to terminal, and inspect every row. Fix validation errors without changing the meaning of the business identity. Create a separate persistence request only after dry-run success and explicit write approval, then retain its job and correlation IDs for reconciliation.
Recheck zone, facility, reporting period, and planned row count before setting dry_run=false.