Start a bulk fulfill from an integration file
POST/orders/bulk-fulfill/integration/:type/jobs
Starts a background bulk fulfill of the uploaded rows, read with the parser for the given integration (a ShipBob "Order Details" export, a NextSmartShip shipment export), and returns its record straight away, with status pending and the jobId to poll on GET /async-jobs/{id} until state is completed or failed — both are final. A completed job reports, under result, what it fulfilled, skipped and could not fulfill, row by row; a failed job reports why under error and fulfilled nothing beyond what it had already recorded. The work survives a restart and is never cut short by a request timeout, and the record is listed by GET /order-jobs. The request is limited both by row count and by size (4 MB), and a request over the size limit is refused with 413 before it reaches this operation. One bulk fulfill runs at a time per merchant account; starting another while one is running is refused, and the refusal names the job already running.
Request
Responses
- 201
- 202
- 400
- 401
- 403
- 413
- 429
- 500
- 503
- 504
The merchant is entitled but its OMS environment is not provisioned yet. Provisioning has been kicked off (exactly once) and is in progress; retry the request — it succeeds once the environment is ready. Returned only for identity-token (dashboard) requests bound to an active-entitled merchant, not for secret-key API calls; any such endpoint can return it while provisioning is underway.
The request was rejected. type is invalid_request_error; when the failure is a validation failure code is validation_failed and errors lists every problem found, with field-attributable entries prefixed by the field’s path.
No credentials were supplied, or the identity token / secret key is not valid for the target merchant. type is authentication_error.
The credentials are valid but lack the permission this operation requires. type is permission_error.
The request exceeded a limit on what this API accepts and was refused before the operation ran, so nothing was created or changed. The body must be under 4 MB. type is invalid_request_error, and message names the limit that was met. Reduce the request below the limit and send it again.
Too many requests. The rate limit is applied per client across all operations. type is rate_limit_error.
The request could not be completed because of an unexpected error. type is api_error.
A dependency needed to serve the request is temporarily unavailable — for every operation the auth service that verifies credentials and resolves entitlement, and on the provisioning routes also the ODUS API the OMS reconciles against. type is api_error. Unlike a plain 500 the condition is transient rather than a fault in the request, so it is worth retrying with backoff.
The request exceeded the processing time limit and was abandoned. type is api_error and code is timeout — unlike a plain 500 the request may still have taken effect.