{"openapi":"3.1.0","info":{"title":"ERP API","version":"0.0.0-dev"},"servers":[{"url":"https://api.houzle.com"}],"components":{"schemas":{"ErrorResponse":{"type":"object","properties":{"request_id":{"type":"string"},"error":{"type":"object","properties":{"code":{"type":"string","enum":["VALIDATION_FAILED","UNAUTHENTICATED","MFA_REQUIRED","STEP_UP_REQUIRED","CSRF_FAILED","PERMISSION_DENIED","INSUFFICIENT_SCOPE","FIELD_NOT_WRITABLE","POLICY_DENIED","APPROVAL_REQUIRED","IDENTITY_SUSPENDED","CREDENTIAL_REVOKED","TENANT_SUSPENDED","NOT_FOUND","METHOD_NOT_ALLOWED","APPROVAL_INVALID","APPROVAL_EXPIRED","APPROVAL_MISMATCH","VERSION_CONFLICT","INVALID_STATE_TRANSITION","DUPLICATE_DETECTED","INSUFFICIENT_STOCK","LEASE_CONFLICT","IDEMPOTENCY_IN_PROGRESS","CONNECTOR_REAUTH_REQUIRED","PRECONDITION_FAILED","PAYLOAD_TOO_LARGE","UNSUPPORTED_MEDIA_TYPE","IDEMPOTENCY_KEY_REUSED","RATE_LIMITED","QUOTA_EXCEEDED","BUDGET_EXCEEDED","AUTH_THROTTLED","INTERNAL","DEPENDENCY_UNAVAILABLE","CONCURRENCY_CONFLICT","READ_ONLY_MODE"]},"message":{"type":"string"},"retryable":{"type":"boolean"},"required_action":{"type":"string","enum":["fix_input","create_approval_request","wait_for_approval","refresh_and_retry","retry_later","reauthorize_connector","request_permission","step_up_mfa","contact_admin","use_new_idempotency_key","none"]},"missing_permissions":{"type":"array","items":{"type":"string"}},"field_errors":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"code":{"type":"string"},"message":{"type":"string"}},"required":["path","code","message"],"additionalProperties":false}},"policy_id":{"type":"string"},"plan_id":{"type":"string"},"current_state":{"type":"object","additionalProperties":{}},"details":{"type":"object","additionalProperties":{}},"docs_url":{"type":"string"}},"required":["code","message","retryable","required_action","missing_permissions","field_errors","details","docs_url"],"additionalProperties":false}},"required":["request_id","error"],"additionalProperties":false},"HealthResponse":{"type":"object","properties":{"status":{"type":"string","enum":["ok"]},"version":{"type":"string"},"commit":{"type":"string"},"time":{"type":"string"}},"required":["status","version","commit","time"],"additionalProperties":false,"example":{"status":"ok","version":"1.4.0","commit":"3f2c1ab","time":"2026-09-25T10:00:00.000Z"}}},"parameters":{},"examples":{"VALIDATION_FAILED":{"summary":"VALIDATION_FAILED","value":{"request_id":"req_01J8Z5Q4W3E2R1T0Y9V8S7N6P5","error":{"code":"VALIDATION_FAILED","message":"La petición no es válida. Corrige los campos indicados en field_errors y vuelve a intentarlo.","retryable":false,"required_action":"fix_input","missing_permissions":[],"field_errors":[{"path":"data.discount_pct","code":"too_big","message":"El valor es demasiado grande (máximo 100)."}],"details":{},"docs_url":"https://api.houzle.com/docs/errors#VALIDATION_FAILED"}}},"UNAUTHENTICATED":{"summary":"UNAUTHENTICATED","value":{"request_id":"req_01J8Z5Q4W3E2R1T0Y9V8S7N6P5","error":{"code":"UNAUTHENTICATED","message":"No se ha podido autenticar la petición. Envía credenciales válidas.","retryable":false,"required_action":"none","missing_permissions":[],"field_errors":[],"details":{},"docs_url":"https://api.houzle.com/docs/errors#UNAUTHENTICATED"}}},"MFA_REQUIRED":{"summary":"MFA_REQUIRED","value":{"request_id":"req_01J8Z5Q4W3E2R1T0Y9V8S7N6P5","error":{"code":"MFA_REQUIRED","message":"Se requiere autenticación multifactor. Completa el segundo factor y vuelve a intentarlo.","retryable":false,"required_action":"step_up_mfa","missing_permissions":[],"field_errors":[],"details":{},"docs_url":"https://api.houzle.com/docs/errors#MFA_REQUIRED"}}},"STEP_UP_REQUIRED":{"summary":"STEP_UP_REQUIRED","value":{"request_id":"req_01J8Z5Q4W3E2R1T0Y9V8S7N6P5","error":{"code":"STEP_UP_REQUIRED","message":"Esta operación exige una verificación MFA reciente. Vuelve a verificar tu identidad y reintenta.","retryable":false,"required_action":"step_up_mfa","missing_permissions":[],"field_errors":[],"details":{},"docs_url":"https://api.houzle.com/docs/errors#STEP_UP_REQUIRED"}}},"CSRF_FAILED":{"summary":"CSRF_FAILED","value":{"request_id":"req_01J8Z5Q4W3E2R1T0Y9V8S7N6P5","error":{"code":"CSRF_FAILED","message":"La comprobación CSRF ha fallado. Recarga la consola y vuelve a intentarlo.","retryable":false,"required_action":"none","missing_permissions":[],"field_errors":[],"details":{},"docs_url":"https://api.houzle.com/docs/errors#CSRF_FAILED"}}},"PERMISSION_DENIED":{"summary":"PERMISSION_DENIED","value":{"request_id":"req_01J8Z5Q4W3E2R1T0Y9V8S7N6P5","error":{"code":"PERMISSION_DENIED","message":"No tienes permiso para realizar esta operación. Solicita los permisos indicados en missing_permissions.","retryable":false,"required_action":"request_permission","missing_permissions":["crm.opportunities.move_stage"],"field_errors":[],"details":{},"docs_url":"https://api.houzle.com/docs/errors#PERMISSION_DENIED"}}},"INSUFFICIENT_SCOPE":{"summary":"INSUFFICIENT_SCOPE","value":{"request_id":"req_01J8Z5Q4W3E2R1T0Y9V8S7N6P5","error":{"code":"INSUFFICIENT_SCOPE","message":"El token no incluye los scopes necesarios. Solicita un token con los scopes indicados.","retryable":false,"required_action":"request_permission","missing_permissions":["crm.opportunities.move_stage"],"field_errors":[],"details":{},"docs_url":"https://api.houzle.com/docs/errors#INSUFFICIENT_SCOPE"}}},"FIELD_NOT_WRITABLE":{"summary":"FIELD_NOT_WRITABLE","value":{"request_id":"req_01J8Z5Q4W3E2R1T0Y9V8S7N6P5","error":{"code":"FIELD_NOT_WRITABLE","message":"No puedes modificar alguno de los campos enviados. Elimínalos de la petición.","retryable":false,"required_action":"fix_input","missing_permissions":[],"field_errors":[],"details":{},"docs_url":"https://api.houzle.com/docs/errors#FIELD_NOT_WRITABLE"}}},"POLICY_DENIED":{"summary":"POLICY_DENIED","value":{"request_id":"req_01J8Z5Q4W3E2R1T0Y9V8S7N6P5","error":{"code":"POLICY_DENIED","message":"Una política del tenant impide esta operación. Contacta con un administrador.","retryable":false,"required_action":"contact_admin","missing_permissions":[],"field_errors":[],"details":{},"docs_url":"https://api.houzle.com/docs/errors#POLICY_DENIED","policy_id":"pol_01J8Z5Q4W3E2R1T0Y9V8S7N6P5"}}},"APPROVAL_REQUIRED":{"summary":"APPROVAL_REQUIRED","value":{"request_id":"req_01J8Z5Q4W3E2R1T0Y9V8S7N6P5","error":{"code":"APPROVAL_REQUIRED","message":"Esta operación requiere aprobación. Crea una solicitud de aprobación para el plan indicado.","retryable":false,"required_action":"create_approval_request","missing_permissions":[],"field_errors":[],"details":{},"docs_url":"https://api.houzle.com/docs/errors#APPROVAL_REQUIRED","policy_id":"pol_01J8Z5Q4W3E2R1T0Y9V8S7N6P5","plan_id":"plan_01J8Z5Q4W3E2R1T0Y9V8S7N6P5"}}},"IDENTITY_SUSPENDED":{"summary":"IDENTITY_SUSPENDED","value":{"request_id":"req_01J8Z5Q4W3E2R1T0Y9V8S7N6P5","error":{"code":"IDENTITY_SUSPENDED","message":"La identidad que realiza la petición está suspendida. Contacta con un administrador.","retryable":false,"required_action":"contact_admin","missing_permissions":[],"field_errors":[],"details":{},"docs_url":"https://api.houzle.com/docs/errors#IDENTITY_SUSPENDED"}}},"CREDENTIAL_REVOKED":{"summary":"CREDENTIAL_REVOKED","value":{"request_id":"req_01J8Z5Q4W3E2R1T0Y9V8S7N6P5","error":{"code":"CREDENTIAL_REVOKED","message":"La credencial usada ha sido revocada. Obtén una nueva o contacta con un administrador.","retryable":false,"required_action":"contact_admin","missing_permissions":[],"field_errors":[],"details":{},"docs_url":"https://api.houzle.com/docs/errors#CREDENTIAL_REVOKED"}}},"TENANT_SUSPENDED":{"summary":"TENANT_SUSPENDED","value":{"request_id":"req_01J8Z5Q4W3E2R1T0Y9V8S7N6P5","error":{"code":"TENANT_SUSPENDED","message":"La organización está suspendida. Contacta con un administrador.","retryable":false,"required_action":"contact_admin","missing_permissions":[],"field_errors":[],"details":{},"docs_url":"https://api.houzle.com/docs/errors#TENANT_SUSPENDED"}}},"NOT_FOUND":{"summary":"NOT_FOUND","value":{"request_id":"req_01J8Z5Q4W3E2R1T0Y9V8S7N6P5","error":{"code":"NOT_FOUND","message":"El recurso no existe o no es visible para ti.","retryable":false,"required_action":"none","missing_permissions":[],"field_errors":[],"details":{},"docs_url":"https://api.houzle.com/docs/errors#NOT_FOUND"}}},"METHOD_NOT_ALLOWED":{"summary":"METHOD_NOT_ALLOWED","value":{"request_id":"req_01J8Z5Q4W3E2R1T0Y9V8S7N6P5","error":{"code":"METHOD_NOT_ALLOWED","message":"Método HTTP no permitido en esta ruta. Usa uno de los métodos documentados.","retryable":false,"required_action":"fix_input","missing_permissions":[],"field_errors":[],"details":{},"docs_url":"https://api.houzle.com/docs/errors#METHOD_NOT_ALLOWED"}}},"APPROVAL_INVALID":{"summary":"APPROVAL_INVALID","value":{"request_id":"req_01J8Z5Q4W3E2R1T0Y9V8S7N6P5","error":{"code":"APPROVAL_INVALID","message":"La aprobación no es válida para esta operación. Solicita una nueva aprobación.","retryable":false,"required_action":"create_approval_request","missing_permissions":[],"field_errors":[],"details":{},"docs_url":"https://api.houzle.com/docs/errors#APPROVAL_INVALID"}}},"APPROVAL_EXPIRED":{"summary":"APPROVAL_EXPIRED","value":{"request_id":"req_01J8Z5Q4W3E2R1T0Y9V8S7N6P5","error":{"code":"APPROVAL_EXPIRED","message":"La aprobación ha caducado. Solicita una nueva aprobación.","retryable":false,"required_action":"create_approval_request","missing_permissions":[],"field_errors":[],"details":{},"docs_url":"https://api.houzle.com/docs/errors#APPROVAL_EXPIRED"}}},"APPROVAL_MISMATCH":{"summary":"APPROVAL_MISMATCH","value":{"request_id":"req_01J8Z5Q4W3E2R1T0Y9V8S7N6P5","error":{"code":"APPROVAL_MISMATCH","message":"La operación ha cambiado desde que se aprobó. Vuelve a planificarla y solicita una nueva aprobación.","retryable":false,"required_action":"create_approval_request","missing_permissions":[],"field_errors":[],"details":{},"docs_url":"https://api.houzle.com/docs/errors#APPROVAL_MISMATCH"}}},"VERSION_CONFLICT":{"summary":"VERSION_CONFLICT","value":{"request_id":"req_01J8Z5Q4W3E2R1T0Y9V8S7N6P5","error":{"code":"VERSION_CONFLICT","message":"El recurso ha cambiado desde que lo leíste. Recarga su estado y reintenta con la versión actual.","retryable":true,"required_action":"refresh_and_retry","missing_permissions":[],"field_errors":[],"details":{},"docs_url":"https://api.houzle.com/docs/errors#VERSION_CONFLICT","current_state":{"version":12}}}},"INVALID_STATE_TRANSITION":{"summary":"INVALID_STATE_TRANSITION","value":{"request_id":"req_01J8Z5Q4W3E2R1T0Y9V8S7N6P5","error":{"code":"INVALID_STATE_TRANSITION","message":"La operación no es válida en el estado actual del recurso.","retryable":false,"required_action":"none","missing_permissions":[],"field_errors":[],"details":{},"docs_url":"https://api.houzle.com/docs/errors#INVALID_STATE_TRANSITION"}}},"DUPLICATE_DETECTED":{"summary":"DUPLICATE_DETECTED","value":{"request_id":"req_01J8Z5Q4W3E2R1T0Y9V8S7N6P5","error":{"code":"DUPLICATE_DETECTED","message":"Ya existe un registro equivalente.","retryable":false,"required_action":"none","missing_permissions":[],"field_errors":[],"details":{},"docs_url":"https://api.houzle.com/docs/errors#DUPLICATE_DETECTED"}}},"INSUFFICIENT_STOCK":{"summary":"INSUFFICIENT_STOCK","value":{"request_id":"req_01J8Z5Q4W3E2R1T0Y9V8S7N6P5","error":{"code":"INSUFFICIENT_STOCK","message":"No hay stock suficiente para completar la operación.","retryable":false,"required_action":"none","missing_permissions":[],"field_errors":[],"details":{},"docs_url":"https://api.houzle.com/docs/errors#INSUFFICIENT_STOCK"}}},"LEASE_CONFLICT":{"summary":"LEASE_CONFLICT","value":{"request_id":"req_01J8Z5Q4W3E2R1T0Y9V8S7N6P5","error":{"code":"LEASE_CONFLICT","message":"Otro proceso tiene reservado este recurso. Reintenta más tarde.","retryable":true,"required_action":"retry_later","missing_permissions":[],"field_errors":[],"details":{},"docs_url":"https://api.houzle.com/docs/errors#LEASE_CONFLICT"}}},"IDEMPOTENCY_IN_PROGRESS":{"summary":"IDEMPOTENCY_IN_PROGRESS","value":{"request_id":"req_01J8Z5Q4W3E2R1T0Y9V8S7N6P5","error":{"code":"IDEMPOTENCY_IN_PROGRESS","message":"Una petición con la misma clave de idempotencia sigue en curso. Reintenta más tarde.","retryable":true,"required_action":"retry_later","missing_permissions":[],"field_errors":[],"details":{},"docs_url":"https://api.houzle.com/docs/errors#IDEMPOTENCY_IN_PROGRESS"}}},"CONNECTOR_REAUTH_REQUIRED":{"summary":"CONNECTOR_REAUTH_REQUIRED","value":{"request_id":"req_01J8Z5Q4W3E2R1T0Y9V8S7N6P5","error":{"code":"CONNECTOR_REAUTH_REQUIRED","message":"El conector necesita volver a autorizarse. Reconéctalo y vuelve a intentarlo.","retryable":false,"required_action":"reauthorize_connector","missing_permissions":[],"field_errors":[],"details":{},"docs_url":"https://api.houzle.com/docs/errors#CONNECTOR_REAUTH_REQUIRED"}}},"PRECONDITION_FAILED":{"summary":"PRECONDITION_FAILED","value":{"request_id":"req_01J8Z5Q4W3E2R1T0Y9V8S7N6P5","error":{"code":"PRECONDITION_FAILED","message":"No se cumple una condición previa de la operación. Revisa los datos y vuelve a intentarlo.","retryable":false,"required_action":"fix_input","missing_permissions":[],"field_errors":[],"details":{},"docs_url":"https://api.houzle.com/docs/errors#PRECONDITION_FAILED"}}},"PAYLOAD_TOO_LARGE":{"summary":"PAYLOAD_TOO_LARGE","value":{"request_id":"req_01J8Z5Q4W3E2R1T0Y9V8S7N6P5","error":{"code":"PAYLOAD_TOO_LARGE","message":"La petición supera el tamaño máximo permitido. Reduce su tamaño.","retryable":false,"required_action":"fix_input","missing_permissions":[],"field_errors":[],"details":{},"docs_url":"https://api.houzle.com/docs/errors#PAYLOAD_TOO_LARGE"}}},"UNSUPPORTED_MEDIA_TYPE":{"summary":"UNSUPPORTED_MEDIA_TYPE","value":{"request_id":"req_01J8Z5Q4W3E2R1T0Y9V8S7N6P5","error":{"code":"UNSUPPORTED_MEDIA_TYPE","message":"Tipo de contenido no admitido. Envía application/json.","retryable":false,"required_action":"fix_input","missing_permissions":[],"field_errors":[],"details":{},"docs_url":"https://api.houzle.com/docs/errors#UNSUPPORTED_MEDIA_TYPE"}}},"IDEMPOTENCY_KEY_REUSED":{"summary":"IDEMPOTENCY_KEY_REUSED","value":{"request_id":"req_01J8Z5Q4W3E2R1T0Y9V8S7N6P5","error":{"code":"IDEMPOTENCY_KEY_REUSED","message":"La clave de idempotencia ya se usó con otra petición distinta. Usa una clave nueva.","retryable":false,"required_action":"use_new_idempotency_key","missing_permissions":[],"field_errors":[],"details":{},"docs_url":"https://api.houzle.com/docs/errors#IDEMPOTENCY_KEY_REUSED"}}},"RATE_LIMITED":{"summary":"RATE_LIMITED","value":{"request_id":"req_01J8Z5Q4W3E2R1T0Y9V8S7N6P5","error":{"code":"RATE_LIMITED","message":"Demasiadas peticiones. Espera y vuelve a intentarlo.","retryable":true,"required_action":"retry_later","missing_permissions":[],"field_errors":[],"details":{},"docs_url":"https://api.houzle.com/docs/errors#RATE_LIMITED"}}},"QUOTA_EXCEEDED":{"summary":"QUOTA_EXCEEDED","value":{"request_id":"req_01J8Z5Q4W3E2R1T0Y9V8S7N6P5","error":{"code":"QUOTA_EXCEEDED","message":"Se ha superado una cuota o un límite. Espera a que se renueve y vuelve a intentarlo.","retryable":true,"required_action":"retry_later","missing_permissions":[],"field_errors":[],"details":{},"docs_url":"https://api.houzle.com/docs/errors#QUOTA_EXCEEDED"}}},"BUDGET_EXCEEDED":{"summary":"BUDGET_EXCEEDED","value":{"request_id":"req_01J8Z5Q4W3E2R1T0Y9V8S7N6P5","error":{"code":"BUDGET_EXCEEDED","message":"Se ha agotado el presupuesto asignado. Espera a que se renueve o contacta con un administrador.","retryable":true,"required_action":"retry_later","missing_permissions":[],"field_errors":[],"details":{},"docs_url":"https://api.houzle.com/docs/errors#BUDGET_EXCEEDED"}}},"AUTH_THROTTLED":{"summary":"AUTH_THROTTLED","value":{"request_id":"req_01J8Z5Q4W3E2R1T0Y9V8S7N6P5","error":{"code":"AUTH_THROTTLED","message":"Demasiados intentos de autenticación. Espera antes de volver a intentarlo.","retryable":true,"required_action":"retry_later","missing_permissions":[],"field_errors":[],"details":{},"docs_url":"https://api.houzle.com/docs/errors#AUTH_THROTTLED"}}},"INTERNAL":{"summary":"INTERNAL","value":{"request_id":"req_01J8Z5Q4W3E2R1T0Y9V8S7N6P5","error":{"code":"INTERNAL","message":"Error interno. Reintenta más tarde; si persiste, facilita el request_id al soporte.","retryable":true,"required_action":"retry_later","missing_permissions":[],"field_errors":[],"details":{},"docs_url":"https://api.houzle.com/docs/errors#INTERNAL"}}},"DEPENDENCY_UNAVAILABLE":{"summary":"DEPENDENCY_UNAVAILABLE","value":{"request_id":"req_01J8Z5Q4W3E2R1T0Y9V8S7N6P5","error":{"code":"DEPENDENCY_UNAVAILABLE","message":"Un servicio necesario no está disponible temporalmente. Reintenta más tarde.","retryable":true,"required_action":"retry_later","missing_permissions":[],"field_errors":[],"details":{},"docs_url":"https://api.houzle.com/docs/errors#DEPENDENCY_UNAVAILABLE"}}},"CONCURRENCY_CONFLICT":{"summary":"CONCURRENCY_CONFLICT","value":{"request_id":"req_01J8Z5Q4W3E2R1T0Y9V8S7N6P5","error":{"code":"CONCURRENCY_CONFLICT","message":"La operación ha coincidido con otra concurrente. Vuelve a intentarlo.","retryable":true,"required_action":"retry_later","missing_permissions":[],"field_errors":[],"details":{},"docs_url":"https://api.houzle.com/docs/errors#CONCURRENCY_CONFLICT"}}},"READ_ONLY_MODE":{"summary":"READ_ONLY_MODE","value":{"request_id":"req_01J8Z5Q4W3E2R1T0Y9V8S7N6P5","error":{"code":"READ_ONLY_MODE","message":"El sistema está temporalmente en modo de solo lectura. Reintenta más tarde.","retryable":true,"required_action":"retry_later","missing_permissions":[],"field_errors":[],"details":{},"docs_url":"https://api.houzle.com/docs/errors#READ_ONLY_MODE"}}}},"responses":{"Unauthorized":{"description":"Sin credenciales válidas o con un segundo factor pendiente.","headers":{"WWW-Authenticate":{"description":"Esquema de autenticación esperado (`Bearer`, RFC 6750/9728).","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"UNAUTHENTICATED":{"$ref":"#/components/examples/UNAUTHENTICATED"},"MFA_REQUIRED":{"$ref":"#/components/examples/MFA_REQUIRED"},"STEP_UP_REQUIRED":{"$ref":"#/components/examples/STEP_UP_REQUIRED"}}}}},"Forbidden":{"description":"Autenticado, pero sin permiso, scope, política o estado que permita la operación.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"CSRF_FAILED":{"$ref":"#/components/examples/CSRF_FAILED"},"PERMISSION_DENIED":{"$ref":"#/components/examples/PERMISSION_DENIED"},"INSUFFICIENT_SCOPE":{"$ref":"#/components/examples/INSUFFICIENT_SCOPE"},"FIELD_NOT_WRITABLE":{"$ref":"#/components/examples/FIELD_NOT_WRITABLE"},"POLICY_DENIED":{"$ref":"#/components/examples/POLICY_DENIED"},"APPROVAL_REQUIRED":{"$ref":"#/components/examples/APPROVAL_REQUIRED"},"IDENTITY_SUSPENDED":{"$ref":"#/components/examples/IDENTITY_SUSPENDED"},"CREDENTIAL_REVOKED":{"$ref":"#/components/examples/CREDENTIAL_REVOKED"},"TENANT_SUSPENDED":{"$ref":"#/components/examples/TENANT_SUSPENDED"}}}}},"NotFound":{"description":"El recurso no existe o no es visible para el actor (AD-04.5).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"NOT_FOUND":{"$ref":"#/components/examples/NOT_FOUND"}}}}},"MethodNotAllowed":{"description":"Método no admitido en esta ruta (cabecera `Allow`).","headers":{"Allow":{"description":"Métodos admitidos en la ruta.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"METHOD_NOT_ALLOWED":{"$ref":"#/components/examples/METHOD_NOT_ALLOWED"}}}}},"Conflict":{"description":"Conflicto con el estado actual del recurso.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"APPROVAL_INVALID":{"$ref":"#/components/examples/APPROVAL_INVALID"},"APPROVAL_EXPIRED":{"$ref":"#/components/examples/APPROVAL_EXPIRED"},"APPROVAL_MISMATCH":{"$ref":"#/components/examples/APPROVAL_MISMATCH"},"VERSION_CONFLICT":{"$ref":"#/components/examples/VERSION_CONFLICT"},"INVALID_STATE_TRANSITION":{"$ref":"#/components/examples/INVALID_STATE_TRANSITION"},"DUPLICATE_DETECTED":{"$ref":"#/components/examples/DUPLICATE_DETECTED"},"INSUFFICIENT_STOCK":{"$ref":"#/components/examples/INSUFFICIENT_STOCK"},"LEASE_CONFLICT":{"$ref":"#/components/examples/LEASE_CONFLICT"},"IDEMPOTENCY_IN_PROGRESS":{"$ref":"#/components/examples/IDEMPOTENCY_IN_PROGRESS"},"CONNECTOR_REAUTH_REQUIRED":{"$ref":"#/components/examples/CONNECTOR_REAUTH_REQUIRED"}}}}},"PreconditionFailed":{"description":"Una precondición del recurso no se cumple.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"PRECONDITION_FAILED":{"$ref":"#/components/examples/PRECONDITION_FAILED"}}}}},"PayloadTooLarge":{"description":"El cuerpo de la petición supera el límite de la ruta.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"PAYLOAD_TOO_LARGE":{"$ref":"#/components/examples/PAYLOAD_TOO_LARGE"}}}}},"UnsupportedMediaType":{"description":"Tipo de contenido no admitido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"UNSUPPORTED_MEDIA_TYPE":{"$ref":"#/components/examples/UNSUPPORTED_MEDIA_TYPE"}}}}},"ValidationFailed":{"description":"Validación fallida (`field_errors`) o clave de idempotencia reutilizada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"VALIDATION_FAILED":{"$ref":"#/components/examples/VALIDATION_FAILED"},"IDEMPOTENCY_KEY_REUSED":{"$ref":"#/components/examples/IDEMPOTENCY_KEY_REUSED"}}}}},"TooManyRequests":{"description":"Límite de ráfaga, cuota o presupuesto superado (cabecera `Retry-After`).","headers":{"Retry-After":{"description":"Segundos que conviene esperar antes de reintentar.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"RATE_LIMITED":{"$ref":"#/components/examples/RATE_LIMITED"},"QUOTA_EXCEEDED":{"$ref":"#/components/examples/QUOTA_EXCEEDED"},"BUDGET_EXCEEDED":{"$ref":"#/components/examples/BUDGET_EXCEEDED"},"AUTH_THROTTLED":{"$ref":"#/components/examples/AUTH_THROTTLED"}}}}},"InternalError":{"description":"Error interno; se puede reintentar.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"INTERNAL":{"$ref":"#/components/examples/INTERNAL"}}}}},"ServiceUnavailable":{"description":"Dependencia no disponible, conflicto de concurrencia o modo solo-lectura (cabecera `Retry-After`).","headers":{"Retry-After":{"description":"Segundos que conviene esperar antes de reintentar.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"},"examples":{"DEPENDENCY_UNAVAILABLE":{"$ref":"#/components/examples/DEPENDENCY_UNAVAILABLE"},"CONCURRENCY_CONFLICT":{"$ref":"#/components/examples/CONCURRENCY_CONFLICT"},"READ_ONLY_MODE":{"$ref":"#/components/examples/READ_ONLY_MODE"}}}}}},"securitySchemes":{"bearer_auth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"},"session_cookie":{"type":"apiKey","in":"cookie","name":"__Host-sid"},"csrf_token":{"type":"apiKey","in":"header","name":"X-CSRF-Token"}}},"paths":{"/v1/health":{"get":{"summary":"Comprobar que la API responde","description":"Salud básica del Worker: no consulta almacenamiento ni revela configuración. Úsala en balanceadores y smoke tests; no indica que las dependencias estén disponibles.","x-permissions":[],"x-risk":"R0","x-effect":"read","operationId":"platform.health.get","tags":["platform.http"],"responses":{"200":{"description":"El Worker responde.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"}}}},"500":{"$ref":"#/components/responses/InternalError"},"503":{"$ref":"#/components/responses/ServiceUnavailable"}},"security":[]}}},"webhooks":{}}