Moddingflow API Reference

Endpoints, response codes, scopes, request bodies und der schema catalog kommen direkt aus dem geprüften OpenAPI-Artefakt. Wenn sich der Vertrag ändert, ändert sich diese Seite mit.

OpenAPI

3.1.0

Operationen

47

Schemas

153

Base URLs

https://api.moddingflow.com/v1

Primary public API namespace.

https://www.moddingflow.com/api/v1

Compatibility namespace behind the current website domain.

Endpoints

Agent Gateway

GET

List Agent Gateway tools.

/agent/tools

Operation ID
listAgentGatewayTools
Path template
/agent/tools
Responses
200, 401, 403, 429, 500
Scopes
Keine OAuth scopes
Request body
Kein body

Parameter

  • headertraceparentOptional

    W3C trace context header accepted for distributed tracing.

    Schema refs

    string

    Beispiele

    00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01

Request headers

  • traceparent

    W3C trace context header accepted for distributed tracing.

    Schema refs

    string

    Beispiele

    00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01

Responses

200Agent Gateway tool registry.
application/json

Schema refs

AgentToolRegistryResponse

Beispiele

{"ok":true,"data":{"audience":"agent-gateway","dry_run_default":true,"mcp_facade":"example-value","policy":{"arbitrary_url_fetch":false,"download_actions":"example-value","private_data_exfiltration":false,"redaction_in_logs":true},"schema_version":1,"supported_schema_versions":[1],"tools":[{"name":"mods.search","title":"Representative Moddingflow example","mode":"read","requiredScopes":["openid"],"dryRunDefault":true,"confirmationRequiredFor":["example-value"],"description":"Representative value for the public API contract.","schemaVersion":1}]}}
  • X-Moddingflow-Agent-Schema-Version

    Agent Gateway tool schema version used by this response.

    Schema refs

    integer
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"ok":true,"data":{"audience":"agent-gateway","dry_run_default":true,"mcp_facade":"example-value","policy":{"arbitrary_url_fetch":false,"download_actions":"example-value","private_data_exfiltration":false,"redaction_in_logs":true},"schema_version":1,"supported_schema_versions":[1],"tools":[{"name":"mods.search","title":"Representative Moddingflow example","mode":"read","requiredScopes":["openid"],"dryRunDefault":true,"confirmationRequiredFor":["example-value"],"description":"Representative value for the public API contract.","schemaVersion":1}]}}
401Authentication is missing, expired, or invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
403The token or public client lacks the required scope.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
429Rate limit exceeded.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
  • RateLimit-Limit

    Quota limit for the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    120
  • RateLimit-Remaining

    Remaining quota in the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    0
  • RateLimit-Reset

    Seconds until the active public API rate-limit bucket resets.

    Schema refs

    integer

    Beispiele

    60
  • Retry-After

    Seconds the client should wait before retrying a rate-limited request.

    Schema refs

    integer

    Beispiele

    60
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
500Unexpected server error.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
POST

Run an Agent Gateway tool.

/agent/tools:run

Operation ID
runAgentGatewayTool
Path template
/agent/tools:run
Responses
200, 400, 401, 403, 404, 422, 429, 500
Scopes
agent:run, agent:tools:download, agent:tools:publish_draft, agent:tools:read
Request body
Body erforderlich

Parameter

  • headertraceparentOptional

    W3C trace context header accepted for distributed tracing.

    Schema refs

    string

    Beispiele

    00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01

Request headers

  • traceparent

    W3C trace context header accepted for distributed tracing.

    Schema refs

    string

    Beispiele

    00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01

Request body

application/jsonErforderlich

Schema refs

AgentToolRunRequest

Beispiele

{"tool":"mods.search","input":{},"dry_run":true,"schema_version":1,"confirmation_token":"example-redacted-token"}

Responses

200Agent tool result.
application/json

Schema refs

AgentToolRunResponse

Beispiele

{"ok":true,"data":{"tool":"mods.search","dry_run":true,"explanation":"example-value","schema_version":1,"data":{}}}
  • X-Moddingflow-Agent-Schema-Version

    Agent Gateway tool schema version used by this response.

    Schema refs

    integer
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"ok":true,"data":{"tool":"mods.search","dry_run":true,"explanation":"example-value","schema_version":1,"data":{}}}
400Request syntax or query parameters are invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
401Authentication is missing, expired, or invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
403The token or public client lacks the required scope.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
404The requested public resource was not found or is not visible.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/not_found","title":"Resource not found","status":404,"detail":"The requested public resource was not found.","instance":"urn:moddingflow:request:req_01JZ7Q43P31JSQQF7W3R24H0ED","ok":false,"code":"not_found","machine_code":"not_found","http_status":404,"request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED","retryable":false,"docs_slug":"errors.not_found","error":{"machine_code":"not_found","http_status":404,"message":"The requested public resource was not found.","request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/not_found","title":"Resource not found","status":404,"detail":"The requested public resource was not found.","instance":"urn:moddingflow:request:req_01JZ7Q43P31JSQQF7W3R24H0ED","ok":false,"code":"not_found","machine_code":"not_found","http_status":404,"request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED","retryable":false,"docs_slug":"errors.not_found","error":{"machine_code":"not_found","http_status":404,"message":"The requested public resource was not found.","request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED"}}
44444444-4444-4444-8444-444444444444
422Field-level validation failed.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/validation_failed","title":"Validation failed","status":422,"detail":"One or more fields are invalid.","instance":"urn:moddingflow:request:req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","ok":false,"code":"validation_failed","machine_code":"validation_failed","http_status":422,"request_id":"req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","trace_id":"trace_01JZ7Q4XEKGQQ80P7RXMPVXMH6","retryable":false,"fields":[{"field":"game_version","code":"unsupported_version","message":"This game version is not supported for the selected mod."}],"docs_slug":"errors.validation_failed","error":{"machine_code":"validation_failed","http_status":422,"message":"One or more fields are invalid.","fields":[{"field":"game_version","code":"unsupported_version","message":"This game version is not supported for the selected mod."}],"request_id":"req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","trace_id":"trace_01JZ7Q4XEKGQQ80P7RXMPVXMH6"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/validation_failed","title":"Validation failed","status":422,"detail":"One or more fields are invalid.","instance":"urn:moddingflow:request:req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","ok":false,"code":"validation_failed","machine_code":"validation_failed","http_status":422,"request_id":"req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","trace_id":"trace_01JZ7Q4XEKGQQ80P7RXMPVXMH6","retryable":false,"fields":[{"field":"game_version","code":"unsupported_version","message":"This game version is not supported for the selected mod."}],"docs_slug":"errors.validation_failed","error":{"machine_code":"validation_failed","http_status":422,"message":"One or more fields are invalid.","fields":[{"field":"game_version","code":"unsupported_version","message":"This game version is not supported for the selected mod."}],"request_id":"req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","trace_id":"trace_01JZ7Q4XEKGQQ80P7RXMPVXMH6"}}
44444444-4444-4444-8444-444444444444
429Rate limit exceeded.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
  • RateLimit-Limit

    Quota limit for the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    120
  • RateLimit-Remaining

    Remaining quota in the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    0
  • RateLimit-Reset

    Seconds until the active public API rate-limit bucket resets.

    Schema refs

    integer

    Beispiele

    60
  • Retry-After

    Seconds the client should wait before retrying a rate-limited request.

    Schema refs

    integer

    Beispiele

    60
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
500Unexpected server error.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444

Auth

GET

Get OIDC public signing keys.

/.well-known/jwks.json

Operation ID
getJsonWebKeySet
Path template
/.well-known/jwks.json
Responses
200, 500, 503
Scopes
Keine OAuth scopes
Request body
Kein body

Operation/path servers

https://api.moddingflow.com

OAuth issuer namespace for Moddingflow public API clients.

Responses

200JSON Web Key Set containing public verification keys.
application/jwk-set+json

Schema refs

JsonWebKeySet

Beispiele

{"keys":[{"kty":"RSA","kid":"example-value","use":"sig","alg":"RS256","n":"example-valuexxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx","e":"example-value"}]}
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"keys":[{"kty":"RSA","kid":"example-value","use":"sig","alg":"RS256","n":"example-valuexxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx","e":"example-value"}]}
500Unexpected server error.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
503Unexpected server error.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
GET

Get OAuth authorization server metadata.

/.well-known/oauth-authorization-server

Operation ID
getOAuthAuthorizationServerMetadata
Path template
/.well-known/oauth-authorization-server
Responses
200, 500
Scopes
Keine OAuth scopes
Request body
Kein body

Operation/path servers

https://api.moddingflow.com

OAuth issuer namespace for Moddingflow public API clients.

Responses

200OAuth authorization server metadata document.
application/json

Schema refs

OAuthAuthorizationServerMetadata

Beispiele

{"issuer":"https://api.moddingflow.com","authorization_endpoint":"https://api.moddingflow.com/oauth/authorize","device_authorization_endpoint":"https://api.moddingflow.com/oauth/device_authorization","token_endpoint":"https://api.moddingflow.com/oauth/token","revocation_endpoint":"https://api.moddingflow.com/oauth/revoke","introspection_endpoint":"https://api.moddingflow.com/oauth/introspect","response_types_supported":["code"],"grant_types_supported":["authorization_code","refresh_token","urn:ietf:params:oauth:grant-type:device_code","urn:ietf:params:oauth:grant-type:token-exchange"],"code_challenge_methods_supported":["S256"],"token_endpoint_auth_methods_supported":["none","client_secret_basic","client_secret_post"],"scopes_supported":["openid"]}
["code"]
["authorization_code","refresh_token","urn:ietf:params:oauth:grant-type:device_code","urn:ietf:params:oauth:grant-type:token-exchange"]
["S256"]
["none","client_secret_basic","client_secret_post"]
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"issuer":"https://api.moddingflow.com","authorization_endpoint":"https://api.moddingflow.com/oauth/authorize","device_authorization_endpoint":"https://api.moddingflow.com/oauth/device_authorization","token_endpoint":"https://api.moddingflow.com/oauth/token","revocation_endpoint":"https://api.moddingflow.com/oauth/revoke","introspection_endpoint":"https://api.moddingflow.com/oauth/introspect","response_types_supported":["code"],"grant_types_supported":["authorization_code","refresh_token","urn:ietf:params:oauth:grant-type:device_code","urn:ietf:params:oauth:grant-type:token-exchange"],"code_challenge_methods_supported":["S256"],"token_endpoint_auth_methods_supported":["none","client_secret_basic","client_secret_post"],"scopes_supported":["openid"]}
["code"]
["authorization_code","refresh_token","urn:ietf:params:oauth:grant-type:device_code","urn:ietf:params:oauth:grant-type:token-exchange"]
["S256"]
["none","client_secret_basic","client_secret_post"]
500Unexpected server error.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
GET

Get OpenID Connect provider metadata.

/.well-known/openid-configuration

Operation ID
getOidcDiscovery
Path template
/.well-known/openid-configuration
Responses
200, 500, 503
Scopes
Keine OAuth scopes
Request body
Kein body

Operation/path servers

https://api.moddingflow.com

OAuth issuer namespace for Moddingflow public API clients.

Responses

200OpenID Connect provider metadata document.
application/json

Schema refs

OidcDiscoveryResponse

Beispiele

{"issuer":"https://api.moddingflow.com","authorization_endpoint":"https://api.moddingflow.com/oauth/authorize","device_authorization_endpoint":"https://api.moddingflow.com/oauth/device_authorization","token_endpoint":"https://api.moddingflow.com/oauth/token","revocation_endpoint":"https://api.moddingflow.com/oauth/revoke","introspection_endpoint":"https://api.moddingflow.com/oauth/introspect","jwks_uri":"https://api.moddingflow.com/.well-known/jwks.json","response_types_supported":["code"],"response_modes_supported":["query"],"grant_types_supported":["authorization_code","refresh_token","urn:ietf:params:oauth:grant-type:device_code","urn:ietf:params:oauth:grant-type:token-exchange"],"code_challenge_methods_supported":["S256"],"token_endpoint_auth_methods_supported":["none","client_secret_basic","client_secret_post"],"subject_types_supported":["public"],"id_token_signing_alg_values_supported":["RS256"],"claims_supported":["iss","sub","aud","exp","iat","nonce"],"scopes_supported":["openid"]}
["code"]
["query"]
["authorization_code","refresh_token","urn:ietf:params:oauth:grant-type:device_code","urn:ietf:params:oauth:grant-type:token-exchange"]
["S256"]
["none","client_secret_basic","client_secret_post"]
["public"]
["RS256"]
["iss","sub","aud","exp","iat","nonce"]
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"issuer":"https://api.moddingflow.com","authorization_endpoint":"https://api.moddingflow.com/oauth/authorize","device_authorization_endpoint":"https://api.moddingflow.com/oauth/device_authorization","token_endpoint":"https://api.moddingflow.com/oauth/token","revocation_endpoint":"https://api.moddingflow.com/oauth/revoke","introspection_endpoint":"https://api.moddingflow.com/oauth/introspect","jwks_uri":"https://api.moddingflow.com/.well-known/jwks.json","response_types_supported":["code"],"response_modes_supported":["query"],"grant_types_supported":["authorization_code","refresh_token","urn:ietf:params:oauth:grant-type:device_code","urn:ietf:params:oauth:grant-type:token-exchange"],"code_challenge_methods_supported":["S256"],"token_endpoint_auth_methods_supported":["none","client_secret_basic","client_secret_post"],"subject_types_supported":["public"],"id_token_signing_alg_values_supported":["RS256"],"claims_supported":["iss","sub","aud","exp","iat","nonce"],"scopes_supported":["openid"]}
["code"]
["query"]
["authorization_code","refresh_token","urn:ietf:params:oauth:grant-type:device_code","urn:ietf:params:oauth:grant-type:token-exchange"]
["S256"]
["none","client_secret_basic","client_secret_post"]
["public"]
["RS256"]
["iss","sub","aud","exp","iat","nonce"]
500Unexpected server error.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
503Unexpected server error.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
GET

List the current user's API keys without secrets.

/api-keys

Operation ID
listApiKeys
Path template
/api-keys
Responses
200, 401, 403, 429, 500
Scopes
profile:read
Request body
Kein body

Responses

200Safe API-key metadata.
application/json

Schema refs

ApiKeyListResponse

Beispiele

{"ok":true,"data":{"keys":[{"id":"550e8400-e29b-41d4-a716-446655440000","name":"Example Mod","display_prefix":"mfp_example01","fingerprint":"mfp_example01","scopes":["openid"],"resources":[{"resource_kind":"mod","resource_id":"550e8400-e29b-41d4-a716-446655440000"}],"resource_scope_mode":"all","last_used_at":"2026-07-11T10:30:00Z","expires_at":"2026-07-11T10:30:00Z","revoked_at":"2026-07-11T10:30:00Z","revoked_reason":"example-value","rotation_generation":0,"created_at":"2026-07-11T10:30:00Z"}]}}
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"ok":true,"data":{"keys":[{"id":"550e8400-e29b-41d4-a716-446655440000","name":"Example Mod","display_prefix":"mfp_example01","fingerprint":"mfp_example01","scopes":["openid"],"resources":[{"resource_kind":"mod","resource_id":"550e8400-e29b-41d4-a716-446655440000"}],"resource_scope_mode":"all","last_used_at":"2026-07-11T10:30:00Z","expires_at":"2026-07-11T10:30:00Z","revoked_at":"2026-07-11T10:30:00Z","revoked_reason":"example-value","rotation_generation":0,"created_at":"2026-07-11T10:30:00Z"}]}}
401Authentication is missing, expired, or invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
403The token or public client lacks the required scope.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
429Rate limit exceeded.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
  • RateLimit-Limit

    Quota limit for the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    120
  • RateLimit-Remaining

    Remaining quota in the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    0
  • RateLimit-Reset

    Seconds until the active public API rate-limit bucket resets.

    Schema refs

    integer

    Beispiele

    60
  • Retry-After

    Seconds the client should wait before retrying a rate-limited request.

    Schema refs

    integer

    Beispiele

    60
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
500Unexpected server error.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
POST

Create an individual resource-scoped API key.

/api-keys

Operation ID
createApiKey
Path template
/api-keys
Responses
201, 400, 401, 403, 404, 409, 429, 500
Scopes
profile:read
Request body
Body erforderlich

Parameter

  • headerIdempotency-KeyErforderlich

    Client-generated retry key for write/upload operations. Reusing a key with a different body returns a conflict.

    Schema refs

    string

    Beispiele

    example-idempotency-key-0001

Request headers

  • Idempotency-KeyErforderlich

    Client-generated retry key for write/upload operations. Reusing a key with a different body returns a conflict.

    Schema refs

    string

    Beispiele

    example-idempotency-key-0001

Request body

application/jsonErforderlich

Schema refs

CreateApiKeyRequest

Beispiele

{"name":"Example Mod","scopes":["openid"],"resources":[],"expires_at":"2026-07-11T10:30:00Z"}

Responses

201API key created; copy the one-time secret now.
application/json

Schema refs

ApiKeyOneTimeSecretResponse

Beispiele

{"ok":true,"data":{"id":"550e8400-e29b-41d4-a716-446655440000","name":"Example Mod","display_prefix":"mfp_example01","fingerprint":"mfp_example01","scopes":["openid"],"resources":[{"resource_kind":"mod","resource_id":"550e8400-e29b-41d4-a716-446655440000"}],"resource_scope_mode":"all","last_used_at":"2026-07-11T10:30:00Z","expires_at":"2026-07-11T10:30:00Z","revoked_at":"2026-07-11T10:30:00Z","revoked_reason":"example-value","rotation_generation":0,"created_at":"2026-07-11T10:30:00Z","secret":"mfp_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","secret_reveal":"one_time"}}
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"ok":true,"data":{"id":"550e8400-e29b-41d4-a716-446655440000","name":"Example Mod","display_prefix":"mfp_example01","fingerprint":"mfp_example01","scopes":["openid"],"resources":[{"resource_kind":"mod","resource_id":"550e8400-e29b-41d4-a716-446655440000"}],"resource_scope_mode":"all","last_used_at":"2026-07-11T10:30:00Z","expires_at":"2026-07-11T10:30:00Z","revoked_at":"2026-07-11T10:30:00Z","revoked_reason":"example-value","rotation_generation":0,"created_at":"2026-07-11T10:30:00Z","secret":"mfp_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","secret_reveal":"one_time"}}
400Request syntax or query parameters are invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
401Authentication is missing, expired, or invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
403The token or public client lacks the required scope.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
404The requested public resource was not found or is not visible.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/not_found","title":"Resource not found","status":404,"detail":"The requested public resource was not found.","instance":"urn:moddingflow:request:req_01JZ7Q43P31JSQQF7W3R24H0ED","ok":false,"code":"not_found","machine_code":"not_found","http_status":404,"request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED","retryable":false,"docs_slug":"errors.not_found","error":{"machine_code":"not_found","http_status":404,"message":"The requested public resource was not found.","request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/not_found","title":"Resource not found","status":404,"detail":"The requested public resource was not found.","instance":"urn:moddingflow:request:req_01JZ7Q43P31JSQQF7W3R24H0ED","ok":false,"code":"not_found","machine_code":"not_found","http_status":404,"request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED","retryable":false,"docs_slug":"errors.not_found","error":{"machine_code":"not_found","http_status":404,"message":"The requested public resource was not found.","request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED"}}
44444444-4444-4444-8444-444444444444
409The operation conflicts with current state or idempotency history.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/idempotency_conflict","title":"Idempotency conflict","status":409,"detail":"The Idempotency-Key was already used with a different request body.","instance":"urn:moddingflow:request:req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","ok":false,"code":"idempotency_conflict","machine_code":"idempotency_conflict","http_status":409,"request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","retryable":false,"docs_slug":"errors.idempotency_conflict","error":{"machine_code":"idempotency_conflict","http_status":409,"message":"The Idempotency-Key was already used with a different request body.","request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/idempotency_conflict","title":"Idempotency conflict","status":409,"detail":"The Idempotency-Key was already used with a different request body.","instance":"urn:moddingflow:request:req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","ok":false,"code":"idempotency_conflict","machine_code":"idempotency_conflict","http_status":409,"request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","retryable":false,"docs_slug":"errors.idempotency_conflict","error":{"machine_code":"idempotency_conflict","http_status":409,"message":"The Idempotency-Key was already used with a different request body.","request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF"}}
44444444-4444-4444-8444-444444444444
429Rate limit exceeded.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
  • RateLimit-Limit

    Quota limit for the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    120
  • RateLimit-Remaining

    Remaining quota in the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    0
  • RateLimit-Reset

    Seconds until the active public API rate-limit bucket resets.

    Schema refs

    integer

    Beispiele

    60
  • Retry-After

    Seconds the client should wait before retrying a rate-limited request.

    Schema refs

    integer

    Beispiele

    60
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
500Unexpected server error.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
DELETE

Revoke an API key by id.

/api-keys/{api_key_id}

Operation ID
revokeApiKey
Path template
/api-keys/{api_key_id}
Responses
200, 400, 401, 403, 404, 429, 500
Scopes
profile:read
Request body
Kein body

Parameter

  • pathapi_key_idErforderlich

    Schema refs

    Uuid

    Beispiele

    550e8400-e29b-41d4-a716-446655440000

Responses

200Key is revoked or was already inactive.
application/json

Schema refs

ApiKeyRevocationResponse

Beispiele

{"ok":true,"data":{"id":"550e8400-e29b-41d4-a716-446655440000","fingerprint":"example-value","revoked":true,"changed":true}}
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"ok":true,"data":{"id":"550e8400-e29b-41d4-a716-446655440000","fingerprint":"example-value","revoked":true,"changed":true}}
400Request syntax or query parameters are invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
401Authentication is missing, expired, or invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
403The token or public client lacks the required scope.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
404The requested public resource was not found or is not visible.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/not_found","title":"Resource not found","status":404,"detail":"The requested public resource was not found.","instance":"urn:moddingflow:request:req_01JZ7Q43P31JSQQF7W3R24H0ED","ok":false,"code":"not_found","machine_code":"not_found","http_status":404,"request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED","retryable":false,"docs_slug":"errors.not_found","error":{"machine_code":"not_found","http_status":404,"message":"The requested public resource was not found.","request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/not_found","title":"Resource not found","status":404,"detail":"The requested public resource was not found.","instance":"urn:moddingflow:request:req_01JZ7Q43P31JSQQF7W3R24H0ED","ok":false,"code":"not_found","machine_code":"not_found","http_status":404,"request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED","retryable":false,"docs_slug":"errors.not_found","error":{"machine_code":"not_found","http_status":404,"message":"The requested public resource was not found.","request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED"}}
44444444-4444-4444-8444-444444444444
429Rate limit exceeded.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
  • RateLimit-Limit

    Quota limit for the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    120
  • RateLimit-Remaining

    Remaining quota in the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    0
  • RateLimit-Reset

    Seconds until the active public API rate-limit bucket resets.

    Schema refs

    integer

    Beispiele

    60
  • Retry-After

    Seconds the client should wait before retrying a rate-limited request.

    Schema refs

    integer

    Beispiele

    60
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
500Unexpected server error.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
POST

Rotate an active API key.

/api-keys/{api_key_id}/rotate

Operation ID
rotateApiKey
Path template
/api-keys/{api_key_id}/rotate
Responses
201, 400, 401, 403, 404, 409, 429, 500
Scopes
profile:read
Request body
Kein body

Parameter

  • headerIdempotency-KeyErforderlich

    Client-generated retry key for write/upload operations. Reusing a key with a different body returns a conflict.

    Schema refs

    string

    Beispiele

    example-idempotency-key-0001
  • pathapi_key_idErforderlich

    Schema refs

    Uuid

    Beispiele

    550e8400-e29b-41d4-a716-446655440000

Request headers

  • Idempotency-KeyErforderlich

    Client-generated retry key for write/upload operations. Reusing a key with a different body returns a conflict.

    Schema refs

    string

    Beispiele

    example-idempotency-key-0001

Responses

201Replacement key created and previous key revoked.
application/json

Schema refs

ApiKeyOneTimeSecretResponse

Beispiele

{"ok":true,"data":{"id":"550e8400-e29b-41d4-a716-446655440000","name":"Example Mod","display_prefix":"mfp_example01","fingerprint":"mfp_example01","scopes":["openid"],"resources":[{"resource_kind":"mod","resource_id":"550e8400-e29b-41d4-a716-446655440000"}],"resource_scope_mode":"all","last_used_at":"2026-07-11T10:30:00Z","expires_at":"2026-07-11T10:30:00Z","revoked_at":"2026-07-11T10:30:00Z","revoked_reason":"example-value","rotation_generation":0,"created_at":"2026-07-11T10:30:00Z","secret":"mfp_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","secret_reveal":"one_time"}}
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"ok":true,"data":{"id":"550e8400-e29b-41d4-a716-446655440000","name":"Example Mod","display_prefix":"mfp_example01","fingerprint":"mfp_example01","scopes":["openid"],"resources":[{"resource_kind":"mod","resource_id":"550e8400-e29b-41d4-a716-446655440000"}],"resource_scope_mode":"all","last_used_at":"2026-07-11T10:30:00Z","expires_at":"2026-07-11T10:30:00Z","revoked_at":"2026-07-11T10:30:00Z","revoked_reason":"example-value","rotation_generation":0,"created_at":"2026-07-11T10:30:00Z","secret":"mfp_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","secret_reveal":"one_time"}}
400Request syntax or query parameters are invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
401Authentication is missing, expired, or invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
403The token or public client lacks the required scope.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
404The requested public resource was not found or is not visible.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/not_found","title":"Resource not found","status":404,"detail":"The requested public resource was not found.","instance":"urn:moddingflow:request:req_01JZ7Q43P31JSQQF7W3R24H0ED","ok":false,"code":"not_found","machine_code":"not_found","http_status":404,"request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED","retryable":false,"docs_slug":"errors.not_found","error":{"machine_code":"not_found","http_status":404,"message":"The requested public resource was not found.","request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/not_found","title":"Resource not found","status":404,"detail":"The requested public resource was not found.","instance":"urn:moddingflow:request:req_01JZ7Q43P31JSQQF7W3R24H0ED","ok":false,"code":"not_found","machine_code":"not_found","http_status":404,"request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED","retryable":false,"docs_slug":"errors.not_found","error":{"machine_code":"not_found","http_status":404,"message":"The requested public resource was not found.","request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED"}}
44444444-4444-4444-8444-444444444444
409The operation conflicts with current state or idempotency history.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/idempotency_conflict","title":"Idempotency conflict","status":409,"detail":"The Idempotency-Key was already used with a different request body.","instance":"urn:moddingflow:request:req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","ok":false,"code":"idempotency_conflict","machine_code":"idempotency_conflict","http_status":409,"request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","retryable":false,"docs_slug":"errors.idempotency_conflict","error":{"machine_code":"idempotency_conflict","http_status":409,"message":"The Idempotency-Key was already used with a different request body.","request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/idempotency_conflict","title":"Idempotency conflict","status":409,"detail":"The Idempotency-Key was already used with a different request body.","instance":"urn:moddingflow:request:req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","ok":false,"code":"idempotency_conflict","machine_code":"idempotency_conflict","http_status":409,"request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","retryable":false,"docs_slug":"errors.idempotency_conflict","error":{"machine_code":"idempotency_conflict","http_status":409,"message":"The Idempotency-Key was already used with a different request body.","request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF"}}
44444444-4444-4444-8444-444444444444
429Rate limit exceeded.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
  • RateLimit-Limit

    Quota limit for the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    120
  • RateLimit-Remaining

    Remaining quota in the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    0
  • RateLimit-Reset

    Seconds until the active public API rate-limit bucket resets.

    Schema refs

    integer

    Beispiele

    60
  • Retry-After

    Seconds the client should wait before retrying a rate-limited request.

    Schema refs

    integer

    Beispiele

    60
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
500Unexpected server error.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
GET

List API-key scopes and accessible publishing projects.

/api-keys/capabilities

Operation ID
getApiKeyCapabilities
Path template
/api-keys/capabilities
Responses
200, 401, 403, 429, 500
Scopes
profile:read
Request body
Kein body

Responses

200Available scopes, role mapping, and publishing projects.
application/json

Schema refs

ApiKeyCapabilitiesResponse

Beispiele

{"ok":true,"data":{"scopes":["openid"],"projects":[{"mod_id":"550e8400-e29b-41d4-a716-446655440000","project_id":"550e8400-e29b-41d4-a716-446655440000","role":"owner","scopes":["openid"]}],"roles":{}}}
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"ok":true,"data":{"scopes":["openid"],"projects":[{"mod_id":"550e8400-e29b-41d4-a716-446655440000","project_id":"550e8400-e29b-41d4-a716-446655440000","role":"owner","scopes":["openid"]}],"roles":{}}}
401Authentication is missing, expired, or invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
403The token or public client lacks the required scope.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
429Rate limit exceeded.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
  • RateLimit-Limit

    Quota limit for the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    120
  • RateLimit-Remaining

    Remaining quota in the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    0
  • RateLimit-Reset

    Seconds until the active public API rate-limit bucket resets.

    Schema refs

    integer

    Beispiele

    60
  • Retry-After

    Seconds the client should wait before retrying a rate-limited request.

    Schema refs

    integer

    Beispiele

    60
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
500Unexpected server error.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
GET

Start Authorization Code with PKCE.

/oauth/authorize

Operation ID
authorizeOAuthClient
Path template
/oauth/authorize
Responses
302, 400, 401, 403, 429, 500
Scopes
Keine OAuth scopes
Request body
Kein body

Operation/path servers

https://api.moddingflow.com

OAuth issuer namespace for Moddingflow public API clients.

Parameter

  • queryclient_idErforderlich

    Opaque registered OAuth client identifier for a first-party or self-service application.

    Schema refs

    OAuthClientKey

    Beispiele

    website
    website
    app_550e8400e29b41d4a716446655440000
  • querycode_challengeErforderlich

    PKCE S256 code challenge.

    Schema refs

    string

    Beispiele

    example-code-challengexxxxxxxxxxxxxxxxxxxxx
  • querycode_challenge_methodErforderlich

    PKCE method. Plain is not allowed.

    Schema refs

    string

    Beispiele

    S256
  • querynonceOptional

    Required when scope includes openid; copied exactly into the signed ID token.

    Schema refs

    string

    Beispiele

    example-value
  • queryredirect_uriErforderlich

    Exact redirect URI registered for the client.

    Schema refs

    string

    Beispiele

    https://example.invalid/moddingflow-resource
  • queryresponse_typeErforderlich

    OAuth response type. Must be code.

    Schema refs

    string

    Beispiele

    code
  • queryscopeErforderlich

    Space-delimited scope request. Unknown or denied scopes fail closed.

    Schema refs

    string

    Beispiele

    mods:read
  • querystateErforderlich

    Opaque CSRF state returned to the client.

    Schema refs

    string

    Beispiele

    example-value

Responses

302Redirects back to the registered redirect URI with code and state, or with an OAuth error.
  • Location

    Registered redirect URI with query parameters.

    Schema refs

    string

    Beispiele

    https://client.example.invalid/callback?code=example-code&state=example-state
400Request syntax or query parameters are invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
401Authentication is missing, expired, or invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
403The token or public client lacks the required scope.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
429Rate limit exceeded.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
  • RateLimit-Limit

    Quota limit for the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    120
  • RateLimit-Remaining

    Remaining quota in the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    0
  • RateLimit-Reset

    Seconds until the active public API rate-limit bucket resets.

    Schema refs

    integer

    Beispiele

    60
  • Retry-After

    Seconds the client should wait before retrying a rate-limited request.

    Schema refs

    integer

    Beispiele

    60
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
500Unexpected server error.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
POST

Create a device authorization grant.

/oauth/device_authorization

Operation ID
createDeviceAuthorization
Path template
/oauth/device_authorization
Responses
200, 400, 401, 403, 429, 500
Scopes
Keine OAuth scopes
Request body
Body erforderlich

Operation/path servers

https://api.moddingflow.com

