Validation failed
- Status
- 422
- Retryable
- no
- Type
- https://fastpad.ai/errors/validation-failed
What it means
The arguments did not match the schema. `field_errors[]` names each bad path and what was expected.
What to do
Read `field_errors[]` and correct the named paths. Every input schema sets `additionalProperties:false`, so an unrecognized key is reported rather than ignored.
Variants
This type also answers with the responses below. The status and retryable members of the response you received say which one it is, and they are authoritative.
- Status
- 413
- Retryable
- no
Status 413, with `max_bytes`: the request body is over the size this route accepts, and the server refused it before reading it.
What to do: Send smaller requests, each under `max_bytes`. An import archive does not belong in a request body at all: presign an upload with `POST /v1/imports/uploads` and send the returned key.
- Status
- 422
- Retryable
- no
Status 422, with `max_atoms` (or with `max_bytes` alongside a `field_errors[]` entry naming the op blob): one save carries more change than the server imports at once. The same bytes are refused the same way every time.
What to do: Split the change: export the ops in smaller batches, each a Loro update from the version the server last acknowledged, and send them in order. The response’s `hint` names the next step for the route that refused it.
- Status
- 408
- Retryable
- yes
Status 408, with `received_bytes`, `receive_deadline_ms` and `min_bytes_per_sec`: a large request body arrived too slowly, or did not finish arriving within `receive_deadline_ms`. The response’s `min_bytes_per_sec` is the floor that applied to that body. Nothing was wrong with the request.
What to do: Resend the same request over a faster connection, or split it into smaller requests. The same body lands when it arrives in time.
Why it works this way
An unknown argument is a misunderstanding, not noise. Silently dropping it would let a caller believe an option took effect when it never reached the server.