Idempotency

Use external_ref so retries don't create duplicate applications.

POST /intake is the only idempotent write. Pass external_ref carrying your own identifier, typically the application id in the LOS or core banking system.

When an external_ref already exists for the organization, intake returns the existing application with HTTP 200 and idempotent: true, and skips the duplicate file upload.

{
  "data": { "id": "b1e7c9a4-...", "app_id": "APP-1042", "...": "..." },
  "idempotent": true
}

A fresh create returns 201. So the status code tells you which happened:

StatusMeaning
201New application created
200 with idempotent: trueExisting application returned, files not re-uploaded

POST /applications is not idempotent

Idempotency belongs to /intake. POST /applications creates a new application every time it is called, so a retry after a network timeout will duplicate. Prefer /intake for anything driven by an external system.