OAuth issuer namespace for Moddingflow public API clients.

Request body

application/x-www-form-urlencodedErforderlich

Schema refs

DeviceAuthorizationRequest

Beispiele

{"client_id":"website","client_secret":"example-value","scope":"mods:read files:download install_plans:resolve"}
website
app_550e8400e29b41d4a716446655440000
mods:read files:download install_plans:resolve

Responses

200Device authorization instructions.
application/json

Schema refs

DeviceAuthorizationResponse

Beispiele

{"device_code":"example-valuexxx","user_code":"example-value","verification_uri":"https://example.invalid/moddingflow-resource","verification_uri_complete":"https://example.invalid/moddingflow-resource","expires_in":60,"interval":5}
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"device_code":"example-valuexxx","user_code":"example-value","verification_uri":"https://example.invalid/moddingflow-resource","verification_uri_complete":"https://example.invalid/moddingflow-resource","expires_in":60,"interval":5}
400Request syntax or query parameters are invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
401Authentication is missing, expired, or invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
403The token or public client lacks the required scope.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
429Rate limit exceeded.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
  • RateLimit-Limit

    Quota limit for the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    120
  • RateLimit-Remaining

    Remaining quota in the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    0
  • RateLimit-Reset

    Seconds until the active public API rate-limit bucket resets.

    Schema refs

    integer

    Beispiele

    60
  • Retry-After

    Seconds the client should wait before retrying a rate-limited request.

    Schema refs

    integer

    Beispiele

    60
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
500Unexpected server error.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
POST

Introspect a token for trusted internal clients.

/oauth/introspect

Operation ID
introspectOAuthToken
Path template
/oauth/introspect
Responses
200, 400, 401, 403, 429, 500
Scopes
Keine OAuth scopes
Request body
Body erforderlich

Operation/path servers

https://api.moddingflow.com

OAuth issuer namespace for Moddingflow public API clients.

Request body

application/x-www-form-urlencodedErforderlich

Schema refs

OAuthIntrospectionRequest

Beispiele

{"token":"example-redacted-token","token_type_hint":"access_token"}

Responses

200Token introspection result.
application/json

Schema refs

OAuthIntrospectionResponse

Beispiele

{"active":true,"scope":"mods:read files:download install_plans:resolve","client_id":"website","sub":"example-value","aud":"example-value","iss":"https://example.invalid/moddingflow-resource","exp":1,"iat":1,"token_type":"example-redacted-token"}
mods:read files:download install_plans:resolve
website
app_550e8400e29b41d4a716446655440000
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"active":true,"scope":"mods:read files:download install_plans:resolve","client_id":"website","sub":"example-value","aud":"example-value","iss":"https://example.invalid/moddingflow-resource","exp":1,"iat":1,"token_type":"example-redacted-token"}
mods:read files:download install_plans:resolve
website
app_550e8400e29b41d4a716446655440000
400Request syntax or query parameters are invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
401Authentication is missing, expired, or invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
403The token or public client lacks the required scope.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
429Rate limit exceeded.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
  • RateLimit-Limit

    Quota limit for the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    120
  • RateLimit-Remaining

    Remaining quota in the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    0
  • RateLimit-Reset

    Seconds until the active public API rate-limit bucket resets.

    Schema refs

    integer

    Beispiele

    60
  • Retry-After

    Seconds the client should wait before retrying a rate-limited request.

    Schema refs

    integer

    Beispiele

    60
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
500Unexpected server error.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
POST

Revoke an OAuth token or PAT/API key.

/oauth/revoke

Operation ID
revokeOAuthToken
Path template
/oauth/revoke
Responses
200, 400, 401, 403, 429, 500
Scopes
Keine OAuth scopes
Request body
Body erforderlich

Operation/path servers

https://api.moddingflow.com

OAuth issuer namespace for Moddingflow public API clients.

Request body

application/x-www-form-urlencodedErforderlich

Schema refs

OAuthRevocationRequest

Beispiele

{"token":"example-redacted-token","token_type_hint":"access_token","client_id":"website","client_secret":"example-value"}
website
app_550e8400e29b41d4a716446655440000

Responses

200Token revoked or already inactive.
application/json

Schema refs

OAuthRevocationResponse

Beispiele

{"ok":true,"revoked":true}
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"ok":true,"revoked":true}
400Request syntax or query parameters are invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
401Authentication is missing, expired, or invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
403The token or public client lacks the required scope.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
429Rate limit exceeded.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
  • RateLimit-Limit

    Quota limit for the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    120
  • RateLimit-Remaining

    Remaining quota in the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    0
  • RateLimit-Reset

    Seconds until the active public API rate-limit bucket resets.

    Schema refs

    integer

    Beispiele

    60
  • Retry-After

    Seconds the client should wait before retrying a rate-limited request.

    Schema refs

    integer

    Beispiele

    60
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
500Unexpected server error.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
POST

Exchange authorization, device, or refresh grants for tokens.

/oauth/token

Operation ID
exchangeOAuthToken
Path template
/oauth/token
Responses
200, 400, 401, 403, 429, 500
Scopes
Keine OAuth scopes
Request body
Body erforderlich

Operation/path servers

https://api.moddingflow.com

OAuth issuer namespace for Moddingflow public API clients.

Request body

application/x-www-form-urlencodedErforderlich

Schema refs

OAuthTokenRequest

Beispiele

{"grant_type":"authorization_code","client_id":"website","client_secret":"example-value","code":"example-valuexxx","redirect_uri":"https://example.invalid/moddingflow-resource","code_verifier":"example-code-verifier-abcdefghijklmnopqrstuvwxyz0123456789"}

Responses

200Token response.
application/json

Schema refs

OAuthTokenResponse

Beispiele

{"access_token":"example-redacted-token","token_type":"Bearer","expires_in":60,"refresh_token":"example-redacted-token","scope":"mods:read files:download install_plans:resolve","id_token":"example-redacted-token","issued_token_type":"urn:ietf:params:oauth:token-type:access_token"}
mods:read files:download install_plans:resolve
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"access_token":"example-redacted-token","token_type":"Bearer","expires_in":60,"refresh_token":"example-redacted-token","scope":"mods:read files:download install_plans:resolve","id_token":"example-redacted-token","issued_token_type":"urn:ietf:params:oauth:token-type:access_token"}
mods:read files:download install_plans:resolve
400Request syntax or query parameters are invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
401Authentication is missing, expired, or invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
403The token or public client lacks the required scope.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
429Rate limit exceeded.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
  • RateLimit-Limit

    Quota limit for the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    120
  • RateLimit-Remaining

    Remaining quota in the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    0
  • RateLimit-Reset

    Seconds until the active public API rate-limit bucket resets.

    Schema refs

    integer

    Beispiele

    60
  • Retry-After

    Seconds the client should wait before retrying a rate-limited request.

    Schema refs

    integer

    Beispiele

    60
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
500Unexpected server error.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444

Catalog

GET

List catalog categories and facets.

/categories

Operation ID
listCatalogCategories
Path template
/categories
Responses
200, 304, 400, 401, 429, 500
Scopes
mods:read
Request body
Kein body

Parameter

  • headerIf-None-MatchOptional

    Revalidate an anonymous public catalog representation. A weak match returns 304 with no body; credential-bearing requests are private no-store and do not use the public validator.

    Schema refs

    string

    Beispiele

    W/"example-etag"
  • querygame_slugOptional

    Stable game slug filter. The website compatibility namespace also accepts game and gameSlug aliases.

    Schema refs

    Slug

    Beispiele

    example-value
  • querylangOptional

    Preferred label language for category and facet labels.

    Schema refs

    string

    Beispiele

    en

Request headers

  • If-None-Match

    Revalidate an anonymous public catalog representation. A weak match returns 304 with no body; credential-bearing requests are private no-store and do not use the public validator.

    Schema refs

    string

    Beispiele

    W/"example-etag"

Responses

200Catalog categories and facet values.
application/json

Schema refs

CatalogFacetListResponse

Beispiele

{"ok":true,"data":{"items":[{"facet":"example-value","value":"example-value","label":{"en":"example-value"},"game_id":"550e8400-e29b-41d4-a716-446655440000","game_slug":"example-value","count":0}],"label_language":"example-value"}}
  • Cache-Control

    Anonymous catalog responses may be retained but require origin revalidation on every reuse; credential-bearing responses are private no-store.

    Schema refs

    string
  • ETag

    Weak anonymous representation validator for If-None-Match, or a strong authenticated Mod/ModVersion write validator for If-Match. Do not interchange the two.

    Schema refs

    string
  • Vary

    Catalog cache-key dimensions that isolate anonymous responses from Authorization or Cookie requests.

    Schema refs

    string

    Beispiele

    Accept-Encoding, Authorization, Cookie
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"ok":true,"data":{"items":[{"facet":"example-value","value":"example-value","label":{"en":"example-value"},"game_id":"550e8400-e29b-41d4-a716-446655440000","game_slug":"example-value","count":0}],"label_language":"example-value"}}
304The anonymous public catalog representation matches If-None-Match. The response has no body.
  • Cache-Control

    Anonymous catalog responses may be retained but require origin revalidation on every reuse; credential-bearing responses are private no-store.

    Schema refs

    string
  • ETag

    Weak anonymous representation validator for If-None-Match, or a strong authenticated Mod/ModVersion write validator for If-Match. Do not interchange the two.

    Schema refs

    string
  • Vary

    Catalog cache-key dimensions that isolate anonymous responses from Authorization or Cookie requests.

    Schema refs

    string

    Beispiele

    Accept-Encoding, Authorization, Cookie
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string
400Request syntax or query parameters are invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
401Authentication is missing, expired, or invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
429Rate limit exceeded.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
  • RateLimit-Limit

    Quota limit for the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    120
  • RateLimit-Remaining

    Remaining quota in the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    0
  • RateLimit-Reset

    Seconds until the active public API rate-limit bucket resets.

    Schema refs

    integer

    Beispiele

    60
  • Retry-After

    Seconds the client should wait before retrying a rate-limited request.

    Schema refs

    integer

    Beispiele

    60
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
500Unexpected server error.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
GET

List supported games.

/games

Operation ID
listGames
Path template
/games
Responses
200, 304, 400, 401, 429, 500
Scopes
mods:read
Request body
Kein body

Parameter

  • headerIf-None-MatchOptional

    Revalidate an anonymous public catalog representation. A weak match returns 304 with no body; credential-bearing requests are private no-store and do not use the public validator.

    Schema refs

    string

    Beispiele

    W/"example-etag"

Request headers

  • If-None-Match

    Revalidate an anonymous public catalog representation. A weak match returns 304 with no body; credential-bearing requests are private no-store and do not use the public validator.

    Schema refs

    string

    Beispiele

    W/"example-etag"

Responses

200Enabled public catalog games.
application/json

Schema refs

GameListResponse

Beispiele

{"ok":true,"data":{"items":[{"id":"550e8400-e29b-41d4-a716-446655440000","slug":"example-value","title":{"en":"example-value"},"icon_path":"example-value","is_enabled":true,"sort_order":1,"created_at":"2026-07-11T10:30:00Z","updated_at":"2026-07-11T10:30:00Z"}]}}
  • Cache-Control

    Anonymous catalog responses may be retained but require origin revalidation on every reuse; credential-bearing responses are private no-store.

    Schema refs

    string
  • ETag

    Weak anonymous representation validator for If-None-Match, or a strong authenticated Mod/ModVersion write validator for If-Match. Do not interchange the two.

    Schema refs

    string
  • Vary

    Catalog cache-key dimensions that isolate anonymous responses from Authorization or Cookie requests.

    Schema refs

    string

    Beispiele

    Accept-Encoding, Authorization, Cookie
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"ok":true,"data":{"items":[{"id":"550e8400-e29b-41d4-a716-446655440000","slug":"example-value","title":{"en":"example-value"},"icon_path":"example-value","is_enabled":true,"sort_order":1,"created_at":"2026-07-11T10:30:00Z","updated_at":"2026-07-11T10:30:00Z"}]}}
304The anonymous public catalog representation matches If-None-Match. The response has no body.
  • Cache-Control

    Anonymous catalog responses may be retained but require origin revalidation on every reuse; credential-bearing responses are private no-store.

    Schema refs

    string
  • ETag

    Weak anonymous representation validator for If-None-Match, or a strong authenticated Mod/ModVersion write validator for If-Match. Do not interchange the two.

    Schema refs

    string
  • Vary

    Catalog cache-key dimensions that isolate anonymous responses from Authorization or Cookie requests.

    Schema refs

    string

    Beispiele

    Accept-Encoding, Authorization, Cookie
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string
400Request syntax or query parameters are invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
401Authentication is missing, expired, or invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
429Rate limit exceeded.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
  • RateLimit-Limit

    Quota limit for the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    120
  • RateLimit-Remaining

    Remaining quota in the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    0
  • RateLimit-Reset

    Seconds until the active public API rate-limit bucket resets.

    Schema refs

    integer

    Beispiele

    60
  • Retry-After

    Seconds the client should wait before retrying a rate-limited request.

    Schema refs

    integer

    Beispiele

    60
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
500Unexpected server error.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
GET

Get a supported game by slug.

/games/{game_slug}

Operation ID
getGame
Path template
/games/{game_slug}
Responses
200, 304, 400, 401, 404, 429, 500
Scopes
mods:read
Request body
Kein body

Parameter

  • headerIf-None-MatchOptional

    Revalidate an anonymous public catalog representation. A weak match returns 304 with no body; credential-bearing requests are private no-store and do not use the public validator.

    Schema refs

    string

    Beispiele

    W/"example-etag"
  • pathgame_slugErforderlich

    Stable game slug.

    Schema refs

    Slug

    Beispiele

    example-value

Request headers

  • If-None-Match

    Revalidate an anonymous public catalog representation. A weak match returns 304 with no body; credential-bearing requests are private no-store and do not use the public validator.

    Schema refs

    string

    Beispiele

    W/"example-etag"

Responses

200The requested public catalog game.
application/json

Schema refs

GameResponse

Beispiele

{"ok":true,"data":{"id":"550e8400-e29b-41d4-a716-446655440000","slug":"example-value","title":{"en":"example-value"},"icon_path":"example-value","is_enabled":true,"sort_order":1,"created_at":"2026-07-11T10:30:00Z","updated_at":"2026-07-11T10:30:00Z"}}
  • Cache-Control

    Anonymous catalog responses may be retained but require origin revalidation on every reuse; credential-bearing responses are private no-store.

    Schema refs

    string
  • ETag

    Weak anonymous representation validator for If-None-Match, or a strong authenticated Mod/ModVersion write validator for If-Match. Do not interchange the two.

    Schema refs

    string
  • Vary

    Catalog cache-key dimensions that isolate anonymous responses from Authorization or Cookie requests.

    Schema refs

    string

    Beispiele

    Accept-Encoding, Authorization, Cookie
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"ok":true,"data":{"id":"550e8400-e29b-41d4-a716-446655440000","slug":"example-value","title":{"en":"example-value"},"icon_path":"example-value","is_enabled":true,"sort_order":1,"created_at":"2026-07-11T10:30:00Z","updated_at":"2026-07-11T10:30:00Z"}}
304The anonymous public catalog representation matches If-None-Match. The response has no body.
  • Cache-Control

    Anonymous catalog responses may be retained but require origin revalidation on every reuse; credential-bearing responses are private no-store.

    Schema refs

    string
  • ETag

    Weak anonymous representation validator for If-None-Match, or a strong authenticated Mod/ModVersion write validator for If-Match. Do not interchange the two.

    Schema refs

    string
  • Vary

    Catalog cache-key dimensions that isolate anonymous responses from Authorization or Cookie requests.

    Schema refs

    string

    Beispiele

    Accept-Encoding, Authorization, Cookie
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string
400Request syntax or query parameters are invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
401Authentication is missing, expired, or invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
404The requested public resource was not found or is not visible.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/not_found","title":"Resource not found","status":404,"detail":"The requested public resource was not found.","instance":"urn:moddingflow:request:req_01JZ7Q43P31JSQQF7W3R24H0ED","ok":false,"code":"not_found","machine_code":"not_found","http_status":404,"request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED","retryable":false,"docs_slug":"errors.not_found","error":{"machine_code":"not_found","http_status":404,"message":"The requested public resource was not found.","request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/not_found","title":"Resource not found","status":404,"detail":"The requested public resource was not found.","instance":"urn:moddingflow:request:req_01JZ7Q43P31JSQQF7W3R24H0ED","ok":false,"code":"not_found","machine_code":"not_found","http_status":404,"request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED","retryable":false,"docs_slug":"errors.not_found","error":{"machine_code":"not_found","http_status":404,"message":"The requested public resource was not found.","request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED"}}
44444444-4444-4444-8444-444444444444
429Rate limit exceeded.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
  • RateLimit-Limit

    Quota limit for the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    120
  • RateLimit-Remaining

    Remaining quota in the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    0
  • RateLimit-Reset

    Seconds until the active public API rate-limit bucket resets.

    Schema refs

    integer

    Beispiele

    60
  • Retry-After

    Seconds the client should wait before retrying a rate-limited request.

    Schema refs

    integer

    Beispiele

    60
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
500Unexpected server error.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
GET

List public mods.

/mods

Operation ID
listMods
Path template
/mods
Responses
200, 304, 400, 401, 429, 500
Scopes
mods:read
Request body
Kein body

Parameter

  • headerIf-None-MatchOptional

    Revalidate an anonymous public catalog representation. A weak match returns 304 with no body; credential-bearing requests are private no-store and do not use the public validator.

    Schema refs

    string

    Beispiele

    W/"example-etag"
  • querycategoryOptional

    Catalog category slug filter.

    Schema refs

    Slug

    Beispiele

    example-value
  • querycursorOptional

    Opaque v1. keyset pagination cursor returned by the previous page. Treat it as an unparsed base64url token and echo it back only for the same resource, normalized filters, and sort. Incompatible or malformed reuse returns 400 invalid_input; rows inserted after page one stay outside the cursor snapshot.

    Schema refs

    string

    Beispiele

    v1.example-opaque-cursor
  • querygame_slugOptional

    Stable game slug filter. The website compatibility namespace also accepts game and gameSlug aliases.

    Schema refs

    Slug

    Beispiele

    example-value
  • querygame_versionOptional

    Game version facet filter such as 1.6.1170. The website compatibility namespace also accepts gameVersion and version aliases.

    Schema refs

    string

    Beispiele

    1.6.1170
  • querylimitOptional

    Page size. The maximum public API page size is 100.

    Schema refs

    integer

    Beispiele

    25
  • queryloaderOptional

    Loader/platform facet filter such as skse, fabric, forge, or a game-specific loader key.

    Schema refs

    string

    Beispiele

    example-value
  • queryqOptional

    Optional catalog search text.

    Schema refs

    string

    Beispiele

    sky ui
  • querysortOptional

    Catalog ordering mode.

    Schema refs

    string

    Beispiele

    relevance

Request headers

  • If-None-Match

    Revalidate an anonymous public catalog representation. A weak match returns 304 with no body; credential-bearing requests are private no-store and do not use the public validator.

    Schema refs

    string

    Beispiele

    W/"example-etag"

Responses

200A stable cursor page of public mods.
application/json

Schema refs

ModListResponse

Beispiele

{"ok":true,"data":{"items":[{"id":"22222222-2222-4222-8222-222222222222","game_id":"550e8400-e29b-41d4-a716-446655440000","slug":"example-value","localized_slugs":{},"game_slug":"example-value","title":{"en":"example-value"},"summary":{"en":"example-value"},"description":{"en":"example-value"},"latest_version":"example-value","visibility":"public","access_tier":"public","is_nsfw":true,"updated_at":"2026-07-11T10:30:00Z"}],"pagination":{"limit":1,"next_cursor":"v1.example-opaque-cursor","order":"example-value"}}}
  • Cache-Control

    Anonymous catalog responses may be retained but require origin revalidation on every reuse; credential-bearing responses are private no-store.

    Schema refs

    string
  • ETag

    Weak anonymous representation validator for If-None-Match, or a strong authenticated Mod/ModVersion write validator for If-Match. Do not interchange the two.

    Schema refs

    string
  • Vary

    Catalog cache-key dimensions that isolate anonymous responses from Authorization or Cookie requests.

    Schema refs

    string

    Beispiele

    Accept-Encoding, Authorization, Cookie
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"ok":true,"data":{"items":[{"id":"22222222-2222-4222-8222-222222222222","game_id":"550e8400-e29b-41d4-a716-446655440000","slug":"example-value","localized_slugs":{},"game_slug":"example-value","title":{"en":"example-value"},"summary":{"en":"example-value"},"description":{"en":"example-value"},"latest_version":"example-value","visibility":"public","access_tier":"public","is_nsfw":true,"updated_at":"2026-07-11T10:30:00Z"}],"pagination":{"limit":1,"next_cursor":"v1.example-opaque-cursor","order":"example-value"}}}
304The anonymous public catalog representation matches If-None-Match. The response has no body.
  • Cache-Control

    Anonymous catalog responses may be retained but require origin revalidation on every reuse; credential-bearing responses are private no-store.

    Schema refs

    string
  • ETag

    Weak anonymous representation validator for If-None-Match, or a strong authenticated Mod/ModVersion write validator for If-Match. Do not interchange the two.

    Schema refs

    string
  • Vary

    Catalog cache-key dimensions that isolate anonymous responses from Authorization or Cookie requests.

    Schema refs

    string

    Beispiele

    Accept-Encoding, Authorization, Cookie
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string
400Request syntax or query parameters are invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
401Authentication is missing, expired, or invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
429Rate limit exceeded.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
  • RateLimit-Limit

    Quota limit for the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    120
  • RateLimit-Remaining

    Remaining quota in the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    0
  • RateLimit-Reset

    Seconds until the active public API rate-limit bucket resets.

    Schema refs

    integer

    Beispiele

    60
  • Retry-After

    Seconds the client should wait before retrying a rate-limited request.

    Schema refs

    integer

    Beispiele

    60
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
500Unexpected server error.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
GET

Get a public mod by stable id or slug.

/mods/{mod_id}

Operation ID
getMod
Path template
/mods/{mod_id}
Responses
200, 304, 400, 401, 404, 429, 500
Scopes
mods:read
Request body
Kein body

Parameter

  • headerIf-None-MatchOptional

    Revalidate an anonymous public catalog representation. A weak match returns 304 with no body; credential-bearing requests are private no-store and do not use the public validator.

    Schema refs

    string

    Beispiele

    W/"example-etag"
  • pathmod_idErforderlich

    Stable public mod UUID or canonical public slug for direct catalog lookup.

    Schema refs

    ModIdSlug

    Beispiele

    22222222-2222-4222-8222-222222222222

Request headers

  • If-None-Match

    Revalidate an anonymous public catalog representation. A weak match returns 304 with no body; credential-bearing requests are private no-store and do not use the public validator.

    Schema refs

    string

    Beispiele

    W/"example-etag"

Responses

200The requested public mod.
application/json

Schema refs

ModResponse

Beispiele

{"ok":true,"data":{"id":"22222222-2222-4222-8222-222222222222","game_id":"550e8400-e29b-41d4-a716-446655440000","slug":"example-value","localized_slugs":{},"game_slug":"example-value","title":{"en":"example-value"},"summary":{"en":"example-value"},"description":{"en":"example-value"},"latest_version":"example-value","visibility":"public","access_tier":"public","is_nsfw":true,"updated_at":"2026-07-11T10:30:00Z"}}
22222222-2222-4222-8222-222222222222
  • Cache-Control

    Anonymous catalog responses may be retained but require origin revalidation on every reuse; credential-bearing responses are private no-store.

    Schema refs

    string
  • ETag

    Weak anonymous representation validator for If-None-Match, or a strong authenticated Mod/ModVersion write validator for If-Match. Do not interchange the two.

    Schema refs

    string
  • Vary

    Catalog cache-key dimensions that isolate anonymous responses from Authorization or Cookie requests.

    Schema refs

    string

    Beispiele

    Accept-Encoding, Authorization, Cookie
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"ok":true,"data":{"id":"22222222-2222-4222-8222-222222222222","game_id":"550e8400-e29b-41d4-a716-446655440000","slug":"example-value","localized_slugs":{},"game_slug":"example-value","title":{"en":"example-value"},"summary":{"en":"example-value"},"description":{"en":"example-value"},"latest_version":"example-value","visibility":"public","access_tier":"public","is_nsfw":true,"updated_at":"2026-07-11T10:30:00Z"}}
22222222-2222-4222-8222-222222222222
304The anonymous public catalog representation matches If-None-Match. The response has no body.
  • Cache-Control

    Anonymous catalog responses may be retained but require origin revalidation on every reuse; credential-bearing responses are private no-store.

    Schema refs

    string
  • ETag

    Weak anonymous representation validator for If-None-Match, or a strong authenticated Mod/ModVersion write validator for If-Match. Do not interchange the two.

    Schema refs

    string
  • Vary

    Catalog cache-key dimensions that isolate anonymous responses from Authorization or Cookie requests.

    Schema refs

    string

    Beispiele

    Accept-Encoding, Authorization, Cookie
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string
400Request syntax or query parameters are invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
401Authentication is missing, expired, or invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
404The requested public resource was not found or is not visible.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/not_found","title":"Resource not found","status":404,"detail":"The requested public resource was not found.","instance":"urn:moddingflow:request:req_01JZ7Q43P31JSQQF7W3R24H0ED","ok":false,"code":"not_found","machine_code":"not_found","http_status":404,"request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED","retryable":false,"docs_slug":"errors.not_found","error":{"machine_code":"not_found","http_status":404,"message":"The requested public resource was not found.","request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/not_found","title":"Resource not found","status":404,"detail":"The requested public resource was not found.","instance":"urn:moddingflow:request:req_01JZ7Q43P31JSQQF7W3R24H0ED","ok":false,"code":"not_found","machine_code":"not_found","http_status":404,"request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED","retryable":false,"docs_slug":"errors.not_found","error":{"machine_code":"not_found","http_status":404,"message":"The requested public resource was not found.","request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED"}}
44444444-4444-4444-8444-444444444444
429Rate limit exceeded.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
  • RateLimit-Limit

    Quota limit for the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    120
  • RateLimit-Remaining

    Remaining quota in the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    0
  • RateLimit-Reset

    Seconds until the active public API rate-limit bucket resets.

    Schema refs

    integer

    Beispiele

    60
  • Retry-After

    Seconds the client should wait before retrying a rate-limited request.

    Schema refs

    integer

    Beispiele

    60
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
500Unexpected server error.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
GET

List public dependencies for a mod.

/mods/{mod_id}/dependencies

Operation ID
listModDependencies
Path template
/mods/{mod_id}/dependencies
Responses
200, 304, 400, 401, 404, 429, 500
Scopes
mods:read
Request body
Kein body

Parameter

  • headerIf-None-MatchOptional

    Revalidate an anonymous public catalog representation. A weak match returns 304 with no body; credential-bearing requests are private no-store and do not use the public validator.

    Schema refs

    string

    Beispiele

    W/"example-etag"
  • pathmod_idErforderlich

    Stable public mod UUID.

    Schema refs

    ModId

    Beispiele

    22222222-2222-4222-8222-222222222222

Request headers

  • If-None-Match

    Revalidate an anonymous public catalog representation. A weak match returns 304 with no body; credential-bearing requests are private no-store and do not use the public validator.

    Schema refs

    string

    Beispiele

    W/"example-etag"

Responses

200Public dependencies for the requested mod.
application/json

Schema refs

ModDependencyListResponse

Beispiele

{"ok":true,"data":{"items":[{"id":"550e8400-e29b-41d4-a716-446655440000","mod_id":"22222222-2222-4222-8222-222222222222","target_mod_id":"22222222-2222-4222-8222-222222222222","dependency_kind":"required_mod","dependency_semantic":"required","label":"example-value","url":"https://example.invalid/moddingflow-resource","note":"example-value","relation":"example-value","sort_order":1,"created_at":"2026-07-11T10:30:00Z"}]}}
  • Cache-Control

    Anonymous catalog responses may be retained but require origin revalidation on every reuse; credential-bearing responses are private no-store.

    Schema refs

    string
  • ETag

    Weak anonymous representation validator for If-None-Match, or a strong authenticated Mod/ModVersion write validator for If-Match. Do not interchange the two.

    Schema refs

    string
  • Vary

    Catalog cache-key dimensions that isolate anonymous responses from Authorization or Cookie requests.

    Schema refs

    string

    Beispiele

    Accept-Encoding, Authorization, Cookie
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"ok":true,"data":{"items":[{"id":"550e8400-e29b-41d4-a716-446655440000","mod_id":"22222222-2222-4222-8222-222222222222","target_mod_id":"22222222-2222-4222-8222-222222222222","dependency_kind":"required_mod","dependency_semantic":"required","label":"example-value","url":"https://example.invalid/moddingflow-resource","note":"example-value","relation":"example-value","sort_order":1,"created_at":"2026-07-11T10:30:00Z"}]}}
304The anonymous public catalog representation matches If-None-Match. The response has no body.
  • Cache-Control

    Anonymous catalog responses may be retained but require origin revalidation on every reuse; credential-bearing responses are private no-store.

    Schema refs

    string
  • ETag

    Weak anonymous representation validator for If-None-Match, or a strong authenticated Mod/ModVersion write validator for If-Match. Do not interchange the two.

    Schema refs

    string
  • Vary

    Catalog cache-key dimensions that isolate anonymous responses from Authorization or Cookie requests.

    Schema refs

    string

    Beispiele

    Accept-Encoding, Authorization, Cookie
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string
400Request syntax or query parameters are invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
401Authentication is missing, expired, or invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
404The requested public resource was not found or is not visible.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/not_found","title":"Resource not found","status":404,"detail":"The requested public resource was not found.","instance":"urn:moddingflow:request:req_01JZ7Q43P31JSQQF7W3R24H0ED","ok":false,"code":"not_found","machine_code":"not_found","http_status":404,"request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED","retryable":false,"docs_slug":"errors.not_found","error":{"machine_code":"not_found","http_status":404,"message":"The requested public resource was not found.","request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/not_found","title":"Resource not found","status":404,"detail":"The requested public resource was not found.","instance":"urn:moddingflow:request:req_01JZ7Q43P31JSQQF7W3R24H0ED","ok":false,"code":"not_found","machine_code":"not_found","http_status":404,"request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED","retryable":false,"docs_slug":"errors.not_found","error":{"machine_code":"not_found","http_status":404,"message":"The requested public resource was not found.","request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED"}}
44444444-4444-4444-8444-444444444444
429Rate limit exceeded.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
  • RateLimit-Limit

    Quota limit for the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    120
  • RateLimit-Remaining

    Remaining quota in the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    0
  • RateLimit-Reset

    Seconds until the active public API rate-limit bucket resets.

    Schema refs

    integer

    Beispiele

    60
  • Retry-After

    Seconds the client should wait before retrying a rate-limited request.

    Schema refs

    integer

    Beispiele

    60
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
500Unexpected server error.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
GET

List public versions for a mod.

/mods/{mod_id}/versions

Operation ID
listModVersions
Path template
/mods/{mod_id}/versions
Responses
200, 304, 400, 401, 404, 429, 500
Scopes
mods:read
Request body
Kein body

Parameter

  • headerIf-None-MatchOptional

    Revalidate an anonymous public catalog representation. A weak match returns 304 with no body; credential-bearing requests are private no-store and do not use the public validator.

    Schema refs

    string

    Beispiele

    W/"example-etag"
  • pathmod_idErforderlich

    Stable public mod UUID.

    Schema refs

    ModId

    Beispiele

    22222222-2222-4222-8222-222222222222
  • querycursorOptional

    Opaque v1. keyset pagination cursor returned by the previous page. Treat it as an unparsed base64url token and echo it back only for the same resource, normalized filters, and sort. Incompatible or malformed reuse returns 400 invalid_input; rows inserted after page one stay outside the cursor snapshot.

    Schema refs

    string

    Beispiele

    v1.example-opaque-cursor
  • querylimitOptional

    Page size. The maximum public API page size is 100.

    Schema refs

    integer

    Beispiele

    25

