Finalise a deposit
POST/deposit/:id/finalise
Optional core — provided when deposit.supported is true. See the Deposits guide.
Finalise the deposit: validate the staged content, publish it as the RO-Crate's new current version (replacing the prior version wholesale), and materialise catalog entities from it. Validation depth and materialisation rules are implementation-defined.
Finalisation MAY complete synchronously or asynchronously, at the server's discretion per request — there is no capability flag. A 200 returns the deposit in state complete; a 202 returns it in state finalising, and the client polls GET /deposit/{id} until the state leaves finalising. One client code path handles both.
For every file staged in presigned mode, finalise verifies the bytes landed and match the declared size and checksum; missing or mismatched files are validation violations.
Failure atomicity is guaranteed: a finalise that does not reach complete leaves no observable change. On validation failure the deposit returns to open with the violations recorded — as a 422 on the synchronous path, and in the deposit's errors field on the asynchronous path. Non-validation failures (including the target RO-Crate having been deleted mid-deposit) also return the deposit to open with the failure recorded; retry is safe, and abort covers walking away. Once complete, the new metadata document and all materialised entities are readable; readers are not guaranteed to observe the transition as a single atomic flip.
For update deposits, carry-forward resolves against the baseline version pinned when the deposit was opened; the last finalise wins as a unit. Implementations MAY reject a finalise whose baseline has been superseded with 409.
Request
Responses
- 200
- 202
- 401
- 403
- 404
- 409
- 422
- 429
- 500
Finalised synchronously - the deposit is complete and the RO-Crate's new version is published
Accepted - finalisation is proceeding asynchronously; poll GET /deposit/{id} until the state leaves finalising
Not authenticated
Access token does not have the required scope
Deposit not found - unknown, or expired and cleaned up
Conflict - the deposit is not in the open state, or the implementation rejects a finalise whose baseline has been superseded
Unprocessable Entity - validation failed; the deposit has returned to open with the violations recorded, staged content intact
Rate limit exceeded
Response Headers
Request limit per time window
Requests remaining in current time window
Unix timestamp when the rate limit resets
Number of seconds to wait before retrying
Internal Server Error