Error Codes
Every code of the MTHDS core error registry has a page here, at the URL a problem's type names: https://mthds.ai/errors/<code>. Each page says what its code means, who must act and what to do, and gives the code's steps, parameters and templates. The Error Registry page describes the registry itself, and the HTTP Runner Protocol how a problem document carries a code.
These pages are generated from the registry's data, which is published with every release of the standard as mthds-error-registry.json. This is version 8.0.0 of the registry.
Extension prefixes
A code that is not a core code starts with a registered prefix, and its page is published by the prefix's owner, under the base URL the prefix is registered with.
| Prefix | Owner | Base URL |
|---|---|---|
pipelex. |
Pipelex | https://docs.pipelex.com/errors |
request
The HTTP request itself, before any run.
| Code | Title | Domain | Retry | Status |
|---|---|---|---|---|
request.malformed |
The request body cannot be parsed | input |
no |
422 |
request.invalid |
The request does not match the route's schema | input |
no |
422 |
request.too_large |
The request exceeds a size limit | input |
no |
413 |
request.not_found |
No such route | input |
no |
404 |
request.method_not_allowed |
The route does not accept this HTTP method | input |
no |
405 |
request.unsupported |
The request uses a form this runtime does not accept | input |
no |
422 |
request.idempotency_conflict |
The idempotency key was used for a different request | input |
no |
409 |
request.idempotency_key_in_use |
A request under this idempotency key is still running | runtime |
yes |
409 |
request.already_executed |
The request already ran and its answer is not kept | input |
no |
409 |
request.pipe_not_found |
The selected pipe is not in the method | input |
no |
422 |
request.pipe_ambiguous |
The pipe selection matches several pipes | input |
no |
422 |
request.pipe_unspecified |
No pipe is selected | input |
no |
422 |
request.blobs_missing |
The runner does not hold some files sent by hash | input |
no |
422 |
auth
Credentials and permissions.
| Code | Title | Domain | Retry | Status |
|---|---|---|---|---|
auth.missing_credential |
No credential was sent | account |
no |
401 |
auth.invalid_credential |
The credential was refused | account |
no |
401 |
auth.credential_expired |
The credential has expired | account |
no |
401 |
auth.forbidden |
The credential does not permit this | account |
no |
403 |
account
The account's limits.
| Code | Title | Domain | Retry | Status |
|---|---|---|---|---|
account.rate_limited |
The account is over its request rate | account |
yes |
429 |
account.quota_exhausted |
The account's quota is used up | account |
no |
429 |
input
A run's inputs.
| Code | Title | Domain | Retry | Status |
|---|---|---|---|---|
input.missing |
A required input is missing | input |
no |
422 |
input.unexpected |
An input the method does not declare | input |
no |
422 |
input.wrong_concept |
An input is not the declared concept | input |
no |
422 |
input.wrong_multiplicity |
An input has the wrong number of items | input |
no |
422 |
input.invalid |
An input does not fit its concept's structure | input |
no |
422 |
input.file_unreadable |
An input file cannot be read | input |
no |
422 |
input.file_type_unsupported |
An input file's type is not supported here | input |
no |
422 |
input.too_large |
An input exceeds a size limit | input |
no |
422 |
input.reference_not_found |
An input refers to something that does not exist | input |
no |
422 |
input.url_unreachable |
An input's URL could not be fetched | input |
yes |
422 |
method
The method as written, the validation vocabulary included.
| Code | Title | Domain | Retry | Status |
|---|---|---|---|---|
method.invalid |
The method does not validate | method |
no |
422 |
method.syntax |
The method does not parse | method |
no |
422 |
method.schema_violation |
The method breaks a rule of the language | method |
no |
422 |
method.not_found |
No method at this address | input |
no |
404 |
method.ambiguous |
The method address matches several methods | input |
no |
422 |
method.fetch_failed |
The method could not be fetched | runtime |
yes |
502 |
method.package_invalid |
The method's package breaks a package rule | method |
no |
422 |
method.dependency_missing |
A dependency of the method is not available | method |
no |
422 |
method.dependency_invalid |
A dependency of the method does not load | method |
no |
422 |
method.resource_missing |
A file the method refers to is not in its tree | method |
no |
422 |
method.concept_unresolved |
The method names a concept no library declares | method |
no |
422 |
method.pipe_unresolved |
The method names a pipe that does not exist | method |
no |
422 |
method.pipe_not_exported |
The method calls a pipe its dependency does not export | method |
no |
422 |
method.ref_ambiguous |
A reference matches several declarations | method |
no |
422 |
method.name_conflict |
A name is declared twice or collides with a reserved one | method |
no |
422 |
method.cycle |
Declarations form a cycle | method |
no |
422 |
method.identifier_invalid |
A name is not a valid identifier | method |
no |
422 |
method.pipe_type_invalid |
A pipe's type is missing, unknown or retired | method |
no |
422 |
method.signature_mismatch |
A pipe differs from its signature | method |
no |
422 |
method.not_runnable |
The method still holds pipe signatures | method |
no |
422 |
method.input_undeclared |
A pipe reads an input it does not declare | method |
no |
422 |
method.input_unused |
A pipe declares an input it never reads | method |
no |
422 |
method.input_concept_mismatch |
A pipe's input concept does not fit its use | method |
no |
422 |
method.output_concept_mismatch |
A pipe's output concept does not fit | method |
no |
422 |
method.output_multiplicity_mismatch |
A pipe's declared multiplicity does not fit its use | method |
no |
422 |
method.wiring_invalid |
A pipe's wiring does not give it what it reads | method |
no |
422 |
method.field_path_unresolved |
A path names a field its concept does not have | method |
no |
422 |
method.binding_step_invalid |
A binding step is malformed | method |
no |
422 |
method.optional_marker_invalid |
An optional marker is misplaced | method |
no |
422 |
method.optional_unhandled |
An optional value reaches a place that needs a required one | method |
no |
422 |
method.template_invalid |
A template in the method is invalid | method |
no |
422 |
method.template_private_name |
A template reads a name reserved to the runtime | method |
no |
422 |
method.function_invalid |
A function the method declares cannot be used | method |
no |
422 |
method.concept_invalid |
A concept's structure cannot be built or described | method |
no |
422 |
method.model_setting_invalid |
A model setting in the method is invalid | method |
no |
422 |
method.mock_unsatisfiable |
The dry run cannot mock an output concept | method |
no |
422 |
method.changed_concurrently |
A method file changed while it was being fixed | runtime |
yes |
409 |
method.hint_invalid |
A hint is not understood | method |
no |
none (warning) |
method.input_presence_vacuous |
A presence check always holds | method |
no |
none (warning) |
method.optional_force_redundant |
An optional force is redundant | method |
no |
none (warning) |
pipe
A pipe failing at run time because of what the method does.
| Code | Title | Domain | Retry | Status |
|---|---|---|---|---|
pipe.output_multiplicity |
A pipe's output does not have the declared multiplicity | method |
no |
422 |
pipe.output_invalid |
A pipe's output does not fit its concept | method |
no |
422 |
pipe.function_raised |
The method's function raised | method |
no |
422 |
pipe.function_timed_out |
The method's function ran past its time limit | method |
no |
422 |
pipe.template_render_failed |
A template failed to render | method |
no |
422 |
pipe.template_budget_exceeded |
A template exceeded its render budget | method |
no |
422 |
pipe.condition_unmatched |
A condition matched no outcome | method |
no |
422 |
pipe.condition_refused |
The method refused these inputs | input |
no |
422 |
pipe.binding_failed |
A binding step could not bind its value | method |
no |
422 |
pipe.input_unresolved |
A pipe could not read a value it needs | method |
no |
422 |
pipe.forced_input_absent |
A forced input was absent | method |
no |
422 |
pipe.prompt_empty |
A pipe's prompt is empty | input |
no |
422 |
pipe.stack_overflow |
The run nested pipes deeper than the limit | method |
no |
422 |
model
The model a step names.
| Code | Title | Domain | Retry | Status |
|---|---|---|---|---|
model.unknown |
The method names a model that does not exist | method |
no |
422 |
model.unavailable |
This deployment serves no backend for the model | operator |
no |
501 |
model.unspecified |
No model is named for this step | method |
no |
422 |
model.capability_unsupported |
The model cannot do what the step asks | method |
no |
422 |
model.context_exceeded |
The inputs exceed what the model can read | input |
no |
422 |
model.output_truncated |
The answer was cut at the method's token cap | method |
no |
422 |
model.output_schema_mismatch |
The model's structured output did not match its schema | runtime |
yes |
502 |
model.content_refused |
The provider refused the content | input |
no |
422 |
model.no_result |
The model found nothing for this request | input |
no |
422 |
provider
The inference provider behind a model.
| Code | Title | Domain | Retry | Status |
|---|---|---|---|---|
provider.rate_limited |
The provider is rate limiting this deployment | runtime |
yes |
429 |
provider.unavailable |
The provider is unavailable | runtime |
yes |
502 |
provider.timeout |
The provider did not answer in time | runtime |
yes |
504 |
provider.failed |
The provider failed | runtime |
yes |
502 |
provider.response_invalid |
The provider's answer could not be used | runtime |
yes |
502 |
provider.credential_refused |
The provider refused this deployment's credential | operator |
no |
502 |
provider.quota_exhausted |
This deployment's provider account is out of quota | operator |
no |
502 |
provider.outcome_unknown |
The provider call may have taken effect | runtime |
yes |
502 |
run
A run's lifecycle and its reads.
| Code | Title | Domain | Retry | Status |
|---|---|---|---|---|
run.not_found |
No such run | input |
no |
404 |
run.failed |
The run did not succeed | runtime |
no |
409 |
run.not_finished |
The run has not finished | runtime |
yes |
409 |
run.cancelled |
The run was cancelled by its caller | input |
yes |
409 |
run.timed_out |
The run passed its time limit | method |
no |
422 |
run.lost |
The run's outcome is lost | runtime |
outcome_unknown |
500 |
run.outcome_unknown |
The runtime cannot tell whether the run started or finished | runtime |
outcome_unknown |
502 |
run.already_ended |
The run has already ended | input |
no |
409 |
run.answer_not_kept |
The run's answer was not kept | input |
no |
409 |
run.results_not_stored |
The run's results were not stored | input |
no |
404 |
run.terminated |
The run was stopped by an operator or an erasure | operator |
no |
409 |
security
Refusals made for safety. An implementation may also record each one as a security event.
| Code | Title | Domain | Retry | Status |
|---|---|---|---|---|
security.input_url_refused |
A URL in the request was refused | input |
no |
422 |
security.method_url_refused |
A URL the method names was refused | method |
no |
422 |
security.provider_url_refused |
A URL a provider returned was refused | runtime |
no |
502 |
security.input_path_refused |
A path the caller supplied was refused | input |
no |
422 |
security.method_path_refused |
A path the method names was refused | method |
no |
422 |
security.template_refused |
A template was refused by the template sandbox | method |
no |
422 |
security.schema_refused |
An output schema was refused | method |
no |
422 |
security.integrity_mismatch |
A dependency's content differs from its lock | method |
no |
422 |
runtime
The runtime itself.
| Code | Title | Domain | Retry | Status |
|---|---|---|---|---|
runtime.unexpected |
An unexpected error occurred | runtime |
no |
500 |
runtime.misconfigured |
The runtime is misconfigured | operator |
no |
500 |
runtime.unavailable |
The runtime or a service it depends on is unavailable | runtime |
yes |
503 |
runtime.unsupported |
This runtime cannot do what was asked | operator |
no |
501 |
client
What a client detects itself, and never receives as a response body.
| Code | Title | Domain | Retry | Status |
|---|---|---|---|---|
client.unreachable |
The runtime could not be reached | runtime |
yes |
none (client) |
client.timeout |
The runtime did not answer in time | runtime |
yes |
none (client) |
client.response_unreadable |
The runtime's answer could not be read | runtime |
no |
none (client) |
client.outcome_unknown |
The call may have created a run | runtime |
outcome_unknown |
none (client) |
client.follow_failed |
Following a started run stopped | runtime |
outcome_unknown |
none (client) |
client.not_configured |
The client has no usable configuration | input |
no |
none (client) |
client.argument_invalid |
An argument was refused before sending | input |
no |
none (client) |
client.file_unreadable |
A local file cannot be read | input |
no |
none (client) |
client.write_failed |
A local file could not be written | input |
no |
none (client) |
client.target_exists |
The target already exists | input |
no |
none (client) |
client.workspace_busy |
Local files changed underneath the client | runtime |
yes |
none (client) |
client.output_mismatch |
An output does not match the generated types | input |
no |
none (client) |
client.link_refused |
A download link was refused | operator |
no |
none (client) |
client.download_limit_exceeded |
A download passed the client's limit | input |
no |
none (client) |
client.aborted |
The call was stopped by the caller | input |
yes |
none (client) |
client.tool_missing |
A local tool the client needs is missing | input |
no |
none (client) |
client.tool_outdated |
A local tool is too old | input |
no |
none (client) |