Request headers

  • If-None-Match

    Revalidate an anonymous public catalog representation. A weak match returns 304 with no body; credential-bearing requests are private no-store and do not use the public validator.

    Schema refs

    string

    Beispiele

    W/"example-etag"

Responses

200A stable cursor page of public mod versions.
application/json

Schema refs

ModVersionListResponse

Beispiele

{"ok":true,"data":{"items":[{"id":"33333333-3333-4333-8333-333333333333","mod_id":"22222222-2222-4222-8222-222222222222","primary_artifact_id":"44444444-4444-4444-8444-444444444444","version":"1.6.1170","semantic_version":"example-value","release_channel":"stable","game_versions":["1.6.1170"],"loaders":["example-value"],"artifact_ids":["44444444-4444-4444-8444-444444444444"],"artifacts":[{"id":"44444444-4444-4444-8444-444444444444","mod_id":"22222222-2222-4222-8222-222222222222","version_id":"33333333-3333-4333-8333-333333333333","file_kind":"main","label":"Main archive","original_filename":"mod-1.0.0.zip","content_type":"application/zip","game_version_key":"1.6.1170","loader_key":null,"size_bytes":1048576,"sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","hashes":{"sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},"artifact_source":"r2_blob","status":"published","scan_status":"clean","download_metadata":{"resolve_endpoint":"/v1/downloads/44444444-4444-4444-8444-444444444444/resolve","range_supported":true}}],"has_immutable_artifact_binding":true,"changelog":[{"version":"1.6.1170","body_md":"example-value","released_at":"2026-07-11T10:30:00Z"}],"published_at":"2026-07-11T10:30:00Z"}],"pagination":{"limit":1,"next_cursor":"v1.example-opaque-cursor","order":"example-value"}}}
  • Cache-Control

    Anonymous catalog responses may be retained but require origin revalidation on every reuse; credential-bearing responses are private no-store.

    Schema refs

    string
  • ETag

    Weak anonymous representation validator for If-None-Match, or a strong authenticated Mod/ModVersion write validator for If-Match. Do not interchange the two.

    Schema refs

    string
  • Vary

    Catalog cache-key dimensions that isolate anonymous responses from Authorization or Cookie requests.

    Schema refs

    string

    Beispiele

    Accept-Encoding, Authorization, Cookie
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"ok":true,"data":{"items":[{"id":"33333333-3333-4333-8333-333333333333","mod_id":"22222222-2222-4222-8222-222222222222","primary_artifact_id":"44444444-4444-4444-8444-444444444444","version":"1.6.1170","semantic_version":"example-value","release_channel":"stable","game_versions":["1.6.1170"],"loaders":["example-value"],"artifact_ids":["44444444-4444-4444-8444-444444444444"],"artifacts":[{"id":"44444444-4444-4444-8444-444444444444","mod_id":"22222222-2222-4222-8222-222222222222","version_id":"33333333-3333-4333-8333-333333333333","file_kind":"main","label":"Main archive","original_filename":"mod-1.0.0.zip","content_type":"application/zip","game_version_key":"1.6.1170","loader_key":null,"size_bytes":1048576,"sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","hashes":{"sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},"artifact_source":"r2_blob","status":"published","scan_status":"clean","download_metadata":{"resolve_endpoint":"/v1/downloads/44444444-4444-4444-8444-444444444444/resolve","range_supported":true}}],"has_immutable_artifact_binding":true,"changelog":[{"version":"1.6.1170","body_md":"example-value","released_at":"2026-07-11T10:30:00Z"}],"published_at":"2026-07-11T10:30:00Z"}],"pagination":{"limit":1,"next_cursor":"v1.example-opaque-cursor","order":"example-value"}}}
304The anonymous public catalog representation matches If-None-Match. The response has no body.
  • Cache-Control

    Anonymous catalog responses may be retained but require origin revalidation on every reuse; credential-bearing responses are private no-store.

    Schema refs

    string
  • ETag

    Weak anonymous representation validator for If-None-Match, or a strong authenticated Mod/ModVersion write validator for If-Match. Do not interchange the two.

    Schema refs

    string
  • Vary

    Catalog cache-key dimensions that isolate anonymous responses from Authorization or Cookie requests.

    Schema refs

    string

    Beispiele

    Accept-Encoding, Authorization, Cookie
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string
400Request syntax or query parameters are invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
401Authentication is missing, expired, or invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
404The requested public resource was not found or is not visible.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/not_found","title":"Resource not found","status":404,"detail":"The requested public resource was not found.","instance":"urn:moddingflow:request:req_01JZ7Q43P31JSQQF7W3R24H0ED","ok":false,"code":"not_found","machine_code":"not_found","http_status":404,"request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED","retryable":false,"docs_slug":"errors.not_found","error":{"machine_code":"not_found","http_status":404,"message":"The requested public resource was not found.","request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/not_found","title":"Resource not found","status":404,"detail":"The requested public resource was not found.","instance":"urn:moddingflow:request:req_01JZ7Q43P31JSQQF7W3R24H0ED","ok":false,"code":"not_found","machine_code":"not_found","http_status":404,"request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED","retryable":false,"docs_slug":"errors.not_found","error":{"machine_code":"not_found","http_status":404,"message":"The requested public resource was not found.","request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED"}}
44444444-4444-4444-8444-444444444444
429Rate limit exceeded.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
  • RateLimit-Limit

    Quota limit for the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    120
  • RateLimit-Remaining

    Remaining quota in the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    0
  • RateLimit-Reset

    Seconds until the active public API rate-limit bucket resets.

    Schema refs

    integer

    Beispiele

    60
  • Retry-After

    Seconds the client should wait before retrying a rate-limited request.

    Schema refs

    integer

    Beispiele

    60
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
500Unexpected server error.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
GET

Get one public version for a mod.

/mods/{mod_id}/versions/{version_id}

Operation ID
getModVersion
Path template
/mods/{mod_id}/versions/{version_id}
Responses
200, 304, 400, 401, 404, 429, 500
Scopes
mods:read
Request body
Kein body

Parameter

  • headerIf-None-MatchOptional

    Revalidate an anonymous public catalog representation. A weak match returns 304 with no body; credential-bearing requests are private no-store and do not use the public validator.

    Schema refs

    string

    Beispiele

    W/"example-etag"
  • pathmod_idErforderlich

    Stable public mod UUID.

    Schema refs

    ModId

    Beispiele

    22222222-2222-4222-8222-222222222222
  • pathversion_idErforderlich

    Stable public mod-version UUID.

    Schema refs

    VersionId

    Beispiele

    33333333-3333-4333-8333-333333333333

Request headers

  • If-None-Match

    Revalidate an anonymous public catalog representation. A weak match returns 304 with no body; credential-bearing requests are private no-store and do not use the public validator.

    Schema refs

    string

    Beispiele

    W/"example-etag"

Responses

200The requested public mod version.
application/json

Schema refs

ModVersionResponse

Beispiele

{"ok":true,"data":{"id":"33333333-3333-4333-8333-333333333333","mod_id":"22222222-2222-4222-8222-222222222222","primary_artifact_id":"44444444-4444-4444-8444-444444444444","version":"1.6.1170","semantic_version":"example-value","release_channel":"stable","game_versions":["1.6.1170"],"loaders":["example-value"],"artifact_ids":["44444444-4444-4444-8444-444444444444"],"artifacts":[{"id":"44444444-4444-4444-8444-444444444444","mod_id":"22222222-2222-4222-8222-222222222222","version_id":"33333333-3333-4333-8333-333333333333","file_kind":"main","label":"Main archive","original_filename":"mod-1.0.0.zip","content_type":"application/zip","game_version_key":"1.6.1170","loader_key":null,"size_bytes":1048576,"sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","hashes":{"sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},"artifact_source":"r2_blob","status":"published","scan_status":"clean","download_metadata":{"resolve_endpoint":"/v1/downloads/44444444-4444-4444-8444-444444444444/resolve","range_supported":true}}],"has_immutable_artifact_binding":true,"changelog":[{"version":"1.6.1170","body_md":"example-value","released_at":"2026-07-11T10:30:00Z"}],"published_at":"2026-07-11T10:30:00Z"}}
33333333-3333-4333-8333-333333333333
22222222-2222-4222-8222-222222222222
44444444-4444-4444-8444-444444444444
[{"id":"44444444-4444-4444-8444-444444444444","mod_id":"22222222-2222-4222-8222-222222222222","version_id":"33333333-3333-4333-8333-333333333333","file_kind":"main","label":"Main archive","original_filename":"mod-1.0.0.zip","content_type":"application/zip","game_version_key":"1.6.1170","loader_key":null,"size_bytes":1048576,"sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","hashes":{"sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},"artifact_source":"r2_blob","status":"published","scan_status":"clean","download_metadata":{"resolve_endpoint":"/v1/downloads/44444444-4444-4444-8444-444444444444/resolve","range_supported":true}}]
  • Cache-Control

    Anonymous catalog responses may be retained but require origin revalidation on every reuse; credential-bearing responses are private no-store.

    Schema refs

    string
  • ETag

    Weak anonymous representation validator for If-None-Match, or a strong authenticated Mod/ModVersion write validator for If-Match. Do not interchange the two.

    Schema refs

    string
  • Vary

    Catalog cache-key dimensions that isolate anonymous responses from Authorization or Cookie requests.

    Schema refs

    string

    Beispiele

    Accept-Encoding, Authorization, Cookie
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"ok":true,"data":{"id":"33333333-3333-4333-8333-333333333333","mod_id":"22222222-2222-4222-8222-222222222222","primary_artifact_id":"44444444-4444-4444-8444-444444444444","version":"1.6.1170","semantic_version":"example-value","release_channel":"stable","game_versions":["1.6.1170"],"loaders":["example-value"],"artifact_ids":["44444444-4444-4444-8444-444444444444"],"artifacts":[{"id":"44444444-4444-4444-8444-444444444444","mod_id":"22222222-2222-4222-8222-222222222222","version_id":"33333333-3333-4333-8333-333333333333","file_kind":"main","label":"Main archive","original_filename":"mod-1.0.0.zip","content_type":"application/zip","game_version_key":"1.6.1170","loader_key":null,"size_bytes":1048576,"sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","hashes":{"sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},"artifact_source":"r2_blob","status":"published","scan_status":"clean","download_metadata":{"resolve_endpoint":"/v1/downloads/44444444-4444-4444-8444-444444444444/resolve","range_supported":true}}],"has_immutable_artifact_binding":true,"changelog":[{"version":"1.6.1170","body_md":"example-value","released_at":"2026-07-11T10:30:00Z"}],"published_at":"2026-07-11T10:30:00Z"}}
33333333-3333-4333-8333-333333333333
22222222-2222-4222-8222-222222222222
44444444-4444-4444-8444-444444444444
[{"id":"44444444-4444-4444-8444-444444444444","mod_id":"22222222-2222-4222-8222-222222222222","version_id":"33333333-3333-4333-8333-333333333333","file_kind":"main","label":"Main archive","original_filename":"mod-1.0.0.zip","content_type":"application/zip","game_version_key":"1.6.1170","loader_key":null,"size_bytes":1048576,"sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","hashes":{"sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},"artifact_source":"r2_blob","status":"published","scan_status":"clean","download_metadata":{"resolve_endpoint":"/v1/downloads/44444444-4444-4444-8444-444444444444/resolve","range_supported":true}}]
304The anonymous public catalog representation matches If-None-Match. The response has no body.
  • Cache-Control

    Anonymous catalog responses may be retained but require origin revalidation on every reuse; credential-bearing responses are private no-store.

    Schema refs

    string
  • ETag

    Weak anonymous representation validator for If-None-Match, or a strong authenticated Mod/ModVersion write validator for If-Match. Do not interchange the two.

    Schema refs

    string
  • Vary

    Catalog cache-key dimensions that isolate anonymous responses from Authorization or Cookie requests.

    Schema refs

    string

    Beispiele

    Accept-Encoding, Authorization, Cookie
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string
400Request syntax or query parameters are invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
401Authentication is missing, expired, or invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
404The requested public resource was not found or is not visible.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/not_found","title":"Resource not found","status":404,"detail":"The requested public resource was not found.","instance":"urn:moddingflow:request:req_01JZ7Q43P31JSQQF7W3R24H0ED","ok":false,"code":"not_found","machine_code":"not_found","http_status":404,"request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED","retryable":false,"docs_slug":"errors.not_found","error":{"machine_code":"not_found","http_status":404,"message":"The requested public resource was not found.","request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/not_found","title":"Resource not found","status":404,"detail":"The requested public resource was not found.","instance":"urn:moddingflow:request:req_01JZ7Q43P31JSQQF7W3R24H0ED","ok":false,"code":"not_found","machine_code":"not_found","http_status":404,"request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED","retryable":false,"docs_slug":"errors.not_found","error":{"machine_code":"not_found","http_status":404,"message":"The requested public resource was not found.","request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED"}}
44444444-4444-4444-8444-444444444444
429Rate limit exceeded.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
  • RateLimit-Limit

    Quota limit for the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    120
  • RateLimit-Remaining

    Remaining quota in the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    0
  • RateLimit-Reset

    Seconds until the active public API rate-limit bucket resets.

    Schema refs

    integer

    Beispiele

    60
  • Retry-After

    Seconds the client should wait before retrying a rate-limited request.

    Schema refs

    integer

    Beispiele

    60
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
500Unexpected server error.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
GET

Search the public catalog.

/search

Operation ID
searchCatalog
Path template
/search
Responses
200, 304, 400, 401, 429, 500
Scopes
mods:read
Request body
Kein body

Parameter

  • headerIf-None-MatchOptional

    Revalidate an anonymous public catalog representation. A weak match returns 304 with no body; credential-bearing requests are private no-store and do not use the public validator.

    Schema refs

    string

    Beispiele

    W/"example-etag"
  • querycategoryOptional

    Catalog category slug filter.

    Schema refs

    Slug

    Beispiele

    example-value
  • querycursorOptional

    Opaque v1. keyset pagination cursor returned by the previous page. Treat it as an unparsed base64url token and echo it back only for the same resource, normalized filters, and sort. Incompatible or malformed reuse returns 400 invalid_input; rows inserted after page one stay outside the cursor snapshot.

    Schema refs

    string

    Beispiele

    v1.example-opaque-cursor
  • querygame_slugOptional

    Stable game slug filter. The website compatibility namespace also accepts game and gameSlug aliases.

    Schema refs

    Slug

    Beispiele

    example-value
  • querygame_versionOptional

    Game version facet filter such as 1.6.1170. The website compatibility namespace also accepts gameVersion and version aliases.

    Schema refs

    string

    Beispiele

    1.6.1170
  • querylimitOptional

    Page size. The maximum public API page size is 100.

    Schema refs

    integer

    Beispiele

    25
  • queryloaderOptional

    Loader/platform facet filter such as skse, fabric, forge, or a game-specific loader key.

    Schema refs

    string

    Beispiele

    example-value
  • queryqErforderlich

    Catalog search text.

    Schema refs

    string

    Beispiele

    sky ui
  • querysortOptional

    Catalog ordering mode.

    Schema refs

    string

    Beispiele

    relevance

Request headers

  • If-None-Match

    Revalidate an anonymous public catalog representation. A weak match returns 304 with no body; credential-bearing requests are private no-store and do not use the public validator.

    Schema refs

    string

    Beispiele

    W/"example-etag"

Responses

200A relevance-ordered cursor page of public mods.
application/json

Schema refs

CatalogSearchResponse

Beispiele

{"ok":true,"data":{"items":[{"id":"22222222-2222-4222-8222-222222222222","game_id":"550e8400-e29b-41d4-a716-446655440000","slug":"example-value","localized_slugs":{},"game_slug":"example-value","title":{"en":"example-value"},"summary":{"en":"example-value"},"description":{"en":"example-value"},"latest_version":"example-value","visibility":"public","access_tier":"public","is_nsfw":true,"updated_at":"2026-07-11T10:30:00Z"}],"pagination":{"limit":1,"next_cursor":"v1.example-opaque-cursor","order":"example-value"}}}
  • Cache-Control

    Anonymous catalog responses may be retained but require origin revalidation on every reuse; credential-bearing responses are private no-store.

    Schema refs

    string
  • ETag

    Weak anonymous representation validator for If-None-Match, or a strong authenticated Mod/ModVersion write validator for If-Match. Do not interchange the two.

    Schema refs

    string
  • Vary

    Catalog cache-key dimensions that isolate anonymous responses from Authorization or Cookie requests.

    Schema refs

    string

    Beispiele

    Accept-Encoding, Authorization, Cookie
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"ok":true,"data":{"items":[{"id":"22222222-2222-4222-8222-222222222222","game_id":"550e8400-e29b-41d4-a716-446655440000","slug":"example-value","localized_slugs":{},"game_slug":"example-value","title":{"en":"example-value"},"summary":{"en":"example-value"},"description":{"en":"example-value"},"latest_version":"example-value","visibility":"public","access_tier":"public","is_nsfw":true,"updated_at":"2026-07-11T10:30:00Z"}],"pagination":{"limit":1,"next_cursor":"v1.example-opaque-cursor","order":"example-value"}}}
304The anonymous public catalog representation matches If-None-Match. The response has no body.
  • Cache-Control

    Anonymous catalog responses may be retained but require origin revalidation on every reuse; credential-bearing responses are private no-store.

    Schema refs

    string
  • ETag

    Weak anonymous representation validator for If-None-Match, or a strong authenticated Mod/ModVersion write validator for If-Match. Do not interchange the two.

    Schema refs

    string
  • Vary

    Catalog cache-key dimensions that isolate anonymous responses from Authorization or Cookie requests.

    Schema refs

    string

    Beispiele

    Accept-Encoding, Authorization, Cookie
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string
400Request syntax or query parameters are invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
401Authentication is missing, expired, or invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
429Rate limit exceeded.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
  • RateLimit-Limit

    Quota limit for the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    120
  • RateLimit-Remaining

    Remaining quota in the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    0
  • RateLimit-Reset

    Seconds until the active public API rate-limit bucket resets.

    Schema refs

    integer

    Beispiele

    60
  • Retry-After

    Seconds the client should wait before retrying a rate-limited request.

    Schema refs

    integer

    Beispiele

    60
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
500Unexpected server error.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444

Downloads

POST

Resolve a fallback artifact download.

/downloads/{artifact_id}/fallback

Operation ID
resolveDownloadFallback
Path template
/downloads/{artifact_id}/fallback
Responses
200, 400, 401, 403, 404, 410, 429, 500
Scopes
files:download
Request body
Body erforderlich

Parameter

  • headertraceparentOptional

    W3C trace context header accepted for distributed tracing.

    Schema refs

    string

    Beispiele

    00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01
  • pathartifact_idErforderlich

    Stable public artifact UUID.

    Schema refs

    ArtifactId

    Beispiele

    44444444-4444-4444-8444-444444444444

Request headers

  • traceparent

    W3C trace context header accepted for distributed tracing.

    Schema refs

    string

    Beispiele

    00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01

Request body

application/jsonErforderlich

Schema refs

DownloadFallbackRequest

Beispiele

{"downloadSessionId":"550e8400-e29b-41d4-a716-446655440000","cloudflareProbeFailed":true,"probe":{"ok":true,"failed":true,"status":1,"bytesReceived":0,"reason":"example-value"}}

Responses

200Resolved fallback download link.
application/json

Schema refs

DownloadFallbackResponse

Beispiele

{"ok":true,"data":{"artifact_id":"44444444-4444-4444-8444-444444444444","download_session_id":"550e8400-e29b-41d4-a716-446655440000","fallback_url":"https://example.invalid/moddingflow-resource","url":"https://example.invalid/moddingflow-resource","provider":"example-value","reason":"bunny_ru_geo","expires_at":"2026-07-11T10:30:00Z","expires_in":1}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"ok":true,"data":{"artifact_id":"44444444-4444-4444-8444-444444444444","download_session_id":"550e8400-e29b-41d4-a716-446655440000","fallback_url":"https://example.invalid/moddingflow-resource","url":"https://example.invalid/moddingflow-resource","provider":"example-value","reason":"bunny_ru_geo","expires_at":"2026-07-11T10:30:00Z","expires_in":1}}
44444444-4444-4444-8444-444444444444
400Request syntax or query parameters are invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
401Authentication is missing, expired, or invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
403The token or public client lacks the required scope.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
404The requested public resource was not found or is not visible.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/not_found","title":"Resource not found","status":404,"detail":"The requested public resource was not found.","instance":"urn:moddingflow:request:req_01JZ7Q43P31JSQQF7W3R24H0ED","ok":false,"code":"not_found","machine_code":"not_found","http_status":404,"request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED","retryable":false,"docs_slug":"errors.not_found","error":{"machine_code":"not_found","http_status":404,"message":"The requested public resource was not found.","request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/not_found","title":"Resource not found","status":404,"detail":"The requested public resource was not found.","instance":"urn:moddingflow:request:req_01JZ7Q43P31JSQQF7W3R24H0ED","ok":false,"code":"not_found","machine_code":"not_found","http_status":404,"request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED","retryable":false,"docs_slug":"errors.not_found","error":{"machine_code":"not_found","http_status":404,"message":"The requested public resource was not found.","request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED"}}
44444444-4444-4444-8444-444444444444
410The requested session or expiring capability is no longer usable.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/gone","title":"Capability expired","status":410,"detail":"The requested session is no longer usable.","instance":"urn:moddingflow:request:req_01JZ7Q4HZD7JQ1B5WDRVD1ZK7E","ok":false,"code":"gone","machine_code":"gone","http_status":410,"request_id":"req_01JZ7Q4HZD7JQ1B5WDRVD1ZK7E","trace_id":"trace_01JZ7Q4HZD7JQ1B5WDRVD1ZK7E","retryable":false,"docs_slug":"errors.gone","error":{"machine_code":"gone","http_status":410,"message":"The requested session is no longer usable.","request_id":"req_01JZ7Q4HZD7JQ1B5WDRVD1ZK7E","trace_id":"trace_01JZ7Q4HZD7JQ1B5WDRVD1ZK7E"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/gone","title":"Capability expired","status":410,"detail":"The requested session is no longer usable.","instance":"urn:moddingflow:request:req_01JZ7Q4HZD7JQ1B5WDRVD1ZK7E","ok":false,"code":"gone","machine_code":"gone","http_status":410,"request_id":"req_01JZ7Q4HZD7JQ1B5WDRVD1ZK7E","trace_id":"trace_01JZ7Q4HZD7JQ1B5WDRVD1ZK7E","retryable":false,"docs_slug":"errors.gone","error":{"machine_code":"gone","http_status":410,"message":"The requested session is no longer usable.","request_id":"req_01JZ7Q4HZD7JQ1B5WDRVD1ZK7E","trace_id":"trace_01JZ7Q4HZD7JQ1B5WDRVD1ZK7E"}}
44444444-4444-4444-8444-444444444444
429Rate limit exceeded.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
  • RateLimit-Limit

    Quota limit for the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    120
  • RateLimit-Remaining

    Remaining quota in the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    0
  • RateLimit-Reset

    Seconds until the active public API rate-limit bucket resets.

    Schema refs

    integer

    Beispiele

    60
  • Retry-After

    Seconds the client should wait before retrying a rate-limited request.

    Schema refs

    integer

    Beispiele

    60
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
500Unexpected server error.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
POST

Resolve an artifact download.

/downloads/{artifact_id}/resolve

Operation ID
resolveDownload
Path template
/downloads/{artifact_id}/resolve
Responses
200, 400, 401, 403, 404, 409, 410, 429, 500
Scopes
files:download
Request body
Body erforderlich

Parameter

  • headerIdempotency-KeyOptional

    Optional retry key for deterministic resolve operations.

    Schema refs

    string

    Beispiele

    example-idempotency-key-0001
  • headertraceparentOptional

    W3C trace context header accepted for distributed tracing.

    Schema refs

    string

    Beispiele

    00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01
  • pathartifact_idErforderlich

    Stable public artifact UUID.

    Schema refs

    ArtifactId

    Beispiele

    44444444-4444-4444-8444-444444444444

Request headers

  • Idempotency-Key

    Optional retry key for deterministic resolve operations.

    Schema refs

    string

    Beispiele

    example-idempotency-key-0001
  • traceparent

    W3C trace context header accepted for distributed tracing.

    Schema refs

    string

    Beispiele

    00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01

Request body

application/json

Schema refs

DownloadResolveRequest

Beispiele

{"client":"mod_manager","preferred_cdn":"primary","job_id":"55555555-5555-4555-8555-555555555555","progress":{"bytes_received":12582912,"etag":"\"skyui-etag\""}}

Responses

200Resolved download links and verification metadata.
application/json

Schema refs

DownloadResolveResponse

Beispiele

{"ok":true,"data":{"artifact_id":"33333333-3333-4333-8333-333333333333","download_session_id":"44444444-4444-4444-8444-444444444444","download_job":{"id":"55555555-5555-4555-8555-555555555555","grant_id":"44444444-4444-4444-8444-444444444444","artifact_id":"33333333-3333-4333-8333-333333333333","status":"grant_active","bytes_received":12582912,"etag":"\"skyui-etag\"","attempt_count":2,"rate_limit_count":3,"provider_effect_count":1,"next_attempt_at":null},"primary_url":"https://cdn.example.invalid/mods/skyui.7z?signature=short-lived","head_url":"https://storage.example.invalid/mods/skyui.7z?signature=head-short-lived","expires_at":"2026-07-08T12:00:00Z","sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","hashes":{"sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},"size_bytes":73400320,"accept_ranges":"bytes","conditional_headers":["If-Match","If-None-Match","If-Modified-Since","If-Unmodified-Since"],"range_supported":true,"resume":{"range_supported":true,"etag":"\"skyui-etag\"","sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","hashes":{"sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},"head_url":"https://storage.example.invalid/mods/skyui.7z?signature=head-short-lived","conditional_headers":["If-Match","If-None-Match","If-Modified-Since","If-Unmodified-Since"],"chunk_size_hint_bytes":8388608,"signed_url_expiry_refresh":"refresh resolve before expires_at"}}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"ok":true,"data":{"artifact_id":"33333333-3333-4333-8333-333333333333","download_session_id":"44444444-4444-4444-8444-444444444444","download_job":{"id":"55555555-5555-4555-8555-555555555555","grant_id":"44444444-4444-4444-8444-444444444444","artifact_id":"33333333-3333-4333-8333-333333333333","status":"grant_active","bytes_received":12582912,"etag":"\"skyui-etag\"","attempt_count":2,"rate_limit_count":3,"provider_effect_count":1,"next_attempt_at":null},"primary_url":"https://cdn.example.invalid/mods/skyui.7z?signature=short-lived","head_url":"https://storage.example.invalid/mods/skyui.7z?signature=head-short-lived","expires_at":"2026-07-08T12:00:00Z","sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","hashes":{"sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},"size_bytes":73400320,"accept_ranges":"bytes","conditional_headers":["If-Match","If-None-Match","If-Modified-Since","If-Unmodified-Since"],"range_supported":true,"resume":{"range_supported":true,"etag":"\"skyui-etag\"","sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","hashes":{"sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},"head_url":"https://storage.example.invalid/mods/skyui.7z?signature=head-short-lived","conditional_headers":["If-Match","If-None-Match","If-Modified-Since","If-Unmodified-Since"],"chunk_size_hint_bytes":8388608,"signed_url_expiry_refresh":"refresh resolve before expires_at"}}}
44444444-4444-4444-8444-444444444444
400Request syntax or query parameters are invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
401Authentication is missing, expired, or invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
403The token or public client lacks the required scope.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
404The requested public resource was not found or is not visible.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/not_found","title":"Resource not found","status":404,"detail":"The requested public resource was not found.","instance":"urn:moddingflow:request:req_01JZ7Q43P31JSQQF7W3R24H0ED","ok":false,"code":"not_found","machine_code":"not_found","http_status":404,"request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED","retryable":false,"docs_slug":"errors.not_found","error":{"machine_code":"not_found","http_status":404,"message":"The requested public resource was not found.","request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/not_found","title":"Resource not found","status":404,"detail":"The requested public resource was not found.","instance":"urn:moddingflow:request:req_01JZ7Q43P31JSQQF7W3R24H0ED","ok":false,"code":"not_found","machine_code":"not_found","http_status":404,"request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED","retryable":false,"docs_slug":"errors.not_found","error":{"machine_code":"not_found","http_status":404,"message":"The requested public resource was not found.","request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED"}}
44444444-4444-4444-8444-444444444444
409The operation conflicts with current state or idempotency history.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/idempotency_conflict","title":"Idempotency conflict","status":409,"detail":"The Idempotency-Key was already used with a different request body.","instance":"urn:moddingflow:request:req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","ok":false,"code":"idempotency_conflict","machine_code":"idempotency_conflict","http_status":409,"request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","retryable":false,"docs_slug":"errors.idempotency_conflict","error":{"machine_code":"idempotency_conflict","http_status":409,"message":"The Idempotency-Key was already used with a different request body.","request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/idempotency_conflict","title":"Idempotency conflict","status":409,"detail":"The Idempotency-Key was already used with a different request body.","instance":"urn:moddingflow:request:req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","ok":false,"code":"idempotency_conflict","machine_code":"idempotency_conflict","http_status":409,"request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","retryable":false,"docs_slug":"errors.idempotency_conflict","error":{"machine_code":"idempotency_conflict","http_status":409,"message":"The Idempotency-Key was already used with a different request body.","request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF"}}
44444444-4444-4444-8444-444444444444
410The requested session or expiring capability is no longer usable.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/gone","title":"Capability expired","status":410,"detail":"The requested session is no longer usable.","instance":"urn:moddingflow:request:req_01JZ7Q4HZD7JQ1B5WDRVD1ZK7E","ok":false,"code":"gone","machine_code":"gone","http_status":410,"request_id":"req_01JZ7Q4HZD7JQ1B5WDRVD1ZK7E","trace_id":"trace_01JZ7Q4HZD7JQ1B5WDRVD1ZK7E","retryable":false,"docs_slug":"errors.gone","error":{"machine_code":"gone","http_status":410,"message":"The requested session is no longer usable.","request_id":"req_01JZ7Q4HZD7JQ1B5WDRVD1ZK7E","trace_id":"trace_01JZ7Q4HZD7JQ1B5WDRVD1ZK7E"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/gone","title":"Capability expired","status":410,"detail":"The requested session is no longer usable.","instance":"urn:moddingflow:request:req_01JZ7Q4HZD7JQ1B5WDRVD1ZK7E","ok":false,"code":"gone","machine_code":"gone","http_status":410,"request_id":"req_01JZ7Q4HZD7JQ1B5WDRVD1ZK7E","trace_id":"trace_01JZ7Q4HZD7JQ1B5WDRVD1ZK7E","retryable":false,"docs_slug":"errors.gone","error":{"machine_code":"gone","http_status":410,"message":"The requested session is no longer usable.","request_id":"req_01JZ7Q4HZD7JQ1B5WDRVD1ZK7E","trace_id":"trace_01JZ7Q4HZD7JQ1B5WDRVD1ZK7E"}}
44444444-4444-4444-8444-444444444444
429Rate limit exceeded.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
  • RateLimit-Limit

    Quota limit for the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    120
  • RateLimit-Remaining

    Remaining quota in the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    0
  • RateLimit-Reset

    Seconds until the active public API rate-limit bucket resets.

    Schema refs

    integer

    Beispiele

    60
  • Retry-After

    Seconds the client should wait before retrying a rate-limited request.

    Schema refs

    integer

    Beispiele

    60
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
500Unexpected server error.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444

Install Plans

POST

Resolve an install plan.

/install-plans:resolve

Operation ID
resolveInstallPlan
Path template
/install-plans:resolve
Responses
200, 400, 401, 403, 404, 409, 422, 429, 500
Scopes
install_plans:resolve
Request body
Body erforderlich

Parameter

  • headerIdempotency-KeyOptional

    Optional retry key for deterministic resolve operations.

    Schema refs

    string

    Beispiele

    example-idempotency-key-0001
  • headertraceparentOptional

    W3C trace context header accepted for distributed tracing.

    Schema refs

    string

    Beispiele

    00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01

Request headers

  • Idempotency-Key

    Optional retry key for deterministic resolve operations.

    Schema refs

    string

    Beispiele

    example-idempotency-key-0001
  • traceparent

    W3C trace context header accepted for distributed tracing.

    Schema refs

    string

    Beispiele

    00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01

Request body

application/jsonErforderlich

Schema refs

InstallPlanResolveRequest

Beispiele

{"game_slug":"skyrim-se","game_version":"1.6.1170","mod_ids":["11111111-1111-4111-8111-111111111111"],"include_optional":false}
44444444-4444-4444-8444-444444444444
22222222-2222-4222-8222-222222222222
33333333-3333-4333-8333-333333333333

Responses

200Resolved install plan.
application/json

Schema refs

InstallPlanResolveResponse

Beispiele

{"ok":true,"data":{"plan_id":"22222222-2222-4222-8222-222222222222","game_slug":"skyrim-se","game_version":"1.6.1170","platform":"windows","loader":"skse","release_channel":"stable","dependency_constraints":[],"conflicts":[],"install_order":[{"item_id":"44444444-4444-4444-8444-444444444444","mod_id":"11111111-1111-4111-8111-111111111111","version_id":"22222222-2222-4222-8222-222222222222","artifact_id":"33333333-3333-4333-8333-333333333333","required":true,"selection_kind":"selected_artifact","decision_reasons":["selected_by_artifact","release_channel:stable","platform:windows","loader:skse"],"download_resolve_endpoint":"/v1/downloads/33333333-3333-4333-8333-333333333333/resolve","sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","hashes":{"sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}}],"warnings":[]}}
  • ETag

    Weak anonymous representation validator for If-None-Match, or a strong authenticated Mod/ModVersion write validator for If-Match. Do not interchange the two.

    Schema refs

    string
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"ok":true,"data":{"plan_id":"22222222-2222-4222-8222-222222222222","game_slug":"skyrim-se","game_version":"1.6.1170","platform":"windows","loader":"skse","release_channel":"stable","dependency_constraints":[],"conflicts":[],"install_order":[{"item_id":"44444444-4444-4444-8444-444444444444","mod_id":"11111111-1111-4111-8111-111111111111","version_id":"22222222-2222-4222-8222-222222222222","artifact_id":"33333333-3333-4333-8333-333333333333","required":true,"selection_kind":"selected_artifact","decision_reasons":["selected_by_artifact","release_channel:stable","platform:windows","loader:skse"],"download_resolve_endpoint":"/v1/downloads/33333333-3333-4333-8333-333333333333/resolve","sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","hashes":{"sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}}],"warnings":[]}}
400Request syntax or query parameters are invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
401Authentication is missing, expired, or invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
403The token or public client lacks the required scope.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
404The requested public resource was not found or is not visible.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/not_found","title":"Resource not found","status":404,"detail":"The requested public resource was not found.","instance":"urn:moddingflow:request:req_01JZ7Q43P31JSQQF7W3R24H0ED","ok":false,"code":"not_found","machine_code":"not_found","http_status":404,"request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED","retryable":false,"docs_slug":"errors.not_found","error":{"machine_code":"not_found","http_status":404,"message":"The requested public resource was not found.","request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/not_found","title":"Resource not found","status":404,"detail":"The requested public resource was not found.","instance":"urn:moddingflow:request:req_01JZ7Q43P31JSQQF7W3R24H0ED","ok":false,"code":"not_found","machine_code":"not_found","http_status":404,"request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED","retryable":false,"docs_slug":"errors.not_found","error":{"machine_code":"not_found","http_status":404,"message":"The requested public resource was not found.","request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED"}}
44444444-4444-4444-8444-444444444444
409The operation conflicts with current state or idempotency history.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/idempotency_conflict","title":"Idempotency conflict","status":409,"detail":"The Idempotency-Key was already used with a different request body.","instance":"urn:moddingflow:request:req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","ok":false,"code":"idempotency_conflict","machine_code":"idempotency_conflict","http_status":409,"request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","retryable":false,"docs_slug":"errors.idempotency_conflict","error":{"machine_code":"idempotency_conflict","http_status":409,"message":"The Idempotency-Key was already used with a different request body.","request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/idempotency_conflict","title":"Idempotency conflict","status":409,"detail":"The Idempotency-Key was already used with a different request body.","instance":"urn:moddingflow:request:req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","ok":false,"code":"idempotency_conflict","machine_code":"idempotency_conflict","http_status":409,"request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","retryable":false,"docs_slug":"errors.idempotency_conflict","error":{"machine_code":"idempotency_conflict","http_status":409,"message":"The Idempotency-Key was already used with a different request body.","request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF"}}
44444444-4444-4444-8444-444444444444
422Field-level validation failed.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/validation_failed","title":"Validation failed","status":422,"detail":"One or more fields are invalid.","instance":"urn:moddingflow:request:req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","ok":false,"code":"validation_failed","machine_code":"validation_failed","http_status":422,"request_id":"req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","trace_id":"trace_01JZ7Q4XEKGQQ80P7RXMPVXMH6","retryable":false,"fields":[{"field":"game_version","code":"unsupported_version","message":"This game version is not supported for the selected mod."}],"docs_slug":"errors.validation_failed","error":{"machine_code":"validation_failed","http_status":422,"message":"One or more fields are invalid.","fields":[{"field":"game_version","code":"unsupported_version","message":"This game version is not supported for the selected mod."}],"request_id":"req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","trace_id":"trace_01JZ7Q4XEKGQQ80P7RXMPVXMH6"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/validation_failed","title":"Validation failed","status":422,"detail":"One or more fields are invalid.","instance":"urn:moddingflow:request:req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","ok":false,"code":"validation_failed","machine_code":"validation_failed","http_status":422,"request_id":"req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","trace_id":"trace_01JZ7Q4XEKGQQ80P7RXMPVXMH6","retryable":false,"fields":[{"field":"game_version","code":"unsupported_version","message":"This game version is not supported for the selected mod."}],"docs_slug":"errors.validation_failed","error":{"machine_code":"validation_failed","http_status":422,"message":"One or more fields are invalid.","fields":[{"field":"game_version","code":"unsupported_version","message":"This game version is not supported for the selected mod."}],"request_id":"req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","trace_id":"trace_01JZ7Q4XEKGQQ80P7RXMPVXMH6"}}
44444444-4444-4444-8444-444444444444
429Rate limit exceeded.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
  • RateLimit-Limit

    Quota limit for the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    120
  • RateLimit-Remaining

    Remaining quota in the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    0
  • RateLimit-Reset

    Seconds until the active public API rate-limit bucket resets.

    Schema refs

    integer

    Beispiele

    60
  • Retry-After

    Seconds the client should wait before retrying a rate-limited request.

    Schema refs

    integer

    Beispiele

    60
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
500Unexpected server error.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444

Publishing

POST

Create a mod draft.

/mods

Operation ID
createModDraft
Path template
/mods
Responses
201, 400, 401, 403, 404, 409, 422, 429, 500
Scopes
mods:write
Request body
Body erforderlich

Parameter

  • headerIdempotency-KeyErforderlich

    Client-generated retry key for write/upload operations. Reusing a key with a different body returns a conflict.

    Schema refs

    string

    Beispiele

    example-idempotency-key-0001
  • headertraceparentOptional

    W3C trace context header accepted for distributed tracing.

    Schema refs

    string

    Beispiele

    00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01

Request headers

  • Idempotency-KeyErforderlich

    Client-generated retry key for write/upload operations. Reusing a key with a different body returns a conflict.

    Schema refs

    string

    Beispiele

    example-idempotency-key-0001
  • traceparent

    W3C trace context header accepted for distributed tracing.

    Schema refs

    string

    Beispiele

    00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01

Request body

application/jsonErforderlich

Schema refs

CreateModRequest

Beispiele

{"game_slug":"example-value","language_code":"en","slug":"example-value","title":"Representative Moddingflow example","summary":"example-value","description_md":"Representative value for the public API contract.","category_slugs":["example-value"],"current_version":"example-value","homepage_url":"https://example.invalid/moddingflow-resource","source_url":"https://example.invalid/moddingflow-resource","is_nsfw":true}

Responses

201Mod draft created.
application/json

Schema refs

PublicApiModWriteResponse

Beispiele

{"ok":true,"status":1,"data":{"id":"22222222-2222-4222-8222-222222222222","source_topic_id":1,"state":"draft","slug":"example-value"}}
22222222-2222-4222-8222-222222222222
  • ETag

    Weak anonymous representation validator for If-None-Match, or a strong authenticated Mod/ModVersion write validator for If-Match. Do not interchange the two.

    Schema refs

    string
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"ok":true,"status":1,"data":{"id":"22222222-2222-4222-8222-222222222222","source_topic_id":1,"state":"draft","slug":"example-value"}}
22222222-2222-4222-8222-222222222222
400Request syntax or query parameters are invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
401Authentication is missing, expired, or invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
403The token or public client lacks the required scope.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
404The requested public resource was not found or is not visible.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/not_found","title":"Resource not found","status":404,"detail":"The requested public resource was not found.","instance":"urn:moddingflow:request:req_01JZ7Q43P31JSQQF7W3R24H0ED","ok":false,"code":"not_found","machine_code":"not_found","http_status":404,"request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED","retryable":false,"docs_slug":"errors.not_found","error":{"machine_code":"not_found","http_status":404,"message":"The requested public resource was not found.","request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/not_found","title":"Resource not found","status":404,"detail":"The requested public resource was not found.","instance":"urn:moddingflow:request:req_01JZ7Q43P31JSQQF7W3R24H0ED","ok":false,"code":"not_found","machine_code":"not_found","http_status":404,"request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED","retryable":false,"docs_slug":"errors.not_found","error":{"machine_code":"not_found","http_status":404,"message":"The requested public resource was not found.","request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED"}}
44444444-4444-4444-8444-444444444444
409The operation conflicts with current state or idempotency history.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/idempotency_conflict","title":"Idempotency conflict","status":409,"detail":"The Idempotency-Key was already used with a different request body.","instance":"urn:moddingflow:request:req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","ok":false,"code":"idempotency_conflict","machine_code":"idempotency_conflict","http_status":409,"request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","retryable":false,"docs_slug":"errors.idempotency_conflict","error":{"machine_code":"idempotency_conflict","http_status":409,"message":"The Idempotency-Key was already used with a different request body.","request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/idempotency_conflict","title":"Idempotency conflict","status":409,"detail":"The Idempotency-Key was already used with a different request body.","instance":"urn:moddingflow:request:req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","ok":false,"code":"idempotency_conflict","machine_code":"idempotency_conflict","http_status":409,"request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","retryable":false,"docs_slug":"errors.idempotency_conflict","error":{"machine_code":"idempotency_conflict","http_status":409,"message":"The Idempotency-Key was already used with a different request body.","request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF"}}
44444444-4444-4444-8444-444444444444
422Field-level validation failed.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/validation_failed","title":"Validation failed","status":422,"detail":"One or more fields are invalid.","instance":"urn:moddingflow:request:req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","ok":false,"code":"validation_failed","machine_code":"validation_failed","http_status":422,"request_id":"req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","trace_id":"trace_01JZ7Q4XEKGQQ80P7RXMPVXMH6","retryable":false,"fields":[{"field":"game_version","code":"unsupported_version","message":"This game version is not supported for the selected mod."}],"docs_slug":"errors.validation_failed","error":{"machine_code":"validation_failed","http_status":422,"message":"One or more fields are invalid.","fields":[{"field":"game_version","code":"unsupported_version","message":"This game version is not supported for the selected mod."}],"request_id":"req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","trace_id":"trace_01JZ7Q4XEKGQQ80P7RXMPVXMH6"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/validation_failed","title":"Validation failed","status":422,"detail":"One or more fields are invalid.","instance":"urn:moddingflow:request:req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","ok":false,"code":"validation_failed","machine_code":"validation_failed","http_status":422,"request_id":"req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","trace_id":"trace_01JZ7Q4XEKGQQ80P7RXMPVXMH6","retryable":false,"fields":[{"field":"game_version","code":"unsupported_version","message":"This game version is not supported for the selected mod."}],"docs_slug":"errors.validation_failed","error":{"machine_code":"validation_failed","http_status":422,"message":"One or more fields are invalid.","fields":[{"field":"game_version","code":"unsupported_version","message":"This game version is not supported for the selected mod."}],"request_id":"req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","trace_id":"trace_01JZ7Q4XEKGQQ80P7RXMPVXMH6"}}
44444444-4444-4444-8444-444444444444
429Rate limit exceeded.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
  • RateLimit-Limit

    Quota limit for the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    120
  • RateLimit-Remaining

    Remaining quota in the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    0
  • RateLimit-Reset

    Seconds until the active public API rate-limit bucket resets.

    Schema refs

    integer

    Beispiele

    60
  • Retry-After

    Seconds the client should wait before retrying a rate-limited request.

    Schema refs

    integer

    Beispiele

    60
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
500Unexpected server error.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
PATCH

Update a mod draft or owned mod metadata.

/mods/{mod_id}

Operation ID
updateModDraft
Path template
/mods/{mod_id}
Responses
200, 400, 401, 403, 404, 409, 412, 422, 428, 429, 500
Scopes
mods:write
Request body
Body erforderlich

Parameter

  • headerIdempotency-KeyErforderlich

    Client-generated retry key for write/upload operations. Reusing a key with a different body returns a conflict.

    Schema refs

    string

    Beispiele

    example-idempotency-key-0001
  • headerIf-MatchErforderlich

    Exactly one strong ETag returned by an authenticated Mod or ModVersion detail/create/update response. Weak validators, wildcard, and lists fail with 412; omission fails with 428.

    Schema refs

    string

    Beispiele

    "example-etag"
  • headertraceparentOptional

    W3C trace context header accepted for distributed tracing.

    Schema refs

    string

    Beispiele

    00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01
  • pathmod_idErforderlich

    Stable public mod UUID.

    Schema refs

    ModId

    Beispiele

    22222222-2222-4222-8222-222222222222

Request headers

  • Idempotency-KeyErforderlich

    Client-generated retry key for write/upload operations. Reusing a key with a different body returns a conflict.

    Schema refs

    string

    Beispiele

    example-idempotency-key-0001
  • If-MatchErforderlich

    Exactly one strong ETag returned by an authenticated Mod or ModVersion detail/create/update response. Weak validators, wildcard, and lists fail with 412; omission fails with 428.

    Schema refs

    string

    Beispiele

    "example-etag"
  • traceparent

    W3C trace context header accepted for distributed tracing.

    Schema refs

    string

    Beispiele

    00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01

Request body

application/jsonErforderlich

Schema refs

UpdateModRequest

Beispiele

{"game_slug":"example-value","language_code":"en","slug":"example-value","title":"Representative Moddingflow example","summary":"example-value","description_md":"Representative value for the public API contract.","category_slugs":["example-value"],"current_version":"example-value","homepage_url":"https://example.invalid/moddingflow-resource","source_url":"https://example.invalid/moddingflow-resource","is_nsfw":true}

Responses

200Mod metadata updated.
application/json

Schema refs

PublicApiModWriteResponse

Beispiele

{"ok":true,"status":1,"data":{"id":"22222222-2222-4222-8222-222222222222","source_topic_id":1,"state":"draft","slug":"example-value"}}
22222222-2222-4222-8222-222222222222
  • ETag

    Weak anonymous representation validator for If-None-Match, or a strong authenticated Mod/ModVersion write validator for If-Match. Do not interchange the two.

    Schema refs

    string
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"ok":true,"status":1,"data":{"id":"22222222-2222-4222-8222-222222222222","source_topic_id":1,"state":"draft","slug":"example-value"}}
22222222-2222-4222-8222-222222222222
400Request syntax or query parameters are invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
401Authentication is missing, expired, or invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
403The token or public client lacks the required scope.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
404The requested public resource was not found or is not visible.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/not_found","title":"Resource not found","status":404,"detail":"The requested public resource was not found.","instance":"urn:moddingflow:request:req_01JZ7Q43P31JSQQF7W3R24H0ED","ok":false,"code":"not_found","machine_code":"not_found","http_status":404,"request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED","retryable":false,"docs_slug":"errors.not_found","error":{"machine_code":"not_found","http_status":404,"message":"The requested public resource was not found.","request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/not_found","title":"Resource not found","status":404,"detail":"The requested public resource was not found.","instance":"urn:moddingflow:request:req_01JZ7Q43P31JSQQF7W3R24H0ED","ok":false,"code":"not_found","machine_code":"not_found","http_status":404,"request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED","retryable":false,"docs_slug":"errors.not_found","error":{"machine_code":"not_found","http_status":404,"message":"The requested public resource was not found.","request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED"}}
44444444-4444-4444-8444-444444444444
409The operation conflicts with current state or idempotency history.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/idempotency_conflict","title":"Idempotency conflict","status":409,"detail":"The Idempotency-Key was already used with a different request body.","instance":"urn:moddingflow:request:req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","ok":false,"code":"idempotency_conflict","machine_code":"idempotency_conflict","http_status":409,"request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","retryable":false,"docs_slug":"errors.idempotency_conflict","error":{"machine_code":"idempotency_conflict","http_status":409,"message":"The Idempotency-Key was already used with a different request body.","request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/idempotency_conflict","title":"Idempotency conflict","status":409,"detail":"The Idempotency-Key was already used with a different request body.","instance":"urn:moddingflow:request:req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","ok":false,"code":"idempotency_conflict","machine_code":"idempotency_conflict","http_status":409,"request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","retryable":false,"docs_slug":"errors.idempotency_conflict","error":{"machine_code":"idempotency_conflict","http_status":409,"message":"The Idempotency-Key was already used with a different request body.","request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF"}}
44444444-4444-4444-8444-444444444444
412The required If-Match precondition failed.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/precondition_failed","title":"Precondition failed","status":412,"detail":"The supplied If-Match value no longer matches the resource.","instance":"urn:moddingflow:request:req_01JZ7Q4QDFHAXR9B4V9VXEP39M","ok":false,"code":"precondition_failed","machine_code":"precondition_failed","http_status":412,"request_id":"req_01JZ7Q4QDFHAXR9B4V9VXEP39M","trace_id":"trace_01JZ7Q4QDFHAXR9B4V9VXEP39M","retryable":false,"docs_slug":"errors.precondition_failed","error":{"machine_code":"precondition_failed","http_status":412,"message":"The supplied If-Match value no longer matches the resource.","request_id":"req_01JZ7Q4QDFHAXR9B4V9VXEP39M","trace_id":"trace_01JZ7Q4QDFHAXR9B4V9VXEP39M"}}
44444444-4444-4444-8444-444444444444
  • ETag

    Weak anonymous representation validator for If-None-Match, or a strong authenticated Mod/ModVersion write validator for If-Match. Do not interchange the two.

    Schema refs

    string
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/precondition_failed","title":"Precondition failed","status":412,"detail":"The supplied If-Match value no longer matches the resource.","instance":"urn:moddingflow:request:req_01JZ7Q4QDFHAXR9B4V9VXEP39M","ok":false,"code":"precondition_failed","machine_code":"precondition_failed","http_status":412,"request_id":"req_01JZ7Q4QDFHAXR9B4V9VXEP39M","trace_id":"trace_01JZ7Q4QDFHAXR9B4V9VXEP39M","retryable":false,"docs_slug":"errors.precondition_failed","error":{"machine_code":"precondition_failed","http_status":412,"message":"The supplied If-Match value no longer matches the resource.","request_id":"req_01JZ7Q4QDFHAXR9B4V9VXEP39M","trace_id":"trace_01JZ7Q4QDFHAXR9B4V9VXEP39M"}}
44444444-4444-4444-8444-444444444444
422Field-level validation failed.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/validation_failed","title":"Validation failed","status":422,"detail":"One or more fields are invalid.","instance":"urn:moddingflow:request:req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","ok":false,"code":"validation_failed","machine_code":"validation_failed","http_status":422,"request_id":"req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","trace_id":"trace_01JZ7Q4XEKGQQ80P7RXMPVXMH6","retryable":false,"fields":[{"field":"game_version","code":"unsupported_version","message":"This game version is not supported for the selected mod."}],"docs_slug":"errors.validation_failed","error":{"machine_code":"validation_failed","http_status":422,"message":"One or more fields are invalid.","fields":[{"field":"game_version","code":"unsupported_version","message":"This game version is not supported for the selected mod."}],"request_id":"req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","trace_id":"trace_01JZ7Q4XEKGQQ80P7RXMPVXMH6"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/validation_failed","title":"Validation failed","status":422,"detail":"One or more fields are invalid.","instance":"urn:moddingflow:request:req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","ok":false,"code":"validation_failed","machine_code":"validation_failed","http_status":422,"request_id":"req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","trace_id":"trace_01JZ7Q4XEKGQQ80P7RXMPVXMH6","retryable":false,"fields":[{"field":"game_version","code":"unsupported_version","message":"This game version is not supported for the selected mod."}],"docs_slug":"errors.validation_failed","error":{"machine_code":"validation_failed","http_status":422,"message":"One or more fields are invalid.","fields":[{"field":"game_version","code":"unsupported_version","message":"This game version is not supported for the selected mod."}],"request_id":"req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","trace_id":"trace_01JZ7Q4XEKGQQ80P7RXMPVXMH6"}}
44444444-4444-4444-8444-444444444444
428The mutable resource requires an If-Match validator.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/precondition_required","title":"Precondition required","status":428,"detail":"If-Match is required for mutable Mod and ModVersion writes.","instance":"urn:moddingflow:request:req_01JZ7Q4REQUIRED","ok":false,"code":"precondition_required","machine_code":"precondition_required","http_status":428,"request_id":"req_01JZ7Q4REQUIRED","trace_id":"trace_01JZ7Q4REQUIRED","retryable":false,"docs_slug":"errors.precondition_required","error":{"machine_code":"precondition_required","http_status":428,"message":"If-Match is required for mutable Mod and ModVersion writes.","request_id":"req_01JZ7Q4REQUIRED","trace_id":"trace_01JZ7Q4REQUIRED"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/precondition_required","title":"Precondition required","status":428,"detail":"If-Match is required for mutable Mod and ModVersion writes.","instance":"urn:moddingflow:request:req_01JZ7Q4REQUIRED","ok":false,"code":"precondition_required","machine_code":"precondition_required","http_status":428,"request_id":"req_01JZ7Q4REQUIRED","trace_id":"trace_01JZ7Q4REQUIRED","retryable":false,"docs_slug":"errors.precondition_required","error":{"machine_code":"precondition_required","http_status":428,"message":"If-Match is required for mutable Mod and ModVersion writes.","request_id":"req_01JZ7Q4REQUIRED","trace_id":"trace_01JZ7Q4REQUIRED"}}
44444444-4444-4444-8444-444444444444
429Rate limit exceeded.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
  • RateLimit-Limit

    Quota limit for the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    120
  • RateLimit-Remaining

    Remaining quota in the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    0
  • RateLimit-Reset

    Seconds until the active public API rate-limit bucket resets.

    Schema refs

    integer

    Beispiele

    60
  • Retry-After

    Seconds the client should wait before retrying a rate-limited request.

    Schema refs

    integer

    Beispiele

    60
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
500Unexpected server error.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
GET

List a publishing project's team roles.

/mods/{mod_id}/team-members

Operation ID
listModTeamMembers
Path template
/mods/{mod_id}/team-members
Responses
200, 400, 401, 403, 404, 429, 500
Scopes
teams:admin
Request body
Kein body

Parameter

  • pathmod_idErforderlich

    Stable public mod UUID.

    Schema refs

    ModId

    Beispiele

    22222222-2222-4222-8222-222222222222

Responses

200Publishing project team.
application/json

Schema refs

TeamMemberListResponse

Beispiele

{"ok":true,"data":{"mod_id":"550e8400-e29b-41d4-a716-446655440000","project_id":"550e8400-e29b-41d4-a716-446655440000","members":[{"user_id":"550e8400-e29b-41d4-a716-446655440000","role":"owner","capabilities":["openid"],"created_at":"2026-07-11T10:30:00Z","updated_at":"2026-07-11T10:30:00Z"}]}}
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"ok":true,"data":{"mod_id":"550e8400-e29b-41d4-a716-446655440000","project_id":"550e8400-e29b-41d4-a716-446655440000","members":[{"user_id":"550e8400-e29b-41d4-a716-446655440000","role":"owner","capabilities":["openid"],"created_at":"2026-07-11T10:30:00Z","updated_at":"2026-07-11T10:30:00Z"}]}}
400Request syntax or query parameters are invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
401Authentication is missing, expired, or invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
403The token or public client lacks the required scope.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
404The requested public resource was not found or is not visible.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/not_found","title":"Resource not found","status":404,"detail":"The requested public resource was not found.","instance":"urn:moddingflow:request:req_01JZ7Q43P31JSQQF7W3R24H0ED","ok":false,"code":"not_found","machine_code":"not_found","http_status":404,"request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED","retryable":false,"docs_slug":"errors.not_found","error":{"machine_code":"not_found","http_status":404,"message":"The requested public resource was not found.","request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/not_found","title":"Resource not found","status":404,"detail":"The requested public resource was not found.","instance":"urn:moddingflow:request:req_01JZ7Q43P31JSQQF7W3R24H0ED","ok":false,"code":"not_found","machine_code":"not_found","http_status":404,"request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED","retryable":false,"docs_slug":"errors.not_found","error":{"machine_code":"not_found","http_status":404,"message":"The requested public resource was not found.","request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED"}}
44444444-4444-4444-8444-444444444444
429Rate limit exceeded.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
  • RateLimit-Limit

    Quota limit for the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    120
  • RateLimit-Remaining

    Remaining quota in the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    0
  • RateLimit-Reset

    Seconds until the active public API rate-limit bucket resets.

    Schema refs

    integer

    Beispiele

    60
  • Retry-After

    Seconds the client should wait before retrying a rate-limited request.

    Schema refs

    integer

    Beispiele

    60
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
500Unexpected server error.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
DELETE

Remove a project team member.

/mods/{mod_id}/team-members/{user_id}

Operation ID
removeModTeamMember
Path template
/mods/{mod_id}/team-members/{user_id}
Responses
200, 400, 401, 403, 404, 429, 500
Scopes
teams:admin
Request body
Kein body

Parameter

  • pathmod_idErforderlich

    Stable public mod UUID.

    Schema refs

    ModId

    Beispiele

    22222222-2222-4222-8222-222222222222
  • pathuser_idErforderlich

    Schema refs

    Uuid

    Beispiele

    550e8400-e29b-41d4-a716-446655440000

Responses

200Team member is absent from the project.
application/json

Schema refs

TeamMemberRemovalResponse

Beispiele

{"ok":true,"data":{"mod_id":"550e8400-e29b-41d4-a716-446655440000","project_id":"550e8400-e29b-41d4-a716-446655440000","user_id":"550e8400-e29b-41d4-a716-446655440000","removed":true,"changed":true}}
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"ok":true,"data":{"mod_id":"550e8400-e29b-41d4-a716-446655440000","project_id":"550e8400-e29b-41d4-a716-446655440000","user_id":"550e8400-e29b-41d4-a716-446655440000","removed":true,"changed":true}}
400Request syntax or query parameters are invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
401Authentication is missing, expired, or invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
403The token or public client lacks the required scope.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
404The requested public resource was not found or is not visible.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/not_found","title":"Resource not found","status":404,"detail":"The requested public resource was not found.","instance":"urn:moddingflow:request:req_01JZ7Q43P31JSQQF7W3R24H0ED","ok":false,"code":"not_found","machine_code":"not_found","http_status":404,"request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED","retryable":false,"docs_slug":"errors.not_found","error":{"machine_code":"not_found","http_status":404,"message":"The requested public resource was not found.","request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/not_found","title":"Resource not found","status":404,"detail":"The requested public resource was not found.","instance":"urn:moddingflow:request:req_01JZ7Q43P31JSQQF7W3R24H0ED","ok":false,"code":"not_found","machine_code":"not_found","http_status":404,"request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED","retryable":false,"docs_slug":"errors.not_found","error":{"machine_code":"not_found","http_status":404,"message":"The requested public resource was not found.","request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED"}}
44444444-4444-4444-8444-444444444444
429Rate limit exceeded.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
  • RateLimit-Limit

    Quota limit for the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    120
  • RateLimit-Remaining

    Remaining quota in the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    0
  • RateLimit-Reset

    Seconds until the active public API rate-limit bucket resets.

    Schema refs

    integer

    Beispiele

    60
  • Retry-After

    Seconds the client should wait before retrying a rate-limited request.

    Schema refs

    integer

    Beispiele

    60
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
500Unexpected server error.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
PUT

Assign or replace a project team role.

/mods/{mod_id}/team-members/{user_id}

Operation ID
setModTeamMember
Path template
/mods/{mod_id}/team-members/{user_id}
Responses
200, 400, 401, 403, 404, 409, 429, 500
Scopes
teams:admin
Request body
Body erforderlich

Parameter

  • pathmod_idErforderlich

    Stable public mod UUID.

    Schema refs

    ModId

    Beispiele

    22222222-2222-4222-8222-222222222222
  • pathuser_idErforderlich

    Schema refs

    Uuid

    Beispiele

    550e8400-e29b-41d4-a716-446655440000

Request body

application/jsonErforderlich

Schema refs

SetTeamMemberRequest

Beispiele

{"role":"maintainer"}

Responses

200Team role assigned.
application/json

Schema refs

TeamMemberResponse

Beispiele

{"ok":true,"data":{"user_id":"550e8400-e29b-41d4-a716-446655440000","role":"owner","capabilities":["openid"],"created_at":"2026-07-11T10:30:00Z","updated_at":"2026-07-11T10:30:00Z","mod_id":"550e8400-e29b-41d4-a716-446655440000","project_id":"550e8400-e29b-41d4-a716-446655440000"}}
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"ok":true,"data":{"user_id":"550e8400-e29b-41d4-a716-446655440000","role":"owner","capabilities":["openid"],"created_at":"2026-07-11T10:30:00Z","updated_at":"2026-07-11T10:30:00Z","mod_id":"550e8400-e29b-41d4-a716-446655440000","project_id":"550e8400-e29b-41d4-a716-446655440000"}}
400Request syntax or query parameters are invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
401Authentication is missing, expired, or invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
403The token or public client lacks the required scope.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
404The requested public resource was not found or is not visible.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/not_found","title":"Resource not found","status":404,"detail":"The requested public resource was not found.","instance":"urn:moddingflow:request:req_01JZ7Q43P31JSQQF7W3R24H0ED","ok":false,"code":"not_found","machine_code":"not_found","http_status":404,"request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED","retryable":false,"docs_slug":"errors.not_found","error":{"machine_code":"not_found","http_status":404,"message":"The requested public resource was not found.","request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/not_found","title":"Resource not found","status":404,"detail":"The requested public resource was not found.","instance":"urn:moddingflow:request:req_01JZ7Q43P31JSQQF7W3R24H0ED","ok":false,"code":"not_found","machine_code":"not_found","http_status":404,"request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED","retryable":false,"docs_slug":"errors.not_found","error":{"machine_code":"not_found","http_status":404,"message":"The requested public resource was not found.","request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED"}}
44444444-4444-4444-8444-444444444444
409The operation conflicts with current state or idempotency history.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/idempotency_conflict","title":"Idempotency conflict","status":409,"detail":"The Idempotency-Key was already used with a different request body.","instance":"urn:moddingflow:request:req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","ok":false,"code":"idempotency_conflict","machine_code":"idempotency_conflict","http_status":409,"request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","retryable":false,"docs_slug":"errors.idempotency_conflict","error":{"machine_code":"idempotency_conflict","http_status":409,"message":"The Idempotency-Key was already used with a different request body.","request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/idempotency_conflict","title":"Idempotency conflict","status":409,"detail":"The Idempotency-Key was already used with a different request body.","instance":"urn:moddingflow:request:req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","ok":false,"code":"idempotency_conflict","machine_code":"idempotency_conflict","http_status":409,"request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","retryable":false,"docs_slug":"errors.idempotency_conflict","error":{"machine_code":"idempotency_conflict","http_status":409,"message":"The Idempotency-Key was already used with a different request body.","request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF"}}
44444444-4444-4444-8444-444444444444
429Rate limit exceeded.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
  • RateLimit-Limit

    Quota limit for the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    120
  • RateLimit-Remaining

    Remaining quota in the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    0
  • RateLimit-Reset

    Seconds until the active public API rate-limit bucket resets.

    Schema refs

    integer

    Beispiele

    60
  • Retry-After

    Seconds the client should wait before retrying a rate-limited request.

    Schema refs

    integer

    Beispiele

    60
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
500Unexpected server error.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
POST

Create a mod version draft.

/mods/{mod_id}/versions

Operation ID
createModVersion
Path template
/mods/{mod_id}/versions
Responses
201, 400, 401, 403, 404, 409, 422, 429, 500
Scopes
versions:write
Request body
Body erforderlich

Parameter

  • headerIdempotency-KeyErforderlich

    Client-generated retry key for write/upload operations. Reusing a key with a different body returns a conflict.

    Schema refs

    string

    Beispiele

    example-idempotency-key-0001
  • headertraceparentOptional

    W3C trace context header accepted for distributed tracing.

    Schema refs

    string

    Beispiele

    00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01
  • pathmod_idErforderlich

    Stable public mod UUID.

    Schema refs

    ModId

    Beispiele

    22222222-2222-4222-8222-222222222222

Request headers

  • Idempotency-KeyErforderlich

    Client-generated retry key for write/upload operations. Reusing a key with a different body returns a conflict.

    Schema refs

    string

    Beispiele

    example-idempotency-key-0001
  • traceparent

    W3C trace context header accepted for distributed tracing.

    Schema refs

    string

    Beispiele

    00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01

Request body

application/jsonErforderlich

Schema refs

CreateModVersionRequest

Beispiele

{"version":"1.6.1170","label":"example-value","file_kind":"main","file_category":"main","release_channel":"stable","game_version_key":"1.6.1170","loader_key":"example-value","changelog":"example-value","game_slug":"example-value","game_versions":["1.6.1170"],"loader_platforms":["fabric"],"dependencies":[{"kind":"required_mod","target_mod_id":"22222222-2222-4222-8222-222222222222","label":"example-value","url":"https://example.invalid/moddingflow-resource","note":"example-value"}]}

Responses

201Version draft created.
application/json

Schema refs

PublicApiVersionWriteResponse

Beispiele

{"ok":true,"status":1,"data":{"id":"33333333-3333-4333-8333-333333333333","mod_id":"22222222-2222-4222-8222-222222222222","artifact_id":"44444444-4444-4444-8444-444444444444","source_file_id":1,"state":"draft","request_metadata":{"version":"1.6.1170","label":"example-value","release_channel":"stable","changelog":"example-value","file_category":"main","game_slug":"example-value","game_versions":["1.6.1170"],"loader_platforms":["fabric"],"dependencies":[{"kind":"required_mod","target_mod_id":"22222222-2222-4222-8222-222222222222","label":"example-value","url":"https://example.invalid/moddingflow-resource","note":"example-value"}],"requirements":[{"kind":"skse","label":"example-value","detail":"Representative value for the public API contract.","url":"https://example.invalid/moddingflow-resource"}],"build_metadata":{"source":"local","commit_sha":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","tag":"example-value","release":"example-value","repository":"example-value","workflow_run_id":"550e8400-e29b-41d4-a716-446655440000","client":"example-value"},"publish_state":"draft"},"idempotent":true,"upload":{"file_id":1,"create_url":"example-value"}}}
33333333-3333-4333-8333-333333333333
22222222-2222-4222-8222-222222222222
44444444-4444-4444-8444-444444444444
  • ETag

    Weak anonymous representation validator for If-None-Match, or a strong authenticated Mod/ModVersion write validator for If-Match. Do not interchange the two.

    Schema refs

    string
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"ok":true,"status":1,"data":{"id":"33333333-3333-4333-8333-333333333333","mod_id":"22222222-2222-4222-8222-222222222222","artifact_id":"44444444-4444-4444-8444-444444444444","source_file_id":1,"state":"draft","request_metadata":{"version":"1.6.1170","label":"example-value","release_channel":"stable","changelog":"example-value","file_category":"main","game_slug":"example-value","game_versions":["1.6.1170"],"loader_platforms":["fabric"],"dependencies":[{"kind":"required_mod","target_mod_id":"22222222-2222-4222-8222-222222222222","label":"example-value","url":"https://example.invalid/moddingflow-resource","note":"example-value"}],"requirements":[{"kind":"skse","label":"example-value","detail":"Representative value for the public API contract.","url":"https://example.invalid/moddingflow-resource"}],"build_metadata":{"source":"local","commit_sha":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","tag":"example-value","release":"example-value","repository":"example-value","workflow_run_id":"550e8400-e29b-41d4-a716-446655440000","client":"example-value"},"publish_state":"draft"},"idempotent":true,"upload":{"file_id":1,"create_url":"example-value"}}}
33333333-3333-4333-8333-333333333333
22222222-2222-4222-8222-222222222222
44444444-4444-4444-8444-444444444444
400Request syntax or query parameters are invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
401Authentication is missing, expired, or invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
403The token or public client lacks the required scope.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
404The requested public resource was not found or is not visible.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/not_found","title":"Resource not found","status":404,"detail":"The requested public resource was not found.","instance":"urn:moddingflow:request:req_01JZ7Q43P31JSQQF7W3R24H0ED","ok":false,"code":"not_found","machine_code":"not_found","http_status":404,"request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED","retryable":false,"docs_slug":"errors.not_found","error":{"machine_code":"not_found","http_status":404,"message":"The requested public resource was not found.","request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/not_found","title":"Resource not found","status":404,"detail":"The requested public resource was not found.","instance":"urn:moddingflow:request:req_01JZ7Q43P31JSQQF7W3R24H0ED","ok":false,"code":"not_found","machine_code":"not_found","http_status":404,"request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED","retryable":false,"docs_slug":"errors.not_found","error":{"machine_code":"not_found","http_status":404,"message":"The requested public resource was not found.","request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED"}}
44444444-4444-4444-8444-444444444444
409The operation conflicts with current state or idempotency history.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/idempotency_conflict","title":"Idempotency conflict","status":409,"detail":"The Idempotency-Key was already used with a different request body.","instance":"urn:moddingflow:request:req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","ok":false,"code":"idempotency_conflict","machine_code":"idempotency_conflict","http_status":409,"request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","retryable":false,"docs_slug":"errors.idempotency_conflict","error":{"machine_code":"idempotency_conflict","http_status":409,"message":"The Idempotency-Key was already used with a different request body.","request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/idempotency_conflict","title":"Idempotency conflict","status":409,"detail":"The Idempotency-Key was already used with a different request body.","instance":"urn:moddingflow:request:req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","ok":false,"code":"idempotency_conflict","machine_code":"idempotency_conflict","http_status":409,"request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","retryable":false,"docs_slug":"errors.idempotency_conflict","error":{"machine_code":"idempotency_conflict","http_status":409,"message":"The Idempotency-Key was already used with a different request body.","request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF"}}
44444444-4444-4444-8444-444444444444
422Field-level validation failed.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/validation_failed","title":"Validation failed","status":422,"detail":"One or more fields are invalid.","instance":"urn:moddingflow:request:req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","ok":false,"code":"validation_failed","machine_code":"validation_failed","http_status":422,"request_id":"req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","trace_id":"trace_01JZ7Q4XEKGQQ80P7RXMPVXMH6","retryable":false,"fields":[{"field":"game_version","code":"unsupported_version","message":"This game version is not supported for the selected mod."}],"docs_slug":"errors.validation_failed","error":{"machine_code":"validation_failed","http_status":422,"message":"One or more fields are invalid.","fields":[{"field":"game_version","code":"unsupported_version","message":"This game version is not supported for the selected mod."}],"request_id":"req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","trace_id":"trace_01JZ7Q4XEKGQQ80P7RXMPVXMH6"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/validation_failed","title":"Validation failed","status":422,"detail":"One or more fields are invalid.","instance":"urn:moddingflow:request:req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","ok":false,"code":"validation_failed","machine_code":"validation_failed","http_status":422,"request_id":"req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","trace_id":"trace_01JZ7Q4XEKGQQ80P7RXMPVXMH6","retryable":false,"fields":[{"field":"game_version","code":"unsupported_version","message":"This game version is not supported for the selected mod."}],"docs_slug":"errors.validation_failed","error":{"machine_code":"validation_failed","http_status":422,"message":"One or more fields are invalid.","fields":[{"field":"game_version","code":"unsupported_version","message":"This game version is not supported for the selected mod."}],"request_id":"req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","trace_id":"trace_01JZ7Q4XEKGQQ80P7RXMPVXMH6"}}
44444444-4444-4444-8444-444444444444
429Rate limit exceeded.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
  • RateLimit-Limit

    Quota limit for the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    120
  • RateLimit-Remaining

    Remaining quota in the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    0
  • RateLimit-Reset

    Seconds until the active public API rate-limit bucket resets.

    Schema refs

    integer

    Beispiele

    60
  • Retry-After

    Seconds the client should wait before retrying a rate-limited request.

    Schema refs

    integer

    Beispiele

    60
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
500Unexpected server error.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
PATCH

Update a mod version draft.

/mods/{mod_id}/versions/{version_id}

Operation ID
updateModVersion
Path template
/mods/{mod_id}/versions/{version_id}
Responses
200, 400, 401, 403, 404, 409, 412, 422, 428, 429, 500
Scopes
versions:write
Request body
Body erforderlich

Parameter

  • headerIdempotency-KeyErforderlich

    Client-generated retry key for write/upload operations. Reusing a key with a different body returns a conflict.

    Schema refs

    string

    Beispiele

    example-idempotency-key-0001
  • headerIf-MatchErforderlich

    Exactly one strong ETag returned by an authenticated Mod or ModVersion detail/create/update response. Weak validators, wildcard, and lists fail with 412; omission fails with 428.

    Schema refs

    string

    Beispiele

    "example-etag"
  • headertraceparentOptional

    W3C trace context header accepted for distributed tracing.

    Schema refs

    string

    Beispiele

    00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01
  • pathmod_idErforderlich

    Stable public mod UUID.

    Schema refs

    ModId

    Beispiele

    22222222-2222-4222-8222-222222222222
  • pathversion_idErforderlich

    Stable public mod-version UUID.

    Schema refs

    VersionId

    Beispiele

    33333333-3333-4333-8333-333333333333

Request headers

  • Idempotency-KeyErforderlich

    Client-generated retry key for write/upload operations. Reusing a key with a different body returns a conflict.

    Schema refs

    string

    Beispiele

    example-idempotency-key-0001
  • If-MatchErforderlich

    Exactly one strong ETag returned by an authenticated Mod or ModVersion detail/create/update response. Weak validators, wildcard, and lists fail with 412; omission fails with 428.

    Schema refs

    string

    Beispiele

    "example-etag"
  • traceparent

    W3C trace context header accepted for distributed tracing.

    Schema refs

    string

    Beispiele

    00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01

Request body

application/jsonErforderlich

Schema refs

UpdateModVersionRequest

Beispiele

{"version":"1.6.1170","label":"example-value","file_kind":"main","file_category":"main","release_channel":"stable","game_version_key":"1.6.1170","loader_key":"example-value","changelog":"example-value","game_slug":"example-value","game_versions":["1.6.1170"],"loader_platforms":["fabric"],"dependencies":[{"kind":"required_mod","target_mod_id":"22222222-2222-4222-8222-222222222222","label":"example-value","url":"https://example.invalid/moddingflow-resource","note":"example-value"}]}

Responses

200Version metadata updated.
application/json

Schema refs

PublicApiVersionWriteResponse

Beispiele

{"ok":true,"status":1,"data":{"id":"33333333-3333-4333-8333-333333333333","mod_id":"22222222-2222-4222-8222-222222222222","artifact_id":"44444444-4444-4444-8444-444444444444","source_file_id":1,"state":"draft","request_metadata":{"version":"1.6.1170","label":"example-value","release_channel":"stable","changelog":"example-value","file_category":"main","game_slug":"example-value","game_versions":["1.6.1170"],"loader_platforms":["fabric"],"dependencies":[{"kind":"required_mod","target_mod_id":"22222222-2222-4222-8222-222222222222","label":"example-value","url":"https://example.invalid/moddingflow-resource","note":"example-value"}],"requirements":[{"kind":"skse","label":"example-value","detail":"Representative value for the public API contract.","url":"https://example.invalid/moddingflow-resource"}],"build_metadata":{"source":"local","commit_sha":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","tag":"example-value","release":"example-value","repository":"example-value","workflow_run_id":"550e8400-e29b-41d4-a716-446655440000","client":"example-value"},"publish_state":"draft"},"idempotent":true,"upload":{"file_id":1,"create_url":"example-value"}}}
33333333-3333-4333-8333-333333333333
22222222-2222-4222-8222-222222222222
44444444-4444-4444-8444-444444444444
  • ETag

    Weak anonymous representation validator for If-None-Match, or a strong authenticated Mod/ModVersion write validator for If-Match. Do not interchange the two.

    Schema refs

    string
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"ok":true,"status":1,"data":{"id":"33333333-3333-4333-8333-333333333333","mod_id":"22222222-2222-4222-8222-222222222222","artifact_id":"44444444-4444-4444-8444-444444444444","source_file_id":1,"state":"draft","request_metadata":{"version":"1.6.1170","label":"example-value","release_channel":"stable","changelog":"example-value","file_category":"main","game_slug":"example-value","game_versions":["1.6.1170"],"loader_platforms":["fabric"],"dependencies":[{"kind":"required_mod","target_mod_id":"22222222-2222-4222-8222-222222222222","label":"example-value","url":"https://example.invalid/moddingflow-resource","note":"example-value"}],"requirements":[{"kind":"skse","label":"example-value","detail":"Representative value for the public API contract.","url":"https://example.invalid/moddingflow-resource"}],"build_metadata":{"source":"local","commit_sha":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","tag":"example-value","release":"example-value","repository":"example-value","workflow_run_id":"550e8400-e29b-41d4-a716-446655440000","client":"example-value"},"publish_state":"draft"},"idempotent":true,"upload":{"file_id":1,"create_url":"example-value"}}}
33333333-3333-4333-8333-333333333333
22222222-2222-4222-8222-222222222222
44444444-4444-4444-8444-444444444444
400Request syntax or query parameters are invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
401Authentication is missing, expired, or invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
403The token or public client lacks the required scope.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
404The requested public resource was not found or is not visible.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/not_found","title":"Resource not found","status":404,"detail":"The requested public resource was not found.","instance":"urn:moddingflow:request:req_01JZ7Q43P31JSQQF7W3R24H0ED","ok":false,"code":"not_found","machine_code":"not_found","http_status":404,"request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED","retryable":false,"docs_slug":"errors.not_found","error":{"machine_code":"not_found","http_status":404,"message":"The requested public resource was not found.","request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/not_found","title":"Resource not found","status":404,"detail":"The requested public resource was not found.","instance":"urn:moddingflow:request:req_01JZ7Q43P31JSQQF7W3R24H0ED","ok":false,"code":"not_found","machine_code":"not_found","http_status":404,"request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED","retryable":false,"docs_slug":"errors.not_found","error":{"machine_code":"not_found","http_status":404,"message":"The requested public resource was not found.","request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED"}}
44444444-4444-4444-8444-444444444444
409The operation conflicts with current state or idempotency history.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/idempotency_conflict","title":"Idempotency conflict","status":409,"detail":"The Idempotency-Key was already used with a different request body.","instance":"urn:moddingflow:request:req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","ok":false,"code":"idempotency_conflict","machine_code":"idempotency_conflict","http_status":409,"request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","retryable":false,"docs_slug":"errors.idempotency_conflict","error":{"machine_code":"idempotency_conflict","http_status":409,"message":"The Idempotency-Key was already used with a different request body.","request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/idempotency_conflict","title":"Idempotency conflict","status":409,"detail":"The Idempotency-Key was already used with a different request body.","instance":"urn:moddingflow:request:req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","ok":false,"code":"idempotency_conflict","machine_code":"idempotency_conflict","http_status":409,"request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","retryable":false,"docs_slug":"errors.idempotency_conflict","error":{"machine_code":"idempotency_conflict","http_status":409,"message":"The Idempotency-Key was already used with a different request body.","request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF"}}
44444444-4444-4444-8444-444444444444
412The required If-Match precondition failed.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/precondition_failed","title":"Precondition failed","status":412,"detail":"The supplied If-Match value no longer matches the resource.","instance":"urn:moddingflow:request:req_01JZ7Q4QDFHAXR9B4V9VXEP39M","ok":false,"code":"precondition_failed","machine_code":"precondition_failed","http_status":412,"request_id":"req_01JZ7Q4QDFHAXR9B4V9VXEP39M","trace_id":"trace_01JZ7Q4QDFHAXR9B4V9VXEP39M","retryable":false,"docs_slug":"errors.precondition_failed","error":{"machine_code":"precondition_failed","http_status":412,"message":"The supplied If-Match value no longer matches the resource.","request_id":"req_01JZ7Q4QDFHAXR9B4V9VXEP39M","trace_id":"trace_01JZ7Q4QDFHAXR9B4V9VXEP39M"}}
44444444-4444-4444-8444-444444444444
  • ETag

    Weak anonymous representation validator for If-None-Match, or a strong authenticated Mod/ModVersion write validator for If-Match. Do not interchange the two.

    Schema refs

    string
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/precondition_failed","title":"Precondition failed","status":412,"detail":"The supplied If-Match value no longer matches the resource.","instance":"urn:moddingflow:request:req_01JZ7Q4QDFHAXR9B4V9VXEP39M","ok":false,"code":"precondition_failed","machine_code":"precondition_failed","http_status":412,"request_id":"req_01JZ7Q4QDFHAXR9B4V9VXEP39M","trace_id":"trace_01JZ7Q4QDFHAXR9B4V9VXEP39M","retryable":false,"docs_slug":"errors.precondition_failed","error":{"machine_code":"precondition_failed","http_status":412,"message":"The supplied If-Match value no longer matches the resource.","request_id":"req_01JZ7Q4QDFHAXR9B4V9VXEP39M","trace_id":"trace_01JZ7Q4QDFHAXR9B4V9VXEP39M"}}
44444444-4444-4444-8444-444444444444
422Field-level validation failed.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/validation_failed","title":"Validation failed","status":422,"detail":"One or more fields are invalid.","instance":"urn:moddingflow:request:req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","ok":false,"code":"validation_failed","machine_code":"validation_failed","http_status":422,"request_id":"req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","trace_id":"trace_01JZ7Q4XEKGQQ80P7RXMPVXMH6","retryable":false,"fields":[{"field":"game_version","code":"unsupported_version","message":"This game version is not supported for the selected mod."}],"docs_slug":"errors.validation_failed","error":{"machine_code":"validation_failed","http_status":422,"message":"One or more fields are invalid.","fields":[{"field":"game_version","code":"unsupported_version","message":"This game version is not supported for the selected mod."}],"request_id":"req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","trace_id":"trace_01JZ7Q4XEKGQQ80P7RXMPVXMH6"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/validation_failed","title":"Validation failed","status":422,"detail":"One or more fields are invalid.","instance":"urn:moddingflow:request:req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","ok":false,"code":"validation_failed","machine_code":"validation_failed","http_status":422,"request_id":"req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","trace_id":"trace_01JZ7Q4XEKGQQ80P7RXMPVXMH6","retryable":false,"fields":[{"field":"game_version","code":"unsupported_version","message":"This game version is not supported for the selected mod."}],"docs_slug":"errors.validation_failed","error":{"machine_code":"validation_failed","http_status":422,"message":"One or more fields are invalid.","fields":[{"field":"game_version","code":"unsupported_version","message":"This game version is not supported for the selected mod."}],"request_id":"req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","trace_id":"trace_01JZ7Q4XEKGQQ80P7RXMPVXMH6"}}
44444444-4444-4444-8444-444444444444
428The mutable resource requires an If-Match validator.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/precondition_required","title":"Precondition required","status":428,"detail":"If-Match is required for mutable Mod and ModVersion writes.","instance":"urn:moddingflow:request:req_01JZ7Q4REQUIRED","ok":false,"code":"precondition_required","machine_code":"precondition_required","http_status":428,"request_id":"req_01JZ7Q4REQUIRED","trace_id":"trace_01JZ7Q4REQUIRED","retryable":false,"docs_slug":"errors.precondition_required","error":{"machine_code":"precondition_required","http_status":428,"message":"If-Match is required for mutable Mod and ModVersion writes.","request_id":"req_01JZ7Q4REQUIRED","trace_id":"trace_01JZ7Q4REQUIRED"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/precondition_required","title":"Precondition required","status":428,"detail":"If-Match is required for mutable Mod and ModVersion writes.","instance":"urn:moddingflow:request:req_01JZ7Q4REQUIRED","ok":false,"code":"precondition_required","machine_code":"precondition_required","http_status":428,"request_id":"req_01JZ7Q4REQUIRED","trace_id":"trace_01JZ7Q4REQUIRED","retryable":false,"docs_slug":"errors.precondition_required","error":{"machine_code":"precondition_required","http_status":428,"message":"If-Match is required for mutable Mod and ModVersion writes.","request_id":"req_01JZ7Q4REQUIRED","trace_id":"trace_01JZ7Q4REQUIRED"}}
44444444-4444-4444-8444-444444444444
429Rate limit exceeded.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
  • RateLimit-Limit

    Quota limit for the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    120
  • RateLimit-Remaining

    Remaining quota in the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    0
  • RateLimit-Reset

    Seconds until the active public API rate-limit bucket resets.

    Schema refs

    integer

    Beispiele

    60
  • Retry-After

    Seconds the client should wait before retrying a rate-limited request.

    Schema refs

    integer

    Beispiele

    60
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
500Unexpected server error.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
POST

Publish a validated mod version.

/mods/{mod_id}/versions/{version_id}/publish

Operation ID
publishModVersion
Path template
/mods/{mod_id}/versions/{version_id}/publish
Responses
200, 400, 401, 403, 404, 409, 422, 429, 500
Scopes
versions:publish
Request body
Kein body

Parameter

  • headerIdempotency-KeyErforderlich

    Client-generated retry key for write/upload operations. Reusing a key with a different body returns a conflict.

    Schema refs

    string

    Beispiele

    example-idempotency-key-0001
  • headertraceparentOptional

    W3C trace context header accepted for distributed tracing.

    Schema refs

    string

    Beispiele

    00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01
  • pathmod_idErforderlich

    Stable public mod UUID.

    Schema refs

    ModId

    Beispiele

    22222222-2222-4222-8222-222222222222
  • pathversion_idErforderlich

    Stable public mod-version UUID.

    Schema refs

    VersionId

    Beispiele

    33333333-3333-4333-8333-333333333333

Request headers

  • Idempotency-KeyErforderlich

    Client-generated retry key for write/upload operations. Reusing a key with a different body returns a conflict.

    Schema refs

    string

    Beispiele

    example-idempotency-key-0001
  • traceparent

    W3C trace context header accepted for distributed tracing.

    Schema refs

    string

    Beispiele

    00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01

Responses

200Version published.
application/json

Schema refs

PublicApiVersionWriteResponse

Beispiele

{"ok":true,"status":1,"data":{"id":"33333333-3333-4333-8333-333333333333","mod_id":"22222222-2222-4222-8222-222222222222","artifact_id":"44444444-4444-4444-8444-444444444444","source_file_id":1,"state":"draft","request_metadata":{"version":"1.6.1170","label":"example-value","release_channel":"stable","changelog":"example-value","file_category":"main","game_slug":"example-value","game_versions":["1.6.1170"],"loader_platforms":["fabric"],"dependencies":[{"kind":"required_mod","target_mod_id":"22222222-2222-4222-8222-222222222222","label":"example-value","url":"https://example.invalid/moddingflow-resource","note":"example-value"}],"requirements":[{"kind":"skse","label":"example-value","detail":"Representative value for the public API contract.","url":"https://example.invalid/moddingflow-resource"}],"build_metadata":{"source":"local","commit_sha":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","tag":"example-value","release":"example-value","repository":"example-value","workflow_run_id":"550e8400-e29b-41d4-a716-446655440000","client":"example-value"},"publish_state":"draft"},"idempotent":true,"upload":{"file_id":1,"create_url":"example-value"}}}
33333333-3333-4333-8333-333333333333
22222222-2222-4222-8222-222222222222
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"ok":true,"status":1,"data":{"id":"33333333-3333-4333-8333-333333333333","mod_id":"22222222-2222-4222-8222-222222222222","artifact_id":"44444444-4444-4444-8444-444444444444","source_file_id":1,"state":"draft","request_metadata":{"version":"1.6.1170","label":"example-value","release_channel":"stable","changelog":"example-value","file_category":"main","game_slug":"example-value","game_versions":["1.6.1170"],"loader_platforms":["fabric"],"dependencies":[{"kind":"required_mod","target_mod_id":"22222222-2222-4222-8222-222222222222","label":"example-value","url":"https://example.invalid/moddingflow-resource","note":"example-value"}],"requirements":[{"kind":"skse","label":"example-value","detail":"Representative value for the public API contract.","url":"https://example.invalid/moddingflow-resource"}],"build_metadata":{"source":"local","commit_sha":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","tag":"example-value","release":"example-value","repository":"example-value","workflow_run_id":"550e8400-e29b-41d4-a716-446655440000","client":"example-value"},"publish_state":"draft"},"idempotent":true,"upload":{"file_id":1,"create_url":"example-value"}}}
33333333-3333-4333-8333-333333333333
22222222-2222-4222-8222-222222222222
44444444-4444-4444-8444-444444444444
400Request syntax or query parameters are invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
401Authentication is missing, expired, or invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
403The token or public client lacks the required scope.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
404The requested public resource was not found or is not visible.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/not_found","title":"Resource not found","status":404,"detail":"The requested public resource was not found.","instance":"urn:moddingflow:request:req_01JZ7Q43P31JSQQF7W3R24H0ED","ok":false,"code":"not_found","machine_code":"not_found","http_status":404,"request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED","retryable":false,"docs_slug":"errors.not_found","error":{"machine_code":"not_found","http_status":404,"message":"The requested public resource was not found.","request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/not_found","title":"Resource not found","status":404,"detail":"The requested public resource was not found.","instance":"urn:moddingflow:request:req_01JZ7Q43P31JSQQF7W3R24H0ED","ok":false,"code":"not_found","machine_code":"not_found","http_status":404,"request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED","retryable":false,"docs_slug":"errors.not_found","error":{"machine_code":"not_found","http_status":404,"message":"The requested public resource was not found.","request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED"}}
44444444-4444-4444-8444-444444444444
409The operation conflicts with current state or idempotency history.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/idempotency_conflict","title":"Idempotency conflict","status":409,"detail":"The Idempotency-Key was already used with a different request body.","instance":"urn:moddingflow:request:req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","ok":false,"code":"idempotency_conflict","machine_code":"idempotency_conflict","http_status":409,"request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","retryable":false,"docs_slug":"errors.idempotency_conflict","error":{"machine_code":"idempotency_conflict","http_status":409,"message":"The Idempotency-Key was already used with a different request body.","request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/idempotency_conflict","title":"Idempotency conflict","status":409,"detail":"The Idempotency-Key was already used with a different request body.","instance":"urn:moddingflow:request:req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","ok":false,"code":"idempotency_conflict","machine_code":"idempotency_conflict","http_status":409,"request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","retryable":false,"docs_slug":"errors.idempotency_conflict","error":{"machine_code":"idempotency_conflict","http_status":409,"message":"The Idempotency-Key was already used with a different request body.","request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF"}}
44444444-4444-4444-8444-444444444444
422Field-level validation failed.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/validation_failed","title":"Validation failed","status":422,"detail":"One or more fields are invalid.","instance":"urn:moddingflow:request:req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","ok":false,"code":"validation_failed","machine_code":"validation_failed","http_status":422,"request_id":"req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","trace_id":"trace_01JZ7Q4XEKGQQ80P7RXMPVXMH6","retryable":false,"fields":[{"field":"game_version","code":"unsupported_version","message":"This game version is not supported for the selected mod."}],"docs_slug":"errors.validation_failed","error":{"machine_code":"validation_failed","http_status":422,"message":"One or more fields are invalid.","fields":[{"field":"game_version","code":"unsupported_version","message":"This game version is not supported for the selected mod."}],"request_id":"req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","trace_id":"trace_01JZ7Q4XEKGQQ80P7RXMPVXMH6"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/validation_failed","title":"Validation failed","status":422,"detail":"One or more fields are invalid.","instance":"urn:moddingflow:request:req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","ok":false,"code":"validation_failed","machine_code":"validation_failed","http_status":422,"request_id":"req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","trace_id":"trace_01JZ7Q4XEKGQQ80P7RXMPVXMH6","retryable":false,"fields":[{"field":"game_version","code":"unsupported_version","message":"This game version is not supported for the selected mod."}],"docs_slug":"errors.validation_failed","error":{"machine_code":"validation_failed","http_status":422,"message":"One or more fields are invalid.","fields":[{"field":"game_version","code":"unsupported_version","message":"This game version is not supported for the selected mod."}],"request_id":"req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","trace_id":"trace_01JZ7Q4XEKGQQ80P7RXMPVXMH6"}}
44444444-4444-4444-8444-444444444444
429Rate limit exceeded.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
  • RateLimit-Limit

    Quota limit for the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    120
  • RateLimit-Remaining

    Remaining quota in the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    0
  • RateLimit-Reset

    Seconds until the active public API rate-limit bucket resets.

    Schema refs

    integer

    Beispiele

    60
  • Retry-After

    Seconds the client should wait before retrying a rate-limited request.

    Schema refs

    integer

    Beispiele

    60
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
500Unexpected server error.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
POST

Archive a mod version.

/mods/{mod_id}/versions/{version_id}/rollback

Operation ID
rollbackModVersion
Path template
/mods/{mod_id}/versions/{version_id}/rollback
Responses
200, 400, 401, 403, 404, 409, 422, 429, 500
Scopes
versions:archive
Request body
Kein body

Parameter

  • headerIdempotency-KeyErforderlich

    Client-generated retry key for write/upload operations. Reusing a key with a different body returns a conflict.

    Schema refs

    string

    Beispiele

    example-idempotency-key-0001
  • headertraceparentOptional

    W3C trace context header accepted for distributed tracing.

    Schema refs

    string

    Beispiele

    00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01
  • pathmod_idErforderlich

    Stable public mod UUID.

    Schema refs

    ModId

    Beispiele

    22222222-2222-4222-8222-222222222222
  • pathversion_idErforderlich

    Stable public mod-version UUID.

    Schema refs

    VersionId

    Beispiele

    33333333-3333-4333-8333-333333333333

Request headers

  • Idempotency-KeyErforderlich

    Client-generated retry key for write/upload operations. Reusing a key with a different body returns a conflict.

    Schema refs

    string

    Beispiele

    example-idempotency-key-0001
  • traceparent

    W3C trace context header accepted for distributed tracing.

    Schema refs

    string

    Beispiele

    00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01

Responses

200Version archived.
application/json

Schema refs

PublicApiVersionWriteResponse

Beispiele

{"ok":true,"status":1,"data":{"id":"33333333-3333-4333-8333-333333333333","mod_id":"22222222-2222-4222-8222-222222222222","artifact_id":"44444444-4444-4444-8444-444444444444","source_file_id":1,"state":"draft","request_metadata":{"version":"1.6.1170","label":"example-value","release_channel":"stable","changelog":"example-value","file_category":"main","game_slug":"example-value","game_versions":["1.6.1170"],"loader_platforms":["fabric"],"dependencies":[{"kind":"required_mod","target_mod_id":"22222222-2222-4222-8222-222222222222","label":"example-value","url":"https://example.invalid/moddingflow-resource","note":"example-value"}],"requirements":[{"kind":"skse","label":"example-value","detail":"Representative value for the public API contract.","url":"https://example.invalid/moddingflow-resource"}],"build_metadata":{"source":"local","commit_sha":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","tag":"example-value","release":"example-value","repository":"example-value","workflow_run_id":"550e8400-e29b-41d4-a716-446655440000","client":"example-value"},"publish_state":"draft"},"idempotent":true,"upload":{"file_id":1,"create_url":"example-value"}}}
33333333-3333-4333-8333-333333333333
22222222-2222-4222-8222-222222222222
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"ok":true,"status":1,"data":{"id":"33333333-3333-4333-8333-333333333333","mod_id":"22222222-2222-4222-8222-222222222222","artifact_id":"44444444-4444-4444-8444-444444444444","source_file_id":1,"state":"draft","request_metadata":{"version":"1.6.1170","label":"example-value","release_channel":"stable","changelog":"example-value","file_category":"main","game_slug":"example-value","game_versions":["1.6.1170"],"loader_platforms":["fabric"],"dependencies":[{"kind":"required_mod","target_mod_id":"22222222-2222-4222-8222-222222222222","label":"example-value","url":"https://example.invalid/moddingflow-resource","note":"example-value"}],"requirements":[{"kind":"skse","label":"example-value","detail":"Representative value for the public API contract.","url":"https://example.invalid/moddingflow-resource"}],"build_metadata":{"source":"local","commit_sha":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","tag":"example-value","release":"example-value","repository":"example-value","workflow_run_id":"550e8400-e29b-41d4-a716-446655440000","client":"example-value"},"publish_state":"draft"},"idempotent":true,"upload":{"file_id":1,"create_url":"example-value"}}}
33333333-3333-4333-8333-333333333333
22222222-2222-4222-8222-222222222222
44444444-4444-4444-8444-444444444444
400Request syntax or query parameters are invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
401Authentication is missing, expired, or invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
403The token or public client lacks the required scope.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
404The requested public resource was not found or is not visible.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/not_found","title":"Resource not found","status":404,"detail":"The requested public resource was not found.","instance":"urn:moddingflow:request:req_01JZ7Q43P31JSQQF7W3R24H0ED","ok":false,"code":"not_found","machine_code":"not_found","http_status":404,"request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED","retryable":false,"docs_slug":"errors.not_found","error":{"machine_code":"not_found","http_status":404,"message":"The requested public resource was not found.","request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/not_found","title":"Resource not found","status":404,"detail":"The requested public resource was not found.","instance":"urn:moddingflow:request:req_01JZ7Q43P31JSQQF7W3R24H0ED","ok":false,"code":"not_found","machine_code":"not_found","http_status":404,"request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED","retryable":false,"docs_slug":"errors.not_found","error":{"machine_code":"not_found","http_status":404,"message":"The requested public resource was not found.","request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED"}}
44444444-4444-4444-8444-444444444444
409The operation conflicts with current state or idempotency history.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/idempotency_conflict","title":"Idempotency conflict","status":409,"detail":"The Idempotency-Key was already used with a different request body.","instance":"urn:moddingflow:request:req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","ok":false,"code":"idempotency_conflict","machine_code":"idempotency_conflict","http_status":409,"request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","retryable":false,"docs_slug":"errors.idempotency_conflict","error":{"machine_code":"idempotency_conflict","http_status":409,"message":"The Idempotency-Key was already used with a different request body.","request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/idempotency_conflict","title":"Idempotency conflict","status":409,"detail":"The Idempotency-Key was already used with a different request body.","instance":"urn:moddingflow:request:req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","ok":false,"code":"idempotency_conflict","machine_code":"idempotency_conflict","http_status":409,"request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","retryable":false,"docs_slug":"errors.idempotency_conflict","error":{"machine_code":"idempotency_conflict","http_status":409,"message":"The Idempotency-Key was already used with a different request body.","request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF"}}
44444444-4444-4444-8444-444444444444
422Field-level validation failed.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/validation_failed","title":"Validation failed","status":422,"detail":"One or more fields are invalid.","instance":"urn:moddingflow:request:req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","ok":false,"code":"validation_failed","machine_code":"validation_failed","http_status":422,"request_id":"req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","trace_id":"trace_01JZ7Q4XEKGQQ80P7RXMPVXMH6","retryable":false,"fields":[{"field":"game_version","code":"unsupported_version","message":"This game version is not supported for the selected mod."}],"docs_slug":"errors.validation_failed","error":{"machine_code":"validation_failed","http_status":422,"message":"One or more fields are invalid.","fields":[{"field":"game_version","code":"unsupported_version","message":"This game version is not supported for the selected mod."}],"request_id":"req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","trace_id":"trace_01JZ7Q4XEKGQQ80P7RXMPVXMH6"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/validation_failed","title":"Validation failed","status":422,"detail":"One or more fields are invalid.","instance":"urn:moddingflow:request:req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","ok":false,"code":"validation_failed","machine_code":"validation_failed","http_status":422,"request_id":"req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","trace_id":"trace_01JZ7Q4XEKGQQ80P7RXMPVXMH6","retryable":false,"fields":[{"field":"game_version","code":"unsupported_version","message":"This game version is not supported for the selected mod."}],"docs_slug":"errors.validation_failed","error":{"machine_code":"validation_failed","http_status":422,"message":"One or more fields are invalid.","fields":[{"field":"game_version","code":"unsupported_version","message":"This game version is not supported for the selected mod."}],"request_id":"req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","trace_id":"trace_01JZ7Q4XEKGQQ80P7RXMPVXMH6"}}
44444444-4444-4444-8444-444444444444
429Rate limit exceeded.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
  • RateLimit-Limit

    Quota limit for the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    120
  • RateLimit-Remaining

    Remaining quota in the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    0
  • RateLimit-Reset

    Seconds until the active public API rate-limit bucket resets.

    Schema refs

    integer

    Beispiele

    60
  • Retry-After

    Seconds the client should wait before retrying a rate-limited request.

    Schema refs

    integer

    Beispiele

    60
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
500Unexpected server error.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444

Uploads

POST

Create an upload session.

/uploads

Operation ID
createUploadSession
Path template
/uploads
Responses
201, 400, 401, 403, 409, 422, 429, 500
Scopes
files:upload
Request body
Body erforderlich

Parameter

  • headerIdempotency-KeyErforderlich

    Client-generated retry key for write/upload operations. Reusing a key with a different body returns a conflict.

    Schema refs

    string

    Beispiele

    example-idempotency-key-0001
  • headertraceparentOptional

    W3C trace context header accepted for distributed tracing.

    Schema refs

    string

    Beispiele

    00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01

Request headers

  • Idempotency-KeyErforderlich

    Client-generated retry key for write/upload operations. Reusing a key with a different body returns a conflict.

    Schema refs

    string

    Beispiele

    example-idempotency-key-0001
  • traceparent

    W3C trace context header accepted for distributed tracing.

    Schema refs

    string

    Beispiele

    00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01

Request body

application/jsonErforderlich

Schema refs

CreateUploadRequest

Beispiele

{"fileId":1,"originalFilename":"Example Mod","sizeBytes":1,"contentType":"example-value","expectedHashes":{"sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","sha1":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","md5":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},"expectedSha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","archiveManifest":{"format":"zip","entryCount":0,"totalUncompressedBytes":0,"rootPaths":["example-value"],"manifestSha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},"buildMetadata":{"source":"local","commitSha":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","tag":"example-value","release":"example-value","repository":"example-value","workflowRunId":"550e8400-e29b-41d4-a716-446655440000","client":"example-value"}}

Responses

201Upload session created.
application/json

Schema refs

UploadSessionResponse

Beispiele

{"ok":true,"status":201,"data":{"sessionId":"550e8400-e29b-41d4-a716-446655440000","supportCorrelationId":"upl_aaaaaaaaaaaaaaaaaaaa","strategy":"single","fileId":1,"expiresIn":1,"expiresAt":"2026-07-11T10:30:00Z","status":"created","method":"PUT","uploadUrl":"https://example.invalid/moddingflow-resource","urlExpiresIn":1,"headers":{"if-none-match":"*"},"uploadId":"550e8400-e29b-41d4-a716-446655440000"}}
{"if-none-match":"*"}
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string
  • X-Upload-Correlation-Id

    Pseudonymous upload lifecycle handle that is safe to include in a support ticket. It is not an authorization credential.

    Schema refs

    UploadSupportCorrelationId

Beispiele

{"ok":true,"status":201,"data":{"sessionId":"550e8400-e29b-41d4-a716-446655440000","supportCorrelationId":"upl_aaaaaaaaaaaaaaaaaaaa","strategy":"single","fileId":1,"expiresIn":1,"expiresAt":"2026-07-11T10:30:00Z","status":"created","method":"PUT","uploadUrl":"https://example.invalid/moddingflow-resource","urlExpiresIn":1,"headers":{"if-none-match":"*"},"uploadId":"550e8400-e29b-41d4-a716-446655440000"}}
{"if-none-match":"*"}
400Request syntax or query parameters are invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
401Authentication is missing, expired, or invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
403The token or public client lacks the required scope.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
409The operation conflicts with current state or idempotency history.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/idempotency_conflict","title":"Idempotency conflict","status":409,"detail":"The Idempotency-Key was already used with a different request body.","instance":"urn:moddingflow:request:req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","ok":false,"code":"idempotency_conflict","machine_code":"idempotency_conflict","http_status":409,"request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","retryable":false,"docs_slug":"errors.idempotency_conflict","error":{"machine_code":"idempotency_conflict","http_status":409,"message":"The Idempotency-Key was already used with a different request body.","request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/idempotency_conflict","title":"Idempotency conflict","status":409,"detail":"The Idempotency-Key was already used with a different request body.","instance":"urn:moddingflow:request:req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","ok":false,"code":"idempotency_conflict","machine_code":"idempotency_conflict","http_status":409,"request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","retryable":false,"docs_slug":"errors.idempotency_conflict","error":{"machine_code":"idempotency_conflict","http_status":409,"message":"The Idempotency-Key was already used with a different request body.","request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF"}}
44444444-4444-4444-8444-444444444444
422Field-level validation failed.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/validation_failed","title":"Validation failed","status":422,"detail":"One or more fields are invalid.","instance":"urn:moddingflow:request:req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","ok":false,"code":"validation_failed","machine_code":"validation_failed","http_status":422,"request_id":"req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","trace_id":"trace_01JZ7Q4XEKGQQ80P7RXMPVXMH6","retryable":false,"fields":[{"field":"game_version","code":"unsupported_version","message":"This game version is not supported for the selected mod."}],"docs_slug":"errors.validation_failed","error":{"machine_code":"validation_failed","http_status":422,"message":"One or more fields are invalid.","fields":[{"field":"game_version","code":"unsupported_version","message":"This game version is not supported for the selected mod."}],"request_id":"req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","trace_id":"trace_01JZ7Q4XEKGQQ80P7RXMPVXMH6"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/validation_failed","title":"Validation failed","status":422,"detail":"One or more fields are invalid.","instance":"urn:moddingflow:request:req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","ok":false,"code":"validation_failed","machine_code":"validation_failed","http_status":422,"request_id":"req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","trace_id":"trace_01JZ7Q4XEKGQQ80P7RXMPVXMH6","retryable":false,"fields":[{"field":"game_version","code":"unsupported_version","message":"This game version is not supported for the selected mod."}],"docs_slug":"errors.validation_failed","error":{"machine_code":"validation_failed","http_status":422,"message":"One or more fields are invalid.","fields":[{"field":"game_version","code":"unsupported_version","message":"This game version is not supported for the selected mod."}],"request_id":"req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","trace_id":"trace_01JZ7Q4XEKGQQ80P7RXMPVXMH6"}}
44444444-4444-4444-8444-444444444444
429Rate limit exceeded.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
  • RateLimit-Limit

    Quota limit for the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    120
  • RateLimit-Remaining

    Remaining quota in the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    0
  • RateLimit-Reset

    Seconds until the active public API rate-limit bucket resets.

    Schema refs

    integer

    Beispiele

    60
  • Retry-After

    Seconds the client should wait before retrying a rate-limited request.

    Schema refs

    integer

    Beispiele

    60
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
500Unexpected server error.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
POST

Validate an upload request without creating a session.

/uploads:validate

Operation ID
validateUploadRequest
Path template
/uploads:validate
Responses
200, 400, 401, 403, 404, 422, 429, 500
Scopes
files:upload
Request body
Body erforderlich

Parameter

  • headertraceparentOptional

    W3C trace context header accepted for distributed tracing.

    Schema refs

    string

    Beispiele

    00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01

Request headers

  • traceparent

    W3C trace context header accepted for distributed tracing.

    Schema refs

    string

    Beispiele

    00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01

Request body

application/jsonErforderlich

Schema refs

ValidateUploadRequest

Beispiele

{"fileId":1,"originalFilename":"Example Mod","sizeBytes":1,"contentType":"example-value","expectedHashes":{"sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","sha1":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","md5":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},"expectedSha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","archiveManifest":{"format":"zip","entryCount":0,"totalUncompressedBytes":0,"rootPaths":["example-value"],"manifestSha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},"buildMetadata":{"source":"local","commitSha":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","tag":"example-value","release":"example-value","repository":"example-value","workflowRunId":"550e8400-e29b-41d4-a716-446655440000","client":"example-value"}}

Responses

200Upload request is valid and no resource was created.
application/json

Schema refs

UploadValidationResponse

Beispiele

{"ok":true,"data":{"valid":true,"mode":"validate_only","fileId":1,"originalFilename":"Example Mod","sizeBytes":1,"contentType":"example-value","expectedSha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","metadata":{"archiveManifest":{"format":"zip","entryCount":0,"totalUncompressedBytes":0,"rootPaths":["example-value"],"manifestSha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},"buildMetadata":{"source":"local","commitSha":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","tag":"example-value","release":"example-value","repository":"example-value","workflowRunId":"550e8400-e29b-41d4-a716-446655440000","client":"example-value"}},"strategy":{"kind":"single","partSizeBytes":1,"parallelism":1},"constraints":{"maxArchiveBytes":1,"sha256Required":true},"checks":["authorization","authorization","authorization","authorization","authorization"]}}
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"ok":true,"data":{"valid":true,"mode":"validate_only","fileId":1,"originalFilename":"Example Mod","sizeBytes":1,"contentType":"example-value","expectedSha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","metadata":{"archiveManifest":{"format":"zip","entryCount":0,"totalUncompressedBytes":0,"rootPaths":["example-value"],"manifestSha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},"buildMetadata":{"source":"local","commitSha":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","tag":"example-value","release":"example-value","repository":"example-value","workflowRunId":"550e8400-e29b-41d4-a716-446655440000","client":"example-value"}},"strategy":{"kind":"single","partSizeBytes":1,"parallelism":1},"constraints":{"maxArchiveBytes":1,"sha256Required":true},"checks":["authorization","authorization","authorization","authorization","authorization"]}}
400Request syntax or query parameters are invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
401Authentication is missing, expired, or invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
403The token or public client lacks the required scope.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
404The requested public resource was not found or is not visible.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/not_found","title":"Resource not found","status":404,"detail":"The requested public resource was not found.","instance":"urn:moddingflow:request:req_01JZ7Q43P31JSQQF7W3R24H0ED","ok":false,"code":"not_found","machine_code":"not_found","http_status":404,"request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED","retryable":false,"docs_slug":"errors.not_found","error":{"machine_code":"not_found","http_status":404,"message":"The requested public resource was not found.","request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/not_found","title":"Resource not found","status":404,"detail":"The requested public resource was not found.","instance":"urn:moddingflow:request:req_01JZ7Q43P31JSQQF7W3R24H0ED","ok":false,"code":"not_found","machine_code":"not_found","http_status":404,"request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED","retryable":false,"docs_slug":"errors.not_found","error":{"machine_code":"not_found","http_status":404,"message":"The requested public resource was not found.","request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED"}}
44444444-4444-4444-8444-444444444444
422Field-level validation failed.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/validation_failed","title":"Validation failed","status":422,"detail":"One or more fields are invalid.","instance":"urn:moddingflow:request:req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","ok":false,"code":"validation_failed","machine_code":"validation_failed","http_status":422,"request_id":"req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","trace_id":"trace_01JZ7Q4XEKGQQ80P7RXMPVXMH6","retryable":false,"fields":[{"field":"game_version","code":"unsupported_version","message":"This game version is not supported for the selected mod."}],"docs_slug":"errors.validation_failed","error":{"machine_code":"validation_failed","http_status":422,"message":"One or more fields are invalid.","fields":[{"field":"game_version","code":"unsupported_version","message":"This game version is not supported for the selected mod."}],"request_id":"req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","trace_id":"trace_01JZ7Q4XEKGQQ80P7RXMPVXMH6"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/validation_failed","title":"Validation failed","status":422,"detail":"One or more fields are invalid.","instance":"urn:moddingflow:request:req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","ok":false,"code":"validation_failed","machine_code":"validation_failed","http_status":422,"request_id":"req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","trace_id":"trace_01JZ7Q4XEKGQQ80P7RXMPVXMH6","retryable":false,"fields":[{"field":"game_version","code":"unsupported_version","message":"This game version is not supported for the selected mod."}],"docs_slug":"errors.validation_failed","error":{"machine_code":"validation_failed","http_status":422,"message":"One or more fields are invalid.","fields":[{"field":"game_version","code":"unsupported_version","message":"This game version is not supported for the selected mod."}],"request_id":"req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","trace_id":"trace_01JZ7Q4XEKGQQ80P7RXMPVXMH6"}}
44444444-4444-4444-8444-444444444444
429Rate limit exceeded.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
  • RateLimit-Limit

    Quota limit for the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    120
  • RateLimit-Remaining

    Remaining quota in the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    0
  • RateLimit-Reset

    Seconds until the active public API rate-limit bucket resets.

    Schema refs

    integer

    Beispiele

    60
  • Retry-After

    Seconds the client should wait before retrying a rate-limited request.

    Schema refs

    integer

    Beispiele

    60
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
500Unexpected server error.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
GET

Get upload session status.

/uploads/{upload_id}

Operation ID
getUploadSession
Path template
/uploads/{upload_id}
Responses
200, 400, 401, 403, 404, 410, 429, 500
Scopes
files:upload
Request body
Kein body

Parameter

  • headertraceparentOptional

    W3C trace context header accepted for distributed tracing.

    Schema refs

    string

    Beispiele

    00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01
  • pathupload_idErforderlich

    Stable public upload session UUID.

    Schema refs

    UploadId

    Beispiele

    550e8400-e29b-41d4-a716-446655440000

Request headers

  • traceparent

    W3C trace context header accepted for distributed tracing.

    Schema refs

    string

    Beispiele

    00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01

Responses

200Upload session lifecycle status.
application/json

Schema refs

UploadSessionStatusResponse

Beispiele

{"ok":true,"data":{"sessionId":"550e8400-e29b-41d4-a716-446655440000","supportCorrelationId":"upl_aaaaaaaaaaaaaaaaaaaa","status":"created","lifecycleStatus":"draft","strategy":"single","fileId":1,"expectedSizeBytes":1,"actualSizeBytes":1,"expiresAt":"2026-07-11T10:30:00Z","expiresIn":0,"job":{"id":"550e8400-e29b-41d4-a716-446655440000","kind":"upload_processing","resource":{"kind":"upload-session","id":"550e8400-e29b-41d4-a716-446655440000"},"status":"queued","terminal":true,"statusEndpoint":"example-value","reason":"example-value","progress":{"completed":0,"total":1,"percent":0,"unit":"job"},"retry":{"retryable":true,"strategy":"worker_retry","retryAfterSeconds":0,"attempt":0,"maxAttempts":1,"nextAttemptAt":"2026-07-11T10:30:00Z"},"createdAt":"2026-07-11T10:30:00Z","updatedAt":"2026-07-11T10:30:00Z","startedAt":"2026-07-11T10:30:00Z"},"metadata":{"archiveManifest":{"format":"zip","entryCount":0,"totalUncompressedBytes":0,"rootPaths":["example-value"],"manifestSha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},"buildMetadata":{"source":"local","commitSha":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","tag":"example-value","release":"example-value","repository":"example-value","workflowRunId":"550e8400-e29b-41d4-a716-446655440000","client":"example-value"}},"reason":"example-value","endpoints":{"status":"example-value","parts":"example-value","complete":"example-value","abort":"example-value"},"retry":{"idempotencyKeyRequired":true,"refreshSignedUrls":"example-value","resumeStrategy":"example-value","metadataOnlyChangesRequireReupload":false},"resume":{"supported":true,"strategy":"single","partSizeBytes":1,"parallelism":1},"progress":{"available":true,"uploadedBytes":0,"totalBytes":1,"percent":0,"totalParts":1,"completedParts":[{"partNumber":1,"etag":"W/\"example-etag\"","sizeBytes":0}]}}}
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string
  • X-Upload-Correlation-Id

    Pseudonymous upload lifecycle handle that is safe to include in a support ticket. It is not an authorization credential.

    Schema refs

    UploadSupportCorrelationId

Beispiele

{"ok":true,"data":{"sessionId":"550e8400-e29b-41d4-a716-446655440000","supportCorrelationId":"upl_aaaaaaaaaaaaaaaaaaaa","status":"created","lifecycleStatus":"draft","strategy":"single","fileId":1,"expectedSizeBytes":1,"actualSizeBytes":1,"expiresAt":"2026-07-11T10:30:00Z","expiresIn":0,"job":{"id":"550e8400-e29b-41d4-a716-446655440000","kind":"upload_processing","resource":{"kind":"upload-session","id":"550e8400-e29b-41d4-a716-446655440000"},"status":"queued","terminal":true,"statusEndpoint":"example-value","reason":"example-value","progress":{"completed":0,"total":1,"percent":0,"unit":"job"},"retry":{"retryable":true,"strategy":"worker_retry","retryAfterSeconds":0,"attempt":0,"maxAttempts":1,"nextAttemptAt":"2026-07-11T10:30:00Z"},"createdAt":"2026-07-11T10:30:00Z","updatedAt":"2026-07-11T10:30:00Z","startedAt":"2026-07-11T10:30:00Z"},"metadata":{"archiveManifest":{"format":"zip","entryCount":0,"totalUncompressedBytes":0,"rootPaths":["example-value"],"manifestSha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},"buildMetadata":{"source":"local","commitSha":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","tag":"example-value","release":"example-value","repository":"example-value","workflowRunId":"550e8400-e29b-41d4-a716-446655440000","client":"example-value"}},"reason":"example-value","endpoints":{"status":"example-value","parts":"example-value","complete":"example-value","abort":"example-value"},"retry":{"idempotencyKeyRequired":true,"refreshSignedUrls":"example-value","resumeStrategy":"example-value","metadataOnlyChangesRequireReupload":false},"resume":{"supported":true,"strategy":"single","partSizeBytes":1,"parallelism":1},"progress":{"available":true,"uploadedBytes":0,"totalBytes":1,"percent":0,"totalParts":1,"completedParts":[{"partNumber":1,"etag":"W/\"example-etag\"","sizeBytes":0}]}}}
400Request syntax or query parameters are invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
401Authentication is missing, expired, or invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
403The token or public client lacks the required scope.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
404The requested public resource was not found or is not visible.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/not_found","title":"Resource not found","status":404,"detail":"The requested public resource was not found.","instance":"urn:moddingflow:request:req_01JZ7Q43P31JSQQF7W3R24H0ED","ok":false,"code":"not_found","machine_code":"not_found","http_status":404,"request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED","retryable":false,"docs_slug":"errors.not_found","error":{"machine_code":"not_found","http_status":404,"message":"The requested public resource was not found.","request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/not_found","title":"Resource not found","status":404,"detail":"The requested public resource was not found.","instance":"urn:moddingflow:request:req_01JZ7Q43P31JSQQF7W3R24H0ED","ok":false,"code":"not_found","machine_code":"not_found","http_status":404,"request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED","retryable":false,"docs_slug":"errors.not_found","error":{"machine_code":"not_found","http_status":404,"message":"The requested public resource was not found.","request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED"}}
44444444-4444-4444-8444-444444444444
410The requested session or expiring capability is no longer usable.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/gone","title":"Capability expired","status":410,"detail":"The requested session is no longer usable.","instance":"urn:moddingflow:request:req_01JZ7Q4HZD7JQ1B5WDRVD1ZK7E","ok":false,"code":"gone","machine_code":"gone","http_status":410,"request_id":"req_01JZ7Q4HZD7JQ1B5WDRVD1ZK7E","trace_id":"trace_01JZ7Q4HZD7JQ1B5WDRVD1ZK7E","retryable":false,"docs_slug":"errors.gone","error":{"machine_code":"gone","http_status":410,"message":"The requested session is no longer usable.","request_id":"req_01JZ7Q4HZD7JQ1B5WDRVD1ZK7E","trace_id":"trace_01JZ7Q4HZD7JQ1B5WDRVD1ZK7E"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/gone","title":"Capability expired","status":410,"detail":"The requested session is no longer usable.","instance":"urn:moddingflow:request:req_01JZ7Q4HZD7JQ1B5WDRVD1ZK7E","ok":false,"code":"gone","machine_code":"gone","http_status":410,"request_id":"req_01JZ7Q4HZD7JQ1B5WDRVD1ZK7E","trace_id":"trace_01JZ7Q4HZD7JQ1B5WDRVD1ZK7E","retryable":false,"docs_slug":"errors.gone","error":{"machine_code":"gone","http_status":410,"message":"The requested session is no longer usable.","request_id":"req_01JZ7Q4HZD7JQ1B5WDRVD1ZK7E","trace_id":"trace_01JZ7Q4HZD7JQ1B5WDRVD1ZK7E"}}
44444444-4444-4444-8444-444444444444
429Rate limit exceeded.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
  • RateLimit-Limit

    Quota limit for the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    120
  • RateLimit-Remaining

    Remaining quota in the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    0
  • RateLimit-Reset

    Seconds until the active public API rate-limit bucket resets.

    Schema refs

    integer

    Beispiele

    60
  • Retry-After

    Seconds the client should wait before retrying a rate-limited request.

    Schema refs

    integer

    Beispiele

    60
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
500Unexpected server error.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
POST

Cancel an upload session.

/uploads/{upload_id}/abort

Operation ID
abortUploadSession
Path template
/uploads/{upload_id}/abort
Responses
200, 400, 401, 403, 404, 409, 422, 429, 500
Scopes
files:manage
Request body
Kein body

Parameter

  • headerIdempotency-KeyErforderlich

    Client-generated retry key for write/upload operations. Reusing a key with a different body returns a conflict.

    Schema refs

    string

    Beispiele

    example-idempotency-key-0001
  • headertraceparentOptional

    W3C trace context header accepted for distributed tracing.

    Schema refs

    string

    Beispiele

    00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01
  • pathupload_idErforderlich

    Stable public upload session UUID.

    Schema refs

    UploadId

    Beispiele

    550e8400-e29b-41d4-a716-446655440000

Request headers

  • Idempotency-KeyErforderlich

    Client-generated retry key for write/upload operations. Reusing a key with a different body returns a conflict.

    Schema refs

    string

    Beispiele

    example-idempotency-key-0001
  • traceparent

    W3C trace context header accepted for distributed tracing.

    Schema refs

    string

    Beispiele

    00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01

Responses

200Upload aborted.
application/json

Schema refs

AbortUploadResponse

Beispiele

{"ok":true,"data":{"status":"aborted","lifecycleStatus":"cancelled","supportCorrelationId":"upl_aaaaaaaaaaaaaaaaaaaa"}}
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"ok":true,"data":{"status":"aborted","lifecycleStatus":"cancelled","supportCorrelationId":"upl_aaaaaaaaaaaaaaaaaaaa"}}
400Request syntax or query parameters are invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
401Authentication is missing, expired, or invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
403The token or public client lacks the required scope.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
404The requested public resource was not found or is not visible.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/not_found","title":"Resource not found","status":404,"detail":"The requested public resource was not found.","instance":"urn:moddingflow:request:req_01JZ7Q43P31JSQQF7W3R24H0ED","ok":false,"code":"not_found","machine_code":"not_found","http_status":404,"request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED","retryable":false,"docs_slug":"errors.not_found","error":{"machine_code":"not_found","http_status":404,"message":"The requested public resource was not found.","request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/not_found","title":"Resource not found","status":404,"detail":"The requested public resource was not found.","instance":"urn:moddingflow:request:req_01JZ7Q43P31JSQQF7W3R24H0ED","ok":false,"code":"not_found","machine_code":"not_found","http_status":404,"request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED","retryable":false,"docs_slug":"errors.not_found","error":{"machine_code":"not_found","http_status":404,"message":"The requested public resource was not found.","request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED"}}
44444444-4444-4444-8444-444444444444
409The operation conflicts with current state or idempotency history.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/idempotency_conflict","title":"Idempotency conflict","status":409,"detail":"The Idempotency-Key was already used with a different request body.","instance":"urn:moddingflow:request:req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","ok":false,"code":"idempotency_conflict","machine_code":"idempotency_conflict","http_status":409,"request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","retryable":false,"docs_slug":"errors.idempotency_conflict","error":{"machine_code":"idempotency_conflict","http_status":409,"message":"The Idempotency-Key was already used with a different request body.","request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/idempotency_conflict","title":"Idempotency conflict","status":409,"detail":"The Idempotency-Key was already used with a different request body.","instance":"urn:moddingflow:request:req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","ok":false,"code":"idempotency_conflict","machine_code":"idempotency_conflict","http_status":409,"request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","retryable":false,"docs_slug":"errors.idempotency_conflict","error":{"machine_code":"idempotency_conflict","http_status":409,"message":"The Idempotency-Key was already used with a different request body.","request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF"}}
44444444-4444-4444-8444-444444444444
422Field-level validation failed.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/validation_failed","title":"Validation failed","status":422,"detail":"One or more fields are invalid.","instance":"urn:moddingflow:request:req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","ok":false,"code":"validation_failed","machine_code":"validation_failed","http_status":422,"request_id":"req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","trace_id":"trace_01JZ7Q4XEKGQQ80P7RXMPVXMH6","retryable":false,"fields":[{"field":"game_version","code":"unsupported_version","message":"This game version is not supported for the selected mod."}],"docs_slug":"errors.validation_failed","error":{"machine_code":"validation_failed","http_status":422,"message":"One or more fields are invalid.","fields":[{"field":"game_version","code":"unsupported_version","message":"This game version is not supported for the selected mod."}],"request_id":"req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","trace_id":"trace_01JZ7Q4XEKGQQ80P7RXMPVXMH6"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/validation_failed","title":"Validation failed","status":422,"detail":"One or more fields are invalid.","instance":"urn:moddingflow:request:req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","ok":false,"code":"validation_failed","machine_code":"validation_failed","http_status":422,"request_id":"req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","trace_id":"trace_01JZ7Q4XEKGQQ80P7RXMPVXMH6","retryable":false,"fields":[{"field":"game_version","code":"unsupported_version","message":"This game version is not supported for the selected mod."}],"docs_slug":"errors.validation_failed","error":{"machine_code":"validation_failed","http_status":422,"message":"One or more fields are invalid.","fields":[{"field":"game_version","code":"unsupported_version","message":"This game version is not supported for the selected mod."}],"request_id":"req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","trace_id":"trace_01JZ7Q4XEKGQQ80P7RXMPVXMH6"}}
44444444-4444-4444-8444-444444444444
429Rate limit exceeded.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
  • RateLimit-Limit

    Quota limit for the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    120
  • RateLimit-Remaining

    Remaining quota in the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    0
  • RateLimit-Reset

    Seconds until the active public API rate-limit bucket resets.

    Schema refs

    integer

    Beispiele

    60
  • Retry-After

    Seconds the client should wait before retrying a rate-limited request.

    Schema refs

    integer

    Beispiele

    60
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
500Unexpected server error.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
POST

Complete an upload session.

/uploads/{upload_id}/complete

Operation ID
completeUploadSession
Path template
/uploads/{upload_id}/complete
Responses
200, 202, 400, 401, 403, 404, 409, 422, 429, 500
Scopes
files:upload
Request body
Body erforderlich

Parameter

  • headerIdempotency-KeyErforderlich

    Client-generated retry key for write/upload operations. Reusing a key with a different body returns a conflict.

    Schema refs

    string

    Beispiele

    example-idempotency-key-0001
  • headertraceparentOptional

    W3C trace context header accepted for distributed tracing.

    Schema refs

    string

    Beispiele

    00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01
  • pathupload_idErforderlich

    Stable public upload session UUID.

    Schema refs

    UploadId

    Beispiele

    550e8400-e29b-41d4-a716-446655440000

Request headers

  • Idempotency-KeyErforderlich

    Client-generated retry key for write/upload operations. Reusing a key with a different body returns a conflict.

    Schema refs

    string

    Beispiele

    example-idempotency-key-0001
  • traceparent

    W3C trace context header accepted for distributed tracing.

    Schema refs

    string

    Beispiele

    00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01

Request body

application/jsonErforderlich

Schema refs

CompleteUploadRequest

Beispiele

{"expectedHashes":{"sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","sha1":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","md5":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},"expectedSha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","parts":[{"etag":"W/\"example-etag\"","partNumber":1}]}

Responses

200Upload completed synchronously or reached a terminal processing result.
application/json

Schema refs

CompleteUploadResponse

Beispiele

{"ok":true,"data":{"actualSizeBytes":14230210,"blobId":"550e8400-e29b-41d4-a716-446655440000","contentType":"application/x-7z-compressed","deduped":false,"etag":"\"archive-etag\"","sessionId":"11111111-1111-4111-8111-111111111111","status":"ready","supportCorrelationId":"upl_7f4c2e36bd8a0e9f124c"}}
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"ok":true,"data":{"actualSizeBytes":14230210,"blobId":"550e8400-e29b-41d4-a716-446655440000","contentType":"application/x-7z-compressed","deduped":false,"etag":"\"archive-etag\"","sessionId":"11111111-1111-4111-8111-111111111111","status":"ready","supportCorrelationId":"upl_7f4c2e36bd8a0e9f124c"}}
202Upload accepted for asynchronous processing. Poll the required Location until the returned job becomes terminal.
application/json

Schema refs

CompleteUploadResponse

Beispiele

{"ok":true,"data":{"actualSizeBytes":14230210,"contentType":"application/x-7z-compressed","etag":"\"archive-etag\"","sessionId":"11111111-1111-4111-8111-111111111111","status":"processing","supportCorrelationId":"upl_7f4c2e36bd8a0e9f124c","job":{"id":"job_01JZ7R9M6TT2S8K9E0H3J3E1N2","kind":"upload_processing","resource":{"kind":"upload-session","id":"11111111-1111-4111-8111-111111111111"},"status":"queued","terminal":false,"statusEndpoint":"/v1/uploads/11111111-1111-4111-8111-111111111111","reason":null,"retry":{"retryable":true,"strategy":"worker_retry","retryAfterSeconds":10}}}}
  • LocationErforderlich

    Required polling endpoint; exactly equals data.job.statusEndpoint in this response.

    Schema refs

    string
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"ok":true,"data":{"actualSizeBytes":14230210,"contentType":"application/x-7z-compressed","etag":"\"archive-etag\"","sessionId":"11111111-1111-4111-8111-111111111111","status":"processing","supportCorrelationId":"upl_7f4c2e36bd8a0e9f124c","job":{"id":"job_01JZ7R9M6TT2S8K9E0H3J3E1N2","kind":"upload_processing","resource":{"kind":"upload-session","id":"11111111-1111-4111-8111-111111111111"},"status":"queued","terminal":false,"statusEndpoint":"/v1/uploads/11111111-1111-4111-8111-111111111111","reason":null,"retry":{"retryable":true,"strategy":"worker_retry","retryAfterSeconds":10}}}}
400Request syntax or query parameters are invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
401Authentication is missing, expired, or invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
403The token or public client lacks the required scope.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
404The requested public resource was not found or is not visible.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/not_found","title":"Resource not found","status":404,"detail":"The requested public resource was not found.","instance":"urn:moddingflow:request:req_01JZ7Q43P31JSQQF7W3R24H0ED","ok":false,"code":"not_found","machine_code":"not_found","http_status":404,"request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED","retryable":false,"docs_slug":"errors.not_found","error":{"machine_code":"not_found","http_status":404,"message":"The requested public resource was not found.","request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/not_found","title":"Resource not found","status":404,"detail":"The requested public resource was not found.","instance":"urn:moddingflow:request:req_01JZ7Q43P31JSQQF7W3R24H0ED","ok":false,"code":"not_found","machine_code":"not_found","http_status":404,"request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED","retryable":false,"docs_slug":"errors.not_found","error":{"machine_code":"not_found","http_status":404,"message":"The requested public resource was not found.","request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED"}}
44444444-4444-4444-8444-444444444444
409The operation conflicts with current state or idempotency history.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/idempotency_conflict","title":"Idempotency conflict","status":409,"detail":"The Idempotency-Key was already used with a different request body.","instance":"urn:moddingflow:request:req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","ok":false,"code":"idempotency_conflict","machine_code":"idempotency_conflict","http_status":409,"request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","retryable":false,"docs_slug":"errors.idempotency_conflict","error":{"machine_code":"idempotency_conflict","http_status":409,"message":"The Idempotency-Key was already used with a different request body.","request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/idempotency_conflict","title":"Idempotency conflict","status":409,"detail":"The Idempotency-Key was already used with a different request body.","instance":"urn:moddingflow:request:req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","ok":false,"code":"idempotency_conflict","machine_code":"idempotency_conflict","http_status":409,"request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","retryable":false,"docs_slug":"errors.idempotency_conflict","error":{"machine_code":"idempotency_conflict","http_status":409,"message":"The Idempotency-Key was already used with a different request body.","request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF"}}
44444444-4444-4444-8444-444444444444
422Field-level validation failed.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/validation_failed","title":"Validation failed","status":422,"detail":"One or more fields are invalid.","instance":"urn:moddingflow:request:req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","ok":false,"code":"validation_failed","machine_code":"validation_failed","http_status":422,"request_id":"req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","trace_id":"trace_01JZ7Q4XEKGQQ80P7RXMPVXMH6","retryable":false,"fields":[{"field":"game_version","code":"unsupported_version","message":"This game version is not supported for the selected mod."}],"docs_slug":"errors.validation_failed","error":{"machine_code":"validation_failed","http_status":422,"message":"One or more fields are invalid.","fields":[{"field":"game_version","code":"unsupported_version","message":"This game version is not supported for the selected mod."}],"request_id":"req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","trace_id":"trace_01JZ7Q4XEKGQQ80P7RXMPVXMH6"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/validation_failed","title":"Validation failed","status":422,"detail":"One or more fields are invalid.","instance":"urn:moddingflow:request:req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","ok":false,"code":"validation_failed","machine_code":"validation_failed","http_status":422,"request_id":"req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","trace_id":"trace_01JZ7Q4XEKGQQ80P7RXMPVXMH6","retryable":false,"fields":[{"field":"game_version","code":"unsupported_version","message":"This game version is not supported for the selected mod."}],"docs_slug":"errors.validation_failed","error":{"machine_code":"validation_failed","http_status":422,"message":"One or more fields are invalid.","fields":[{"field":"game_version","code":"unsupported_version","message":"This game version is not supported for the selected mod."}],"request_id":"req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","trace_id":"trace_01JZ7Q4XEKGQQ80P7RXMPVXMH6"}}
44444444-4444-4444-8444-444444444444
429Rate limit exceeded.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
  • RateLimit-Limit

    Quota limit for the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    120
  • RateLimit-Remaining

    Remaining quota in the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    0
  • RateLimit-Reset

    Seconds until the active public API rate-limit bucket resets.

    Schema refs

    integer

    Beispiele

    60
  • Retry-After

    Seconds the client should wait before retrying a rate-limited request.

    Schema refs

    integer

    Beispiele

    60
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
500Unexpected server error.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
POST

Sign upload parts.

/uploads/{upload_id}/parts

Operation ID
signUploadParts
Path template
/uploads/{upload_id}/parts
Responses
200, 400, 401, 403, 404, 409, 422, 429, 500
Scopes
files:upload
Request body
Body erforderlich

Parameter

  • headerIdempotency-KeyErforderlich

    Client-generated retry key for write/upload operations. Reusing a key with a different body returns a conflict.

    Schema refs

    string

    Beispiele

    example-idempotency-key-0001
  • headertraceparentOptional

    W3C trace context header accepted for distributed tracing.

    Schema refs

    string

    Beispiele

    00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01
  • pathupload_idErforderlich

    Stable public upload session UUID.

    Schema refs

    UploadId

    Beispiele

    550e8400-e29b-41d4-a716-446655440000

Request headers

  • Idempotency-KeyErforderlich

    Client-generated retry key for write/upload operations. Reusing a key with a different body returns a conflict.

    Schema refs

    string

    Beispiele

    example-idempotency-key-0001
  • traceparent

    W3C trace context header accepted for distributed tracing.

    Schema refs

    string

    Beispiele

    00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01

Request body

application/jsonErforderlich

Schema refs

UploadPartsRequest

Beispiele

{"partNumbers":[1]}

Responses

200Signed upload parts.
application/json

Schema refs

UploadPartsResponse

Beispiele

{"ok":true,"data":{"parts":[{"partNumber":1,"url":"https://example.invalid/moddingflow-resource","sizeBytes":1,"expiresIn":1}]}}
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"ok":true,"data":{"parts":[{"partNumber":1,"url":"https://example.invalid/moddingflow-resource","sizeBytes":1,"expiresIn":1}]}}
400Request syntax or query parameters are invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
401Authentication is missing, expired, or invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
403The token or public client lacks the required scope.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
404The requested public resource was not found or is not visible.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/not_found","title":"Resource not found","status":404,"detail":"The requested public resource was not found.","instance":"urn:moddingflow:request:req_01JZ7Q43P31JSQQF7W3R24H0ED","ok":false,"code":"not_found","machine_code":"not_found","http_status":404,"request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED","retryable":false,"docs_slug":"errors.not_found","error":{"machine_code":"not_found","http_status":404,"message":"The requested public resource was not found.","request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/not_found","title":"Resource not found","status":404,"detail":"The requested public resource was not found.","instance":"urn:moddingflow:request:req_01JZ7Q43P31JSQQF7W3R24H0ED","ok":false,"code":"not_found","machine_code":"not_found","http_status":404,"request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED","retryable":false,"docs_slug":"errors.not_found","error":{"machine_code":"not_found","http_status":404,"message":"The requested public resource was not found.","request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED"}}
44444444-4444-4444-8444-444444444444
409The operation conflicts with current state or idempotency history.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/idempotency_conflict","title":"Idempotency conflict","status":409,"detail":"The Idempotency-Key was already used with a different request body.","instance":"urn:moddingflow:request:req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","ok":false,"code":"idempotency_conflict","machine_code":"idempotency_conflict","http_status":409,"request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","retryable":false,"docs_slug":"errors.idempotency_conflict","error":{"machine_code":"idempotency_conflict","http_status":409,"message":"The Idempotency-Key was already used with a different request body.","request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/idempotency_conflict","title":"Idempotency conflict","status":409,"detail":"The Idempotency-Key was already used with a different request body.","instance":"urn:moddingflow:request:req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","ok":false,"code":"idempotency_conflict","machine_code":"idempotency_conflict","http_status":409,"request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","retryable":false,"docs_slug":"errors.idempotency_conflict","error":{"machine_code":"idempotency_conflict","http_status":409,"message":"The Idempotency-Key was already used with a different request body.","request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF"}}
44444444-4444-4444-8444-444444444444
422Field-level validation failed.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/validation_failed","title":"Validation failed","status":422,"detail":"One or more fields are invalid.","instance":"urn:moddingflow:request:req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","ok":false,"code":"validation_failed","machine_code":"validation_failed","http_status":422,"request_id":"req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","trace_id":"trace_01JZ7Q4XEKGQQ80P7RXMPVXMH6","retryable":false,"fields":[{"field":"game_version","code":"unsupported_version","message":"This game version is not supported for the selected mod."}],"docs_slug":"errors.validation_failed","error":{"machine_code":"validation_failed","http_status":422,"message":"One or more fields are invalid.","fields":[{"field":"game_version","code":"unsupported_version","message":"This game version is not supported for the selected mod."}],"request_id":"req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","trace_id":"trace_01JZ7Q4XEKGQQ80P7RXMPVXMH6"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/validation_failed","title":"Validation failed","status":422,"detail":"One or more fields are invalid.","instance":"urn:moddingflow:request:req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","ok":false,"code":"validation_failed","machine_code":"validation_failed","http_status":422,"request_id":"req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","trace_id":"trace_01JZ7Q4XEKGQQ80P7RXMPVXMH6","retryable":false,"fields":[{"field":"game_version","code":"unsupported_version","message":"This game version is not supported for the selected mod."}],"docs_slug":"errors.validation_failed","error":{"machine_code":"validation_failed","http_status":422,"message":"One or more fields are invalid.","fields":[{"field":"game_version","code":"unsupported_version","message":"This game version is not supported for the selected mod."}],"request_id":"req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","trace_id":"trace_01JZ7Q4XEKGQQ80P7RXMPVXMH6"}}
44444444-4444-4444-8444-444444444444
429Rate limit exceeded.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
  • RateLimit-Limit

    Quota limit for the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    120
  • RateLimit-Remaining

    Remaining quota in the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    0
  • RateLimit-Reset

    Seconds until the active public API rate-limit bucket resets.

    Schema refs

    integer

    Beispiele

    60
  • Retry-After

    Seconds the client should wait before retrying a rate-limited request.

    Schema refs

    integer

    Beispiele

    60
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
500Unexpected server error.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444

Webhooks

GET

List webhook deliveries.

/webhook-deliveries

Operation ID
listWebhookDeliveries
Path template
/webhook-deliveries
Responses
200, 400, 401, 403, 429, 500
Scopes
webhooks:read
Request body
Kein body

Parameter

  • headertraceparentOptional

    W3C trace context header accepted for distributed tracing.

    Schema refs

    string

    Beispiele

    00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01
  • querycreated_afterOptional

    Return resources created after this timestamp.

    Schema refs

    string

    Beispiele

    2026-07-11T10:30:00Z
  • querycursorOptional

    Opaque v1. keyset pagination cursor returned by the previous page. Treat it as an unparsed base64url token and echo it back only for the same resource, normalized filters, and sort. Incompatible or malformed reuse returns 400 invalid_input; rows inserted after page one stay outside the cursor snapshot.

    Schema refs

    string

    Beispiele

    v1.example-opaque-cursor
  • querydelivery_statusOptional

    Filter webhook deliveries by delivery status.

    Schema refs

    WebhookDeliveryStatus

    Beispiele

    queued
  • queryevent_kindOptional

    Filter webhook deliveries by stable event name.

    Schema refs

    WebhookEventKind

    Beispiele

    mod.updated
  • querylimitOptional

    Page size. The maximum public API page size is 100.

    Schema refs

    integer

    Beispiele

    25
  • querynext_attempt_beforeOptional

    Return webhook deliveries whose next retry is due before this timestamp.

    Schema refs

    string

    Beispiele

    2026-07-11T10:30:00Z

Request headers

  • traceparent

    W3C trace context header accepted for distributed tracing.

    Schema refs

    string

    Beispiele

    00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01

Responses

200Webhook delivery attempts and retry state for the authenticated actor.
application/json

Schema refs

WebhookDeliveryListResponse

Beispiele

{"ok":true,"data":{"items":[{"id":"550e8400-e29b-41d4-a716-446655440000","delivery_id":"550e8400-e29b-41d4-a716-446655440000","subscription_id":"550e8400-e29b-41d4-a716-446655440000","event_kind":"mod.updated","event_version":1,"delivery_status":"queued","attempt_count":0,"next_attempt_at":"2026-07-11T10:30:00Z","last_attempt_at":"2026-07-11T10:30:00Z","delivered_at":"2026-07-11T10:30:00Z","last_response_status":100,"last_response_latency_ms":0,"payload":{"id":"550e8400-e29b-41d4-a716-446655440000","delivery_id":"550e8400-e29b-41d4-a716-446655440000","spec_version":"1.0","event_id":"550e8400-e29b-41d4-a716-446655440000","kind":"mod.updated","type":"mod.updated","version":1,"created_at":"2026-07-11T10:30:00Z","occurred_at":"2026-07-11T10:30:00Z","subject":{"user_id":"550e8400-e29b-41d4-a716-446655440000","mod_id":"22222222-2222-4222-8222-222222222222","version_id":"33333333-3333-4333-8333-333333333333","upload_session_id":"550e8400-e29b-41d4-a716-446655440000","artifact_id":"44444444-4444-4444-8444-444444444444","job_id":"550e8400-e29b-41d4-a716-446655440000"},"data":{}},"created_at":"2026-07-11T10:30:00Z"}],"pagination":{"limit":1,"next_cursor":"v1.example-opaque-cursor","order":"example-value"}}}
  • ETag

    Weak anonymous representation validator for If-None-Match, or a strong authenticated Mod/ModVersion write validator for If-Match. Do not interchange the two.

    Schema refs

    string
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"ok":true,"data":{"items":[{"id":"550e8400-e29b-41d4-a716-446655440000","delivery_id":"550e8400-e29b-41d4-a716-446655440000","subscription_id":"550e8400-e29b-41d4-a716-446655440000","event_kind":"mod.updated","event_version":1,"delivery_status":"queued","attempt_count":0,"next_attempt_at":"2026-07-11T10:30:00Z","last_attempt_at":"2026-07-11T10:30:00Z","delivered_at":"2026-07-11T10:30:00Z","last_response_status":100,"last_response_latency_ms":0,"payload":{"id":"550e8400-e29b-41d4-a716-446655440000","delivery_id":"550e8400-e29b-41d4-a716-446655440000","spec_version":"1.0","event_id":"550e8400-e29b-41d4-a716-446655440000","kind":"mod.updated","type":"mod.updated","version":1,"created_at":"2026-07-11T10:30:00Z","occurred_at":"2026-07-11T10:30:00Z","subject":{"user_id":"550e8400-e29b-41d4-a716-446655440000","mod_id":"22222222-2222-4222-8222-222222222222","version_id":"33333333-3333-4333-8333-333333333333","upload_session_id":"550e8400-e29b-41d4-a716-446655440000","artifact_id":"44444444-4444-4444-8444-444444444444","job_id":"550e8400-e29b-41d4-a716-446655440000"},"data":{}},"created_at":"2026-07-11T10:30:00Z"}],"pagination":{"limit":1,"next_cursor":"v1.example-opaque-cursor","order":"example-value"}}}
400Request syntax or query parameters are invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
401Authentication is missing, expired, or invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
403The token or public client lacks the required scope.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
429Rate limit exceeded.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
  • RateLimit-Limit

    Quota limit for the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    120
  • RateLimit-Remaining

    Remaining quota in the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    0
  • RateLimit-Reset

    Seconds until the active public API rate-limit bucket resets.

    Schema refs

    integer

    Beispiele

    60
  • Retry-After

    Seconds the client should wait before retrying a rate-limited request.

    Schema refs

    integer

    Beispiele

    60
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
500Unexpected server error.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
POST

Manually redeliver a webhook delivery.

/webhook-deliveries/{delivery_id}/redeliver

Operation ID
redeliverWebhookDelivery
Path template
/webhook-deliveries/{delivery_id}/redeliver
Responses
202, 400, 401, 403, 404, 409, 429, 500
Scopes
webhooks:write
Request body
Body erforderlich

Parameter

  • headerIdempotency-KeyErforderlich

    Client-generated retry key for write/upload operations. Reusing a key with a different body returns a conflict.

    Schema refs

    string

    Beispiele

    example-idempotency-key-0001
  • headertraceparentOptional

    W3C trace context header accepted for distributed tracing.

    Schema refs

    string

    Beispiele

    00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01
  • pathdelivery_idErforderlich

    Stable public webhook delivery UUID used by receivers for idempotency.

    Schema refs

    WebhookDeliveryId

    Beispiele

    550e8400-e29b-41d4-a716-446655440000

Request headers

  • Idempotency-KeyErforderlich

    Client-generated retry key for write/upload operations. Reusing a key with a different body returns a conflict.

    Schema refs

    string

    Beispiele

    example-idempotency-key-0001
  • traceparent

    W3C trace context header accepted for distributed tracing.

    Schema refs

    string

    Beispiele

    00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01

Request body

application/json

Schema refs

WebhookRedeliveryRequest

Beispiele

{"reason":"example-value"}

Responses

202Linked manual redelivery created with a new delivery_id and the original event_id.
application/json

Schema refs

WebhookDeliveryResponse

Beispiele

{"ok":true,"data":{"delivery":{"id":"550e8400-e29b-41d4-a716-446655440000","delivery_id":"550e8400-e29b-41d4-a716-446655440000","subscription_id":"550e8400-e29b-41d4-a716-446655440000","event_kind":"mod.updated","event_version":1,"delivery_status":"queued","attempt_count":0,"next_attempt_at":"2026-07-11T10:30:00Z","last_attempt_at":"2026-07-11T10:30:00Z","delivered_at":"2026-07-11T10:30:00Z","last_response_status":100,"last_response_latency_ms":0,"payload":{"id":"550e8400-e29b-41d4-a716-446655440000","delivery_id":"550e8400-e29b-41d4-a716-446655440000","spec_version":"1.0","event_id":"550e8400-e29b-41d4-a716-446655440000","kind":"mod.updated","type":"mod.updated","version":1,"created_at":"2026-07-11T10:30:00Z","occurred_at":"2026-07-11T10:30:00Z","subject":{"user_id":"550e8400-e29b-41d4-a716-446655440000","mod_id":"22222222-2222-4222-8222-222222222222","version_id":"33333333-3333-4333-8333-333333333333","upload_session_id":"550e8400-e29b-41d4-a716-446655440000","artifact_id":"44444444-4444-4444-8444-444444444444","job_id":"550e8400-e29b-41d4-a716-446655440000"},"data":{}},"created_at":"2026-07-11T10:30:00Z"}}}
22222222-2222-4222-8222-222222222222
33333333-3333-4333-8333-333333333333
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"ok":true,"data":{"delivery":{"id":"550e8400-e29b-41d4-a716-446655440000","delivery_id":"550e8400-e29b-41d4-a716-446655440000","subscription_id":"550e8400-e29b-41d4-a716-446655440000","event_kind":"mod.updated","event_version":1,"delivery_status":"queued","attempt_count":0,"next_attempt_at":"2026-07-11T10:30:00Z","last_attempt_at":"2026-07-11T10:30:00Z","delivered_at":"2026-07-11T10:30:00Z","last_response_status":100,"last_response_latency_ms":0,"payload":{"id":"550e8400-e29b-41d4-a716-446655440000","delivery_id":"550e8400-e29b-41d4-a716-446655440000","spec_version":"1.0","event_id":"550e8400-e29b-41d4-a716-446655440000","kind":"mod.updated","type":"mod.updated","version":1,"created_at":"2026-07-11T10:30:00Z","occurred_at":"2026-07-11T10:30:00Z","subject":{"user_id":"550e8400-e29b-41d4-a716-446655440000","mod_id":"22222222-2222-4222-8222-222222222222","version_id":"33333333-3333-4333-8333-333333333333","upload_session_id":"550e8400-e29b-41d4-a716-446655440000","artifact_id":"44444444-4444-4444-8444-444444444444","job_id":"550e8400-e29b-41d4-a716-446655440000"},"data":{}},"created_at":"2026-07-11T10:30:00Z"}}}
22222222-2222-4222-8222-222222222222
33333333-3333-4333-8333-333333333333
44444444-4444-4444-8444-444444444444
400Request syntax or query parameters are invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
401Authentication is missing, expired, or invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
403The token or public client lacks the required scope.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
404The requested public resource was not found or is not visible.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/not_found","title":"Resource not found","status":404,"detail":"The requested public resource was not found.","instance":"urn:moddingflow:request:req_01JZ7Q43P31JSQQF7W3R24H0ED","ok":false,"code":"not_found","machine_code":"not_found","http_status":404,"request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED","retryable":false,"docs_slug":"errors.not_found","error":{"machine_code":"not_found","http_status":404,"message":"The requested public resource was not found.","request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/not_found","title":"Resource not found","status":404,"detail":"The requested public resource was not found.","instance":"urn:moddingflow:request:req_01JZ7Q43P31JSQQF7W3R24H0ED","ok":false,"code":"not_found","machine_code":"not_found","http_status":404,"request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED","retryable":false,"docs_slug":"errors.not_found","error":{"machine_code":"not_found","http_status":404,"message":"The requested public resource was not found.","request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED"}}
44444444-4444-4444-8444-444444444444
409The operation conflicts with current state or idempotency history.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/idempotency_conflict","title":"Idempotency conflict","status":409,"detail":"The Idempotency-Key was already used with a different request body.","instance":"urn:moddingflow:request:req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","ok":false,"code":"idempotency_conflict","machine_code":"idempotency_conflict","http_status":409,"request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","retryable":false,"docs_slug":"errors.idempotency_conflict","error":{"machine_code":"idempotency_conflict","http_status":409,"message":"The Idempotency-Key was already used with a different request body.","request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/idempotency_conflict","title":"Idempotency conflict","status":409,"detail":"The Idempotency-Key was already used with a different request body.","instance":"urn:moddingflow:request:req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","ok":false,"code":"idempotency_conflict","machine_code":"idempotency_conflict","http_status":409,"request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","retryable":false,"docs_slug":"errors.idempotency_conflict","error":{"machine_code":"idempotency_conflict","http_status":409,"message":"The Idempotency-Key was already used with a different request body.","request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF"}}
44444444-4444-4444-8444-444444444444
429Rate limit exceeded.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
  • RateLimit-Limit

    Quota limit for the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    120
  • RateLimit-Remaining

    Remaining quota in the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    0
  • RateLimit-Reset

    Seconds until the active public API rate-limit bucket resets.

    Schema refs

    integer

    Beispiele

    60
  • Retry-After

    Seconds the client should wait before retrying a rate-limited request.

    Schema refs

    integer

    Beispiele

    60
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
500Unexpected server error.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
GET

List webhook subscriptions.

/webhook-subscriptions

Operation ID
listWebhookSubscriptions
Path template
/webhook-subscriptions
Responses
200, 400, 401, 403, 429, 500
Scopes
webhooks:read
Request body
Kein body

Parameter

  • headertraceparentOptional

    W3C trace context header accepted for distributed tracing.

    Schema refs

    string

    Beispiele

    00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01
  • querycursorOptional

    Opaque v1. keyset pagination cursor returned by the previous page. Treat it as an unparsed base64url token and echo it back only for the same resource, normalized filters, and sort. Incompatible or malformed reuse returns 400 invalid_input; rows inserted after page one stay outside the cursor snapshot.

    Schema refs

    string

    Beispiele

    v1.example-opaque-cursor
  • querylimitOptional

    Page size. The maximum public API page size is 100.

    Schema refs

    integer

    Beispiele

    25

Request headers

  • traceparent

    W3C trace context header accepted for distributed tracing.

    Schema refs

    string

    Beispiele

    00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01

Responses

200Webhook subscriptions owned by the authenticated actor.
application/json

Schema refs

WebhookSubscriptionListResponse

Beispiele

{"ok":true,"data":{"items":[{"id":"550e8400-e29b-41d4-a716-446655440000","target_url":"https://example.invalid/moddingflow-resource","name":"Example Mod","event_kinds":["mod.updated"],"status":"active","secret_display_prefix":"example-value","signing":{"algorithm":"hmac-sha256","header":"X-Moddingflow-Signature","timestamp_header":"X-Moddingflow-Timestamp","delivery_id_header":"X-Moddingflow-Delivery-Id","payload_format":"Sign `${timestamp}.${raw_body}` and verify the v1 base64url HMAC-SHA256 signature.","tolerance_seconds":300},"signing_secret_version":1,"failure_count":0,"disabled_at":"2026-07-11T10:30:00Z","created_at":"2026-07-11T10:30:00Z","updated_at":"2026-07-11T10:30:00Z"}],"pagination":{"limit":1,"next_cursor":"v1.example-opaque-cursor","order":"example-value"}}}
  • ETag

    Weak anonymous representation validator for If-None-Match, or a strong authenticated Mod/ModVersion write validator for If-Match. Do not interchange the two.

    Schema refs

    string
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"ok":true,"data":{"items":[{"id":"550e8400-e29b-41d4-a716-446655440000","target_url":"https://example.invalid/moddingflow-resource","name":"Example Mod","event_kinds":["mod.updated"],"status":"active","secret_display_prefix":"example-value","signing":{"algorithm":"hmac-sha256","header":"X-Moddingflow-Signature","timestamp_header":"X-Moddingflow-Timestamp","delivery_id_header":"X-Moddingflow-Delivery-Id","payload_format":"Sign `${timestamp}.${raw_body}` and verify the v1 base64url HMAC-SHA256 signature.","tolerance_seconds":300},"signing_secret_version":1,"failure_count":0,"disabled_at":"2026-07-11T10:30:00Z","created_at":"2026-07-11T10:30:00Z","updated_at":"2026-07-11T10:30:00Z"}],"pagination":{"limit":1,"next_cursor":"v1.example-opaque-cursor","order":"example-value"}}}
400Request syntax or query parameters are invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
401Authentication is missing, expired, or invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
403The token or public client lacks the required scope.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
429Rate limit exceeded.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
  • RateLimit-Limit

    Quota limit for the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    120
  • RateLimit-Remaining

    Remaining quota in the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    0
  • RateLimit-Reset

    Seconds until the active public API rate-limit bucket resets.

    Schema refs

    integer

    Beispiele

    60
  • Retry-After

    Seconds the client should wait before retrying a rate-limited request.

    Schema refs

    integer

    Beispiele

    60
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
500Unexpected server error.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
POST

Create a webhook subscription.

/webhook-subscriptions

Operation ID
createWebhookSubscription
Path template
/webhook-subscriptions
Responses
201, 400, 401, 403, 409, 422, 429, 500
Scopes
webhooks:write
Request body
Body erforderlich

Parameter

  • headerIdempotency-KeyErforderlich

    Client-generated retry key for write/upload operations. Reusing a key with a different body returns a conflict.

    Schema refs

    string

    Beispiele

    example-idempotency-key-0001
  • headertraceparentOptional

    W3C trace context header accepted for distributed tracing.

    Schema refs

    string

    Beispiele

    00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01

Request headers

  • Idempotency-KeyErforderlich

    Client-generated retry key for write/upload operations. Reusing a key with a different body returns a conflict.

    Schema refs

    string

    Beispiele

    example-idempotency-key-0001
  • traceparent

    W3C trace context header accepted for distributed tracing.

    Schema refs

    string

    Beispiele

    00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01

Request body

application/jsonErforderlich

Schema refs

CreateWebhookSubscriptionRequest

Beispiele

{"name":"Example Mod","target_url":"https://example.invalid/moddingflow-resource","event_kinds":["mod.updated"],"metadata":{}}

Responses

201Webhook subscription created. The raw signing secret is returned once.
application/json

Schema refs

WebhookSubscriptionResponse

Beispiele

{"ok":true,"data":{"subscription":{"id":"550e8400-e29b-41d4-a716-446655440000","target_url":"https://example.invalid/moddingflow-resource","name":"Example Mod","event_kinds":["mod.updated"],"status":"active","secret_display_prefix":"example-value","signing":{"algorithm":"hmac-sha256","header":"X-Moddingflow-Signature","timestamp_header":"X-Moddingflow-Timestamp","delivery_id_header":"X-Moddingflow-Delivery-Id","payload_format":"Sign `${timestamp}.${raw_body}` and verify the v1 base64url HMAC-SHA256 signature.","tolerance_seconds":300},"signing_secret_version":1,"failure_count":0,"disabled_at":"2026-07-11T10:30:00Z","created_at":"2026-07-11T10:30:00Z","updated_at":"2026-07-11T10:30:00Z"},"signing_secret":"whsec_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","signing_secret_version":1}}
{"algorithm":"hmac-sha256","header":"X-Moddingflow-Signature","timestamp_header":"X-Moddingflow-Timestamp","delivery_id_header":"X-Moddingflow-Delivery-Id","payload_format":"Sign `${timestamp}.${raw_body}` and verify the v1 base64url HMAC-SHA256 signature.","tolerance_seconds":300}
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"ok":true,"data":{"subscription":{"id":"550e8400-e29b-41d4-a716-446655440000","target_url":"https://example.invalid/moddingflow-resource","name":"Example Mod","event_kinds":["mod.updated"],"status":"active","secret_display_prefix":"example-value","signing":{"algorithm":"hmac-sha256","header":"X-Moddingflow-Signature","timestamp_header":"X-Moddingflow-Timestamp","delivery_id_header":"X-Moddingflow-Delivery-Id","payload_format":"Sign `${timestamp}.${raw_body}` and verify the v1 base64url HMAC-SHA256 signature.","tolerance_seconds":300},"signing_secret_version":1,"failure_count":0,"disabled_at":"2026-07-11T10:30:00Z","created_at":"2026-07-11T10:30:00Z","updated_at":"2026-07-11T10:30:00Z"},"signing_secret":"whsec_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","signing_secret_version":1}}
{"algorithm":"hmac-sha256","header":"X-Moddingflow-Signature","timestamp_header":"X-Moddingflow-Timestamp","delivery_id_header":"X-Moddingflow-Delivery-Id","payload_format":"Sign `${timestamp}.${raw_body}` and verify the v1 base64url HMAC-SHA256 signature.","tolerance_seconds":300}
400Request syntax or query parameters are invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
401Authentication is missing, expired, or invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
403The token or public client lacks the required scope.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
409The operation conflicts with current state or idempotency history.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/idempotency_conflict","title":"Idempotency conflict","status":409,"detail":"The Idempotency-Key was already used with a different request body.","instance":"urn:moddingflow:request:req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","ok":false,"code":"idempotency_conflict","machine_code":"idempotency_conflict","http_status":409,"request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","retryable":false,"docs_slug":"errors.idempotency_conflict","error":{"machine_code":"idempotency_conflict","http_status":409,"message":"The Idempotency-Key was already used with a different request body.","request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/idempotency_conflict","title":"Idempotency conflict","status":409,"detail":"The Idempotency-Key was already used with a different request body.","instance":"urn:moddingflow:request:req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","ok":false,"code":"idempotency_conflict","machine_code":"idempotency_conflict","http_status":409,"request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","retryable":false,"docs_slug":"errors.idempotency_conflict","error":{"machine_code":"idempotency_conflict","http_status":409,"message":"The Idempotency-Key was already used with a different request body.","request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF"}}
44444444-4444-4444-8444-444444444444
422Field-level validation failed.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/validation_failed","title":"Validation failed","status":422,"detail":"One or more fields are invalid.","instance":"urn:moddingflow:request:req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","ok":false,"code":"validation_failed","machine_code":"validation_failed","http_status":422,"request_id":"req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","trace_id":"trace_01JZ7Q4XEKGQQ80P7RXMPVXMH6","retryable":false,"fields":[{"field":"game_version","code":"unsupported_version","message":"This game version is not supported for the selected mod."}],"docs_slug":"errors.validation_failed","error":{"machine_code":"validation_failed","http_status":422,"message":"One or more fields are invalid.","fields":[{"field":"game_version","code":"unsupported_version","message":"This game version is not supported for the selected mod."}],"request_id":"req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","trace_id":"trace_01JZ7Q4XEKGQQ80P7RXMPVXMH6"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/validation_failed","title":"Validation failed","status":422,"detail":"One or more fields are invalid.","instance":"urn:moddingflow:request:req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","ok":false,"code":"validation_failed","machine_code":"validation_failed","http_status":422,"request_id":"req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","trace_id":"trace_01JZ7Q4XEKGQQ80P7RXMPVXMH6","retryable":false,"fields":[{"field":"game_version","code":"unsupported_version","message":"This game version is not supported for the selected mod."}],"docs_slug":"errors.validation_failed","error":{"machine_code":"validation_failed","http_status":422,"message":"One or more fields are invalid.","fields":[{"field":"game_version","code":"unsupported_version","message":"This game version is not supported for the selected mod."}],"request_id":"req_01JZ7Q4XEKGQQ80P7RXMPVXMH6","trace_id":"trace_01JZ7Q4XEKGQQ80P7RXMPVXMH6"}}
44444444-4444-4444-8444-444444444444
429Rate limit exceeded.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
  • RateLimit-Limit

    Quota limit for the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    120
  • RateLimit-Remaining

    Remaining quota in the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    0
  • RateLimit-Reset

    Seconds until the active public API rate-limit bucket resets.

    Schema refs

    integer

    Beispiele

    60
  • Retry-After

    Seconds the client should wait before retrying a rate-limited request.

    Schema refs

    integer

    Beispiele

    60
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
500Unexpected server error.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
POST

Rotate a webhook subscription signing secret.

/webhook-subscriptions/{subscription_id}/rotate-secret

Operation ID
rotateWebhookSubscriptionSecret
Path template
/webhook-subscriptions/{subscription_id}/rotate-secret
Responses
200, 400, 401, 403, 404, 409, 429, 500
Scopes
webhooks:write
Request body
Body erforderlich

Parameter

  • headerIdempotency-KeyErforderlich

    Client-generated retry key for write/upload operations. Reusing a key with a different body returns a conflict.

    Schema refs

    string

    Beispiele

    example-idempotency-key-0001
  • headertraceparentOptional

    W3C trace context header accepted for distributed tracing.

    Schema refs

    string

    Beispiele

    00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01
  • pathsubscription_idErforderlich

    Stable public webhook subscription UUID.

    Schema refs

    WebhookSubscriptionId

    Beispiele

    550e8400-e29b-41d4-a716-446655440000

Request headers

  • Idempotency-KeyErforderlich

    Client-generated retry key for write/upload operations. Reusing a key with a different body returns a conflict.

    Schema refs

    string

    Beispiele

    example-idempotency-key-0001
  • traceparent

    W3C trace context header accepted for distributed tracing.

    Schema refs

    string

    Beispiele

    00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01

Request body

application/json

Schema refs

WebhookSecretRotationRequest

Beispiele

{"overlap_seconds":3600}

Responses

200Signing secret rotated. The raw secret is returned once and is never persisted in generic idempotency storage.
application/json

Schema refs

WebhookSecretRotationResponse

Beispiele

{"ok":true,"data":{"subscription_id":"550e8400-e29b-41d4-a716-446655440000","signing_secret":"whsec_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","signing_secret_version":2,"secret_display_prefix":"example-value","overlap_expires_at":"2026-07-11T10:30:00Z"}}
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"ok":true,"data":{"subscription_id":"550e8400-e29b-41d4-a716-446655440000","signing_secret":"whsec_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","signing_secret_version":2,"secret_display_prefix":"example-value","overlap_expires_at":"2026-07-11T10:30:00Z"}}
400Request syntax or query parameters are invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/invalid_request","title":"Invalid request","status":400,"detail":"Request body must be valid JSON.","instance":"urn:moddingflow:request:req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","ok":false,"code":"invalid_request","machine_code":"invalid_request","http_status":400,"request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A","retryable":false,"docs_slug":"errors.invalid_request","error":{"machine_code":"invalid_request","http_status":400,"message":"Request body must be valid JSON.","request_id":"req_01JZ7Q3J6WQX8P6M0K6W0R5B7A","trace_id":"trace_01JZ7Q3J6WQX8P6M0K6W0R5B7A"}}
44444444-4444-4444-8444-444444444444
401Authentication is missing, expired, or invalid.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/unauthorized","title":"Unauthorized","status":401,"detail":"Bearer token is required.","instance":"urn:moddingflow:request:req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","ok":false,"code":"unauthorized","machine_code":"unauthorized","http_status":401,"request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","retryable":false,"docs_slug":"errors.unauthorized","error":{"machine_code":"unauthorized","http_status":401,"message":"Bearer token is required.","request_id":"req_01JZ7Q3QYBBYB9C4T1E8VNW3YJ","trace_id":"trace_01JZ7Q3QYBBYB9C4T1E8VNW3YJ"}}
44444444-4444-4444-8444-444444444444
403The token or public client lacks the required scope.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/forbidden","title":"Forbidden","status":403,"detail":"Required scope is missing.","instance":"urn:moddingflow:request:req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","ok":false,"code":"forbidden","machine_code":"forbidden","http_status":403,"request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","retryable":false,"required_scopes":["mods:write"],"docs_slug":"errors.forbidden","error":{"machine_code":"forbidden","http_status":403,"message":"Required scope is missing.","request_id":"req_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2","trace_id":"trace_01JZ7Q3X2YQ0S6C6ZPFTW2SMX2"}}
44444444-4444-4444-8444-444444444444
404The requested public resource was not found or is not visible.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/not_found","title":"Resource not found","status":404,"detail":"The requested public resource was not found.","instance":"urn:moddingflow:request:req_01JZ7Q43P31JSQQF7W3R24H0ED","ok":false,"code":"not_found","machine_code":"not_found","http_status":404,"request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED","retryable":false,"docs_slug":"errors.not_found","error":{"machine_code":"not_found","http_status":404,"message":"The requested public resource was not found.","request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/not_found","title":"Resource not found","status":404,"detail":"The requested public resource was not found.","instance":"urn:moddingflow:request:req_01JZ7Q43P31JSQQF7W3R24H0ED","ok":false,"code":"not_found","machine_code":"not_found","http_status":404,"request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED","retryable":false,"docs_slug":"errors.not_found","error":{"machine_code":"not_found","http_status":404,"message":"The requested public resource was not found.","request_id":"req_01JZ7Q43P31JSQQF7W3R24H0ED","trace_id":"trace_01JZ7Q43P31JSQQF7W3R24H0ED"}}
44444444-4444-4444-8444-444444444444
409The operation conflicts with current state or idempotency history.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/idempotency_conflict","title":"Idempotency conflict","status":409,"detail":"The Idempotency-Key was already used with a different request body.","instance":"urn:moddingflow:request:req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","ok":false,"code":"idempotency_conflict","machine_code":"idempotency_conflict","http_status":409,"request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","retryable":false,"docs_slug":"errors.idempotency_conflict","error":{"machine_code":"idempotency_conflict","http_status":409,"message":"The Idempotency-Key was already used with a different request body.","request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/idempotency_conflict","title":"Idempotency conflict","status":409,"detail":"The Idempotency-Key was already used with a different request body.","instance":"urn:moddingflow:request:req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","ok":false,"code":"idempotency_conflict","machine_code":"idempotency_conflict","http_status":409,"request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","retryable":false,"docs_slug":"errors.idempotency_conflict","error":{"machine_code":"idempotency_conflict","http_status":409,"message":"The Idempotency-Key was already used with a different request body.","request_id":"req_01JZ7Q4AT5GHZXC0KNEDZ2YNSF","trace_id":"trace_01JZ7Q4AT5GHZXC0KNEDZ2YNSF"}}
44444444-4444-4444-8444-444444444444
429Rate limit exceeded.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
  • RateLimit-Limit

    Quota limit for the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    120
  • RateLimit-Remaining

    Remaining quota in the active public API rate-limit bucket.

    Schema refs

    integer

    Beispiele

    0
  • RateLimit-Reset

    Seconds until the active public API rate-limit bucket resets.

    Schema refs

    integer

    Beispiele

    60
  • Retry-After

    Seconds the client should wait before retrying a rate-limited request.

    Schema refs

    integer

    Beispiele

    60
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/rate_limited","title":"Rate limit exceeded","status":429,"detail":"Public API rate limit exceeded before side effects.","instance":"urn:moddingflow:request:req_01JZ7Q54FMQNEJCW8CRK5VHM1C","ok":false,"code":"rate_limited","machine_code":"rate_limited","http_status":429,"request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C","retryable":true,"retry_after_seconds":60,"quota_bucket":"catalog.search.ip","docs_slug":"errors.rate_limited","error":{"machine_code":"rate_limited","http_status":429,"message":"Public API rate limit exceeded before side effects.","request_id":"req_01JZ7Q54FMQNEJCW8CRK5VHM1C","trace_id":"trace_01JZ7Q54FMQNEJCW8CRK5VHM1C"}}
44444444-4444-4444-8444-444444444444
500Unexpected server error.
application/problem+json

Schema refs

ProblemDetailsError

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444
  • X-Request-Id

    Server-generated request id also present in error envelopes.

    Schema refs

    string

Beispiele

{"type":"https://api.moddingflow.com/problems/internal_error","title":"Internal server error","status":500,"detail":"Unexpected server error.","instance":"urn:moddingflow:request:req_01JZ7Q5B0VNX4D8S55A1PV39H7","ok":false,"code":"internal_error","machine_code":"internal_error","http_status":500,"request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7","retryable":true,"docs_slug":"errors.internal_error","error":{"machine_code":"internal_error","http_status":500,"message":"Unexpected server error.","request_id":"req_01JZ7Q5B0VNX4D8S55A1PV39H7","trace_id":"trace_01JZ7Q5B0VNX4D8S55A1PV39H7"}}
44444444-4444-4444-8444-444444444444

Schemas

AbortUploadResponseobject

required=2; properties=2

AgentGatewayPolicyobject

required=4; properties=4

AgentTokenExchangeRequestobject

required=5; properties=8

Beispiele

mods:read files:download install_plans:resolve
AgentToolDefinitionobject

required=7; properties=8

AgentToolNamestring

required=0; properties=0

mods.search, mods.get, install_plans.resolve, downloads.resolve, versions.compare, publisher.draft, publisher.validate

AgentToolRegistryResponseobject

required=2; properties=2

AgentToolRunRequestobject

required=1; properties=5

AgentToolRunResponseobject

required=2; properties=2

ApiKeyCapabilitiesResponseobject

required=2; properties=2

ApiKeyListResponseobject

required=2; properties=2

ApiKeyOneTimeSecretResponseobject

required=2; properties=2

ApiKeyResourceGrantobject

required=2; properties=2

ApiKeyRevocationResponseobject

required=2; properties=2

ArtifactDownloadMetadataobject

required=2; properties=2

ArtifactIdobject

Stable public artifact UUID.

required=0; properties=0

Beispiele

44444444-4444-4444-8444-444444444444
AsyncJobobject

required=6; properties=13

AsyncJobProgressobject

Truthful coarse lifecycle completion. This is a single job unit, not an estimated scan percentage: non-terminal jobs return 0/1 and terminal jobs return 1/1, including unsuccessful terminal outcomes.

required=4; properties=4

AsyncJobResourceobject

required=2; properties=2

AsyncJobRetryPolicyobject

required=3; properties=6

AsyncJobStatusstring

Stable status values for public API long-running jobs. queued and processing are non-terminal; succeeded, rejected, failed, and cancelled are terminal.

required=0; properties=0

queued, processing, succeeded, rejected, failed, cancelled

AuthorizationCodeTokenRequestobject

required=4; properties=6

Beispiele

website
app_550e8400e29b41d4a716446655440000
CatalogFacetListResponseobject

required=2; properties=2

CatalogSearchResponseobject

required=2; properties=2

CompleteUploadRequestobject

required=0; properties=3

CompleteUploadResponseobject

required=2; properties=2

CreateApiKeyRequestobject

required=2; properties=4

CreateModRequestobject

required=7; properties=11

CreateModVersionRequestobject

required=1; properties=14

CreateUploadRequestobject

required=3; properties=8

CreateWebhookSubscriptionRequestobject

required=2; properties=4

DeviceAuthorizationRequestobject

required=0; properties=3

Beispiele

website
app_550e8400e29b41d4a716446655440000
mods:read files:download install_plans:resolve
DeviceAuthorizationResponseobject

required=6; properties=6

DeviceCodeTokenRequestobject

required=2; properties=4

Beispiele

website
app_550e8400e29b41d4a716446655440000
DomainAvailabilityStatestring

required=0; properties=0

active, archived, tombstoned

DomainEntityKindstring

required=0; properties=0

Game, Mod, ModVersion, Artifact, Blob, UploadSession, DownloadGrant, User, Team, Dependency, Job, WebhookSubscription, WebhookDelivery

DownloadFallbackRequestobject

required=1; properties=3

DownloadFallbackResponseobject

required=2; properties=2

Beispiele

44444444-4444-4444-8444-444444444444
DownloadGrantobject

required=8; properties=9

Beispiele

44444444-4444-4444-8444-444444444444
DownloadJobobject

required=8; properties=10

Beispiele

44444444-4444-4444-8444-444444444444
DownloadResolveRequestobject

required=0; properties=4

DownloadResolveResponseobject

required=2; properties=2

Beispiele

44444444-4444-4444-8444-444444444444
ErrorEnvelopeobject

required=3; properties=3

FieldErrorobject

required=3; properties=3

FileIntegrityHashesobject

Extensible hashes of the complete immutable stored file bytes. SHA-256 is canonical for new clients and is not interchangeable with an HTTP ETag or a digest of one range; SHA-1 and MD5 are compatibility-only when present.

required=1; properties=3

GameListResponseobject

required=2; properties=2

GameResponseobject

required=2; properties=2

InstallPlanConflictobject

required=3; properties=6

Beispiele

22222222-2222-4222-8222-222222222222
InstallPlanDependencyConstraintobject

required=3; properties=6

Beispiele

22222222-2222-4222-8222-222222222222
InstallPlanResolveRequestobject

required=2; properties=12

Beispiele

44444444-4444-4444-8444-444444444444
22222222-2222-4222-8222-222222222222
33333333-3333-4333-8333-333333333333
InstallPlanResolveResponseobject

required=2; properties=2

InstallPlanStepobject

required=6; properties=15

Beispiele

22222222-2222-4222-8222-222222222222
33333333-3333-4333-8333-333333333333
44444444-4444-4444-8444-444444444444
JsonWebKeyobject

required=6; properties=6

JsonWebKeySetobject

required=1; properties=1

LocalizedStringMapobject

Localized text keyed by BCP 47 language tags supported by the site.

required=0; properties=0

ModDependencyListResponseobject

required=2; properties=2

ModIdobject

Stable public mod UUID.

required=0; properties=0

Beispiele

22222222-2222-4222-8222-222222222222
ModListResponseobject

required=2; properties=2

ModResponseobject

required=2; properties=2

Beispiele

22222222-2222-4222-8222-222222222222
ModVersionListResponseobject

required=2; properties=2

ModVersionResponseobject

required=2; properties=2

Beispiele

33333333-3333-4333-8333-333333333333
22222222-2222-4222-8222-222222222222
44444444-4444-4444-8444-444444444444
[{"id":"44444444-4444-4444-8444-444444444444","mod_id":"22222222-2222-4222-8222-222222222222","version_id":"33333333-3333-4333-8333-333333333333","file_kind":"main","label":"Main archive","original_filename":"mod-1.0.0.zip","content_type":"application/zip","game_version_key":"1.6.1170","loader_key":null,"size_bytes":1048576,"sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","hashes":{"sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},"artifact_source":"r2_blob","status":"published","scan_status":"clean","download_metadata":{"resolve_endpoint":"/v1/downloads/44444444-4444-4444-8444-444444444444/resolve","range_supported":true}}]
OAuthAuthorizationServerMetadataobject

required=11; properties=11

Beispiele

["code"]
["authorization_code","refresh_token","urn:ietf:params:oauth:grant-type:device_code","urn:ietf:params:oauth:grant-type:token-exchange"]
["S256"]
["none","client_secret_basic","client_secret_post"]
OAuthClientKeystring

Opaque registered OAuth client identifier. First-party clients use stable lowercase registry keys and self-service applications use app_<lowercase UUID/hex>. This schema is intentionally open and extensible: treat values as opaque and do not branch on a fixed enum.

required=0; properties=0

Beispiele

website
app_550e8400e29b41d4a716446655440000
OAuthIntrospectionRequestobject

required=1; properties=2

OAuthIntrospectionResponseobject

required=1; properties=9

Beispiele

mods:read files:download install_plans:resolve
website
app_550e8400e29b41d4a716446655440000
OAuthRevocationRequestobject

required=1; properties=4

Beispiele

website
app_550e8400e29b41d4a716446655440000
OAuthRevocationResponseobject

required=1; properties=2

OAuthTokenRequestobject

required=0; properties=0

OAuthTokenResponseobject

required=4; properties=7

Beispiele

mods:read files:download install_plans:resolve
OidcDiscoveryResponseobject

required=16; properties=16

Beispiele

["code"]
["query"]
["authorization_code","refresh_token","urn:ietf:params:oauth:grant-type:device_code","urn:ietf:params:oauth:grant-type:token-exchange"]
["S256"]
["none","client_secret_basic","client_secret_post"]
["public"]
["RS256"]
["iss","sub","aud","exp","iat","nonce"]
PaginationMetaobject

required=3; properties=3

PersonalAccessTokenMetadataobject

required=8; properties=14

ProblemDetailsErrorobject

RFC 9457 Problem Details response for Moddingflow public API errors. The code/error fields are compatibility extensions for existing clients.

required=8; properties=19

Beispiele

44444444-4444-4444-8444-444444444444
PublicAccessTierstring

required=0; properties=0

public, restricted, paid

PublicApiErrorobject

required=5; properties=6

PublicApiModWriteResponseobject

required=2; properties=3

Beispiele

22222222-2222-4222-8222-222222222222
PublicApiScopestring

Granular public API scope. admin:* is reserved for trusted internal clients only.

required=0; properties=0

openid, mods:read, mods:write, versions:write, versions:publish, versions:archive, files:upload, files:manage, files:download, install_plans:resolve, profile:read, webhooks:read, webhooks:write, private_data:read, teams:admin, agent:run, agent:tools:read, agent:tools:download, agent:tools:publish_draft, agent:tools:write_confirmed, agent:tools:write, admin:*

PublicApiVersionWriteResponseobject

required=2; properties=3

Beispiele

33333333-3333-4333-8333-333333333333
22222222-2222-4222-8222-222222222222
44444444-4444-4444-8444-444444444444
PublicBlobobject

Provider-neutral immutable byte identity. Bucket, object key, ETag, and filename are deliberately absent.

required=5; properties=6

PublicBuildobject

required=6; properties=11

PublicCatalogCategoryobject

required=2; properties=2

PublicCatalogFacetobject

required=3; properties=6

PublicChangelogEntryobject

required=0; properties=3

PublicGameobject

required=4; properties=8

PublicIdentityLifecycleobject

required=4; properties=5

PublicJobobject

required=6; properties=7

PublicModobject

required=6; properties=24

Beispiele

22222222-2222-4222-8222-222222222222
PublicModArtifactobject

required=6; properties=16

Beispiele

44444444-4444-4444-8444-444444444444
22222222-2222-4222-8222-222222222222
33333333-3333-4333-8333-333333333333
PublicModArtifactDetailsobject

Complete managed artifact metadata emitted only when the current immutable blob has truthful integrity, AV-scan, and resolve-eligibility evidence.

required=0; properties=0

PublicModDependencyobject

required=4; properties=11

Beispiele

22222222-2222-4222-8222-222222222222
PublicModLicenseobject

required=3; properties=7

Beispiele

22222222-2222-4222-8222-222222222222
PublicModPermissionsobject

required=5; properties=8

Beispiele

22222222-2222-4222-8222-222222222222
PublicModVersionobject

required=6; properties=15

Beispiele

33333333-3333-4333-8333-333333333333
22222222-2222-4222-8222-222222222222
44444444-4444-4444-8444-444444444444
[{"id":"44444444-4444-4444-8444-444444444444","mod_id":"22222222-2222-4222-8222-222222222222","version_id":"33333333-3333-4333-8333-333333333333","file_kind":"main","label":"Main archive","original_filename":"mod-1.0.0.zip","content_type":"application/zip","game_version_key":"1.6.1170","loader_key":null,"size_bytes":1048576,"sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","hashes":{"sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"},"artifact_source":"r2_blob","status":"published","scan_status":"clean","download_metadata":{"resolve_endpoint":"/v1/downloads/44444444-4444-4444-8444-444444444444/resolve","range_supported":true}}]
PublicTeamobject

required=7; properties=7

Beispiele

22222222-2222-4222-8222-222222222222
PublicUserobject

Privacy-minimized public account identity. Email, login credentials, and auth-provider identifiers are never part of this schema.

required=5; properties=6

PublicVisibilitystring

required=0; properties=0

public, unlisted, private, test_mode

PublishStatestring

required=0; properties=0

draft, uploaded, quarantined, scanning, rejected, approved, published, archived

RefreshTokenRequestobject

required=2; properties=5

Beispiele

website
app_550e8400e29b41d4a716446655440000
mods:read files:download install_plans:resolve
ReleaseChannelstring

required=0; properties=0

stable, beta, alpha, experimental

ScopeStringstring

Space-delimited public API scopes.

required=0; properties=0

Beispiele

mods:read files:download install_plans:resolve
SetTeamMemberRequestobject

required=1; properties=1

Slugstring

required=0; properties=0

SuccessEnvelopeobject

required=2; properties=2

TeamMemberobject

required=3; properties=5

TeamMemberListResponseobject

required=2; properties=2

TeamMemberRemovalResponseobject

required=2; properties=2

TeamMemberResponseobject

required=2; properties=2

TeamPublishingRolestring

required=0; properties=0

owner, maintainer, publisher, reviewer

UpdateModRequestobject

required=0; properties=11

UpdateModVersionRequestobject

required=0; properties=14

UploadArchiveManifestobject

required=0; properties=5

UploadBuildMetadataobject

required=0; properties=7

UploadCompletedPartobject

required=3; properties=3

UploadContractErrorCodestring

Current stable machine-readable upload/version preflight and lifecycle error codes. Clients must still handle unknown future codes as generic API errors.

required=0; properties=0

account_blocked, archive_dangerous_entry, archive_duplicate_path, archive_encrypted_entry, archive_path_traversal, archive_symlink_entry, archive_too_large, av_scan_rejected, duplicate_version, file_not_found, forbidden, idempotency_conflict, idempotency_in_progress, idempotency_key_required, idempotency_replay_unavailable, insufficient_scope, invalid_file_id, invalid_input, invalid_json, invalid_metadata, invalid_part_numbers, invalid_parts, invalid_request, invalid_sha256, invalid_size, invalid_staging_object, invalid_state_transition, missing_sha256, not_found, part_checksum_mismatch, part_size_mismatch, rate_limited, request_body_too_large, service_unavailable, session_expired, session_not_abortable, session_not_found, session_not_multipart, session_not_uploaded, session_not_uploading, sha256_mismatch, size_mismatch, unauthorized, unsupported_archive_extension, version_not_ready

UploadContractLifecycleStatusstring

Canonical end-to-end creator automation state. The legacy status field remains additive compatibility metadata.

required=0; properties=0

draft, uploading, uploaded, validating, scanning, quarantined, ready, published, failed, cancelled

UploadIdobject

Stable public upload session UUID.

required=0; properties=0

UploadPartsRequestobject

required=1; properties=1

UploadPartsResponseobject

required=2; properties=2

UploadProgressobject

required=6; properties=6

UploadRequestMetadataobject

required=0; properties=2

UploadResumePolicyobject

required=2; properties=4

UploadRetryPolicyobject

required=4; properties=4

UploadSessionActionEndpointsobject

required=4; properties=4

UploadSessionLifecycleStatusstring

Stable upload-session lifecycle state. aborted is the public cancel state for sessions stopped by the client.

required=0; properties=0

created, uploading, uploaded, processing, ready, failed, aborted, expired

UploadSessionResponseobject

required=2; properties=3

Beispiele

{"if-none-match":"*"}
UploadSessionStatusResponseobject

required=2; properties=2

UploadSupportCorrelationIdstring

Pseudonymous support-safe upload handle. It contains no user, filename, storage-key, API-key, or token material and grants no access.

required=0; properties=0

UploadValidationResponseobject

required=2; properties=2

Uuidstring

required=0; properties=0

ValidateUploadRequestobject

required=0; properties=0

VersionBuildMetadataobject

required=0; properties=7

VersionChangelogInputobject

required=0; properties=0

VersionDependencyInputobject

required=1; properties=5

VersionIdobject

Stable public mod version UUID.

required=0; properties=0

Beispiele

33333333-3333-4333-8333-333333333333
VersionLifecycleStatestring

Canonical ModVersion lifecycle. Legacy uploaded/quarantined/approved/rejected values remain accepted as additive compatibility aliases.

required=0; properties=0

draft, validating, scanning, ready, published, archived, withdrawn, failed

VersionRequestMetadataobject

required=0; properties=13

VersionRequirementInputobject

required=2; properties=4

WebhookDeliveryobject

required=9; properties=18

Beispiele

22222222-2222-4222-8222-222222222222
33333333-3333-4333-8333-333333333333
44444444-4444-4444-8444-444444444444
WebhookDeliveryIdstring

Opaque public webhook delivery id. Receivers persist this id for idempotency.

required=0; properties=0

WebhookDeliveryListResponseobject

required=2; properties=2

WebhookDeliveryPayloadobject

required=11; properties=11

Beispiele

22222222-2222-4222-8222-222222222222
33333333-3333-4333-8333-333333333333
44444444-4444-4444-8444-444444444444
WebhookDeliveryResponseobject

required=2; properties=2

Beispiele

22222222-2222-4222-8222-222222222222
33333333-3333-4333-8333-333333333333
44444444-4444-4444-8444-444444444444
WebhookDeliveryStatusstring

required=0; properties=0

queued, delivering, delivered, failed, exhausted, cancelled

WebhookEventKindstring

Stable public webhook event name. New values are additive and require tolerant receivers.

required=0; properties=0

mod.updated, version.published, file.ready, file.failed, upload.completed, scan.completed, token.changed, app.changed

WebhookEventSubjectobject

Opaque resource identifiers for the event subject. Mutable slugs are never required.

required=0; properties=6

Beispiele

22222222-2222-4222-8222-222222222222
33333333-3333-4333-8333-333333333333
44444444-4444-4444-8444-444444444444
WebhookRedeliveryRequestobject

required=0; properties=1

WebhookSecretRotationRequestobject

required=0; properties=1

WebhookSecretRotationResponseobject

required=2; properties=2

WebhookSigningobject

required=5; properties=6

Beispiele

{"algorithm":"hmac-sha256","header":"X-Moddingflow-Signature","timestamp_header":"X-Moddingflow-Timestamp","delivery_id_header":"X-Moddingflow-Delivery-Id","payload_format":"Sign `${timestamp}.${raw_body}` and verify the v1 base64url HMAC-SHA256 signature.","tolerance_seconds":300}
WebhookSubscriptionobject

required=8; properties=12

Beispiele

{"algorithm":"hmac-sha256","header":"X-Moddingflow-Signature","timestamp_header":"X-Moddingflow-Timestamp","delivery_id_header":"X-Moddingflow-Delivery-Id","payload_format":"Sign `${timestamp}.${raw_body}` and verify the v1 base64url HMAC-SHA256 signature.","tolerance_seconds":300}
WebhookSubscriptionIdstring

Opaque public webhook subscription id.

required=0; properties=0

WebhookSubscriptionListResponseobject

required=2; properties=2

WebhookSubscriptionResponseobject

required=2; properties=2

Beispiele

{"algorithm":"hmac-sha256","header":"X-Moddingflow-Signature","timestamp_header":"X-Moddingflow-Timestamp","delivery_id_header":"X-Moddingflow-Delivery-Id","payload_format":"Sign `${timestamp}.${raw_body}` and verify the v1 base64url HMAC-SHA256 signature.","tolerance_seconds":300}
WebhookSubscriptionStatusstring

required=0; properties=0

active, disabled