{
"type": "https://docs.craqui.com/errors/revoked_api_key",
"title": "La clave fue revocada",
"status": 401,
"code": "revoked_api_key",
"detail": "Crea una clave nueva en Configuración → Integraciones.",
"request_id": "req_01hzx8m4k2a7d9q3f5w6y8z0bc"
}
{
"type": "https://docs.craqui.com/errors/sandbox_unavailable",
"title": "Tu estudio de prueba no está listo",
"status": 409,
"code": "sandbox_unavailable",
"detail": "Restablece tus datos de prueba en Configuración → Integraciones y vuelve a intentar.",
"request_id": "req_01hzx8m4k2a7d9q3f5w6y8z0bc"
}
Revoca un pack asignado por error, igual que “Revocar pack” desde Craqui: le quita al cliente los créditos que
le quedan. Los dos campos son obligatorios, porque la API no decide por ti: cancel_bookings (qué pasa con las
reservas que usan esos créditos) y fee_action (retire da de baja la cuota sin pagar; keep la mantiene, solo
si el cliente ya usó créditos del pack). Un pack con plata cobrada no se revoca por la API: primero se registra la
devolución desde Craqui. No le avisa nada al cliente: notify responde 400 notify_not_supported. Responde el
pack como queda, con status: revoked. Con dry_run=true responde 200 con la vista previa.
Rechazos (409): fee_has_payments, fee_under_automatic_debit, membership_credits_not_revocable,
credit_grant_already_revoked, refund_in_progress, fee_link_unknown, preview_stale y client_inactive;
422 fee_action_not_available. Un pack que no es de tu negocio responde 404 not_found.
Una escritura de plata: lleva Idempotency-Key (salvo con dry_run=true), solo para estudios (en una academia
responde wrong_vertical), solo si tu negocio tiene habilitada la escritura por la API (write_access_disabled
si no) y además las escrituras de plata (money_writes_not_enabled si no). Cuenta para el límite de escrituras
(30 por minuto) y para el de escrituras de plata (10 por minuto; una vista previa no cuenta para este). Un campo
que el cuerpo no declara responde validation_failed con unknown_field. Un reintento con la misma
Idempotency-Key, también después de las 24 horas, responde lo que ya se hizo, con Idempotent-Replayed: true.
{
"type": "https://docs.craqui.com/errors/revoked_api_key",
"title": "La clave fue revocada",
"status": 401,
"code": "revoked_api_key",
"detail": "Crea una clave nueva en Configuración → Integraciones.",
"request_id": "req_01hzx8m4k2a7d9q3f5w6y8z0bc"
}
{
"type": "https://docs.craqui.com/errors/sandbox_unavailable",
"title": "Tu estudio de prueba no está listo",
"status": 409,
"code": "sandbox_unavailable",
"detail": "Restablece tus datos de prueba en Configuración → Integraciones y vuelve a intentar.",
"request_id": "req_01hzx8m4k2a7d9q3f5w6y8z0bc"
}
Clave del negocio. sk es una clave completa (todo lo que el rol de quien la creó puede dar)
y rk una restringida a los permisos que se eligieron al crearla. Solo se usa desde un
servidor: un pedido desde un navegador se rechaza con browser_not_allowed.
Obligatorio en todo pedido que crea o cambia algo, salvo con dry_run=true. Un valor único por
operación (por ejemplo un UUID). Si repites el pedido con la misma clave y el mismo cuerpo dentro de 24
horas, recibes la misma respuesta (con el header Idempotent-Replayed: true) sin que se repita el efecto,
también la misma respuesta de error: para intentar de nuevo algo que se rechazó, usa una clave nueva.
Con un dry_run=true la clave se ignora y no se guarda: el pedido real puede usar la misma. Pasadas las 24
horas, repetir una reserva con la misma clave y el mismo cuerpo sigue devolviendo la reserva que se hizo
(como está ahora), y la misma clave con otro cuerpo responde idempotency_key_reused.
true para ver qué pasaría sin hacerlo: Craqui evalúa el pedido con las mismas reglas que el real y
responde 200 con un objeto preview, sin escribir nada ni avisarle a nadie. Cuenta para el límite de
escrituras. false (o sin el parámetro) hace el pedido real. Es el único parámetro de consulta de una
escritura.
Body
application/json
Los dos campos son obligatorios: la API no decide qué pasa con las reservas ni con la cuota.
retire da de baja la cuota sin pagar del pack; keep la mantiene para cobrar (solo si el cliente ya usó
créditos del pack: 422 fee_action_not_available si no).
Available options:
retire,
keep
Response
El pack como quedó, o con dry_run=true la vista previa (object dice cuál).
Option 1
Option 2
Un lote de créditos de un cliente: un pack que compró, una oferta de bienvenida o los créditos de un
período de su membresía. Los créditos se usan del lote que vence primero.
revoked si se anuló; si no, expired si venció; si no, depleted si no le quedan créditos; si
no, active. La lista puede crecer: trata un valor que no conoces como un lote que no se puede usar.
Instante en RFC 3339 con el offset del negocio en ese momento.
Example:
"2026-12-02T19:00:00-03:00"
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"API de Craqui","colors":{"primary":"#1F33C7","light":"#8E9CFF","dark":"#1F33C7"},"logo":{"light":"https://mintcdn.com/craqui/oYoj2lAgh2Jk1Qcv/logo/light.png?fit=max\u0026auto=format\u0026n=oYoj2lAgh2Jk1Qcv\u0026q=85\u0026s=e96edbf5621b5bc4068b5ad8dee910c7","dark":"https://mintcdn.com/craqui/oYoj2lAgh2Jk1Qcv/logo/dark.png?fit=max\u0026auto=format\u0026n=oYoj2lAgh2Jk1Qcv\u0026q=85\u0026s=119f3ccfb48eb398b9a41837114157f1","href":"https://docs.craqui.com"},"favicon":"https://mintcdn.com/craqui/oYoj2lAgh2Jk1Qcv/favicon.png?fit=max\u0026auto=format\u0026n=oYoj2lAgh2Jk1Qcv\u0026q=85\u0026s=9b21e70461f095f51069e525e11ed743","api":{"playground":{"display":"interactive"}},"footer":{"socials":{"website":"https://craqui.com"}},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"craqui","hasAudioNarration":false,"actualSubdomain":"craqui","customDomains":["docs.craqui.com"],"gitSource":{"type":"github","owner":"javicraqui-build","repo":"craqui-api-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":"","_id":"6aee011a2f669b27f0303a49"},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6af22f0027110864ba94823c","clientVersion":"0.0.4094","searchFilterCounts":[{"language":"default","tag":"Guías","count":129},{"language":"default","tag":"Errores","count":108},{"language":"default","tag":"Referencia","count":57},{"language":"default","tag":"Apps de terceros","count":8},{"language":"default","tag":"webhook_endpoints","count":8},{"language":"default","tag":"Conceptos","count":7},{"language":"default","tag":"memberships","count":7},{"language":"default","tag":"clients","count":6},{"language":"default","tag":"Empezar","count":5},{"language":"default","tag":"bookings","count":5}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"estudios/api-reference/credits/revocar-un-pack","slug":"/estudios/api-reference/credits/revocar-un-pack","pageMetadata":{"title":"Revocar un pack","description":"Revoca un pack asignado por error, igual que \"Revocar pack\" desde Craqui: le quita al cliente los créditos que\nle quedan. Los dos campos son obligatorios, porque la API no decide por ti: `cancel_bookings` (qué pasa con las\nreservas que usan esos créditos) y `fee_action` (`retire` da de baja la cuota sin pagar; `keep` la mantiene, solo\nsi el cliente ya usó créditos del pack). Un pack con plata cobrada no se revoca por la API: primero se registra la\ndevolución desde Craqui. No le avisa nada al cliente: `notify` responde `400 notify_not_supported`. Responde el\npack como queda, con `status: revoked`. Con `dry_run=true` responde `200` con la vista previa.\n\nRechazos (`409`): `fee_has_payments`, `fee_under_automatic_debit`, `membership_credits_not_revocable`,\n`credit_grant_already_revoked`, `refund_in_progress`, `fee_link_unknown`, `preview_stale` y `client_inactive`;\n`422 fee_action_not_available`. Un pack que no es de tu negocio responde `404 not_found`.\n\nUna escritura de plata: lleva `Idempotency-Key` (salvo con `dry_run=true`), solo para estudios (en una academia\nresponde `wrong_vertical`), solo si tu negocio tiene habilitada la escritura por la API (`write_access_disabled`\nsi no) y además las escrituras de plata (`money_writes_not_enabled` si no). Cuenta para el límite de escrituras\n(30 por minuto) y para el de escrituras de plata (10 por minuto; una vista previa no cuenta para este). Un campo\nque el cuerpo no declara responde `validation_failed` con `unknown_field`. Un reintento con la misma\n`Idempotency-Key`, también después de las 24 horas, responde lo que ya se hizo, con `Idempotent-Replayed: true`.\n","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml post /credit_grants/{id}/revoke","href":"/estudios/api-reference/credits/revocar-un-pack","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Revoca un pack asignado por error, igual que “Revocar pack” desde Craqui: le quita al cliente los créditos que\\nle quedan. Los dos campos son obligatorios, porque la API no decide por ti: \", _jsx(_components.code, {\n children: \"cancel_bookings\"\n }), \" (qué pasa con las\\nreservas que usan esos créditos) y \", _jsx(_components.code, {\n children: \"fee_action\"\n }), \" (\", _jsx(_components.code, {\n children: \"retire\"\n }), \" da de baja la cuota sin pagar; \", _jsx(_components.code, {\n children: \"keep\"\n }), \" la mantiene, solo\\nsi el cliente ya usó créditos del pack). Un pack con plata cobrada no se revoca por la API: primero se registra la\\ndevolución desde Craqui. No le avisa nada al cliente: \", _jsx(_components.code, {\n children: \"notify\"\n }), \" responde \", _jsx(_components.code, {\n children: \"400 notify_not_supported\"\n }), \". Responde el\\npack como queda, con \", _jsx(_components.code, {\n children: \"status: revoked\"\n }), \". Con \", _jsx(_components.code, {\n children: \"dry_run=true\"\n }), \" responde \", _jsx(_components.code, {\n children: \"200\"\n }), \" con la vista previa.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Rechazos (\", _jsx(_components.code, {\n children: \"409\"\n }), \"): \", _jsx(_components.code, {\n children: \"fee_has_payments\"\n }), \", \", _jsx(_components.code, {\n children: \"fee_under_automatic_debit\"\n }), \", \", _jsx(_components.code, {\n children: \"membership_credits_not_revocable\"\n }), \",\\n\", _jsx(_components.code, {\n children: \"credit_grant_already_revoked\"\n }), \", \", _jsx(_components.code, {\n children: \"refund_in_progress\"\n }), \", \", _jsx(_components.code, {\n children: \"fee_link_unknown\"\n }), \", \", _jsx(_components.code, {\n children: \"preview_stale\"\n }), \" y \", _jsx(_components.code, {\n children: \"client_inactive\"\n }), \";\\n\", _jsx(_components.code, {\n children: \"422 fee_action_not_available\"\n }), \". Un pack que no es de tu negocio responde \", _jsx(_components.code, {\n children: \"404 not_found\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Una escritura de plata: lleva \", _jsx(_components.code, {\n children: \"Idempotency-Key\"\n }), \" (salvo con \", _jsx(_components.code, {\n children: \"dry_run=true\"\n }), \"), solo para estudios (en una academia\\nresponde \", _jsx(_components.code, {\n children: \"wrong_vertical\"\n }), \"), solo si tu negocio tiene habilitada la escritura por la API (\", _jsx(_components.code, {\n children: \"write_access_disabled\"\n }), \"\\nsi no) y además las escrituras de plata (\", _jsx(_components.code, {\n children: \"money_writes_not_enabled\"\n }), \" si no). Cuenta para el límite de escrituras\\n(30 por minuto) y para el de escrituras de plata (10 por minuto; una vista previa no cuenta para este). Un campo\\nque el cuerpo no declara responde \", _jsx(_components.code, {\n children: \"validation_failed\"\n }), \" con \", _jsx(_components.code, {\n children: \"unknown_field\"\n }), \". Un reintento con la misma\\n\", _jsx(_components.code, {\n children: \"Idempotency-Key\"\n }), \", también después de las 24 horas, responde lo que ya se hizo, con \", _jsx(_components.code, {\n children: \"Idempotent-Replayed: true\"\n }), \".\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Revocar un pack","description":"Revoca un pack asignado por error, igual que \"Revocar pack\" desde Craqui: le quita al cliente los créditos que\nle quedan. Los dos campos son obligatorios, porque la API no decide por ti: `cancel_bookings` (qué pasa con las\nreservas que usan esos créditos) y `fee_action` (`retire` da de baja la cuota sin pagar; `keep` la mantiene, solo\nsi el cliente ya usó créditos del pack). Un pack con plata cobrada no se revoca por la API: primero se registra la\ndevolución desde Craqui. No le avisa nada al cliente: `notify` responde `400 notify_not_supported`. Responde el\npack como queda, con `status: revoked`. Con `dry_run=true` responde `200` con la vista previa.\n\nRechazos (`409`): `fee_has_payments`, `fee_under_automatic_debit`, `membership_credits_not_revocable`,\n`credit_grant_already_revoked`, `refund_in_progress`, `fee_link_unknown`, `preview_stale` y `client_inactive`;\n`422 fee_action_not_available`. Un pack que no es de tu negocio responde `404 not_found`.\n\nUna escritura de plata: lleva `Idempotency-Key` (salvo con `dry_run=true`), solo para estudios (en una academia\nresponde `wrong_vertical`), solo si tu negocio tiene habilitada la escritura por la API (`write_access_disabled`\nsi no) y además las escrituras de plata (`money_writes_not_enabled` si no). Cuenta para el límite de escrituras\n(30 por minuto) y para el de escrituras de plata (10 por minuto; una vista previa no cuenta para este). Un campo\nque el cuerpo no declara responde `validation_failed` con `unknown_field`. Un reintento con la misma\n`Idempotency-Key`, también después de las 24 horas, responde lo que ya se hizo, con `Idempotent-Replayed: true`.\n","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml post /credit_grants/{id}/revoke","href":"/estudios/api-reference/credits/revocar-un-pack","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"revokeCreditGrant","tags":["credits"],"summary":"Revocar un pack","description":"Revoca un pack asignado por error, igual que \"Revocar pack\" desde Craqui: le quita al cliente los créditos que\nle quedan. Los dos campos son obligatorios, porque la API no decide por ti: `cancel_bookings` (qué pasa con las\nreservas que usan esos créditos) y `fee_action` (`retire` da de baja la cuota sin pagar; `keep` la mantiene, solo\nsi el cliente ya usó créditos del pack). Un pack con plata cobrada no se revoca por la API: primero se registra la\ndevolución desde Craqui. No le avisa nada al cliente: `notify` responde `400 notify_not_supported`. Responde el\npack como queda, con `status: revoked`. Con `dry_run=true` responde `200` con la vista previa.\n\nRechazos (`409`): `fee_has_payments`, `fee_under_automatic_debit`, `membership_credits_not_revocable`,\n`credit_grant_already_revoked`, `refund_in_progress`, `fee_link_unknown`, `preview_stale` y `client_inactive`;\n`422 fee_action_not_available`. Un pack que no es de tu negocio responde `404 not_found`.\n\nUna escritura de plata: lleva `Idempotency-Key` (salvo con `dry_run=true`), solo para estudios (en una academia\nresponde `wrong_vertical`), solo si tu negocio tiene habilitada la escritura por la API (`write_access_disabled`\nsi no) y además las escrituras de plata (`money_writes_not_enabled` si no). Cuenta para el límite de escrituras\n(30 por minuto) y para el de escrituras de plata (10 por minuto; una vista previa no cuenta para este). Un campo\nque el cuerpo no declara responde `validation_failed` con `unknown_field`. Un reintento con la misma\n`Idempotency-Key`, también después de las 24 horas, responde lo que ya se hizo, con `Idempotent-Replayed: true`.\n","x-craqui-scope":"credits:write","security":["f7897bad-5999-451f-8a68-e0990981301d","dade9644-0764-411a-92b7-894a4e857b0f"],"x-craqui-capability":"api_credit_grants_revoke","x-craqui-effect-class":"destructive","parameters":["b8574e43-d743-4b8b-91c8-c0d2096a4b4d","b5234fde-520c-432a-a865-348e7218efeb","a5125bee-f661-4c3f-a22c-eba5d8938684","e225009f-1960-4837-9157-b6c907be83ac"],"requestBody":"6c574603-a776-4c57-ae01-8f33c4935c2a","responses":{"200":"785a9192-ccbf-4d93-9610-aa08f84bfa30","400":"24e94b75-c2c3-4da3-879d-69ffee2f7059","401":"13573931-ffad-449d-96fa-4248d63562a5","403":"634672ba-dc1f-44af-af89-9fd8a68861b7","404":"ffd51cda-41fb-4c86-bb71-6973c66f7263","409":"dc88a6c9-3612-444c-8516-dbdadf4eac43","422":"d99d4a46-13bb-410b-9ba4-d429200148b1","429":"b926e5f0-a45f-47d3-a5ad-ea12b55bc076","500":"ed0205d5-713e-4374-b853-81e8b71bd3d1"},"method":"post","type":"path","servers":["bb48cfac-2655-4314-90fd-28cc11e87988"],"path":"/credit_grants/{id}/revoke","baseUrlOptions":["https://api.craqui.com/v1"],"title":"Revocar un pack","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"b8574e43-d743-4b8b-91c8-c0d2096a4b4d":{"name":"Craqui-Version","in":"header","required":false,"description":"Versión de la API para este pedido (`YYYY-MM-DD`). Si no la mandas, se usa la versión fijada en\nla clave cuando se creó.\n","schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","examples":["2026-12-01"],"isRequired":false,"description":"Versión de la API para este pedido (`YYYY-MM-DD`). Si no la mandas, se usa la versión fijada en\nla clave cuando se creó.\n","uniqueKey":"","typeLabel":"string"}},"b5234fde-520c-432a-a865-348e7218efeb":{"name":"id","in":"path","required":true,"description":"El id del pack asignado (`cgr_…`).","schema":{"type":"string","description":"El id del pack asignado (`cgr_…`).\nId de un lote de créditos (un pack, una oferta o el período de una membresía).","pattern":"^cgr_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["cgr_01jdwsxvjgc7y12y0h12f43149"],"isRequired":true,"uniqueKey":"","typeLabel":"string"}},"a5125bee-f661-4c3f-a22c-eba5d8938684":{"name":"Idempotency-Key","in":"header","required":false,"description":"Obligatorio en todo pedido que crea o cambia algo, salvo con `dry_run=true`. Un valor único por\noperación (por ejemplo un UUID). Si repites el pedido con la misma clave y el mismo cuerpo dentro de 24\nhoras, recibes la misma respuesta (con el header `Idempotent-Replayed: true`) sin que se repita el efecto,\ntambién la misma respuesta de error: para intentar de nuevo algo que se rechazó, usa una clave nueva.\nCon un `dry_run=true` la clave se ignora y no se guarda: el pedido real puede usar la misma. Pasadas las 24\nhoras, repetir una reserva con la misma clave y el mismo cuerpo sigue devolviendo la reserva que se hizo\n(como está ahora), y la misma clave con otro cuerpo responde `idempotency_key_reused`.\n","schema":{"type":"string","minLength":1,"maxLength":255,"isRequired":false,"description":"Obligatorio en todo pedido que crea o cambia algo, salvo con `dry_run=true`. Un valor único por\noperación (por ejemplo un UUID). Si repites el pedido con la misma clave y el mismo cuerpo dentro de 24\nhoras, recibes la misma respuesta (con el header `Idempotent-Replayed: true`) sin que se repita el efecto,\ntambién la misma respuesta de error: para intentar de nuevo algo que se rechazó, usa una clave nueva.\nCon un `dry_run=true` la clave se ignora y no se guarda: el pedido real puede usar la misma. Pasadas las 24\nhoras, repetir una reserva con la misma clave y el mismo cuerpo sigue devolviendo la reserva que se hizo\n(como está ahora), y la misma clave con otro cuerpo responde `idempotency_key_reused`.\n","uniqueKey":"","typeLabel":"string"}},"e225009f-1960-4837-9157-b6c907be83ac":{"name":"dry_run","in":"query","required":false,"description":"`true` para ver qué pasaría sin hacerlo: Craqui evalúa el pedido con las mismas reglas que el real y\nresponde `200` con un objeto `preview`, sin escribir nada ni avisarle a nadie. Cuenta para el límite de\nescrituras. `false` (o sin el parámetro) hace el pedido real. Es el único parámetro de consulta de una\nescritura.\n","schema":{"type":"boolean","isRequired":false,"description":"`true` para ver qué pasaría sin hacerlo: Craqui evalúa el pedido con las mismas reglas que el real y\nresponde `200` con un objeto `preview`, sin escribir nada ni avisarle a nadie. Cuenta para el límite de\nescrituras. `false` (o sin el parámetro) hace el pedido real. Es el único parámetro de consulta de una\nescritura.\n","uniqueKey":"","typeLabel":"boolean"}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["cancel_bookings","fee_action"],"description":"Los dos campos son obligatorios: la API no decide qué pasa con las reservas ni con la cuota.","properties":{"cancel_bookings":{"type":"boolean","description":"`true` cancela las reservas que usan créditos de ese pack; `false` las mantiene.","isRequired":true,"uniqueKey":"cancel_bookings","typeLabel":"boolean"},"fee_action":{"type":"string","enum":["retire","keep"],"description":"`retire` da de baja la cuota sin pagar del pack; `keep` la mantiene para cobrar (solo si el cliente ya usó\ncréditos del pack: `422 fee_action_not_available` si no).\n","isRequired":true,"uniqueKey":"fee_action","typeLabel":"enum\u003cstring>"}},"uniqueKey":"","typeLabel":"object"},"example":{"cancel_bookings":true,"fee_action":"retire"},"examples":{"Example":{"title":"Example","value":{"cancel_bookings":true,"fee_action":"retire"}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"785a9192-ccbf-4d93-9610-aa08f84bfa30":{"description":"El pack como quedó, o con `dry_run=true` la vista previa (`object` dice cuál).","headers":{"Request-Id":{"description":"Identificador del pedido. Aparece también en el cuerpo de los errores.","schema":{"type":"string","pattern":"^req_[0-9a-hjkmnp-tv-z]{26}$"}},"Craqui-Version":{"description":"La versión de la API con la que se respondió.","schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"}},"RateLimit":{"description":"Pedidos que quedan en la ventana actual y segundos hasta que se renueva (draft IETF httpapi-ratelimit-headers).","schema":{"type":"string","examples":["\"read\";r=97;t=42"]}},"RateLimit-Policy":{"description":"Límite de la clave por ventana (draft IETF httpapi-ratelimit-headers).","schema":{"type":"string","examples":["\"read\";q=100;w=60"]}},"Idempotent-Replayed":{"description":"`true` cuando la respuesta es la guardada de un pedido anterior con la misma `Idempotency-Key`.","schema":{"type":"string","enum":["true"]}}},"content":{"application/json":{"schema":{"oneOf":[{"type":"object","description":"Un lote de créditos de un cliente: un pack que compró, una oferta de bienvenida o los créditos de un\nperíodo de su membresía. Los créditos se usan del lote que vence primero.\n","required":["id","object","livemode","client_id","kind","credit_pack_id","credits_granted","credits_remaining","granted_at","revoked_at","expires_at","status","course_ids","fee_id","price","created_at"],"properties":{"id":{"type":"string","description":"Id de un lote de créditos (un pack, una oferta o el período de una membresía).","pattern":"^cgr_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["cgr_01jdwsxvjgc7y12y0h12f43149"],"isRequired":true,"uniqueKey":"oneOf.0.id","typeLabel":"string"},"object":{"type":"string","const":"credit_grant","isRequired":true,"uniqueKey":"oneOf.0.object","typeLabel":"string"},"livemode":{"type":"boolean","description":"`false` si el objeto es de tu estudio de prueba (claves `crq_test_`); `true` con claves `crq_live_`.","isRequired":true,"uniqueKey":"oneOf.0.livemode","typeLabel":"boolean"},"client_id":{"oneOf":[{"type":"string","description":"El cliente. `null` si el lote es de alguien que no es cliente del estudio (por ejemplo, alguien del equipo).","pattern":"^cli_[0-7][0-9a-hjkmnp-tv-z]{25}$","example":"cli_01jatfha5h4nkg77c3wfrvd3cw","isRequired":true,"uniqueKey":"oneOf.0.client_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"El cliente. `null` si el lote es de alguien que no es cliente del estudio (por ejemplo, alguien del equipo).","isRequired":true,"uniqueKey":"oneOf.0.client_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.0.client_id","typeLabel":"string | null"},"kind":{"oneOf":[{"type":"string","description":"`pack`, `intro_offer` o `membership_period`. `null` solo en lotes muy viejos sin tipo. La lista\npuede crecer.\n","enum":["pack","intro_offer","membership_period",null],"x-extensible-enum":true,"isRequired":true,"uniqueKey":"oneOf.0.kind.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"`pack`, `intro_offer` o `membership_period`. `null` solo en lotes muy viejos sin tipo. La lista\npuede crecer.\n","enum":["pack","intro_offer","membership_period",null],"x-extensible-enum":true,"isRequired":true,"uniqueKey":"oneOf.0.kind.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.0.kind","typeLabel":"enum\u003cstring> | null"},"credit_pack_id":{"oneOf":[{"type":"string","description":"El pack que se compró, solo si `kind` es `pack`.","pattern":"^cpk_[0-7][0-9a-hjkmnp-tv-z]{25}$","example":"cpk_01j63ec7mff1rr7pbk3z1b8ke1","isRequired":true,"uniqueKey":"oneOf.0.credit_pack_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"El pack que se compró, solo si `kind` es `pack`.","isRequired":true,"uniqueKey":"oneOf.0.credit_pack_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.0.credit_pack_id","typeLabel":"string | null"},"credits_granted":{"type":"integer","description":"Los créditos que dio el lote.","isRequired":true,"uniqueKey":"oneOf.0.credits_granted","typeLabel":"integer"},"credits_remaining":{"type":"integer","description":"Los créditos que le quedan.","isRequired":true,"uniqueKey":"oneOf.0.credits_remaining","typeLabel":"integer"},"granted_at":{"type":"string","format":"date-time","description":"Instante en RFC 3339 con el offset del negocio en ese momento.","examples":["2026-12-02T19:00:00-03:00"],"isRequired":true,"uniqueKey":"oneOf.0.granted_at","typeLabel":"string\u003cdate-time>"},"revoked_at":{"oneOf":[{"type":"string","description":"Cuándo el estudio anuló el lote; `null` si no se anuló.","format":"date-time","example":"2026-12-02T19:00:00-03:00","isRequired":true,"uniqueKey":"oneOf.0.revoked_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"Cuándo el estudio anuló el lote; `null` si no se anuló.","isRequired":true,"uniqueKey":"oneOf.0.revoked_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.0.revoked_at","typeLabel":"string\u003cdate-time> | null"},"expires_at":{"oneOf":[{"type":"string","description":"Cuándo vencen los créditos, con los días de gracia ya sumados. `null` si no vencen.\n","format":"date-time","example":"2026-12-02T19:00:00-03:00","isRequired":true,"uniqueKey":"oneOf.0.expires_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"Cuándo vencen los créditos, con los días de gracia ya sumados. `null` si no vencen.\n","isRequired":true,"uniqueKey":"oneOf.0.expires_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.0.expires_at","typeLabel":"string\u003cdate-time> | null"},"status":{"type":"string","description":"`revoked` si se anuló; si no, `expired` si venció; si no, `depleted` si no le quedan créditos; si\nno, `active`. La lista puede crecer: trata un valor que no conoces como un lote que no se puede usar.\n","enum":["active","depleted","expired","revoked"],"x-extensible-enum":true,"isRequired":true,"uniqueKey":"oneOf.0.status","typeLabel":"enum\u003cstring>"},"course_ids":{"oneOf":[{"description":"Las disciplinas en las que sirven los créditos; `null` si sirven en todas.","type":"array","items":{"type":"string","description":"Id de una disciplina.","pattern":"^crs_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["crs_01jff81dk7rxtacmye5nanfp0h"],"uniqueKey":"oneOf.0.course_ids.oneOf.0.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"oneOf.0.course_ids.oneOf.0","typeLabel":"string[]"},{"description":"Las disciplinas en las que sirven los créditos; `null` si sirven en todas.","type":"null","items":{"type":"string","description":"Id de una disciplina.","pattern":"^crs_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["crs_01jff81dk7rxtacmye5nanfp0h"]},"isRequired":true,"uniqueKey":"oneOf.0.course_ids.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.0.course_ids","typeLabel":"string[] | null"},"fee_id":{"oneOf":[{"type":"string","description":"La cuota con la que se cobró el lote; `null` si no tiene (por ejemplo, créditos de regalo).","pattern":"^fee_[0-7][0-9a-hjkmnp-tv-z]{25}$","example":"fee_01jxycdc0zf2nxw7n2azer6wqp","isRequired":true,"uniqueKey":"oneOf.0.fee_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"La cuota con la que se cobró el lote; `null` si no tiene (por ejemplo, créditos de regalo).","isRequired":true,"uniqueKey":"oneOf.0.fee_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.0.fee_id","typeLabel":"string | null"},"price":{"oneOf":[{"type":"object","description":"Lo que se pagó por el lote; `null` si no se registró un precio.","required":["amount_cents","currency"],"properties":{"amount_cents":{"type":"integer","description":"El monto multiplicado por 100. `250000` con `UYU` es $ 2.500,00. Un entero: `250000.5` o `\"250000\"` es\n`validation_failed` (`250000.0` es el mismo número que `250000`).\n","examples":[250000],"isRequired":true,"uniqueKey":"oneOf.0.price.oneOf.0.amount_cents","typeLabel":"integer"},"currency":{"type":"string","description":"Moneda ISO 4217, en mayúsculas.","pattern":"^[A-Z]{3}$","examples":["UYU"],"isRequired":true,"uniqueKey":"oneOf.0.price.oneOf.0.currency","typeLabel":"string"}},"isRequired":true,"uniqueKey":"oneOf.0.price.oneOf.0","typeLabel":"object"},{"type":"null","description":"Lo que se pagó por el lote; `null` si no se registró un precio.","isRequired":true,"uniqueKey":"oneOf.0.price.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.0.price","typeLabel":"object | null"},"created_at":{"type":"string","format":"date-time","description":"Instante en RFC 3339 con el offset del negocio en ese momento.","examples":["2026-12-02T19:00:00-03:00"],"isRequired":true,"uniqueKey":"oneOf.0.created_at","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"oneOf.0","typeLabel":"object"},{"type":"object","description":"Lo que haría la escritura de plata, sin hacerla: Craqui corre la misma operación que el pedido real y la\ndeshace, así que una vista previa que se rechazaría responde el mismo error (por ejemplo `price_changed` o\n`amount_mismatch`, con el monto de hoy). No consume la `Idempotency-Key` ni cuenta para el límite de escrituras\nde plata.\n","required":["object","livemode","action","result","effects","warnings","summary"],"properties":{"object":{"type":"string","const":"preview","isRequired":true,"uniqueKey":"oneOf.1.object","typeLabel":"string"},"livemode":{"type":"boolean","description":"`false` si la vista previa es de tu estudio de prueba (claves `crq_test_`); `true` con claves `crq_live_`.","isRequired":true,"uniqueKey":"oneOf.1.livemode","typeLabel":"boolean"},"action":{"type":"string","description":"`credit_grant.create`, `credit_grant.revoke`, `membership.create`, `membership.cancel`, `membership.freeze`,\n`membership.unfreeze` o `payment.create`. La lista puede crecer.\n","enum":["credit_grant.create","credit_grant.revoke","membership.create","membership.cancel","membership.freeze","membership.unfreeze","payment.create"],"x-extensible-enum":true,"isRequired":true,"uniqueKey":"oneOf.1.action","typeLabel":"enum\u003cstring>"},"result":{"oneOf":[{"type":"object","description":"El objeto como está hoy; `null` si la escritura lo crearía.","required":["id","object","livemode","client_id","kind","credit_pack_id","credits_granted","credits_remaining","granted_at","revoked_at","expires_at","status","course_ids","fee_id","price","created_at"],"properties":{"id":{"type":"string","description":"Id de un lote de créditos (un pack, una oferta o el período de una membresía).","pattern":"^cgr_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["cgr_01jdwsxvjgc7y12y0h12f43149"],"isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.0.id","typeLabel":"string"},"object":{"type":"string","const":"credit_grant","isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.0.object","typeLabel":"string"},"livemode":{"type":"boolean","description":"`false` si el objeto es de tu estudio de prueba (claves `crq_test_`); `true` con claves `crq_live_`.","isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.0.livemode","typeLabel":"boolean"},"client_id":{"oneOf":[{"type":"string","description":"El cliente. `null` si el lote es de alguien que no es cliente del estudio (por ejemplo, alguien del equipo).","pattern":"^cli_[0-7][0-9a-hjkmnp-tv-z]{25}$","example":"cli_01jatfha5h4nkg77c3wfrvd3cw","isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.0.client_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"El cliente. `null` si el lote es de alguien que no es cliente del estudio (por ejemplo, alguien del equipo).","isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.0.client_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.0.client_id","typeLabel":"string | null"},"kind":{"oneOf":[{"type":"string","description":"`pack`, `intro_offer` o `membership_period`. `null` solo en lotes muy viejos sin tipo. La lista\npuede crecer.\n","enum":["pack","intro_offer","membership_period",null],"x-extensible-enum":true,"isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.0.kind.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"`pack`, `intro_offer` o `membership_period`. `null` solo en lotes muy viejos sin tipo. La lista\npuede crecer.\n","enum":["pack","intro_offer","membership_period",null],"x-extensible-enum":true,"isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.0.kind.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.0.kind","typeLabel":"enum\u003cstring> | null"},"credit_pack_id":{"oneOf":[{"type":"string","description":"El pack que se compró, solo si `kind` es `pack`.","pattern":"^cpk_[0-7][0-9a-hjkmnp-tv-z]{25}$","example":"cpk_01j63ec7mff1rr7pbk3z1b8ke1","isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.0.credit_pack_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"El pack que se compró, solo si `kind` es `pack`.","isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.0.credit_pack_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.0.credit_pack_id","typeLabel":"string | null"},"credits_granted":{"type":"integer","description":"Los créditos que dio el lote.","isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.0.credits_granted","typeLabel":"integer"},"credits_remaining":{"type":"integer","description":"Los créditos que le quedan.","isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.0.credits_remaining","typeLabel":"integer"},"granted_at":{"type":"string","format":"date-time","description":"Instante en RFC 3339 con el offset del negocio en ese momento.","examples":["2026-12-02T19:00:00-03:00"],"isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.0.granted_at","typeLabel":"string\u003cdate-time>"},"revoked_at":{"oneOf":[{"type":"string","description":"Cuándo el estudio anuló el lote; `null` si no se anuló.","format":"date-time","example":"2026-12-02T19:00:00-03:00","isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.0.revoked_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"Cuándo el estudio anuló el lote; `null` si no se anuló.","isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.0.revoked_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.0.revoked_at","typeLabel":"string\u003cdate-time> | null"},"expires_at":{"oneOf":[{"type":"string","description":"Cuándo vencen los créditos, con los días de gracia ya sumados. `null` si no vencen.\n","format":"date-time","example":"2026-12-02T19:00:00-03:00","isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.0.expires_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"Cuándo vencen los créditos, con los días de gracia ya sumados. `null` si no vencen.\n","isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.0.expires_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.0.expires_at","typeLabel":"string\u003cdate-time> | null"},"status":{"type":"string","description":"`revoked` si se anuló; si no, `expired` si venció; si no, `depleted` si no le quedan créditos; si\nno, `active`. La lista puede crecer: trata un valor que no conoces como un lote que no se puede usar.\n","enum":["active","depleted","expired","revoked"],"x-extensible-enum":true,"isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.0.status","typeLabel":"enum\u003cstring>"},"course_ids":{"oneOf":[{"description":"Las disciplinas en las que sirven los créditos; `null` si sirven en todas.","type":"array","items":{"type":"string","description":"Id de una disciplina.","pattern":"^crs_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["crs_01jff81dk7rxtacmye5nanfp0h"],"uniqueKey":"oneOf.1.result.oneOf.0.course_ids.oneOf.0.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.0.course_ids.oneOf.0","typeLabel":"string[]"},{"description":"Las disciplinas en las que sirven los créditos; `null` si sirven en todas.","type":"null","items":{"type":"string","description":"Id de una disciplina.","pattern":"^crs_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["crs_01jff81dk7rxtacmye5nanfp0h"]},"isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.0.course_ids.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.0.course_ids","typeLabel":"string[] | null"},"fee_id":{"oneOf":[{"type":"string","description":"La cuota con la que se cobró el lote; `null` si no tiene (por ejemplo, créditos de regalo).","pattern":"^fee_[0-7][0-9a-hjkmnp-tv-z]{25}$","example":"fee_01jxycdc0zf2nxw7n2azer6wqp","isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.0.fee_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"La cuota con la que se cobró el lote; `null` si no tiene (por ejemplo, créditos de regalo).","isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.0.fee_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.0.fee_id","typeLabel":"string | null"},"price":{"oneOf":[{"type":"object","description":"Lo que se pagó por el lote; `null` si no se registró un precio.","required":["amount_cents","currency"],"properties":{"amount_cents":{"type":"integer","description":"El monto multiplicado por 100. `250000` con `UYU` es $ 2.500,00. Un entero: `250000.5` o `\"250000\"` es\n`validation_failed` (`250000.0` es el mismo número que `250000`).\n","examples":[250000],"isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.0.price.oneOf.0.amount_cents","typeLabel":"integer"},"currency":{"type":"string","description":"Moneda ISO 4217, en mayúsculas.","pattern":"^[A-Z]{3}$","examples":["UYU"],"isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.0.price.oneOf.0.currency","typeLabel":"string"}},"isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.0.price.oneOf.0","typeLabel":"object"},{"type":"null","description":"Lo que se pagó por el lote; `null` si no se registró un precio.","isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.0.price.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.0.price","typeLabel":"object | null"},"created_at":{"type":"string","format":"date-time","description":"Instante en RFC 3339 con el offset del negocio en ese momento.","examples":["2026-12-02T19:00:00-03:00"],"isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.0.created_at","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.0","typeLabel":"object"},{"type":"object","description":"El objeto como está hoy; `null` si la escritura lo crearía.","required":["id","object","livemode","client_id","membership_plan_id","status","current_period_start","current_period_end","renews_at","next_credit_date","started_at","cancelled_at","suspension_reason","discount","active_freeze_id","created_at","updated_at"],"properties":{"id":{"type":"string","description":"Id de una membresía de un cliente.","pattern":"^mem_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["mem_01j1q27t44qvr6v2s50cv4rbvq"],"isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.1.id","typeLabel":"string"},"object":{"type":"string","const":"membership","isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.1.object","typeLabel":"string"},"livemode":{"type":"boolean","description":"`false` si el objeto es de tu estudio de prueba (claves `crq_test_`); `true` con claves `crq_live_`.","isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.1.livemode","typeLabel":"boolean"},"client_id":{"oneOf":[{"type":"string","description":"El cliente. `null` si la membresía es de alguien que no es cliente del estudio.","pattern":"^cli_[0-7][0-9a-hjkmnp-tv-z]{25}$","example":"cli_01jatfha5h4nkg77c3wfrvd3cw","isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.1.client_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"El cliente. `null` si la membresía es de alguien que no es cliente del estudio.","isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.1.client_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.1.client_id","typeLabel":"string | null"},"membership_plan_id":{"type":"string","description":"Id de un plan de membresía.","pattern":"^mpl_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["mpl_01jt05nvk11xa1zm1pwve2qj7r"],"isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.1.membership_plan_id","typeLabel":"string"},"status":{"type":"string","description":"`active`, `paused` (congelada), `suspended`, `pending_payment`, `cancelled` o `expired`. La lista\npuede crecer: trata un valor que no conoces como una membresía que no da créditos.\n","enum":["active","paused","suspended","pending_payment","cancelled","expired"],"x-extensible-enum":true,"isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.1.status","typeLabel":"enum\u003cstring>"},"current_period_start":{"type":"string","format":"date-time","description":"Instante en RFC 3339 con el offset del negocio en ese momento.","examples":["2026-12-02T19:00:00-03:00"],"isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.1.current_period_start","typeLabel":"string\u003cdate-time>"},"current_period_end":{"type":"string","format":"date-time","description":"Instante en RFC 3339 con el offset del negocio en ese momento.","examples":["2026-12-02T19:00:00-03:00"],"isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.1.current_period_end","typeLabel":"string\u003cdate-time>"},"renews_at":{"oneOf":[{"type":"string","description":"Cuándo se renueva sola: el fin del período actual si la membresía está `active` y su plan se\nrenueva solo; si no, `null`.\n","format":"date-time","example":"2026-12-02T19:00:00-03:00","isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.1.renews_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"Cuándo se renueva sola: el fin del período actual si la membresía está `active` y su plan se\nrenueva solo; si no, `null`.\n","isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.1.renews_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.1.renews_at","typeLabel":"string\u003cdate-time> | null"},"next_credit_date":{"oneOf":[{"type":"string","description":"La fecha local en que recibe los próximos créditos; `null` si no hay una prevista.","format":"date","pattern":"^\\d{4}-\\d{2}-\\d{2}$","example":"2026-12-02","isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.1.next_credit_date.oneOf.0","typeLabel":"string\u003cdate>"},{"type":"null","description":"La fecha local en que recibe los próximos créditos; `null` si no hay una prevista.","isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.1.next_credit_date.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.1.next_credit_date","typeLabel":"string\u003cdate> | null"},"started_at":{"type":"string","format":"date-time","description":"Instante en RFC 3339 con el offset del negocio en ese momento.","examples":["2026-12-02T19:00:00-03:00"],"isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.1.started_at","typeLabel":"string\u003cdate-time>"},"cancelled_at":{"oneOf":[{"type":"string","description":"Instante en RFC 3339 con el offset del negocio en ese momento.","format":"date-time","example":"2026-12-02T19:00:00-03:00","isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.1.cancelled_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.1.cancelled_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.1.cancelled_at","typeLabel":"string\u003cdate-time> | null"},"suspension_reason":{"oneOf":[{"type":"string","description":"Por qué se suspendió, como texto; `null` si no está suspendida.","isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.1.suspension_reason.oneOf.0","typeLabel":"string"},{"type":"null","description":"Por qué se suspendió, como texto; `null` si no está suspendida.","isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.1.suspension_reason.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.1.suspension_reason","typeLabel":"string | null"},"discount":{"oneOf":[{"type":"object","description":"El descuento que tiene la membresía; `null` si no tiene.","required":["percent","fixed_amount","periods_remaining"],"properties":{"percent":{"oneOf":[{"type":"number","description":"El porcentaje de descuento (por ejemplo `15` es 15 %); `null` si es un monto fijo.","isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.1.discount.oneOf.0.percent.oneOf.0","typeLabel":"number"},{"type":"null","description":"El porcentaje de descuento (por ejemplo `15` es 15 %); `null` si es un monto fijo.","isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.1.discount.oneOf.0.percent.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.1.discount.oneOf.0.percent","typeLabel":"number | null"},"fixed_amount":{"oneOf":[{"type":"object","description":"El monto fijo que se descuenta de cada cuota; `null` si es un porcentaje.","required":["amount_cents","currency"],"properties":{"amount_cents":{"type":"integer","description":"El monto multiplicado por 100. `250000` con `UYU` es $ 2.500,00. Un entero: `250000.5` o `\"250000\"` es\n`validation_failed` (`250000.0` es el mismo número que `250000`).\n","examples":[250000],"isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.1.discount.oneOf.0.fixed_amount.oneOf.0.amount_cents","typeLabel":"integer"},"currency":{"type":"string","description":"Moneda ISO 4217, en mayúsculas.","pattern":"^[A-Z]{3}$","examples":["UYU"],"isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.1.discount.oneOf.0.fixed_amount.oneOf.0.currency","typeLabel":"string"}},"isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.1.discount.oneOf.0.fixed_amount.oneOf.0","typeLabel":"object"},{"type":"null","description":"El monto fijo que se descuenta de cada cuota; `null` si es un porcentaje.","isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.1.discount.oneOf.0.fixed_amount.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.1.discount.oneOf.0.fixed_amount","typeLabel":"object | null"},"periods_remaining":{"oneOf":[{"type":"integer","description":"Cuántos períodos más se aplica; `null` si se aplica siempre.","isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.1.discount.oneOf.0.periods_remaining.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Cuántos períodos más se aplica; `null` si se aplica siempre.","isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.1.discount.oneOf.0.periods_remaining.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.1.discount.oneOf.0.periods_remaining","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.1.discount.oneOf.0","typeLabel":"object"},{"type":"null","description":"El descuento que tiene la membresía; `null` si no tiene.","isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.1.discount.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.1.discount","typeLabel":"object | null"},"active_freeze_id":{"oneOf":[{"type":"string","description":"El congelamiento en curso o programado; `null` si no hay. El detalle está en `GET /v1/memberships/{id}/freezes`.","pattern":"^frz_[0-7][0-9a-hjkmnp-tv-z]{25}$","example":"frz_01jtk6e3z2vm9ych2cc7kadyja","isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.1.active_freeze_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"El congelamiento en curso o programado; `null` si no hay. El detalle está en `GET /v1/memberships/{id}/freezes`.","isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.1.active_freeze_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.1.active_freeze_id","typeLabel":"string | null"},"created_at":{"type":"string","format":"date-time","description":"Instante en RFC 3339 con el offset del negocio en ese momento.","examples":["2026-12-02T19:00:00-03:00"],"isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.1.created_at","typeLabel":"string\u003cdate-time>"},"updated_at":{"type":"string","format":"date-time","description":"Instante en RFC 3339 con el offset del negocio en ese momento.","examples":["2026-12-02T19:00:00-03:00"],"isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.1.updated_at","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.1","typeLabel":"object"},{"type":"null","description":"El objeto como está hoy; `null` si la escritura lo crearía.","isRequired":true,"uniqueKey":"oneOf.1.result.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.1.result","typeLabel":"object · object · null"},"effects":{"type":"object","description":"Lo que pasaría con la plata, los créditos y los avisos. Cada acción trae sus campos.","required":["notifies_client"],"properties":{"notifies_client":{"type":"boolean","description":"`true` si al cliente le llegaría un aviso.","isRequired":true,"uniqueKey":"oneOf.1.effects.notifies_client","typeLabel":"boolean"},"credits_added":{"type":"integer","description":"Créditos que se cargarían (packs y membresías).","uniqueKey":"oneOf.1.effects.credits_added","typeLabel":"integer"},"expires_at":{"oneOf":[{"type":"string","description":"Cuándo vencerían los créditos del pack.","uniqueKey":"oneOf.1.effects.expires_at.oneOf.0","typeLabel":"string"},{"type":"null","description":"Cuándo vencerían los créditos del pack.","uniqueKey":"oneOf.1.effects.expires_at.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.effects.expires_at","typeLabel":"string | null"},"fee":{"oneOf":[{"type":"object","description":"La cuota que se crearía para el pack; `null` si el pack no tiene precio.","required":["amount_cents","currency"],"properties":{"amount_cents":{"type":"integer","description":"El monto multiplicado por 100. `250000` con `UYU` es $ 2.500,00. Un entero: `250000.5` o `\"250000\"` es\n`validation_failed` (`250000.0` es el mismo número que `250000`).\n","examples":[250000],"isRequired":true,"uniqueKey":"oneOf.1.effects.fee.oneOf.0.amount_cents","typeLabel":"integer"},"currency":{"type":"string","description":"Moneda ISO 4217, en mayúsculas.","pattern":"^[A-Z]{3}$","examples":["UYU"],"isRequired":true,"uniqueKey":"oneOf.1.effects.fee.oneOf.0.currency","typeLabel":"string"}},"uniqueKey":"oneOf.1.effects.fee.oneOf.0","typeLabel":"object"},{"type":"null","description":"La cuota que se crearía para el pack; `null` si el pack no tiene precio.","uniqueKey":"oneOf.1.effects.fee.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.effects.fee","typeLabel":"object | null"},"no_fee_reason":{"oneOf":[{"type":"string","enum":["no_charge",null],"uniqueKey":"oneOf.1.effects.no_fee_reason.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","enum":["no_charge",null],"uniqueKey":"oneOf.1.effects.no_fee_reason.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.effects.no_fee_reason","typeLabel":"enum\u003cstring> | null"},"bookings_cancelled":{"type":"integer","description":"Reservas que se cancelarían.","uniqueKey":"oneOf.1.effects.bookings_cancelled","typeLabel":"integer"},"status":{"type":"string","description":"El estado con que nacería la membresía (`active`, o `pending_payment` si empieza más adelante).","uniqueKey":"oneOf.1.effects.status","typeLabel":"string"},"period_start":{"oneOf":[{"type":"string","description":"Inicio del primer período.","uniqueKey":"oneOf.1.effects.period_start.oneOf.0","typeLabel":"string"},{"type":"null","description":"Inicio del primer período.","uniqueKey":"oneOf.1.effects.period_start.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.effects.period_start","typeLabel":"string | null"},"period_end":{"oneOf":[{"type":"string","description":"Fin del primer período.","uniqueKey":"oneOf.1.effects.period_end.oneOf.0","typeLabel":"string"},{"type":"null","description":"Fin del primer período.","uniqueKey":"oneOf.1.effects.period_end.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.effects.period_end","typeLabel":"string | null"},"first_fee":{"type":"object","required":["amount_cents","currency"],"properties":{"amount_cents":{"type":"integer","description":"El monto multiplicado por 100. `250000` con `UYU` es $ 2.500,00. Un entero: `250000.5` o `\"250000\"` es\n`validation_failed` (`250000.0` es el mismo número que `250000`).\n","examples":[250000],"isRequired":true,"uniqueKey":"oneOf.1.effects.first_fee.amount_cents","typeLabel":"integer"},"currency":{"type":"string","description":"Moneda ISO 4217, en mayúsculas.","pattern":"^[A-Z]{3}$","examples":["UYU"],"isRequired":true,"uniqueKey":"oneOf.1.effects.first_fee.currency","typeLabel":"string"}},"uniqueKey":"oneOf.1.effects.first_fee","typeLabel":"object"},"first_fee_due_date":{"oneOf":[{"type":"string","description":"Vencimiento de la primera cuota.","uniqueKey":"oneOf.1.effects.first_fee_due_date.oneOf.0","typeLabel":"string"},{"type":"null","description":"Vencimiento de la primera cuota.","uniqueKey":"oneOf.1.effects.first_fee_due_date.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.effects.first_fee_due_date","typeLabel":"string | null"},"next_fee":{"oneOf":[{"type":"object","description":"La cuota del período siguiente, si el estudio la emite por adelantado.","required":["amount_cents","currency"],"properties":{"amount_cents":{"type":"integer","description":"El monto multiplicado por 100. `250000` con `UYU` es $ 2.500,00. Un entero: `250000.5` o `\"250000\"` es\n`validation_failed` (`250000.0` es el mismo número que `250000`).\n","examples":[250000],"isRequired":true,"uniqueKey":"oneOf.1.effects.next_fee.oneOf.0.amount_cents","typeLabel":"integer"},"currency":{"type":"string","description":"Moneda ISO 4217, en mayúsculas.","pattern":"^[A-Z]{3}$","examples":["UYU"],"isRequired":true,"uniqueKey":"oneOf.1.effects.next_fee.oneOf.0.currency","typeLabel":"string"}},"uniqueKey":"oneOf.1.effects.next_fee.oneOf.0","typeLabel":"object"},{"type":"null","description":"La cuota del período siguiente, si el estudio la emite por adelantado.","uniqueKey":"oneOf.1.effects.next_fee.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.effects.next_fee","typeLabel":"object | null"},"changed":{"type":"boolean","description":"`false` si la baja ya estaba programada.","uniqueKey":"oneOf.1.effects.changed","typeLabel":"boolean"},"ends_at_paid_period_end":{"type":"boolean","description":"`true` si una baja de hoy termina al cierre del período siguiente porque ya está pagado.","uniqueKey":"oneOf.1.effects.ends_at_paid_period_end","typeLabel":"boolean"},"mode":{"type":"string","enum":["created","end_changed"],"description":"`created`: un congelamiento nuevo; `end_changed`: cambia el día de vuelta del que está abierto.","uniqueKey":"oneOf.1.effects.mode","typeLabel":"enum\u003cstring>"},"freeze":{"type":"string","enum":["active","scheduled"],"description":"`active`: se descongela hoy; `scheduled`: se anula un congelamiento programado.","uniqueKey":"oneOf.1.effects.freeze","typeLabel":"enum\u003cstring>"},"period_renewed":{"type":"boolean","description":"`true` si la vuelta abriría un período nuevo, con sus créditos y, si el plan cobra, su cuota.","uniqueKey":"oneOf.1.effects.period_renewed","typeLabel":"boolean"},"amount":{"type":"object","required":["amount_cents","currency"],"properties":{"amount_cents":{"type":"integer","description":"El monto multiplicado por 100. `250000` con `UYU` es $ 2.500,00. Un entero: `250000.5` o `\"250000\"` es\n`validation_failed` (`250000.0` es el mismo número que `250000`).\n","examples":[250000],"isRequired":true,"uniqueKey":"oneOf.1.effects.amount.amount_cents","typeLabel":"integer"},"currency":{"type":"string","description":"Moneda ISO 4217, en mayúsculas.","pattern":"^[A-Z]{3}$","examples":["UYU"],"isRequired":true,"uniqueKey":"oneOf.1.effects.amount.currency","typeLabel":"string"}},"uniqueKey":"oneOf.1.effects.amount","typeLabel":"object"},"paid_on":{"type":"string","format":"date","description":"Fecha local del negocio, `YYYY-MM-DD`.","pattern":"^\\d{4}-\\d{2}-\\d{2}$","examples":["2026-12-02"],"uniqueKey":"oneOf.1.effects.paid_on","typeLabel":"string\u003cdate>"},"fee_status_after":{"type":"string","description":"El estado de la cuota después del pago (`paid_on_time` o `paid_late`).","uniqueKey":"oneOf.1.effects.fee_status_after","typeLabel":"string"},"membership_activated":{"type":"boolean","description":"`true` si el pago activaría una membresía que esperaba su primer pago.","uniqueKey":"oneOf.1.effects.membership_activated","typeLabel":"boolean"},"membership_reactivated":{"type":"boolean","description":"`true` si el pago reactivaría una membresía suspendida.","uniqueKey":"oneOf.1.effects.membership_reactivated","typeLabel":"boolean"},"receipt":{"type":"boolean","description":"`true` si se le mandaría el recibo al cliente.","uniqueKey":"oneOf.1.effects.receipt","typeLabel":"boolean"},"einvoice":{"type":"boolean","description":"`true` si se emitiría la factura electrónica (`notify: false` nunca la apaga).","uniqueKey":"oneOf.1.effects.einvoice","typeLabel":"boolean"},"notifications_not_suppressed":{"type":"array","description":"Avisos que `notify: false` no apagaría (`membership_reactivated`).","items":{"type":"string","uniqueKey":"oneOf.1.effects.notifications_not_suppressed.items.[INDEX]","typeLabel":"string"},"uniqueKey":"oneOf.1.effects.notifications_not_suppressed","typeLabel":"string[]"}},"isRequired":true,"uniqueKey":"oneOf.1.effects","typeLabel":"object"},"warnings":{"type":"array","description":"`no_change` (la baja ya estaba programada: el pedido real no cambia nada). La lista puede crecer.","items":{"type":"string","enum":["no_change"],"x-extensible-enum":true,"uniqueKey":"oneOf.1.warnings.items.[INDEX]","typeLabel":"enum\u003cstring>"},"isRequired":true,"uniqueKey":"oneOf.1.warnings","typeLabel":"enum\u003cstring>[]"},"summary":{"type":"string","description":"Lo mismo en una frase en español, para mostrarle a una persona. No nombra al cliente.","isRequired":true,"uniqueKey":"oneOf.1.summary","typeLabel":"string"}},"uniqueKey":"oneOf.1","typeLabel":"object"}],"uniqueKey":"","typeLabel":"object"},"example":{"id":"cgr_01jq0k3r5yh8dc2wf7n4tz6abq","object":"credit_grant","livemode":true,"client_id":"cli_01jdrjw8n5syx1rnc41a659b47","kind":"pack","credit_pack_id":"cpk_01ja22hsnt2nvxma65x2bsd729","credits_granted":1,"credits_remaining":0,"granted_at":"2026-12-01T11:30:12-03:00","revoked_at":"2026-12-01T11:32:40-03:00","expires_at":"2026-12-31T11:30:12-03:00","status":"revoked","course_ids":null,"fee_id":null,"price":{"amount_cents":60000,"currency":"UYU"},"created_at":"2026-12-01T11:30:12-03:00"},"examples":{"Example":{"title":"Example","value":{"id":"cgr_01jq0k3r5yh8dc2wf7n4tz6abq","object":"credit_grant","livemode":true,"client_id":"cli_01jdrjw8n5syx1rnc41a659b47","kind":"pack","credit_pack_id":"cpk_01ja22hsnt2nvxma65x2bsd729","credits_granted":1,"credits_remaining":0,"granted_at":"2026-12-01T11:30:12-03:00","revoked_at":"2026-12-01T11:32:40-03:00","expires_at":"2026-12-31T11:30:12-03:00","status":"revoked","course_ids":null,"fee_id":null,"price":{"amount_cents":60000,"currency":"UYU"},"created_at":"2026-12-01T11:30:12-03:00"}}},"exampleType":"examples"}},"exampleType":"examples"},"24e94b75-c2c3-4da3-879d-69ffee2f7059":{"description":"El pedido está mal formado. Códigos posibles: `invalid_api_version`, `idempotency_key_required`,\n`validation_failed` (con un elemento de `errors` por parámetro: `unknown_parameter`,\n`invalid_prefix`, `invalid_id`, `invalid_date`, `invalid_boolean`, `invalid_enum`,\n`invalid_limit`, `duplicate_parameter`, `expand_not_supported`…) e `invalid_cursor` (un\n`starting_after` de otra búsqueda: repite la primera página con los mismos filtros). En las URLs de\navisos, `webhook_url_invalid` (en `errors`, la causa: `not_https`, `port_not_allowed`,\n`credentials_in_url`, `ip_literal`, `internal_hostname`, `private_address`, `craqui_host` o `too_long`).\nAl cancelar una sesión, `notify_not_supported` (esa escritura no lleva `notify`: siempre avisa); también al\nrevocar un pack y al congelar o descongelar una membresía (no le avisan nada al cliente). En las escrituras de\nplata, `fee_decision_required` y `current_fee_choice_required` (la API no decide sobre plata por ti).\nUn token en la URL o en un cuerpo de formulario responde `invalid_request`: va solo en el header\n`Authorization`. El detalle de un error nunca repite el valor que mandaste.\n","headers":{"Request-Id":{"description":"Identificador del pedido. Aparece también en el cuerpo de los errores.","schema":{"type":"string","pattern":"^req_[0-9a-hjkmnp-tv-z]{26}$"}}},"content":{"application/problem+json":{"schema":{"type":"object","description":"Un error. Programa contra `code`, que no cambia; `title` y `detail` son para mostrarle a una\npersona y pueden cambiar de redacción.\n","required":["type","title","status","code","request_id"],"properties":{"type":{"type":"string","format":"uri","description":"URL de la página de la documentación de este error.","examples":["https://docs.craqui.com/errors/invalid_api_key"],"isRequired":true,"uniqueKey":"type","typeLabel":"string\u003curi>"},"title":{"type":"string","description":"Resumen corto, en español.","examples":["La clave no es válida"],"isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","description":"El mismo código HTTP de la respuesta.","examples":[401],"isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"code":{"type":"string","description":"Código estable del error. La lista puede crecer: trata un `code` que no conoces como un\nerror genérico de su `status`.\n","examples":["invalid_api_key"],"isRequired":true,"uniqueKey":"code","typeLabel":"string"},"request_id":{"type":"string","pattern":"^req_[0-9a-hjkmnp-tv-z]{26}$","description":"Identificador del pedido. Búscalo en Configuración → Integraciones → Actividad de la API.","examples":["req_01hzx8m4k2a7d9q3f5w6y8z0bc"],"isRequired":true,"uniqueKey":"request_id","typeLabel":"string"},"detail":{"type":"string","description":"Qué pasó y qué hacer, en español.","examples":["Revisa que copiaste la clave completa, incluido el prefijo (crq_live_ o crq_test_)."],"uniqueKey":"detail","typeLabel":"string"},"doc_url":{"type":"string","format":"uri","description":"Igual a `type`, por compatibilidad con clientes que buscan este campo.","uniqueKey":"doc_url","typeLabel":"string\u003curi>"},"required_scope":{"type":"string","description":"Solo en `scope_required` y `event_type_not_permitted`. El permiso que le falta a la clave.","examples":["business:read"],"uniqueKey":"required_scope","typeLabel":"string"},"errors":{"type":"array","description":"Solo en errores de validación. Un elemento por campo con problemas.","items":{"type":"object","required":["field","code"],"properties":{"field":{"type":"string","description":"El campo, como lo mandaste (por ejemplo `limit`).","examples":["limit"],"isRequired":true,"uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","description":"Qué tiene mal el campo.","examples":["invalid_limit"],"isRequired":true,"uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"detail":{"type":"string","description":"Explicación en español.","uniqueKey":"errors.items.[INDEX].detail","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"},"current_price":{"type":"object","required":["amount_cents","currency"],"properties":{"amount_cents":{"type":"integer","description":"El monto multiplicado por 100. `250000` con `UYU` es $ 2.500,00. Un entero: `250000.5` o `\"250000\"` es\n`validation_failed` (`250000.0` es el mismo número que `250000`).\n","examples":[250000],"isRequired":true,"uniqueKey":"current_price.amount_cents","typeLabel":"integer"},"currency":{"type":"string","description":"Moneda ISO 4217, en mayúsculas.","pattern":"^[A-Z]{3}$","examples":["UYU"],"isRequired":true,"uniqueKey":"current_price.currency","typeLabel":"string"}},"description":"Solo en `price_changed`. El precio de hoy, en centésimos y con su moneda.","uniqueKey":"current_price","typeLabel":"object"},"expected_amount":{"type":"object","required":["amount_cents","currency"],"properties":{"amount_cents":{"type":"integer","description":"El monto multiplicado por 100. `250000` con `UYU` es $ 2.500,00. Un entero: `250000.5` o `\"250000\"` es\n`validation_failed` (`250000.0` es el mismo número que `250000`).\n","examples":[250000],"isRequired":true,"uniqueKey":"expected_amount.amount_cents","typeLabel":"integer"},"currency":{"type":"string","description":"Moneda ISO 4217, en mayúsculas.","pattern":"^[A-Z]{3}$","examples":["UYU"],"isRequired":true,"uniqueKey":"expected_amount.currency","typeLabel":"string"}},"description":"Solo en `amount_mismatch`. El saldo de hoy de la cuota, en centésimos y con su moneda.","uniqueKey":"expected_amount","typeLabel":"object"},"amount_at_stake":{"type":"object","required":["amount_cents","currency"],"properties":{"amount_cents":{"type":"integer","description":"El monto multiplicado por 100. `250000` con `UYU` es $ 2.500,00. Un entero: `250000.5` o `\"250000\"` es\n`validation_failed` (`250000.0` es el mismo número que `250000`).\n","examples":[250000],"isRequired":true,"uniqueKey":"amount_at_stake.amount_cents","typeLabel":"integer"},"currency":{"type":"string","description":"Moneda ISO 4217, en mayúsculas.","pattern":"^[A-Z]{3}$","examples":["UYU"],"isRequired":true,"uniqueKey":"amount_at_stake.currency","typeLabel":"string"}},"description":"Solo en `advance_payment_choice_required`. Lo que falta cobrar del pago por adelantado.","uniqueKey":"amount_at_stake","typeLabel":"object"},"existing_membership_id":{"type":"string","description":"Solo en `active_membership_exists`, `membership_suspended`, `membership_paused` y `membership_scheduled` al\nasignar una membresía: la que el cliente ya tiene.\n","pattern":"^mem_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["mem_01j1q27t44qvr6v2s50cv4rbvq"],"uniqueKey":"existing_membership_id","typeLabel":"string"},"booking_ids":{"type":"array","description":"Solo en `bookings_in_freeze_window` y `bookings_changed`. Las reservas en esas fechas.","items":{"type":"string","description":"Id de una reserva.","pattern":"^bkg_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["bkg_01jx9eak0437zdf0yw0atg7g0r"],"uniqueKey":"booking_ids.items.[INDEX]","typeLabel":"string"},"uniqueKey":"booking_ids","typeLabel":"string[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"type":"https://docs.craqui.com/errors/invalid_api_key","title":"La clave no es válida","status":401,"code":"invalid_api_key","request_id":"req_01hzx8m4k2a7d9q3f5w6y8z0bc","detail":"Revisa que copiaste la clave completa, incluido el prefijo (crq_live_ o crq_test_).","doc_url":"\u003cstring>","required_scope":"business:read","errors":[{"field":"limit","code":"invalid_limit","detail":"\u003cstring>"}],"current_price":{"amount_cents":250000,"currency":"UYU"},"expected_amount":{"amount_cents":250000,"currency":"UYU"},"amount_at_stake":{"amount_cents":250000,"currency":"UYU"},"existing_membership_id":"mem_01j1q27t44qvr6v2s50cv4rbvq","booking_ids":["bkg_01jx9eak0437zdf0yw0atg7g0r"]}}},"exampleType":"generated"}},"exampleType":"generated"},"13573931-ffad-449d-96fa-4248d63562a5":{"description":"Falta la clave o no sirve. Códigos posibles: `missing_api_key`, `invalid_api_key`,\n`revoked_api_key`, `expired_api_key`, `legacy_api_key`. Con el token de una app: `invalid_access_token` (no\nes válido o venció: pide otro con el refresh token) y `app_connection_revoked` (el propietario desconectó la\napp); los dos llevan el header `WWW-Authenticate: Bearer error=\"invalid_token\"`.\n","headers":{"Request-Id":{"description":"Identificador del pedido. Aparece también en el cuerpo de los errores.","schema":{"type":"string","pattern":"^req_[0-9a-hjkmnp-tv-z]{26}$"}}},"content":{"application/problem+json":{"schema":{"type":"object","description":"Un error. Programa contra `code`, que no cambia; `title` y `detail` son para mostrarle a una\npersona y pueden cambiar de redacción.\n","required":["type","title","status","code","request_id"],"properties":{"type":{"type":"string","format":"uri","description":"URL de la página de la documentación de este error.","examples":["https://docs.craqui.com/errors/invalid_api_key"],"isRequired":true,"uniqueKey":"type","typeLabel":"string\u003curi>"},"title":{"type":"string","description":"Resumen corto, en español.","examples":["La clave no es válida"],"isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","description":"El mismo código HTTP de la respuesta.","examples":[401],"isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"code":{"type":"string","description":"Código estable del error. La lista puede crecer: trata un `code` que no conoces como un\nerror genérico de su `status`.\n","examples":["invalid_api_key"],"isRequired":true,"uniqueKey":"code","typeLabel":"string"},"request_id":{"type":"string","pattern":"^req_[0-9a-hjkmnp-tv-z]{26}$","description":"Identificador del pedido. Búscalo en Configuración → Integraciones → Actividad de la API.","examples":["req_01hzx8m4k2a7d9q3f5w6y8z0bc"],"isRequired":true,"uniqueKey":"request_id","typeLabel":"string"},"detail":{"type":"string","description":"Qué pasó y qué hacer, en español.","examples":["Revisa que copiaste la clave completa, incluido el prefijo (crq_live_ o crq_test_)."],"uniqueKey":"detail","typeLabel":"string"},"doc_url":{"type":"string","format":"uri","description":"Igual a `type`, por compatibilidad con clientes que buscan este campo.","uniqueKey":"doc_url","typeLabel":"string\u003curi>"},"required_scope":{"type":"string","description":"Solo en `scope_required` y `event_type_not_permitted`. El permiso que le falta a la clave.","examples":["business:read"],"uniqueKey":"required_scope","typeLabel":"string"},"errors":{"type":"array","description":"Solo en errores de validación. Un elemento por campo con problemas.","items":{"type":"object","required":["field","code"],"properties":{"field":{"type":"string","description":"El campo, como lo mandaste (por ejemplo `limit`).","examples":["limit"],"isRequired":true,"uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","description":"Qué tiene mal el campo.","examples":["invalid_limit"],"isRequired":true,"uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"detail":{"type":"string","description":"Explicación en español.","uniqueKey":"errors.items.[INDEX].detail","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"},"current_price":{"type":"object","required":["amount_cents","currency"],"properties":{"amount_cents":{"type":"integer","description":"El monto multiplicado por 100. `250000` con `UYU` es $ 2.500,00. Un entero: `250000.5` o `\"250000\"` es\n`validation_failed` (`250000.0` es el mismo número que `250000`).\n","examples":[250000],"isRequired":true,"uniqueKey":"current_price.amount_cents","typeLabel":"integer"},"currency":{"type":"string","description":"Moneda ISO 4217, en mayúsculas.","pattern":"^[A-Z]{3}$","examples":["UYU"],"isRequired":true,"uniqueKey":"current_price.currency","typeLabel":"string"}},"description":"Solo en `price_changed`. El precio de hoy, en centésimos y con su moneda.","uniqueKey":"current_price","typeLabel":"object"},"expected_amount":{"type":"object","required":["amount_cents","currency"],"properties":{"amount_cents":{"type":"integer","description":"El monto multiplicado por 100. `250000` con `UYU` es $ 2.500,00. Un entero: `250000.5` o `\"250000\"` es\n`validation_failed` (`250000.0` es el mismo número que `250000`).\n","examples":[250000],"isRequired":true,"uniqueKey":"expected_amount.amount_cents","typeLabel":"integer"},"currency":{"type":"string","description":"Moneda ISO 4217, en mayúsculas.","pattern":"^[A-Z]{3}$","examples":["UYU"],"isRequired":true,"uniqueKey":"expected_amount.currency","typeLabel":"string"}},"description":"Solo en `amount_mismatch`. El saldo de hoy de la cuota, en centésimos y con su moneda.","uniqueKey":"expected_amount","typeLabel":"object"},"amount_at_stake":{"type":"object","required":["amount_cents","currency"],"properties":{"amount_cents":{"type":"integer","description":"El monto multiplicado por 100. `250000` con `UYU` es $ 2.500,00. Un entero: `250000.5` o `\"250000\"` es\n`validation_failed` (`250000.0` es el mismo número que `250000`).\n","examples":[250000],"isRequired":true,"uniqueKey":"amount_at_stake.amount_cents","typeLabel":"integer"},"currency":{"type":"string","description":"Moneda ISO 4217, en mayúsculas.","pattern":"^[A-Z]{3}$","examples":["UYU"],"isRequired":true,"uniqueKey":"amount_at_stake.currency","typeLabel":"string"}},"description":"Solo en `advance_payment_choice_required`. Lo que falta cobrar del pago por adelantado.","uniqueKey":"amount_at_stake","typeLabel":"object"},"existing_membership_id":{"type":"string","description":"Solo en `active_membership_exists`, `membership_suspended`, `membership_paused` y `membership_scheduled` al\nasignar una membresía: la que el cliente ya tiene.\n","pattern":"^mem_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["mem_01j1q27t44qvr6v2s50cv4rbvq"],"uniqueKey":"existing_membership_id","typeLabel":"string"},"booking_ids":{"type":"array","description":"Solo en `bookings_in_freeze_window` y `bookings_changed`. Las reservas en esas fechas.","items":{"type":"string","description":"Id de una reserva.","pattern":"^bkg_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["bkg_01jx9eak0437zdf0yw0atg7g0r"],"uniqueKey":"booking_ids.items.[INDEX]","typeLabel":"string"},"uniqueKey":"booking_ids","typeLabel":"string[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"revoked":{"title":"revoked","value":{"type":"https://docs.craqui.com/errors/revoked_api_key","title":"La clave fue revocada","status":401,"code":"revoked_api_key","detail":"Crea una clave nueva en Configuración → Integraciones.","request_id":"req_01hzx8m4k2a7d9q3f5w6y8z0bc"}}},"exampleType":"examples"}},"exampleType":"examples"},"634672ba-dc1f-44af-af89-9fd8a68861b7":{"description":"La clave es válida pero no puede hacer esto. Códigos posibles: `scope_required`,\n`plan_required`, `api_key_suspended`, `browser_not_allowed`, `wrong_vertical`,\n`event_type_not_permitted` (eventos de un recurso que la clave no puede leer; `required_scope` dice cuál) y\n`write_access_disabled` (en una ruta que crea o cambia datos, si tu negocio no tiene habilitada la escritura por\nla API) y `money_writes_not_enabled` (en una ruta de packs, membresías o pagos, si tu negocio no tiene\nhabilitadas las escrituras de plata). Con el token de una app, además: `app_suspended` (Craqui suspendió la\napp) y `app_connection_suspended` (quien conectó la app ya no es propietario del negocio).\n","headers":{"Request-Id":{"description":"Identificador del pedido. Aparece también en el cuerpo de los errores.","schema":{"type":"string","pattern":"^req_[0-9a-hjkmnp-tv-z]{26}$"}}},"content":{"application/problem+json":{"schema":{"type":"object","description":"Un error. Programa contra `code`, que no cambia; `title` y `detail` son para mostrarle a una\npersona y pueden cambiar de redacción.\n","required":["type","title","status","code","request_id"],"properties":{"type":{"type":"string","format":"uri","description":"URL de la página de la documentación de este error.","examples":["https://docs.craqui.com/errors/invalid_api_key"],"isRequired":true,"uniqueKey":"type","typeLabel":"string\u003curi>"},"title":{"type":"string","description":"Resumen corto, en español.","examples":["La clave no es válida"],"isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","description":"El mismo código HTTP de la respuesta.","examples":[401],"isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"code":{"type":"string","description":"Código estable del error. La lista puede crecer: trata un `code` que no conoces como un\nerror genérico de su `status`.\n","examples":["invalid_api_key"],"isRequired":true,"uniqueKey":"code","typeLabel":"string"},"request_id":{"type":"string","pattern":"^req_[0-9a-hjkmnp-tv-z]{26}$","description":"Identificador del pedido. Búscalo en Configuración → Integraciones → Actividad de la API.","examples":["req_01hzx8m4k2a7d9q3f5w6y8z0bc"],"isRequired":true,"uniqueKey":"request_id","typeLabel":"string"},"detail":{"type":"string","description":"Qué pasó y qué hacer, en español.","examples":["Revisa que copiaste la clave completa, incluido el prefijo (crq_live_ o crq_test_)."],"uniqueKey":"detail","typeLabel":"string"},"doc_url":{"type":"string","format":"uri","description":"Igual a `type`, por compatibilidad con clientes que buscan este campo.","uniqueKey":"doc_url","typeLabel":"string\u003curi>"},"required_scope":{"type":"string","description":"Solo en `scope_required` y `event_type_not_permitted`. El permiso que le falta a la clave.","examples":["business:read"],"uniqueKey":"required_scope","typeLabel":"string"},"errors":{"type":"array","description":"Solo en errores de validación. Un elemento por campo con problemas.","items":{"type":"object","required":["field","code"],"properties":{"field":{"type":"string","description":"El campo, como lo mandaste (por ejemplo `limit`).","examples":["limit"],"isRequired":true,"uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","description":"Qué tiene mal el campo.","examples":["invalid_limit"],"isRequired":true,"uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"detail":{"type":"string","description":"Explicación en español.","uniqueKey":"errors.items.[INDEX].detail","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"},"current_price":{"type":"object","required":["amount_cents","currency"],"properties":{"amount_cents":{"type":"integer","description":"El monto multiplicado por 100. `250000` con `UYU` es $ 2.500,00. Un entero: `250000.5` o `\"250000\"` es\n`validation_failed` (`250000.0` es el mismo número que `250000`).\n","examples":[250000],"isRequired":true,"uniqueKey":"current_price.amount_cents","typeLabel":"integer"},"currency":{"type":"string","description":"Moneda ISO 4217, en mayúsculas.","pattern":"^[A-Z]{3}$","examples":["UYU"],"isRequired":true,"uniqueKey":"current_price.currency","typeLabel":"string"}},"description":"Solo en `price_changed`. El precio de hoy, en centésimos y con su moneda.","uniqueKey":"current_price","typeLabel":"object"},"expected_amount":{"type":"object","required":["amount_cents","currency"],"properties":{"amount_cents":{"type":"integer","description":"El monto multiplicado por 100. `250000` con `UYU` es $ 2.500,00. Un entero: `250000.5` o `\"250000\"` es\n`validation_failed` (`250000.0` es el mismo número que `250000`).\n","examples":[250000],"isRequired":true,"uniqueKey":"expected_amount.amount_cents","typeLabel":"integer"},"currency":{"type":"string","description":"Moneda ISO 4217, en mayúsculas.","pattern":"^[A-Z]{3}$","examples":["UYU"],"isRequired":true,"uniqueKey":"expected_amount.currency","typeLabel":"string"}},"description":"Solo en `amount_mismatch`. El saldo de hoy de la cuota, en centésimos y con su moneda.","uniqueKey":"expected_amount","typeLabel":"object"},"amount_at_stake":{"type":"object","required":["amount_cents","currency"],"properties":{"amount_cents":{"type":"integer","description":"El monto multiplicado por 100. `250000` con `UYU` es $ 2.500,00. Un entero: `250000.5` o `\"250000\"` es\n`validation_failed` (`250000.0` es el mismo número que `250000`).\n","examples":[250000],"isRequired":true,"uniqueKey":"amount_at_stake.amount_cents","typeLabel":"integer"},"currency":{"type":"string","description":"Moneda ISO 4217, en mayúsculas.","pattern":"^[A-Z]{3}$","examples":["UYU"],"isRequired":true,"uniqueKey":"amount_at_stake.currency","typeLabel":"string"}},"description":"Solo en `advance_payment_choice_required`. Lo que falta cobrar del pago por adelantado.","uniqueKey":"amount_at_stake","typeLabel":"object"},"existing_membership_id":{"type":"string","description":"Solo en `active_membership_exists`, `membership_suspended`, `membership_paused` y `membership_scheduled` al\nasignar una membresía: la que el cliente ya tiene.\n","pattern":"^mem_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["mem_01j1q27t44qvr6v2s50cv4rbvq"],"uniqueKey":"existing_membership_id","typeLabel":"string"},"booking_ids":{"type":"array","description":"Solo en `bookings_in_freeze_window` y `bookings_changed`. Las reservas en esas fechas.","items":{"type":"string","description":"Id de una reserva.","pattern":"^bkg_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["bkg_01jx9eak0437zdf0yw0atg7g0r"],"uniqueKey":"booking_ids.items.[INDEX]","typeLabel":"string"},"uniqueKey":"booking_ids","typeLabel":"string[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"type":"https://docs.craqui.com/errors/invalid_api_key","title":"La clave no es válida","status":401,"code":"invalid_api_key","request_id":"req_01hzx8m4k2a7d9q3f5w6y8z0bc","detail":"Revisa que copiaste la clave completa, incluido el prefijo (crq_live_ o crq_test_).","doc_url":"\u003cstring>","required_scope":"business:read","errors":[{"field":"limit","code":"invalid_limit","detail":"\u003cstring>"}],"current_price":{"amount_cents":250000,"currency":"UYU"},"expected_amount":{"amount_cents":250000,"currency":"UYU"},"amount_at_stake":{"amount_cents":250000,"currency":"UYU"},"existing_membership_id":"mem_01j1q27t44qvr6v2s50cv4rbvq","booking_ids":["bkg_01jx9eak0437zdf0yw0atg7g0r"]}}},"exampleType":"generated"}},"exampleType":"generated"},"ffd51cda-41fb-4c86-bb71-6973c66f7263":{"description":"No existe, o no es de tu negocio. Código `not_found` o `route_not_found`.","headers":{"Request-Id":{"description":"Identificador del pedido. Aparece también en el cuerpo de los errores.","schema":{"type":"string","pattern":"^req_[0-9a-hjkmnp-tv-z]{26}$"}}},"content":{"application/problem+json":{"schema":{"type":"object","description":"Un error. Programa contra `code`, que no cambia; `title` y `detail` son para mostrarle a una\npersona y pueden cambiar de redacción.\n","required":["type","title","status","code","request_id"],"properties":{"type":{"type":"string","format":"uri","description":"URL de la página de la documentación de este error.","examples":["https://docs.craqui.com/errors/invalid_api_key"],"isRequired":true,"uniqueKey":"type","typeLabel":"string\u003curi>"},"title":{"type":"string","description":"Resumen corto, en español.","examples":["La clave no es válida"],"isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","description":"El mismo código HTTP de la respuesta.","examples":[401],"isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"code":{"type":"string","description":"Código estable del error. La lista puede crecer: trata un `code` que no conoces como un\nerror genérico de su `status`.\n","examples":["invalid_api_key"],"isRequired":true,"uniqueKey":"code","typeLabel":"string"},"request_id":{"type":"string","pattern":"^req_[0-9a-hjkmnp-tv-z]{26}$","description":"Identificador del pedido. Búscalo en Configuración → Integraciones → Actividad de la API.","examples":["req_01hzx8m4k2a7d9q3f5w6y8z0bc"],"isRequired":true,"uniqueKey":"request_id","typeLabel":"string"},"detail":{"type":"string","description":"Qué pasó y qué hacer, en español.","examples":["Revisa que copiaste la clave completa, incluido el prefijo (crq_live_ o crq_test_)."],"uniqueKey":"detail","typeLabel":"string"},"doc_url":{"type":"string","format":"uri","description":"Igual a `type`, por compatibilidad con clientes que buscan este campo.","uniqueKey":"doc_url","typeLabel":"string\u003curi>"},"required_scope":{"type":"string","description":"Solo en `scope_required` y `event_type_not_permitted`. El permiso que le falta a la clave.","examples":["business:read"],"uniqueKey":"required_scope","typeLabel":"string"},"errors":{"type":"array","description":"Solo en errores de validación. Un elemento por campo con problemas.","items":{"type":"object","required":["field","code"],"properties":{"field":{"type":"string","description":"El campo, como lo mandaste (por ejemplo `limit`).","examples":["limit"],"isRequired":true,"uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","description":"Qué tiene mal el campo.","examples":["invalid_limit"],"isRequired":true,"uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"detail":{"type":"string","description":"Explicación en español.","uniqueKey":"errors.items.[INDEX].detail","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"},"current_price":{"type":"object","required":["amount_cents","currency"],"properties":{"amount_cents":{"type":"integer","description":"El monto multiplicado por 100. `250000` con `UYU` es $ 2.500,00. Un entero: `250000.5` o `\"250000\"` es\n`validation_failed` (`250000.0` es el mismo número que `250000`).\n","examples":[250000],"isRequired":true,"uniqueKey":"current_price.amount_cents","typeLabel":"integer"},"currency":{"type":"string","description":"Moneda ISO 4217, en mayúsculas.","pattern":"^[A-Z]{3}$","examples":["UYU"],"isRequired":true,"uniqueKey":"current_price.currency","typeLabel":"string"}},"description":"Solo en `price_changed`. El precio de hoy, en centésimos y con su moneda.","uniqueKey":"current_price","typeLabel":"object"},"expected_amount":{"type":"object","required":["amount_cents","currency"],"properties":{"amount_cents":{"type":"integer","description":"El monto multiplicado por 100. `250000` con `UYU` es $ 2.500,00. Un entero: `250000.5` o `\"250000\"` es\n`validation_failed` (`250000.0` es el mismo número que `250000`).\n","examples":[250000],"isRequired":true,"uniqueKey":"expected_amount.amount_cents","typeLabel":"integer"},"currency":{"type":"string","description":"Moneda ISO 4217, en mayúsculas.","pattern":"^[A-Z]{3}$","examples":["UYU"],"isRequired":true,"uniqueKey":"expected_amount.currency","typeLabel":"string"}},"description":"Solo en `amount_mismatch`. El saldo de hoy de la cuota, en centésimos y con su moneda.","uniqueKey":"expected_amount","typeLabel":"object"},"amount_at_stake":{"type":"object","required":["amount_cents","currency"],"properties":{"amount_cents":{"type":"integer","description":"El monto multiplicado por 100. `250000` con `UYU` es $ 2.500,00. Un entero: `250000.5` o `\"250000\"` es\n`validation_failed` (`250000.0` es el mismo número que `250000`).\n","examples":[250000],"isRequired":true,"uniqueKey":"amount_at_stake.amount_cents","typeLabel":"integer"},"currency":{"type":"string","description":"Moneda ISO 4217, en mayúsculas.","pattern":"^[A-Z]{3}$","examples":["UYU"],"isRequired":true,"uniqueKey":"amount_at_stake.currency","typeLabel":"string"}},"description":"Solo en `advance_payment_choice_required`. Lo que falta cobrar del pago por adelantado.","uniqueKey":"amount_at_stake","typeLabel":"object"},"existing_membership_id":{"type":"string","description":"Solo en `active_membership_exists`, `membership_suspended`, `membership_paused` y `membership_scheduled` al\nasignar una membresía: la que el cliente ya tiene.\n","pattern":"^mem_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["mem_01j1q27t44qvr6v2s50cv4rbvq"],"uniqueKey":"existing_membership_id","typeLabel":"string"},"booking_ids":{"type":"array","description":"Solo en `bookings_in_freeze_window` y `bookings_changed`. Las reservas en esas fechas.","items":{"type":"string","description":"Id de una reserva.","pattern":"^bkg_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["bkg_01jx9eak0437zdf0yw0atg7g0r"],"uniqueKey":"booking_ids.items.[INDEX]","typeLabel":"string"},"uniqueKey":"booking_ids","typeLabel":"string[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"type":"https://docs.craqui.com/errors/invalid_api_key","title":"La clave no es válida","status":401,"code":"invalid_api_key","request_id":"req_01hzx8m4k2a7d9q3f5w6y8z0bc","detail":"Revisa que copiaste la clave completa, incluido el prefijo (crq_live_ o crq_test_).","doc_url":"\u003cstring>","required_scope":"business:read","errors":[{"field":"limit","code":"invalid_limit","detail":"\u003cstring>"}],"current_price":{"amount_cents":250000,"currency":"UYU"},"expected_amount":{"amount_cents":250000,"currency":"UYU"},"amount_at_stake":{"amount_cents":250000,"currency":"UYU"},"existing_membership_id":"mem_01j1q27t44qvr6v2s50cv4rbvq","booking_ids":["bkg_01jx9eak0437zdf0yw0atg7g0r"]}}},"exampleType":"generated"}},"exampleType":"generated"},"dc88a6c9-3612-444c-8516-dbdadf4eac43":{"description":"Solo con una clave `crq_test_`: tu estudio de prueba no está listo. Código\n`sandbox_unavailable`. Restablece tus datos de prueba en Configuración → Integraciones y vuelve\na intentar. Una clave de prueba nunca responde con los datos reales del negocio. En los pedidos que\ncrean o modifican algo, también `idempotency_in_progress` (el mismo pedido todavía se está procesando) y,\nal crear una URL de avisos, `webhook_endpoint_limit_reached` (ya hay 10). En una ruta que crea o cambia datos\ndel estudio, además, sus reglas no dejan hacerlo: la descripción de cada ruta lista sus códigos.\n","headers":{"Request-Id":{"description":"Identificador del pedido. Aparece también en el cuerpo de los errores.","schema":{"type":"string","pattern":"^req_[0-9a-hjkmnp-tv-z]{26}$"}}},"content":{"application/problem+json":{"schema":{"type":"object","description":"Un error. Programa contra `code`, que no cambia; `title` y `detail` son para mostrarle a una\npersona y pueden cambiar de redacción.\n","required":["type","title","status","code","request_id"],"properties":{"type":{"type":"string","format":"uri","description":"URL de la página de la documentación de este error.","examples":["https://docs.craqui.com/errors/invalid_api_key"],"isRequired":true,"uniqueKey":"type","typeLabel":"string\u003curi>"},"title":{"type":"string","description":"Resumen corto, en español.","examples":["La clave no es válida"],"isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","description":"El mismo código HTTP de la respuesta.","examples":[401],"isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"code":{"type":"string","description":"Código estable del error. La lista puede crecer: trata un `code` que no conoces como un\nerror genérico de su `status`.\n","examples":["invalid_api_key"],"isRequired":true,"uniqueKey":"code","typeLabel":"string"},"request_id":{"type":"string","pattern":"^req_[0-9a-hjkmnp-tv-z]{26}$","description":"Identificador del pedido. Búscalo en Configuración → Integraciones → Actividad de la API.","examples":["req_01hzx8m4k2a7d9q3f5w6y8z0bc"],"isRequired":true,"uniqueKey":"request_id","typeLabel":"string"},"detail":{"type":"string","description":"Qué pasó y qué hacer, en español.","examples":["Revisa que copiaste la clave completa, incluido el prefijo (crq_live_ o crq_test_)."],"uniqueKey":"detail","typeLabel":"string"},"doc_url":{"type":"string","format":"uri","description":"Igual a `type`, por compatibilidad con clientes que buscan este campo.","uniqueKey":"doc_url","typeLabel":"string\u003curi>"},"required_scope":{"type":"string","description":"Solo en `scope_required` y `event_type_not_permitted`. El permiso que le falta a la clave.","examples":["business:read"],"uniqueKey":"required_scope","typeLabel":"string"},"errors":{"type":"array","description":"Solo en errores de validación. Un elemento por campo con problemas.","items":{"type":"object","required":["field","code"],"properties":{"field":{"type":"string","description":"El campo, como lo mandaste (por ejemplo `limit`).","examples":["limit"],"isRequired":true,"uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","description":"Qué tiene mal el campo.","examples":["invalid_limit"],"isRequired":true,"uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"detail":{"type":"string","description":"Explicación en español.","uniqueKey":"errors.items.[INDEX].detail","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"},"current_price":{"type":"object","required":["amount_cents","currency"],"properties":{"amount_cents":{"type":"integer","description":"El monto multiplicado por 100. `250000` con `UYU` es $ 2.500,00. Un entero: `250000.5` o `\"250000\"` es\n`validation_failed` (`250000.0` es el mismo número que `250000`).\n","examples":[250000],"isRequired":true,"uniqueKey":"current_price.amount_cents","typeLabel":"integer"},"currency":{"type":"string","description":"Moneda ISO 4217, en mayúsculas.","pattern":"^[A-Z]{3}$","examples":["UYU"],"isRequired":true,"uniqueKey":"current_price.currency","typeLabel":"string"}},"description":"Solo en `price_changed`. El precio de hoy, en centésimos y con su moneda.","uniqueKey":"current_price","typeLabel":"object"},"expected_amount":{"type":"object","required":["amount_cents","currency"],"properties":{"amount_cents":{"type":"integer","description":"El monto multiplicado por 100. `250000` con `UYU` es $ 2.500,00. Un entero: `250000.5` o `\"250000\"` es\n`validation_failed` (`250000.0` es el mismo número que `250000`).\n","examples":[250000],"isRequired":true,"uniqueKey":"expected_amount.amount_cents","typeLabel":"integer"},"currency":{"type":"string","description":"Moneda ISO 4217, en mayúsculas.","pattern":"^[A-Z]{3}$","examples":["UYU"],"isRequired":true,"uniqueKey":"expected_amount.currency","typeLabel":"string"}},"description":"Solo en `amount_mismatch`. El saldo de hoy de la cuota, en centésimos y con su moneda.","uniqueKey":"expected_amount","typeLabel":"object"},"amount_at_stake":{"type":"object","required":["amount_cents","currency"],"properties":{"amount_cents":{"type":"integer","description":"El monto multiplicado por 100. `250000` con `UYU` es $ 2.500,00. Un entero: `250000.5` o `\"250000\"` es\n`validation_failed` (`250000.0` es el mismo número que `250000`).\n","examples":[250000],"isRequired":true,"uniqueKey":"amount_at_stake.amount_cents","typeLabel":"integer"},"currency":{"type":"string","description":"Moneda ISO 4217, en mayúsculas.","pattern":"^[A-Z]{3}$","examples":["UYU"],"isRequired":true,"uniqueKey":"amount_at_stake.currency","typeLabel":"string"}},"description":"Solo en `advance_payment_choice_required`. Lo que falta cobrar del pago por adelantado.","uniqueKey":"amount_at_stake","typeLabel":"object"},"existing_membership_id":{"type":"string","description":"Solo en `active_membership_exists`, `membership_suspended`, `membership_paused` y `membership_scheduled` al\nasignar una membresía: la que el cliente ya tiene.\n","pattern":"^mem_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["mem_01j1q27t44qvr6v2s50cv4rbvq"],"uniqueKey":"existing_membership_id","typeLabel":"string"},"booking_ids":{"type":"array","description":"Solo en `bookings_in_freeze_window` y `bookings_changed`. Las reservas en esas fechas.","items":{"type":"string","description":"Id de una reserva.","pattern":"^bkg_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["bkg_01jx9eak0437zdf0yw0atg7g0r"],"uniqueKey":"booking_ids.items.[INDEX]","typeLabel":"string"},"uniqueKey":"booking_ids","typeLabel":"string[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"sandbox_unavailable":{"title":"sandbox_unavailable","value":{"type":"https://docs.craqui.com/errors/sandbox_unavailable","title":"Tu estudio de prueba no está listo","status":409,"code":"sandbox_unavailable","detail":"Restablece tus datos de prueba en Configuración → Integraciones y vuelve a intentar.","request_id":"req_01hzx8m4k2a7d9q3f5w6y8z0bc"}}},"exampleType":"examples"}},"exampleType":"examples"},"d99d4a46-13bb-410b-9ba4-d429200148b1":{"description":"El pedido se entendió pero no se puede aplicar así. Códigos posibles: `idempotency_key_reused` (esa\n`Idempotency-Key` ya se usó con otro pedido: genera una nueva), `sandbox_contact_not_allowed` y\n`sandbox_account_reserved` (en tu estudio de prueba, un contacto que no es ficticio). En las escrituras de\nplata, además: `currency_mismatch`, `fee_decision_mismatch`, `fee_action_not_available`,\n`start_option_not_applicable` y `paid_on_out_of_range`.\n","headers":{"Request-Id":{"description":"Identificador del pedido. Aparece también en el cuerpo de los errores.","schema":{"type":"string","pattern":"^req_[0-9a-hjkmnp-tv-z]{26}$"}}},"content":{"application/problem+json":{"schema":{"type":"object","description":"Un error. Programa contra `code`, que no cambia; `title` y `detail` son para mostrarle a una\npersona y pueden cambiar de redacción.\n","required":["type","title","status","code","request_id"],"properties":{"type":{"type":"string","format":"uri","description":"URL de la página de la documentación de este error.","examples":["https://docs.craqui.com/errors/invalid_api_key"],"isRequired":true,"uniqueKey":"type","typeLabel":"string\u003curi>"},"title":{"type":"string","description":"Resumen corto, en español.","examples":["La clave no es válida"],"isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","description":"El mismo código HTTP de la respuesta.","examples":[401],"isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"code":{"type":"string","description":"Código estable del error. La lista puede crecer: trata un `code` que no conoces como un\nerror genérico de su `status`.\n","examples":["invalid_api_key"],"isRequired":true,"uniqueKey":"code","typeLabel":"string"},"request_id":{"type":"string","pattern":"^req_[0-9a-hjkmnp-tv-z]{26}$","description":"Identificador del pedido. Búscalo en Configuración → Integraciones → Actividad de la API.","examples":["req_01hzx8m4k2a7d9q3f5w6y8z0bc"],"isRequired":true,"uniqueKey":"request_id","typeLabel":"string"},"detail":{"type":"string","description":"Qué pasó y qué hacer, en español.","examples":["Revisa que copiaste la clave completa, incluido el prefijo (crq_live_ o crq_test_)."],"uniqueKey":"detail","typeLabel":"string"},"doc_url":{"type":"string","format":"uri","description":"Igual a `type`, por compatibilidad con clientes que buscan este campo.","uniqueKey":"doc_url","typeLabel":"string\u003curi>"},"required_scope":{"type":"string","description":"Solo en `scope_required` y `event_type_not_permitted`. El permiso que le falta a la clave.","examples":["business:read"],"uniqueKey":"required_scope","typeLabel":"string"},"errors":{"type":"array","description":"Solo en errores de validación. Un elemento por campo con problemas.","items":{"type":"object","required":["field","code"],"properties":{"field":{"type":"string","description":"El campo, como lo mandaste (por ejemplo `limit`).","examples":["limit"],"isRequired":true,"uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","description":"Qué tiene mal el campo.","examples":["invalid_limit"],"isRequired":true,"uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"detail":{"type":"string","description":"Explicación en español.","uniqueKey":"errors.items.[INDEX].detail","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"},"current_price":{"type":"object","required":["amount_cents","currency"],"properties":{"amount_cents":{"type":"integer","description":"El monto multiplicado por 100. `250000` con `UYU` es $ 2.500,00. Un entero: `250000.5` o `\"250000\"` es\n`validation_failed` (`250000.0` es el mismo número que `250000`).\n","examples":[250000],"isRequired":true,"uniqueKey":"current_price.amount_cents","typeLabel":"integer"},"currency":{"type":"string","description":"Moneda ISO 4217, en mayúsculas.","pattern":"^[A-Z]{3}$","examples":["UYU"],"isRequired":true,"uniqueKey":"current_price.currency","typeLabel":"string"}},"description":"Solo en `price_changed`. El precio de hoy, en centésimos y con su moneda.","uniqueKey":"current_price","typeLabel":"object"},"expected_amount":{"type":"object","required":["amount_cents","currency"],"properties":{"amount_cents":{"type":"integer","description":"El monto multiplicado por 100. `250000` con `UYU` es $ 2.500,00. Un entero: `250000.5` o `\"250000\"` es\n`validation_failed` (`250000.0` es el mismo número que `250000`).\n","examples":[250000],"isRequired":true,"uniqueKey":"expected_amount.amount_cents","typeLabel":"integer"},"currency":{"type":"string","description":"Moneda ISO 4217, en mayúsculas.","pattern":"^[A-Z]{3}$","examples":["UYU"],"isRequired":true,"uniqueKey":"expected_amount.currency","typeLabel":"string"}},"description":"Solo en `amount_mismatch`. El saldo de hoy de la cuota, en centésimos y con su moneda.","uniqueKey":"expected_amount","typeLabel":"object"},"amount_at_stake":{"type":"object","required":["amount_cents","currency"],"properties":{"amount_cents":{"type":"integer","description":"El monto multiplicado por 100. `250000` con `UYU` es $ 2.500,00. Un entero: `250000.5` o `\"250000\"` es\n`validation_failed` (`250000.0` es el mismo número que `250000`).\n","examples":[250000],"isRequired":true,"uniqueKey":"amount_at_stake.amount_cents","typeLabel":"integer"},"currency":{"type":"string","description":"Moneda ISO 4217, en mayúsculas.","pattern":"^[A-Z]{3}$","examples":["UYU"],"isRequired":true,"uniqueKey":"amount_at_stake.currency","typeLabel":"string"}},"description":"Solo en `advance_payment_choice_required`. Lo que falta cobrar del pago por adelantado.","uniqueKey":"amount_at_stake","typeLabel":"object"},"existing_membership_id":{"type":"string","description":"Solo en `active_membership_exists`, `membership_suspended`, `membership_paused` y `membership_scheduled` al\nasignar una membresía: la que el cliente ya tiene.\n","pattern":"^mem_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["mem_01j1q27t44qvr6v2s50cv4rbvq"],"uniqueKey":"existing_membership_id","typeLabel":"string"},"booking_ids":{"type":"array","description":"Solo en `bookings_in_freeze_window` y `bookings_changed`. Las reservas en esas fechas.","items":{"type":"string","description":"Id de una reserva.","pattern":"^bkg_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["bkg_01jx9eak0437zdf0yw0atg7g0r"],"uniqueKey":"booking_ids.items.[INDEX]","typeLabel":"string"},"uniqueKey":"booking_ids","typeLabel":"string[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"type":"https://docs.craqui.com/errors/invalid_api_key","title":"La clave no es válida","status":401,"code":"invalid_api_key","request_id":"req_01hzx8m4k2a7d9q3f5w6y8z0bc","detail":"Revisa que copiaste la clave completa, incluido el prefijo (crq_live_ o crq_test_).","doc_url":"\u003cstring>","required_scope":"business:read","errors":[{"field":"limit","code":"invalid_limit","detail":"\u003cstring>"}],"current_price":{"amount_cents":250000,"currency":"UYU"},"expected_amount":{"amount_cents":250000,"currency":"UYU"},"amount_at_stake":{"amount_cents":250000,"currency":"UYU"},"existing_membership_id":"mem_01j1q27t44qvr6v2s50cv4rbvq","booking_ids":["bkg_01jx9eak0437zdf0yw0atg7g0r"]}}},"exampleType":"generated"}},"exampleType":"generated"},"b926e5f0-a45f-47d3-a5ad-ea12b55bc076":{"description":"Se pasó el límite de pedidos por minuto de la clave. Código `rate_limited`.","headers":{"Request-Id":{"description":"Identificador del pedido. Aparece también en el cuerpo de los errores.","schema":{"type":"string","pattern":"^req_[0-9a-hjkmnp-tv-z]{26}$"}},"Retry-After":{"description":"Segundos que hay que esperar antes de reintentar.","schema":{"type":"integer","minimum":0}},"RateLimit":{"description":"Pedidos que quedan en la ventana actual y segundos hasta que se renueva (draft IETF httpapi-ratelimit-headers).","schema":{"type":"string","examples":["\"read\";r=97;t=42"]}},"RateLimit-Policy":{"description":"Límite de la clave por ventana (draft IETF httpapi-ratelimit-headers).","schema":{"type":"string","examples":["\"read\";q=100;w=60"]}}},"content":{"application/problem+json":{"schema":{"type":"object","description":"Un error. Programa contra `code`, que no cambia; `title` y `detail` son para mostrarle a una\npersona y pueden cambiar de redacción.\n","required":["type","title","status","code","request_id"],"properties":{"type":{"type":"string","format":"uri","description":"URL de la página de la documentación de este error.","examples":["https://docs.craqui.com/errors/invalid_api_key"],"isRequired":true,"uniqueKey":"type","typeLabel":"string\u003curi>"},"title":{"type":"string","description":"Resumen corto, en español.","examples":["La clave no es válida"],"isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","description":"El mismo código HTTP de la respuesta.","examples":[401],"isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"code":{"type":"string","description":"Código estable del error. La lista puede crecer: trata un `code` que no conoces como un\nerror genérico de su `status`.\n","examples":["invalid_api_key"],"isRequired":true,"uniqueKey":"code","typeLabel":"string"},"request_id":{"type":"string","pattern":"^req_[0-9a-hjkmnp-tv-z]{26}$","description":"Identificador del pedido. Búscalo en Configuración → Integraciones → Actividad de la API.","examples":["req_01hzx8m4k2a7d9q3f5w6y8z0bc"],"isRequired":true,"uniqueKey":"request_id","typeLabel":"string"},"detail":{"type":"string","description":"Qué pasó y qué hacer, en español.","examples":["Revisa que copiaste la clave completa, incluido el prefijo (crq_live_ o crq_test_)."],"uniqueKey":"detail","typeLabel":"string"},"doc_url":{"type":"string","format":"uri","description":"Igual a `type`, por compatibilidad con clientes que buscan este campo.","uniqueKey":"doc_url","typeLabel":"string\u003curi>"},"required_scope":{"type":"string","description":"Solo en `scope_required` y `event_type_not_permitted`. El permiso que le falta a la clave.","examples":["business:read"],"uniqueKey":"required_scope","typeLabel":"string"},"errors":{"type":"array","description":"Solo en errores de validación. Un elemento por campo con problemas.","items":{"type":"object","required":["field","code"],"properties":{"field":{"type":"string","description":"El campo, como lo mandaste (por ejemplo `limit`).","examples":["limit"],"isRequired":true,"uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","description":"Qué tiene mal el campo.","examples":["invalid_limit"],"isRequired":true,"uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"detail":{"type":"string","description":"Explicación en español.","uniqueKey":"errors.items.[INDEX].detail","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"},"current_price":{"type":"object","required":["amount_cents","currency"],"properties":{"amount_cents":{"type":"integer","description":"El monto multiplicado por 100. `250000` con `UYU` es $ 2.500,00. Un entero: `250000.5` o `\"250000\"` es\n`validation_failed` (`250000.0` es el mismo número que `250000`).\n","examples":[250000],"isRequired":true,"uniqueKey":"current_price.amount_cents","typeLabel":"integer"},"currency":{"type":"string","description":"Moneda ISO 4217, en mayúsculas.","pattern":"^[A-Z]{3}$","examples":["UYU"],"isRequired":true,"uniqueKey":"current_price.currency","typeLabel":"string"}},"description":"Solo en `price_changed`. El precio de hoy, en centésimos y con su moneda.","uniqueKey":"current_price","typeLabel":"object"},"expected_amount":{"type":"object","required":["amount_cents","currency"],"properties":{"amount_cents":{"type":"integer","description":"El monto multiplicado por 100. `250000` con `UYU` es $ 2.500,00. Un entero: `250000.5` o `\"250000\"` es\n`validation_failed` (`250000.0` es el mismo número que `250000`).\n","examples":[250000],"isRequired":true,"uniqueKey":"expected_amount.amount_cents","typeLabel":"integer"},"currency":{"type":"string","description":"Moneda ISO 4217, en mayúsculas.","pattern":"^[A-Z]{3}$","examples":["UYU"],"isRequired":true,"uniqueKey":"expected_amount.currency","typeLabel":"string"}},"description":"Solo en `amount_mismatch`. El saldo de hoy de la cuota, en centésimos y con su moneda.","uniqueKey":"expected_amount","typeLabel":"object"},"amount_at_stake":{"type":"object","required":["amount_cents","currency"],"properties":{"amount_cents":{"type":"integer","description":"El monto multiplicado por 100. `250000` con `UYU` es $ 2.500,00. Un entero: `250000.5` o `\"250000\"` es\n`validation_failed` (`250000.0` es el mismo número que `250000`).\n","examples":[250000],"isRequired":true,"uniqueKey":"amount_at_stake.amount_cents","typeLabel":"integer"},"currency":{"type":"string","description":"Moneda ISO 4217, en mayúsculas.","pattern":"^[A-Z]{3}$","examples":["UYU"],"isRequired":true,"uniqueKey":"amount_at_stake.currency","typeLabel":"string"}},"description":"Solo en `advance_payment_choice_required`. Lo que falta cobrar del pago por adelantado.","uniqueKey":"amount_at_stake","typeLabel":"object"},"existing_membership_id":{"type":"string","description":"Solo en `active_membership_exists`, `membership_suspended`, `membership_paused` y `membership_scheduled` al\nasignar una membresía: la que el cliente ya tiene.\n","pattern":"^mem_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["mem_01j1q27t44qvr6v2s50cv4rbvq"],"uniqueKey":"existing_membership_id","typeLabel":"string"},"booking_ids":{"type":"array","description":"Solo en `bookings_in_freeze_window` y `bookings_changed`. Las reservas en esas fechas.","items":{"type":"string","description":"Id de una reserva.","pattern":"^bkg_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["bkg_01jx9eak0437zdf0yw0atg7g0r"],"uniqueKey":"booking_ids.items.[INDEX]","typeLabel":"string"},"uniqueKey":"booking_ids","typeLabel":"string[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"type":"https://docs.craqui.com/errors/invalid_api_key","title":"La clave no es válida","status":401,"code":"invalid_api_key","request_id":"req_01hzx8m4k2a7d9q3f5w6y8z0bc","detail":"Revisa que copiaste la clave completa, incluido el prefijo (crq_live_ o crq_test_).","doc_url":"\u003cstring>","required_scope":"business:read","errors":[{"field":"limit","code":"invalid_limit","detail":"\u003cstring>"}],"current_price":{"amount_cents":250000,"currency":"UYU"},"expected_amount":{"amount_cents":250000,"currency":"UYU"},"amount_at_stake":{"amount_cents":250000,"currency":"UYU"},"existing_membership_id":"mem_01j1q27t44qvr6v2s50cv4rbvq","booking_ids":["bkg_01jx9eak0437zdf0yw0atg7g0r"]}}},"exampleType":"generated"}},"exampleType":"generated"},"ed0205d5-713e-4374-b853-81e8b71bd3d1":{"description":"Falló algo de nuestro lado. Código `internal_error`. Reintenta; si sigue, escríbenos con el `request_id`.","headers":{"Request-Id":{"description":"Identificador del pedido. Aparece también en el cuerpo de los errores.","schema":{"type":"string","pattern":"^req_[0-9a-hjkmnp-tv-z]{26}$"}}},"content":{"application/problem+json":{"schema":{"type":"object","description":"Un error. Programa contra `code`, que no cambia; `title` y `detail` son para mostrarle a una\npersona y pueden cambiar de redacción.\n","required":["type","title","status","code","request_id"],"properties":{"type":{"type":"string","format":"uri","description":"URL de la página de la documentación de este error.","examples":["https://docs.craqui.com/errors/invalid_api_key"],"isRequired":true,"uniqueKey":"type","typeLabel":"string\u003curi>"},"title":{"type":"string","description":"Resumen corto, en español.","examples":["La clave no es válida"],"isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","description":"El mismo código HTTP de la respuesta.","examples":[401],"isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"code":{"type":"string","description":"Código estable del error. La lista puede crecer: trata un `code` que no conoces como un\nerror genérico de su `status`.\n","examples":["invalid_api_key"],"isRequired":true,"uniqueKey":"code","typeLabel":"string"},"request_id":{"type":"string","pattern":"^req_[0-9a-hjkmnp-tv-z]{26}$","description":"Identificador del pedido. Búscalo en Configuración → Integraciones → Actividad de la API.","examples":["req_01hzx8m4k2a7d9q3f5w6y8z0bc"],"isRequired":true,"uniqueKey":"request_id","typeLabel":"string"},"detail":{"type":"string","description":"Qué pasó y qué hacer, en español.","examples":["Revisa que copiaste la clave completa, incluido el prefijo (crq_live_ o crq_test_)."],"uniqueKey":"detail","typeLabel":"string"},"doc_url":{"type":"string","format":"uri","description":"Igual a `type`, por compatibilidad con clientes que buscan este campo.","uniqueKey":"doc_url","typeLabel":"string\u003curi>"},"required_scope":{"type":"string","description":"Solo en `scope_required` y `event_type_not_permitted`. El permiso que le falta a la clave.","examples":["business:read"],"uniqueKey":"required_scope","typeLabel":"string"},"errors":{"type":"array","description":"Solo en errores de validación. Un elemento por campo con problemas.","items":{"type":"object","required":["field","code"],"properties":{"field":{"type":"string","description":"El campo, como lo mandaste (por ejemplo `limit`).","examples":["limit"],"isRequired":true,"uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","description":"Qué tiene mal el campo.","examples":["invalid_limit"],"isRequired":true,"uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"detail":{"type":"string","description":"Explicación en español.","uniqueKey":"errors.items.[INDEX].detail","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"},"current_price":{"type":"object","required":["amount_cents","currency"],"properties":{"amount_cents":{"type":"integer","description":"El monto multiplicado por 100. `250000` con `UYU` es $ 2.500,00. Un entero: `250000.5` o `\"250000\"` es\n`validation_failed` (`250000.0` es el mismo número que `250000`).\n","examples":[250000],"isRequired":true,"uniqueKey":"current_price.amount_cents","typeLabel":"integer"},"currency":{"type":"string","description":"Moneda ISO 4217, en mayúsculas.","pattern":"^[A-Z]{3}$","examples":["UYU"],"isRequired":true,"uniqueKey":"current_price.currency","typeLabel":"string"}},"description":"Solo en `price_changed`. El precio de hoy, en centésimos y con su moneda.","uniqueKey":"current_price","typeLabel":"object"},"expected_amount":{"type":"object","required":["amount_cents","currency"],"properties":{"amount_cents":{"type":"integer","description":"El monto multiplicado por 100. `250000` con `UYU` es $ 2.500,00. Un entero: `250000.5` o `\"250000\"` es\n`validation_failed` (`250000.0` es el mismo número que `250000`).\n","examples":[250000],"isRequired":true,"uniqueKey":"expected_amount.amount_cents","typeLabel":"integer"},"currency":{"type":"string","description":"Moneda ISO 4217, en mayúsculas.","pattern":"^[A-Z]{3}$","examples":["UYU"],"isRequired":true,"uniqueKey":"expected_amount.currency","typeLabel":"string"}},"description":"Solo en `amount_mismatch`. El saldo de hoy de la cuota, en centésimos y con su moneda.","uniqueKey":"expected_amount","typeLabel":"object"},"amount_at_stake":{"type":"object","required":["amount_cents","currency"],"properties":{"amount_cents":{"type":"integer","description":"El monto multiplicado por 100. `250000` con `UYU` es $ 2.500,00. Un entero: `250000.5` o `\"250000\"` es\n`validation_failed` (`250000.0` es el mismo número que `250000`).\n","examples":[250000],"isRequired":true,"uniqueKey":"amount_at_stake.amount_cents","typeLabel":"integer"},"currency":{"type":"string","description":"Moneda ISO 4217, en mayúsculas.","pattern":"^[A-Z]{3}$","examples":["UYU"],"isRequired":true,"uniqueKey":"amount_at_stake.currency","typeLabel":"string"}},"description":"Solo en `advance_payment_choice_required`. Lo que falta cobrar del pago por adelantado.","uniqueKey":"amount_at_stake","typeLabel":"object"},"existing_membership_id":{"type":"string","description":"Solo en `active_membership_exists`, `membership_suspended`, `membership_paused` y `membership_scheduled` al\nasignar una membresía: la que el cliente ya tiene.\n","pattern":"^mem_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["mem_01j1q27t44qvr6v2s50cv4rbvq"],"uniqueKey":"existing_membership_id","typeLabel":"string"},"booking_ids":{"type":"array","description":"Solo en `bookings_in_freeze_window` y `bookings_changed`. Las reservas en esas fechas.","items":{"type":"string","description":"Id de una reserva.","pattern":"^bkg_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["bkg_01jx9eak0437zdf0yw0atg7g0r"],"uniqueKey":"booking_ids.items.[INDEX]","typeLabel":"string"},"uniqueKey":"booking_ids","typeLabel":"string[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"type":"https://docs.craqui.com/errors/invalid_api_key","title":"La clave no es válida","status":401,"code":"invalid_api_key","request_id":"req_01hzx8m4k2a7d9q3f5w6y8z0bc","detail":"Revisa que copiaste la clave completa, incluido el prefijo (crq_live_ o crq_test_).","doc_url":"\u003cstring>","required_scope":"business:read","errors":[{"field":"limit","code":"invalid_limit","detail":"\u003cstring>"}],"current_price":{"amount_cents":250000,"currency":"UYU"},"expected_amount":{"amount_cents":250000,"currency":"UYU"},"amount_at_stake":{"amount_cents":250000,"currency":"UYU"},"existing_membership_id":"mem_01j1q27t44qvr6v2s50cv4rbvq","booking_ids":["bkg_01jx9eak0437zdf0yw0atg7g0r"]}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"f7897bad-5999-451f-8a68-e0990981301d":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"crq_live_sk_… / crq_live_rk_…","description":"Clave del negocio. `sk` es una clave completa (todo lo que el rol de quien la creó puede dar)\ny `rk` una restringida a los permisos que se eligieron al crearla. Solo se usa desde un\nservidor: un pedido desde un navegador se rechaza con `browser_not_allowed`.\n","scopes":[],"schemeName":"bearerAuth"}},"dade9644-0764-411a-92b7-894a4e857b0f":{"oauth2":{"type":"oauth2","description":"Una app de terceros conectada a un negocio por su propietario (OAuth 2.1, Authorization Code con PKCE). El\naccess token (`crq_oat_…`) vale 1 hora, va solo en el header `Authorization: Bearer` y es de un solo negocio.\nUna app nunca recibe `notifications:suppress` ni `webhooks:manage`. Ver https://docs.craqui.com/apps.\n","flows":{"authorizationCode":{"authorizationUrl":"https://www.craqui.com/oauth/authorize","tokenUrl":"https://api.craqui.com/oauth/token","refreshUrl":"https://api.craqui.com/oauth/token","scopes":{"business:read":"Ver los datos básicos del negocio (siempre incluido).","centers:read":"Ver las sedes.","rooms:read":"Ver los salones.","teachers:read":"Ver a quienes dan clases.","courses:read":"Ver las disciplinas.","classes:read":"Ver las clases y su horario.","sessions:read":"Ver el horario, sesión por sesión.","sessions:write":"Cancelar sesiones.","clients:read":"Ver los clientes.","clients.pii:read":"Ver el email y el teléfono de los clientes.","clients:write":"Crear, cambiar, dar de baja y reactivar clientes.","bookings:read":"Ver las reservas.","bookings:write":"Reservar, cancelar reservas y marcar asistencia.","credits:read":"Ver los créditos de los clientes.","credits:write":"Asignar y revocar packs de créditos.","memberships:read":"Ver las membresías.","memberships:write":"Asignar, cancelar, congelar y descongelar membresías.","fees:read":"Ver las cuotas.","payments:read":"Ver los pagos.","refunds:read":"Ver los reembolsos.","payments:write":"Registrar pagos.","events:read":"Ver la lista de cambios recientes."}}},"scopes":["credits:write"],"schemeName":"oauth2"}}},"servers":{"bb48cfac-2655-4314-90fd-28cc11e87988":{"url":"https://api.craqui.com/v1","description":"Producción"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","bearerFormat":"crq_live_sk_… / crq_live_rk_…","description":"Clave del negocio. `sk` es una clave completa (todo lo que el rol de quien la creó puede dar)\ny `rk` una restringida a los permisos que se eligieron al crearla. Solo se usa desde un\nservidor: un pedido desde un navegador se rechaza con `browser_not_allowed`.\n","scopes":[],"schemeName":"bearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Clave del negocio. `sk` es una clave completa (todo lo que el rol de quien la creó puede dar)\ny `rk` una restringida a los permisos que se eligieron al crearla. Solo se usa desde un\nservidor: un pedido desde un navegador se rechaza con `browser_not_allowed`.\n","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"},{"schemes":[{"scheme":{"type":"oauth2","description":"Una app de terceros conectada a un negocio por su propietario (OAuth 2.1, Authorization Code con PKCE). El\naccess token (`crq_oat_…`) vale 1 hora, va solo en el header `Authorization: Bearer` y es de un solo negocio.\nUna app nunca recibe `notifications:suppress` ni `webhooks:manage`. Ver https://docs.craqui.com/apps.\n","flows":{"authorizationCode":{"authorizationUrl":"https://www.craqui.com/oauth/authorize","tokenUrl":"https://api.craqui.com/oauth/token","refreshUrl":"https://api.craqui.com/oauth/token","scopes":{"business:read":"Ver los datos básicos del negocio (siempre incluido).","centers:read":"Ver las sedes.","rooms:read":"Ver los salones.","teachers:read":"Ver a quienes dan clases.","courses:read":"Ver las disciplinas.","classes:read":"Ver las clases y su horario.","sessions:read":"Ver el horario, sesión por sesión.","sessions:write":"Cancelar sesiones.","clients:read":"Ver los clientes.","clients.pii:read":"Ver el email y el teléfono de los clientes.","clients:write":"Crear, cambiar, dar de baja y reactivar clientes.","bookings:read":"Ver las reservas.","bookings:write":"Reservar, cancelar reservas y marcar asistencia.","credits:read":"Ver los créditos de los clientes.","credits:write":"Asignar y revocar packs de créditos.","memberships:read":"Ver las membresías.","memberships:write":"Asignar, cancelar, congelar y descongelar membresías.","fees:read":"Ver las cuotas.","payments:read":"Ver los pagos.","refunds:read":"Ver los reembolsos.","payments:write":"Registrar pagos.","events:read":"Ver la lista de cambios recientes."}}},"scopes":["credits:write"],"schemeName":"oauth2"},"schema":{"title":"OAuth2 Auth","type":"string","isRequired":true,"description":"Una app de terceros conectada a un negocio por su propietario (OAuth 2.1, Authorization Code con PKCE). El\naccess token (`crq_oat_…`) vale 1 hora, va solo en el header `Authorization: Bearer` y es de un solo negocio.\nUna app nunca recibe `notifications:suppress` ni `webhooks:manage`. Ver https://docs.craqui.com/apps.\n","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"oauth2","name":"Authorization"}],"title":"oauth2"}]},"originalFileLocation":"estudios/openapi.yaml"},"subdomain":"craqui","siteName":"API de Craqui","title":"Revocar un pack - API de Craqui","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-09T20:37:26.668Z","originalFileLocation":"estudios/api-reference/credits/revocar-un-pack.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Revoca un pack asignado por error, igual que \u0026quot;Revocar pack\u0026quot; desde Craqui: le quita al cliente los créditos que le quedan. Los dos campos son obligatorios, porque la API no decide por ti: cancel_bookings (qué pasa con las reservas que usan esos créditos) y fee_action (retire da de baja la cuota sin pagar; keep la mantiene, solo si el cliente ya usó créditos del pack). Un pack con plata cobrada no se revoca por la API: primero se registra la devolución desde Craqui. No le avisa nada al cliente: notify responde 400 notify_not_supported. Responde el pack como queda, con status: revoked. Con dry_run=true responde 200 con la vista previa. Rechazos (409): fee_has_payments, fee_under_automatic_debit, membership_credits_not_revocable, credit_grant_already_revoked, refund_in_progress, fee_link_unknown, preview_stale y client_inactive; 422 fee_action_not_available. Un pack que no es de tu negocio responde 404 not_found. Una escritura de plata: lleva Idempotency-Key (salvo con dry_run=true), solo para estudios (en una academia responde wrong_vertical), solo si tu negocio tiene habilitada la escritura por la API (write_access_disabled si no) y además las escrituras de plata (money_writes_not_enabled si no). Cuenta para el límite de escrituras (30 por minuto) y para el de escrituras de plata (10 por minuto; una vista previa no cuenta para este). Un campo que el cuerpo no declara responde validation_failed con unknown_field. Un reintento con la misma Idempotency-Key, también después de las 24 horas, responde lo que ya se hizo, con Idempotent-Replayed: true.\">\u003cmeta data-mint-head name=\"application-name\" content=\"API de Craqui\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/craqui/ptsKlgDyHJpLj3bc/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/craqui/ptsKlgDyHJpLj3bc/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/craqui/ptsKlgDyHJpLj3bc/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/craqui/ptsKlgDyHJpLj3bc/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/craqui/ptsKlgDyHJpLj3bc/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/craqui/ptsKlgDyHJpLj3bc/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/craqui/ptsKlgDyHJpLj3bc/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/craqui/ptsKlgDyHJpLj3bc/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/craqui/ptsKlgDyHJpLj3bc/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Revocar un pack - API de Craqui\">\u003cmeta data-mint-head property=\"og:description\" content=\"Revoca un pack asignado por error, igual que \u0026quot;Revocar pack\u0026quot; desde Craqui: le quita al cliente los créditos que le quedan. Los dos campos son obligatorios, porque la API no decide por ti: cancel_bookings (qué pasa con las reservas que usan esos créditos) y fee_action (retire da de baja la cuota sin pagar; keep la mantiene, solo si el cliente ya usó créditos del pack). Un pack con plata cobrada no se revoca por la API: primero se registra la devolución desde Craqui. No le avisa nada al cliente: notify responde 400 notify_not_supported. Responde el pack como queda, con status: revoked. Con dry_run=true responde 200 con la vista previa. Rechazos (409): fee_has_payments, fee_under_automatic_debit, membership_credits_not_revocable, credit_grant_already_revoked, refund_in_progress, fee_link_unknown, preview_stale y client_inactive; 422 fee_action_not_available. Un pack que no es de tu negocio responde 404 not_found. Una escritura de plata: lleva Idempotency-Key (salvo con dry_run=true), solo para estudios (en una academia responde wrong_vertical), solo si tu negocio tiene habilitada la escritura por la API (write_access_disabled si no) y además las escrituras de plata (money_writes_not_enabled si no). Cuenta para el límite de escrituras (30 por minuto) y para el de escrituras de plata (10 por minuto; una vista previa no cuenta para este). Un campo que el cuerpo no declara responde validation_failed con unknown_field. Un reintento con la misma Idempotency-Key, también después de las 24 horas, responde lo que ya se hizo, con Idempotent-Replayed: true.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"API de Craqui\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.craqui.com/estudios/api-reference/credits/revocar-un-pack\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://craqui.mintlify.site/_mintlify/api/og/v2?division=credits\u0026amp;title=Revocar+un+pack\u0026amp;description=Revoca+un+pack+asignado+por+error%2C+igual+que+%22Revocar+pack%22+desde+Craqui%3A+le+quita+al+cliente+los+cr%C3%A9ditos+que%0Ale+quedan.+Los+dos+campos+son+obligatorios%2C+porqu\u0026amp;theme=176da6da42441ffcb9f627fc\u0026amp;signature=d8e738d0e5a1ab15310491fc50906f3ff8c9a011e6cd0d0f0a77eb6fe884a34a\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Revocar un pack - API de Craqui\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Revoca un pack asignado por error, igual que \u0026quot;Revocar pack\u0026quot; desde Craqui: le quita al cliente los créditos que le quedan. Los dos campos son obligatorios, porque la API no decide por ti: cancel_bookings (qué pasa con las reservas que usan esos créditos) y fee_action (retire da de baja la cuota sin pagar; keep la mantiene, solo si el cliente ya usó créditos del pack). Un pack con plata cobrada no se revoca por la API: primero se registra la devolución desde Craqui. No le avisa nada al cliente: notify responde 400 notify_not_supported. Responde el pack como queda, con status: revoked. Con dry_run=true responde 200 con la vista previa. Rechazos (409): fee_has_payments, fee_under_automatic_debit, membership_credits_not_revocable, credit_grant_already_revoked, refund_in_progress, fee_link_unknown, preview_stale y client_inactive; 422 fee_action_not_available. Un pack que no es de tu negocio responde 404 not_found. Una escritura de plata: lleva Idempotency-Key (salvo con dry_run=true), solo para estudios (en una academia responde wrong_vertical), solo si tu negocio tiene habilitada la escritura por la API (write_access_disabled si no) y además las escrituras de plata (money_writes_not_enabled si no). Cuenta para el límite de escrituras (30 por minuto) y para el de escrituras de plata (10 por minuto; una vista previa no cuenta para este). Un campo que el cuerpo no declara responde validation_failed con unknown_field. Un reintento con la misma Idempotency-Key, también después de las 24 horas, responde lo que ya se hizo, con Idempotent-Replayed: true.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://craqui.mintlify.site/_mintlify/api/og/v2?division=credits\u0026amp;title=Revocar+un+pack\u0026amp;description=Revoca+un+pack+asignado+por+error%2C+igual+que+%22Revocar+pack%22+desde+Craqui%3A+le+quita+al+cliente+los+cr%C3%A9ditos+que%0Ale+quedan.+Los+dos+campos+son+obligatorios%2C+porqu\u0026amp;theme=176da6da42441ffcb9f627fc\u0026amp;signature=d8e738d0e5a1ab15310491fc50906f3ff8c9a011e6cd0d0f0a77eb6fe884a34a\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/craqui/ptsKlgDyHJpLj3bc/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"API de Craqui\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#1F33C7\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.craqui.com/estudios/api-reference/credits/revocar-un-pack\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/estudios/api-reference/credits/revocar-un-pack.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.craqui.com/#organization\",\"name\":\"API de Craqui\",\"url\":\"https://docs.craqui.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/craqui/oYoj2lAgh2Jk1Qcv/logo/light.png?fit=max\u0026auto=format\u0026n=oYoj2lAgh2Jk1Qcv\u0026q=85\u0026s=e96edbf5621b5bc4068b5ad8dee910c7\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.craqui.com#website\",\"name\":\"API de Craqui\",\"url\":\"https://docs.craqui.com\",\"publisher\":{\"@id\":\"https://docs.craqui.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.craqui.com/estudios/api-reference/credits/revocar-un-pack#webpage\",\"url\":\"https://docs.craqui.com/estudios/api-reference/credits/revocar-un-pack\",\"name\":\"Revocar un pack\",\"description\":\"Revoca un pack asignado por error, igual que \\\"Revocar pack\\\" desde Craqui: le quita al cliente los créditos que le quedan. Los dos campos son obligatorios, porque la API no decide por ti: cancel_bookings (qué pasa con las reservas que usan esos créditos) y fee_action (retire da de baja la cuota sin pagar; keep la mantiene, solo si el cliente ya usó créditos del pack). Un pack con plata cobrada no se revoca por la API: primero se registra la devolución desde Craqui. No le avisa nada al cliente: notify responde 400 notify_not_supported. Responde el pack como queda, con status: revoked. Con dry_run=true responde 200 con la vista previa. Rechazos (409): fee_has_payments, fee_under_automatic_debit, membership_credits_not_revocable, credit_grant_already_revoked, refund_in_progress, fee_link_unknown, preview_stale y client_inactive; 422 fee_action_not_available. Un pack que no es de tu negocio responde 404 not_found. Una escritura de plata: lleva Idempotency-Key (salvo con dry_run=true), solo para estudios (en una academia responde wrong_vertical), solo si tu negocio tiene habilitada la escritura por la API (write_access_disabled si no) y además las escrituras de plata (money_writes_not_enabled si no). Cuenta para el límite de escrituras (30 por minuto) y para el de escrituras de plata (10 por minuto; una vista previa no cuenta para este). Un campo que el cuerpo no declara responde validation_failed con unknown_field. Un reintento con la misma Idempotency-Key, también después de las 24 horas, responde lo que ya se hizo, con Idempotent-Replayed: true.\",\"dateModified\":\"2026-11-09T20:37:26.668Z\",\"isPartOf\":{\"@id\":\"https://docs.craqui.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.craqui.com/estudios/api-reference/credits/revocar-un-pack#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.craqui.com/estudios/api-reference/credits/revocar-un-pack#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"credits\",\"item\":\"https://docs.craqui.com/estudios/api-reference/credits/ver-el-saldo-de-cr%C3%A9ditos-de-un-cliente\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Revocar un pack\",\"item\":\"https://docs.craqui.com/estudios/api-reference/credits/revocar-un-pack\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.craqui.com/estudios/api-reference/credits/revocar-un-pack#apireference\",\"headline\":\"Revocar un pack\",\"name\":\"Revocar un pack\",\"description\":\"Revoca un pack asignado por error, igual que \\\"Revocar pack\\\" desde Craqui: le quita al cliente los créditos que le quedan. Los dos campos son obligatorios, porque la API no decide por ti: cancel_bookings (qué pasa con las reservas que usan esos créditos) y fee_action (retire da de baja la cuota sin pagar; keep la mantiene, solo si el cliente ya usó créditos del pack). Un pack con plata cobrada no se revoca por la API: primero se registra la devolución desde Craqui. No le avisa nada al cliente: notify responde 400 notify_not_supported. Responde el pack como queda, con status: revoked. Con dry_run=true responde 200 con la vista previa. Rechazos (409): fee_has_payments, fee_under_automatic_debit, membership_credits_not_revocable, credit_grant_already_revoked, refund_in_progress, fee_link_unknown, preview_stale y client_inactive; 422 fee_action_not_available. Un pack que no es de tu negocio responde 404 not_found. Una escritura de plata: lleva Idempotency-Key (salvo con dry_run=true), solo para estudios (en una academia responde wrong_vertical), solo si tu negocio tiene habilitada la escritura por la API (write_access_disabled si no) y además las escrituras de plata (money_writes_not_enabled si no). Cuenta para el límite de escrituras (30 por minuto) y para el de escrituras de plata (10 por minuto; una vista previa no cuenta para este). Un campo que el cuerpo no declara responde validation_failed con unknown_field. Un reintento con la misma Idempotency-Key, también después de las 24 horas, responde lo que ya se hizo, con Idempotent-Replayed: true.\",\"url\":\"https://docs.craqui.com/estudios/api-reference/credits/revocar-un-pack\",\"mainEntityOfPage\":{\"@id\":\"https://docs.craqui.com/estudios/api-reference/credits/revocar-un-pack#webpage\"},\"dateModified\":\"2026-11-09T20:37:26.668Z\",\"publisher\":{\"@id\":\"https://docs.craqui.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.craqui.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"API de Craqui\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"API de Craqui","nav":{"global":null,"tabs":[{"tab":"Guías","pages":[{"title":"Guías","href":""}]},{"tab":"Referencia","groups":[{"group":"business","pages":[{"title":"Ver el negocio de la clave","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /business","href":"/estudios/api-reference/business/ver-el-negocio-de-la-clave"}]},{"group":"booking_policy","pages":[{"title":"Ver las reglas de reserva","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /booking_policy","href":"/estudios/api-reference/booking_policy/ver-las-reglas-de-reserva"}]},{"group":"centers","pages":[{"title":"Listar sedes","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /centers","href":"/estudios/api-reference/centers/listar-sedes"},{"title":"Ver una sede","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /centers/{id}","href":"/estudios/api-reference/centers/ver-una-sede"}]},{"group":"rooms","pages":[{"title":"Listar salones","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /rooms","href":"/estudios/api-reference/rooms/listar-salones"},{"title":"Ver un salón","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /rooms/{id}","href":"/estudios/api-reference/rooms/ver-un-salón"}]},{"group":"teachers","pages":[{"title":"Listar instructores","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /teachers","href":"/estudios/api-reference/teachers/listar-instructores"},{"title":"Ver un instructor","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /teachers/{id}","href":"/estudios/api-reference/teachers/ver-un-instructor"}]},{"group":"courses","pages":[{"title":"Listar disciplinas","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /courses","href":"/estudios/api-reference/courses/listar-disciplinas"}]},{"group":"classes","pages":[{"title":"Listar clases","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /classes","href":"/estudios/api-reference/classes/listar-clases"},{"title":"Ver una clase","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /classes/{id}","href":"/estudios/api-reference/classes/ver-una-clase"}]},{"group":"credit_packs","pages":[{"title":"Listar packs de créditos","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /credit_packs","href":"/estudios/api-reference/credit_packs/listar-packs-de-créditos"}]},{"group":"membership_plans","pages":[{"title":"Listar planes de membresía","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /membership_plans","href":"/estudios/api-reference/membership_plans/listar-planes-de-membresía"}]},{"group":"intro_offers","pages":[{"title":"Listar ofertas de bienvenida","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /intro_offers","href":"/estudios/api-reference/intro_offers/listar-ofertas-de-bienvenida"}]},{"group":"sessions","pages":[{"title":"Listar sesiones","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /sessions","href":"/estudios/api-reference/sessions/listar-sesiones"},{"title":"Ver una sesión","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /sessions/{id}","href":"/estudios/api-reference/sessions/ver-una-sesión"},{"title":"Listar las reservas de una sesión","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /sessions/{id}/bookings","href":"/estudios/api-reference/sessions/listar-las-reservas-de-una-sesión"},{"title":"Cancelar una sesión","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml post /sessions/{id}/cancel","href":"/estudios/api-reference/sessions/cancelar-una-sesión"}]},{"group":"clients","pages":[{"title":"Listar clientes","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /clients","href":"/estudios/api-reference/clients/listar-clientes"},{"title":"Dar de alta a un cliente","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml post /clients","href":"/estudios/api-reference/clients/dar-de-alta-a-un-cliente"},{"title":"Ver un cliente","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /clients/{id}","href":"/estudios/api-reference/clients/ver-un-cliente"},{"title":"Cambiar los datos de un cliente","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml patch /clients/{id}","href":"/estudios/api-reference/clients/cambiar-los-datos-de-un-cliente"},{"title":"Reactivar a un cliente","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml post /clients/{id}/reactivate","href":"/estudios/api-reference/clients/reactivar-a-un-cliente"},{"title":"Dar de baja a un cliente","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml post /clients/{id}/deactivate","href":"/estudios/api-reference/clients/dar-de-baja-a-un-cliente"}]},{"group":"bookings","pages":[{"title":"Listar reservas","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /bookings","href":"/estudios/api-reference/bookings/listar-reservas"},{"title":"Reservar una sesión","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml post /bookings","href":"/estudios/api-reference/bookings/reservar-una-sesión"},{"title":"Ver una reserva","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /bookings/{id}","href":"/estudios/api-reference/bookings/ver-una-reserva"},{"title":"Cancelar una reserva","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml post /bookings/{id}/cancel","href":"/estudios/api-reference/bookings/cancelar-una-reserva"},{"title":"Marcar la asistencia","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml post /bookings/{id}/attendance","href":"/estudios/api-reference/bookings/marcar-la-asistencia"}]},{"group":"credits","pages":[{"title":"Ver el saldo de créditos de un cliente","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /clients/{id}/credit_balance","href":"/estudios/api-reference/credits/ver-el-saldo-de-créditos-de-un-cliente"},{"title":"Listar lotes de créditos","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /credit_grants","href":"/estudios/api-reference/credits/listar-lotes-de-créditos"},{"title":"Asignar un pack ya vendido","description":"Asigna a un cliente un pack de créditos que vendiste fuera de Craqui (tu web, tu checkout, tu caja), igual que\n\"Asignar pack\" desde Craqui: carga los créditos y, si el pack tiene precio, crea su cuota por ese monto, para\nregistrar el pago con `POST /v1/payments`. La API no cobra.\n\nToda asignación decide su cuota: `fee` con el monto que cobraste (tiene que ser el precio de hoy del pack, en la\nmoneda del estudio), o `no_fee_reason: \"no_charge\"` si el pack no tiene precio. Si el precio no es el que\nmandaste, responde `409 price_changed` con `current_price` y no asigna nada. Al cliente le llega el aviso de\nsiempre (`notify: false` lo silencia, con `notifications:suppress`). Responde `201` con el pack, con su `fee_id`\no `no_fee_reason`. Con `dry_run=true` responde `200` con la vista previa: créditos, vencimiento y cuota.\n\nRechazos: `409 credit_pack_inactive`, `409 client_inactive`, `400 fee_decision_required`,\n`422 fee_decision_mismatch`, `422 currency_mismatch`, `409 business_currency_missing` y `409 fee_link_unknown`.\nUn cliente o un pack que no es de tu negocio responde `404 not_found`.\n\nUna escritura de plata: lleva `Idempotency-Key` (salvo con `dry_run=true`), solo para estudios (en una academia\nresponde `wrong_vertical`), solo si tu negocio tiene habilitada la escritura por la API (`write_access_disabled`\nsi no) y además las escrituras de plata (`money_writes_not_enabled` si no). Cuenta para el límite de escrituras\n(30 por minuto) y para el de escrituras de plata (10 por minuto; una vista previa no cuenta para este). Un campo\nque el cuerpo no declara responde `validation_failed` con `unknown_field`. Un reintento con la misma\n`Idempotency-Key`, también después de las 24 horas, responde lo que ya se hizo, con `Idempotent-Replayed: true`.\n","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml post /credit_grants","href":"/estudios/api-reference/credits/asignar-un-pack-ya-vendido"},{"title":"Revocar un pack","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml post /credit_grants/{id}/revoke","href":"/estudios/api-reference/credits/revocar-un-pack"},{"title":"Listar movimientos de créditos","description":"Los movimientos de créditos del estudio, del más nuevo al más viejo. Para sincronizar un estudio grande,\npide por partes con `created_at[gte]` y `created_at[lte]`.\n\nPaginada por cursor: para sincronizar todo, pide `limit=100` y sigue `next_cursor`.\n\nSolo para estudios: en una academia responde `wrong_vertical`. Un parámetro que la ruta no\ndeclara responde `validation_failed` con `unknown_parameter`.\n","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /credit_transactions","href":"/estudios/api-reference/credits/listar-movimientos-de-créditos"}]},{"group":"memberships","pages":[{"title":"Listar membresías","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /memberships","href":"/estudios/api-reference/memberships/listar-membresías"},{"title":"Asignar una membresía ya vendida","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml post /memberships","href":"/estudios/api-reference/memberships/asignar-una-membresía-ya-vendida"},{"title":"Ver una membresía","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /memberships/{id}","href":"/estudios/api-reference/memberships/ver-una-membresía"},{"title":"Listar los congelamientos de una membresía","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /memberships/{id}/freezes","href":"/estudios/api-reference/memberships/listar-los-congelamientos-de-una-membresía"},{"title":"Dar de baja una membresía","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml post /memberships/{id}/cancel","href":"/estudios/api-reference/memberships/dar-de-baja-una-membresía"},{"title":"Congelar una membresía","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml post /memberships/{id}/freeze","href":"/estudios/api-reference/memberships/congelar-una-membresía"},{"title":"Descongelar una membresía","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml post /memberships/{id}/unfreeze","href":"/estudios/api-reference/memberships/descongelar-una-membresía"}]},{"group":"fees","pages":[{"title":"Listar cuotas","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /fees","href":"/estudios/api-reference/fees/listar-cuotas"},{"title":"Ver una cuota","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /fees/{id}","href":"/estudios/api-reference/fees/ver-una-cuota"}]},{"group":"payments","pages":[{"title":"Listar pagos","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /payments","href":"/estudios/api-reference/payments/listar-pagos"},{"title":"Registrar un pago","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml post /payments","href":"/estudios/api-reference/payments/registrar-un-pago"},{"title":"Ver un pago","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /payments/{id}","href":"/estudios/api-reference/payments/ver-un-pago"}]},{"group":"refunds","pages":[{"title":"Listar reembolsos","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /refunds","href":"/estudios/api-reference/refunds/listar-reembolsos"}]},{"group":"events","pages":[{"title":"Listar eventos","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /events","href":"/estudios/api-reference/events/listar-eventos"},{"title":"Ver un evento","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /events/{id}","href":"/estudios/api-reference/events/ver-un-evento"}]},{"group":"webhook_endpoints","pages":[{"title":"Listar URLs de avisos","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /webhook_endpoints","href":"/estudios/api-reference/webhook_endpoints/listar-urls-de-avisos"},{"title":"Agregar una URL de avisos","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml post /webhook_endpoints","href":"/estudios/api-reference/webhook_endpoints/agregar-una-url-de-avisos"},{"title":"Ver una URL de avisos","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /webhook_endpoints/{id}","href":"/estudios/api-reference/webhook_endpoints/ver-una-url-de-avisos"},{"title":"Borrar una URL de avisos","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml delete /webhook_endpoints/{id}","href":"/estudios/api-reference/webhook_endpoints/borrar-una-url-de-avisos"},{"title":"Editar una URL de avisos","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml patch /webhook_endpoints/{id}","href":"/estudios/api-reference/webhook_endpoints/editar-una-url-de-avisos"},{"title":"Enviar un aviso de prueba","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml post /webhook_endpoints/{id}/test","href":"/estudios/api-reference/webhook_endpoints/enviar-un-aviso-de-prueba"},{"title":"Cambiar el secreto de una URL de avisos","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml post /webhook_endpoints/{id}/rotate_secret","href":"/estudios/api-reference/webhook_endpoints/cambiar-el-secreto-de-una-url-de-avisos"},{"title":"El aviso que recibe tu sistema","version":null,"deprecated":null,"openapi":"/estudios/openapi.yaml webhook event","href":"/estudios/api-reference/webhook_endpoints/el-aviso-que-recibe-tu-sistema"}]}]}]},"basePath":"","title":"Revocar un pack - API de Craqui","buildId":"dpl_42LwxxU1kGN114H4XzwGYXa9ZDah","deploymentId":"dpl_42LwxxU1kGN114H4XzwGYXa9ZDah","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-C-hEh3I2.js","utils-CnF4QiUD.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-C7PVNbel.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-8ytevL2A.js","snippetPresets-BT1alx3v.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-BLXC0i_W.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-CyLIGI9_.js","shallow-DC0lGVIW.js","getApiPlaygroundDisplay-CgDQ85tN.js","CodeSnippet-6-I-Gpv9.js","CodeSnippets-BAk1kDdu.js","Page-C945cI-W.js","getPastedJson-B276RuWN.js","icon-BqP8etTm.js","MethodPill-DM6sbxG1.js","DuplicateIcon-PyJglOaE.js","createIcon-CMeOMAc_.js","DynamicMarkdown-BoyYAA8K.js","SectionHeading-DAYv3gvZ.js","axios-vUo_bRtp.js","Markdown-BhTTmazV.js","clsx-CR-RHrVC.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CBUH0-zX.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-BmARFYNC.js"]}