{
"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": "<string>",
"required_scope": "business:read",
"errors": [
{
"field": "session_id",
"code": "invalid_prefix",
"detail": "<string>"
}
]
}
{
"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/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": "<string>",
"required_scope": "business:read",
"errors": [
{
"field": "session_id",
"code": "invalid_prefix",
"detail": "<string>"
}
]
}
{
"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": "<string>",
"required_scope": "business:read",
"errors": [
{
"field": "session_id",
"code": "invalid_prefix",
"detail": "<string>"
}
]
}
{
"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"
}
{
"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": "<string>",
"required_scope": "business:read",
"errors": [
{
"field": "session_id",
"code": "invalid_prefix",
"detail": "<string>"
}
]
}
{
"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": "<string>",
"required_scope": "business:read",
"errors": [
{
"field": "session_id",
"code": "invalid_prefix",
"detail": "<string>"
}
]
}
{
"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": "<string>",
"required_scope": "business:read",
"errors": [
{
"field": "session_id",
"code": "invalid_prefix",
"detail": "<string>"
}
]
}
bookings
Reservar una sesión
Reserva una sesión para un cliente, con las mismas reglas que tiene el cliente al reservar desde la web
del estudio: la anticipación máxima, el tope de reservas, el límite de ausencias, las clases que solo
reserva el estudio y la sede propia. Cuesta 1 crédito. Si la sesión está completa, anota al cliente en
la lista de espera, salvo con allow_waitlist: false. Avisa al cliente como cualquier reserva, salvo con
notify: false.
Responde 201 con la reserva. Si el cliente había cancelado esa sesión, la reserva vuelve con el mismo
bkg_. Con dry_run=true responde 200 con la vista previa.
Rechazos (409): already_booked, session_full, session_started, session_cancelled,
session_on_vacation, class_archived, client_inactive, membership_suspended,
membership_frozen, class_restricted_to_studio, outside_home_center, booking_window_closed,
no_show_limit_reached, max_active_bookings_reached, insufficient_credits,
credits_not_valid_for_class, credits_not_valid_for_date. Un client_id o un session_id que no
es de tu negocio responde 404 not_found.
Una escritura: lleva Idempotency-Key (salvo con dry_run=true), solo para estudios (en una academia
responde wrong_vertical), y solo si tu negocio tiene habilitada la escritura por la API
(write_access_disabled si no). Un campo que el cuerpo no declara responde validation_failed con
unknown_field. Cuenta para el límite de escrituras (30 por minuto).
{
"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": "<string>",
"required_scope": "business:read",
"errors": [
{
"field": "session_id",
"code": "invalid_prefix",
"detail": "<string>"
}
]
}
{
"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/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": "<string>",
"required_scope": "business:read",
"errors": [
{
"field": "session_id",
"code": "invalid_prefix",
"detail": "<string>"
}
]
}
{
"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": "<string>",
"required_scope": "business:read",
"errors": [
{
"field": "session_id",
"code": "invalid_prefix",
"detail": "<string>"
}
]
}
{
"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"
}
{
"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": "<string>",
"required_scope": "business:read",
"errors": [
{
"field": "session_id",
"code": "invalid_prefix",
"detail": "<string>"
}
]
}
{
"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": "<string>",
"required_scope": "business:read",
"errors": [
{
"field": "session_id",
"code": "invalid_prefix",
"detail": "<string>"
}
]
}
{
"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": "<string>",
"required_scope": "business:read",
"errors": [
{
"field": "session_id",
"code": "invalid_prefix",
"detail": "<string>"
}
]
}
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.
Con la sesión completa, true anota al cliente en la lista de espera (sin descontarle créditos hasta
que entre) y false responde 409 session_full sin escribir nada.
false para no enviarle al cliente los avisos de esta escritura (email, WhatsApp). Necesita el permiso
notifications:suppress; sin él, la respuesta es 403 scope_required. Nunca silencia el aviso a otra
persona: si una cancelación hace entrar a alguien de la lista de espera, esa persona se entera igual. Los
recordatorios posteriores salen igual. Por defecto true. Tu estudio de prueba no le avisa a nadie,
diga lo que diga este campo.
Response
Con dry_run=true, la vista previa. No se escribió nada.
Lo que haría la escritura, sin hacerla. Craqui la evalúa con las mismas reglas que el pedido real: si el
pedido real se rechazaría, la vista previa responde el mismo error. Entre la vista previa y el pedido real
algo puede cambiar (otra persona ocupa el último lugar), y entonces el real responde lo que corresponda
en ese momento.
Lo que conviene saber, como códigos: waitlisted (la reserva queda en lista de espera),
waitlist_promoted (cancelar hace entrar a otra persona de la lista de espera) y no_change (la
reserva ya está así; el pedido real no cambia nada). La lista puede crecer.
Lo mismo en una frase en español, para mostrarle a una persona. No nombra al cliente.
{"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":"6af0caf3a9110ec3eb4fb4b2","clientVersion":"0.0.4088","searchFilterCounts":[{"language":"default","tag":"Guías","count":61},{"language":"default","tag":"Errores","count":49},{"language":"default","tag":"Referencia","count":45},{"language":"default","tag":"webhook_endpoints","count":8},{"language":"default","tag":"Conceptos","count":7},{"language":"default","tag":"bookings","count":5},{"language":"default","tag":"Empezar","count":4},{"language":"default","tag":"credits","count":3},{"language":"default","tag":"memberships","count":3},{"language":"default","tag":"sessions","count":3}]},"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":"api-reference/bookings/reservar-una-sesión","slug":"/api-reference/bookings/reservar-una-sesión","pageMetadata":{"title":"Reservar una sesión","description":"Reserva una sesión para un cliente, con las mismas reglas que tiene el cliente al reservar desde la web\ndel estudio: la anticipación máxima, el tope de reservas, el límite de ausencias, las clases que solo\nreserva el estudio y la sede propia. Cuesta 1 crédito. Si la sesión está completa, anota al cliente en\nla lista de espera, salvo con `allow_waitlist: false`. Avisa al cliente como cualquier reserva, salvo con\n`notify: false`.\n\nResponde `201` con la reserva. Si el cliente había cancelado esa sesión, la reserva vuelve con el mismo\n`bkg_`. Con `dry_run=true` responde `200` con la vista previa.\n\nRechazos (`409`): `already_booked`, `session_full`, `session_started`, `session_cancelled`,\n`session_on_vacation`, `class_archived`, `client_inactive`, `membership_suspended`,\n`membership_frozen`, `class_restricted_to_studio`, `outside_home_center`, `booking_window_closed`,\n`no_show_limit_reached`, `max_active_bookings_reached`, `insufficient_credits`,\n`credits_not_valid_for_class`, `credits_not_valid_for_date`. Un `client_id` o un `session_id` que no\nes de tu negocio responde `404 not_found`.\n\nUna escritura: lleva `Idempotency-Key` (salvo con `dry_run=true`), solo para estudios (en una academia\nresponde `wrong_vertical`), y solo si tu negocio tiene habilitada la escritura por la API\n(`write_access_disabled` si no). Un campo que el cuerpo no declara responde `validation_failed` con\n`unknown_field`. Cuenta para el límite de escrituras (30 por minuto).\n","deprecated":null,"version":null,"openapi":"/openapi.yaml post /bookings","href":"/api-reference/bookings/reservar-una-sesión","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: [\"Reserva una sesión para un cliente, con las mismas reglas que tiene el cliente al reservar desde la web\\ndel estudio: la anticipación máxima, el tope de reservas, el límite de ausencias, las clases que solo\\nreserva el estudio y la sede propia. Cuesta 1 crédito. Si la sesión está completa, anota al cliente en\\nla lista de espera, salvo con \", _jsx(_components.code, {\n children: \"allow_waitlist: false\"\n }), \". Avisa al cliente como cualquier reserva, salvo con\\n\", _jsx(_components.code, {\n children: \"notify: false\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Responde \", _jsx(_components.code, {\n children: \"201\"\n }), \" con la reserva. Si el cliente había cancelado esa sesión, la reserva vuelve con el mismo\\n\", _jsx(_components.code, {\n children: \"bkg_\"\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: \"already_booked\"\n }), \", \", _jsx(_components.code, {\n children: \"session_full\"\n }), \", \", _jsx(_components.code, {\n children: \"session_started\"\n }), \", \", _jsx(_components.code, {\n children: \"session_cancelled\"\n }), \",\\n\", _jsx(_components.code, {\n children: \"session_on_vacation\"\n }), \", \", _jsx(_components.code, {\n children: \"class_archived\"\n }), \", \", _jsx(_components.code, {\n children: \"client_inactive\"\n }), \", \", _jsx(_components.code, {\n children: \"membership_suspended\"\n }), \",\\n\", _jsx(_components.code, {\n children: \"membership_frozen\"\n }), \", \", _jsx(_components.code, {\n children: \"class_restricted_to_studio\"\n }), \", \", _jsx(_components.code, {\n children: \"outside_home_center\"\n }), \", \", _jsx(_components.code, {\n children: \"booking_window_closed\"\n }), \",\\n\", _jsx(_components.code, {\n children: \"no_show_limit_reached\"\n }), \", \", _jsx(_components.code, {\n children: \"max_active_bookings_reached\"\n }), \", \", _jsx(_components.code, {\n children: \"insufficient_credits\"\n }), \",\\n\", _jsx(_components.code, {\n children: \"credits_not_valid_for_class\"\n }), \", \", _jsx(_components.code, {\n children: \"credits_not_valid_for_date\"\n }), \". Un \", _jsx(_components.code, {\n children: \"client_id\"\n }), \" o un \", _jsx(_components.code, {\n children: \"session_id\"\n }), \" que no\\nes de tu negocio responde \", _jsx(_components.code, {\n children: \"404 not_found\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Una escritura: 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 }), \"), y solo si tu negocio tiene habilitada la escritura por la API\\n(\", _jsx(_components.code, {\n children: \"write_access_disabled\"\n }), \" si no). Un campo que el cuerpo no declara responde \", _jsx(_components.code, {\n children: \"validation_failed\"\n }), \" con\\n\", _jsx(_components.code, {\n children: \"unknown_field\"\n }), \". Cuenta para el límite de escrituras (30 por minuto).\"]\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":"Reservar una sesión","description":"Reserva una sesión para un cliente, con las mismas reglas que tiene el cliente al reservar desde la web\ndel estudio: la anticipación máxima, el tope de reservas, el límite de ausencias, las clases que solo\nreserva el estudio y la sede propia. Cuesta 1 crédito. Si la sesión está completa, anota al cliente en\nla lista de espera, salvo con `allow_waitlist: false`. Avisa al cliente como cualquier reserva, salvo con\n`notify: false`.\n\nResponde `201` con la reserva. Si el cliente había cancelado esa sesión, la reserva vuelve con el mismo\n`bkg_`. Con `dry_run=true` responde `200` con la vista previa.\n\nRechazos (`409`): `already_booked`, `session_full`, `session_started`, `session_cancelled`,\n`session_on_vacation`, `class_archived`, `client_inactive`, `membership_suspended`,\n`membership_frozen`, `class_restricted_to_studio`, `outside_home_center`, `booking_window_closed`,\n`no_show_limit_reached`, `max_active_bookings_reached`, `insufficient_credits`,\n`credits_not_valid_for_class`, `credits_not_valid_for_date`. Un `client_id` o un `session_id` que no\nes de tu negocio responde `404 not_found`.\n\nUna escritura: lleva `Idempotency-Key` (salvo con `dry_run=true`), solo para estudios (en una academia\nresponde `wrong_vertical`), y solo si tu negocio tiene habilitada la escritura por la API\n(`write_access_disabled` si no). Un campo que el cuerpo no declara responde `validation_failed` con\n`unknown_field`. Cuenta para el límite de escrituras (30 por minuto).\n","deprecated":null,"version":null,"openapi":"/openapi.yaml post /bookings","href":"/api-reference/bookings/reservar-una-sesión","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"createBooking","tags":["bookings"],"summary":"Reservar una sesión","description":"Reserva una sesión para un cliente, con las mismas reglas que tiene el cliente al reservar desde la web\ndel estudio: la anticipación máxima, el tope de reservas, el límite de ausencias, las clases que solo\nreserva el estudio y la sede propia. Cuesta 1 crédito. Si la sesión está completa, anota al cliente en\nla lista de espera, salvo con `allow_waitlist: false`. Avisa al cliente como cualquier reserva, salvo con\n`notify: false`.\n\nResponde `201` con la reserva. Si el cliente había cancelado esa sesión, la reserva vuelve con el mismo\n`bkg_`. Con `dry_run=true` responde `200` con la vista previa.\n\nRechazos (`409`): `already_booked`, `session_full`, `session_started`, `session_cancelled`,\n`session_on_vacation`, `class_archived`, `client_inactive`, `membership_suspended`,\n`membership_frozen`, `class_restricted_to_studio`, `outside_home_center`, `booking_window_closed`,\n`no_show_limit_reached`, `max_active_bookings_reached`, `insufficient_credits`,\n`credits_not_valid_for_class`, `credits_not_valid_for_date`. Un `client_id` o un `session_id` que no\nes de tu negocio responde `404 not_found`.\n\nUna escritura: lleva `Idempotency-Key` (salvo con `dry_run=true`), solo para estudios (en una academia\nresponde `wrong_vertical`), y solo si tu negocio tiene habilitada la escritura por la API\n(`write_access_disabled` si no). Un campo que el cuerpo no declara responde `validation_failed` con\n`unknown_field`. Cuenta para el límite de escrituras (30 por minuto).\n","x-craqui-scope":"bookings:write","x-craqui-capability":"api_bookings_create","x-craqui-effect-class":"outbound","parameters":["83d5e4ef-ddcf-4157-8e34-20aeff805508","3add46d0-1b4a-4e42-b8c1-26839eabd608","261a17b7-668a-4458-9690-0c390658e67a"],"requestBody":"e23b5b30-94f8-47b7-9a4b-97dd68dcb089","responses":{"200":"479a7afd-9858-48e7-aa76-cb89967699da","201":"a797369e-a469-442f-9789-2fa26ac288c2","400":"27b99319-9936-4cdb-bcb3-4f6b869c2ad3","401":"2e002c3a-fc89-434d-a086-699285368a5b","403":"c37294ac-e916-4610-af9b-aecbd37bbf59","404":"1229907a-f96c-4860-b8f1-e7954bef9fc8","409":"c732a359-826b-4fed-b897-49b6ba1f9cd4","422":"44641dda-615e-4d62-8534-955b4b03ec21","429":"291d1967-8331-4412-8c6f-9091568d18b1","500":"2c2b187c-4ec0-4122-a5a3-f14882714893"},"method":"post","type":"path","servers":["96e51283-5f3d-46d8-ab6e-60af9e53f037"],"security":["e42aeacc-927b-4f46-9a4c-f147b0702366"],"path":"/bookings","baseUrlOptions":["https://api.craqui.com/v1"],"title":"Reservar una sesión","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"83d5e4ef-ddcf-4157-8e34-20aeff805508":{"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"}},"3add46d0-1b4a-4e42-b8c1-26839eabd608":{"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"}},"261a17b7-668a-4458-9690-0c390658e67a":{"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":["client_id","session_id"],"properties":{"client_id":{"type":"string","description":"Id de un cliente del estudio.","pattern":"^cli_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["cli_01jatfha5h4nkg77c3wfrvd3cw"],"isRequired":true,"uniqueKey":"client_id","typeLabel":"string"},"session_id":{"type":"string","description":"Id de una sesión (una fecha de una clase).","pattern":"^ses_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["ses_01jnb07m4yxxe0s687jf750tkv"],"isRequired":true,"uniqueKey":"session_id","typeLabel":"string"},"allow_waitlist":{"type":"boolean","default":true,"description":"Con la sesión completa, `true` anota al cliente en la lista de espera (sin descontarle créditos hasta\nque entre) y `false` responde `409 session_full` sin escribir nada.\n","uniqueKey":"allow_waitlist","typeLabel":"boolean"},"notify":{"type":"boolean","description":"`false` para no enviarle al cliente los avisos de esta escritura (email, WhatsApp). Necesita el permiso\n`notifications:suppress`; sin él, la respuesta es `403 scope_required`. Nunca silencia el aviso a otra\npersona: si una cancelación hace entrar a alguien de la lista de espera, esa persona se entera igual. Los\nrecordatorios posteriores salen igual. Por defecto `true`. Tu estudio de prueba no le avisa a nadie,\ndiga lo que diga este campo.\n","default":true,"uniqueKey":"notify","typeLabel":"boolean"}},"uniqueKey":"","typeLabel":"object"},"example":{"client_id":"cli_01jqy553dmxw6vmq7g5vzfa9yz","session_id":"ses_01j2d1vb84pqs90137c12qvz8q"},"examples":{"Example":{"title":"Example","value":{"client_id":"cli_01jqy553dmxw6vmq7g5vzfa9yz","session_id":"ses_01j2d1vb84pqs90137c12qvz8q"}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"479a7afd-9858-48e7-aa76-cb89967699da":{"description":"Con `dry_run=true`, la vista previa. No se escribió nada.","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"]}}},"content":{"application/json":{"schema":{"type":"object","description":"Lo que haría la escritura, sin hacerla. Craqui la evalúa con las mismas reglas que el pedido real: si el\npedido real se rechazaría, la vista previa responde el mismo error. Entre la vista previa y el pedido real\nalgo puede cambiar (otra persona ocupa el último lugar), y entonces el real responde lo que corresponda\nen ese momento.\n","required":["object","livemode","action","result","effects","warnings","summary"],"properties":{"object":{"type":"string","const":"preview","isRequired":true,"uniqueKey":"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":"livemode","typeLabel":"boolean"},"action":{"type":"string","description":"Qué escritura se evaluó: `booking.create`, `booking.cancel` o `booking.set_attendance`. La lista puede crecer.","enum":["booking.create","booking.cancel","booking.set_attendance"],"x-extensible-enum":true,"isRequired":true,"uniqueKey":"action","typeLabel":"enum\u003cstring>"},"result":{"type":"object","description":"La reserva como quedaría después de la escritura.","required":["object","id","client_id","session_id","status","credits_charged","waitlist_position"],"properties":{"object":{"type":"string","const":"booking","isRequired":true,"uniqueKey":"result.object","typeLabel":"string"},"id":{"oneOf":[{"type":"string","description":"El id de la reserva; `null` si la escritura crearía una nueva.","pattern":"^bkg_[0-7][0-9a-hjkmnp-tv-z]{25}$","example":"bkg_01jx9eak0437zdf0yw0atg7g0r","isRequired":true,"uniqueKey":"result.id.oneOf.0","typeLabel":"string"},{"type":"null","description":"El id de la reserva; `null` si la escritura crearía una nueva.","isRequired":true,"uniqueKey":"result.id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"result.id","typeLabel":"string | null"},"client_id":{"oneOf":[{"type":"string","description":"Id de un cliente del estudio.","pattern":"^cli_[0-7][0-9a-hjkmnp-tv-z]{25}$","example":"cli_01jatfha5h4nkg77c3wfrvd3cw","isRequired":true,"uniqueKey":"result.client_id.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"result.client_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"result.client_id","typeLabel":"string | null"},"session_id":{"oneOf":[{"type":"string","description":"Id de una sesión (una fecha de una clase).","pattern":"^ses_[0-7][0-9a-hjkmnp-tv-z]{25}$","example":"ses_01jnb07m4yxxe0s687jf750tkv","isRequired":true,"uniqueKey":"result.session_id.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"result.session_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"result.session_id","typeLabel":"string | null"},"status":{"type":"string","enum":["confirmed","waitlisted","cancelled","attended","no_show"],"x-extensible-enum":true,"isRequired":true,"uniqueKey":"result.status","typeLabel":"enum\u003cstring>"},"credits_charged":{"type":"integer","description":"Los créditos descontados de la reserva.","isRequired":true,"uniqueKey":"result.credits_charged","typeLabel":"integer"},"waitlist_position":{"oneOf":[{"type":"integer","description":"El lugar en la lista de espera; `null` fuera de ella.","isRequired":true,"uniqueKey":"result.waitlist_position.oneOf.0","typeLabel":"integer"},{"type":"null","description":"El lugar en la lista de espera; `null` fuera de ella.","isRequired":true,"uniqueKey":"result.waitlist_position.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"result.waitlist_position","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"result","typeLabel":"object"},"effects":{"type":"object","description":"Lo que la escritura le haría al saldo del cliente y a quién avisaría.","required":["credits_charged","credits_refunded","credit_balance_after","waitlist_position","notifies_client"],"properties":{"credits_charged":{"type":"integer","description":"Créditos que se descontarían (0 en lista de espera).","isRequired":true,"uniqueKey":"effects.credits_charged","typeLabel":"integer"},"credits_refunded":{"type":"integer","description":"Créditos que se devolverían (al cancelar a tiempo, o al marcar ausente si el estudio no los cobra).","isRequired":true,"uniqueKey":"effects.credits_refunded","typeLabel":"integer"},"credit_balance_after":{"type":"integer","description":"El saldo de créditos vigentes del cliente después de la escritura.","isRequired":true,"uniqueKey":"effects.credit_balance_after","typeLabel":"integer"},"waitlist_position":{"oneOf":[{"type":"integer","description":"El lugar en la lista de espera, si la reserva quedaría ahí.","isRequired":true,"uniqueKey":"effects.waitlist_position.oneOf.0","typeLabel":"integer"},{"type":"null","description":"El lugar en la lista de espera, si la reserva quedaría ahí.","isRequired":true,"uniqueKey":"effects.waitlist_position.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"effects.waitlist_position","typeLabel":"integer | null"},"notifies_client":{"type":"boolean","description":"Si la escritura le dispara un aviso al cliente; le llega por los canales que el estudio tenga\nencendidos. `false` con `notify: false`, en tu estudio de prueba y al marcar presente.\n","isRequired":true,"uniqueKey":"effects.notifies_client","typeLabel":"boolean"}},"isRequired":true,"uniqueKey":"effects","typeLabel":"object"},"warnings":{"type":"array","description":"Lo que conviene saber, como códigos: `waitlisted` (la reserva queda en lista de espera),\n`waitlist_promoted` (cancelar hace entrar a otra persona de la lista de espera) y `no_change` (la\nreserva ya está así; el pedido real no cambia nada). La lista puede crecer.\n","items":{"type":"string","enum":["waitlisted","waitlist_promoted","no_change"],"x-extensible-enum":true,"uniqueKey":"warnings.items.[INDEX]","typeLabel":"enum\u003cstring>"},"isRequired":true,"uniqueKey":"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":"summary","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"example":{"object":"preview","livemode":true,"action":"booking.create","result":{"object":"booking","id":null,"client_id":"cli_01jqy553dmxw6vmq7g5vzfa9yz","session_id":"ses_01j2d1vb84pqs90137c12qvz8q","status":"confirmed","credits_charged":1,"waitlist_position":null},"effects":{"credits_charged":1,"credits_refunded":0,"credit_balance_after":5,"waitlist_position":null,"notifies_client":true},"warnings":[],"summary":"Se reserva la clase para el cliente."},"examples":{"Example":{"title":"Example","value":{"object":"preview","livemode":true,"action":"booking.create","result":{"object":"booking","id":null,"client_id":"cli_01jqy553dmxw6vmq7g5vzfa9yz","session_id":"ses_01j2d1vb84pqs90137c12qvz8q","status":"confirmed","credits_charged":1,"waitlist_position":null},"effects":{"credits_charged":1,"credits_refunded":0,"credit_balance_after":5,"waitlist_position":null,"notifies_client":true},"warnings":[],"summary":"Se reserva la clase para el cliente."}}},"exampleType":"examples"}},"exampleType":"examples"},"a797369e-a469-442f-9789-2fa26ac288c2":{"description":"La reserva, confirmada o en lista de espera.","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":{"type":"object","description":"La reserva de un cliente en una sesión.\n\nVolver a reservar una sesión que el cliente había cancelado **reusa** el mismo `bkg_`: el id es\nuno por cliente y sesión, no uno por intento. `booked_at` es el del último intento.\n","required":["id","object","livemode","client_id","session_id","status","credits_charged","waitlist_position","booked_at","cancelled_at","free_cancel_until","recurring","credit_refunded","source","created_at","updated_at"],"properties":{"id":{"type":"string","description":"Id de una reserva.","pattern":"^bkg_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["bkg_01jx9eak0437zdf0yw0atg7g0r"],"isRequired":true,"uniqueKey":"id","typeLabel":"string"},"object":{"type":"string","const":"booking","isRequired":true,"uniqueKey":"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":"livemode","typeLabel":"boolean"},"client_id":{"oneOf":[{"type":"string","description":"El cliente. `null` si quien reservó no es cliente del estudio (por ejemplo, alguien del equipo).\n","pattern":"^cli_[0-7][0-9a-hjkmnp-tv-z]{25}$","example":"cli_01jatfha5h4nkg77c3wfrvd3cw","isRequired":true,"uniqueKey":"client_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"El cliente. `null` si quien reservó no es cliente del estudio (por ejemplo, alguien del equipo).\n","isRequired":true,"uniqueKey":"client_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"client_id","typeLabel":"string | null"},"session_id":{"oneOf":[{"type":"string","description":"La sesión. `null` si la sesión se borró.","pattern":"^ses_[0-7][0-9a-hjkmnp-tv-z]{25}$","example":"ses_01jnb07m4yxxe0s687jf750tkv","isRequired":true,"uniqueKey":"session_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"La sesión. `null` si la sesión se borró.","isRequired":true,"uniqueKey":"session_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"session_id","typeLabel":"string | null"},"status":{"type":"string","description":"`confirmed`, `waitlisted`, `cancelled`, `attended` o `no_show`. La lista puede crecer: trata un\nvalor que no conoces como una reserva que no ocupa lugar.\n","enum":["confirmed","waitlisted","cancelled","attended","no_show"],"x-extensible-enum":true,"isRequired":true,"uniqueKey":"status","typeLabel":"enum\u003cstring>"},"credits_charged":{"type":"integer","description":"Los créditos que se descontaron al reservar (0 en lista de espera).","isRequired":true,"uniqueKey":"credits_charged","typeLabel":"integer"},"waitlist_position":{"oneOf":[{"type":"integer","description":"El lugar en la lista de espera; `null` fuera de ella.","isRequired":true,"uniqueKey":"waitlist_position.oneOf.0","typeLabel":"integer"},{"type":"null","description":"El lugar en la lista de espera; `null` fuera de ella.","isRequired":true,"uniqueKey":"waitlist_position.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"waitlist_position","typeLabel":"integer | null"},"booked_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":"booked_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":"cancelled_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","isRequired":true,"uniqueKey":"cancelled_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"cancelled_at","typeLabel":"string\u003cdate-time> | null"},"free_cancel_until":{"oneOf":[{"type":"string","description":"Hasta cuándo cancelar devuelve el crédito, con el plazo de la clase, de su disciplina o del\nestudio, y la regla de la lista de espera. Es una **predicción**: lo decide Craqui al cancelar.\n`null` si la reserva no está `confirmed` ni `waitlisted`, o si la sesión ya empezó.\n","format":"date-time","example":"2026-12-02T19:00:00-03:00","isRequired":true,"uniqueKey":"free_cancel_until.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"Hasta cuándo cancelar devuelve el crédito, con el plazo de la clase, de su disciplina o del\nestudio, y la regla de la lista de espera. Es una **predicción**: lo decide Craqui al cancelar.\n`null` si la reserva no está `confirmed` ni `waitlisted`, o si la sesión ya empezó.\n","isRequired":true,"uniqueKey":"free_cancel_until.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"free_cancel_until","typeLabel":"string\u003cdate-time> | null"},"recurring":{"type":"boolean","description":"Si la reserva salió de una reserva fija.","isRequired":true,"uniqueKey":"recurring","typeLabel":"boolean"},"credit_refunded":{"type":"boolean","description":"Si se le devolvió el crédito de esta reserva (desde su último `booked_at`).","isRequired":true,"uniqueKey":"credit_refunded","typeLabel":"boolean"},"source":{"type":"string","description":"De dónde salió la reserva: `api`, `recurring` (una reserva fija), `aggregator` (una plataforma\nde terceros) o `craqui` (el estudio o el cliente en Craqui). La lista puede crecer.\n","enum":["api","recurring","aggregator","craqui"],"x-extensible-enum":true,"isRequired":true,"uniqueKey":"source","typeLabel":"enum\u003cstring>"},"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":"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":"updated_at","typeLabel":"string\u003cdate-time>"},"client":{"oneOf":[{"type":"object","description":"Solo con `expand[]=client` (pide `clients:read`). `null` si `client_id` es `null`.","required":["id","object","livemode","first_name","last_name","status","home_center_id","created_at","updated_at"],"properties":{"id":{"type":"string","description":"Id de un cliente del estudio.","pattern":"^cli_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["cli_01jatfha5h4nkg77c3wfrvd3cw"],"isRequired":true,"uniqueKey":"client.oneOf.0.id","typeLabel":"string"},"object":{"type":"string","const":"client","isRequired":true,"uniqueKey":"client.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":"client.oneOf.0.livemode","typeLabel":"boolean"},"first_name":{"oneOf":[{"type":"string","description":"`null` en un cliente `deleted`, o si el estudio no lo cargó.","examples":["Sofía"],"isRequired":true,"uniqueKey":"client.oneOf.0.first_name.oneOf.0","typeLabel":"string"},{"type":"null","description":"`null` en un cliente `deleted`, o si el estudio no lo cargó.","examples":["Sofía"],"isRequired":true,"uniqueKey":"client.oneOf.0.first_name.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"client.oneOf.0.first_name","typeLabel":"string | null"},"last_name":{"oneOf":[{"type":"string","description":"`null` en un cliente `deleted`, o si el estudio no lo cargó.","examples":["Pérez"],"isRequired":true,"uniqueKey":"client.oneOf.0.last_name.oneOf.0","typeLabel":"string"},{"type":"null","description":"`null` en un cliente `deleted`, o si el estudio no lo cargó.","examples":["Pérez"],"isRequired":true,"uniqueKey":"client.oneOf.0.last_name.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"client.oneOf.0.last_name","typeLabel":"string | null"},"status":{"type":"string","description":"`active`, `inactive` o `deleted`. Las listas traen solo `active` e `inactive`. La lista puede\ncrecer: trata un valor que no conoces como inactivo.\n","enum":["active","inactive","deleted"],"x-extensible-enum":true,"isRequired":true,"uniqueKey":"client.oneOf.0.status","typeLabel":"enum\u003cstring>"},"home_center_id":{"oneOf":[{"type":"string","description":"La sede habitual del cliente, si el estudio le asignó una.","pattern":"^ctr_[0-7][0-9a-hjkmnp-tv-z]{25}$","example":"ctr_01j65pdnq74qvnh0953pzvtczg","isRequired":true,"uniqueKey":"client.oneOf.0.home_center_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"La sede habitual del cliente, si el estudio le asignó una.","isRequired":true,"uniqueKey":"client.oneOf.0.home_center_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"client.oneOf.0.home_center_id","typeLabel":"string | null"},"created_at":{"type":"string","format":"date-time","description":"Cuándo pasó a ser cliente de este estudio.","examples":["2026-12-02T19:00:00-03:00"],"isRequired":true,"uniqueKey":"client.oneOf.0.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":"client.oneOf.0.updated_at","typeLabel":"string\u003cdate-time>"},"email":{"oneOf":[{"type":"string","description":"Solo con el permiso `clients.pii:read`: sin él, el campo no viene (no es `null`). `null` si el\ncliente no tiene email.\n","uniqueKey":"client.oneOf.0.email.oneOf.0","typeLabel":"string"},{"type":"null","description":"Solo con el permiso `clients.pii:read`: sin él, el campo no viene (no es `null`). `null` si el\ncliente no tiene email.\n","uniqueKey":"client.oneOf.0.email.oneOf.1","typeLabel":"null"}],"uniqueKey":"client.oneOf.0.email","typeLabel":"string | null"},"phone":{"oneOf":[{"type":"string","description":"Solo con el permiso `clients.pii:read`: sin él, el campo no viene. En formato E.164\n(`+59899123456`); `null` si no tiene teléfono o si no se pudo leer como uno.\n","pattern":"^\\+[1-9]\\d{6,14}$","examples":["+59899123456"],"uniqueKey":"client.oneOf.0.phone.oneOf.0","typeLabel":"string"},{"type":"null","description":"Solo con el permiso `clients.pii:read`: sin él, el campo no viene. En formato E.164\n(`+59899123456`); `null` si no tiene teléfono o si no se pudo leer como uno.\n","pattern":"^\\+[1-9]\\d{6,14}$","examples":["+59899123456"],"uniqueKey":"client.oneOf.0.phone.oneOf.1","typeLabel":"null"}],"uniqueKey":"client.oneOf.0.phone","typeLabel":"string | null"},"active_membership":{"oneOf":[{"type":"object","description":"Solo en `GET /v1/clients/{id}` con `expand[]=active_membership` (pide `memberships:read`): la\nmembresía que tiene ahora (la `active`; si no hay, la más nueva `paused`, `suspended` o\n`pending_payment`). `null` si no tiene ninguna.\n","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":"client.oneOf.0.active_membership.oneOf.0.id","typeLabel":"string"},"object":{"type":"string","const":"membership","isRequired":true,"uniqueKey":"client.oneOf.0.active_membership.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":"client.oneOf.0.active_membership.oneOf.0.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":"client.oneOf.0.active_membership.oneOf.0.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":"client.oneOf.0.active_membership.oneOf.0.client_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"client.oneOf.0.active_membership.oneOf.0.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":"client.oneOf.0.active_membership.oneOf.0.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":"client.oneOf.0.active_membership.oneOf.0.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":"client.oneOf.0.active_membership.oneOf.0.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":"client.oneOf.0.active_membership.oneOf.0.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":"client.oneOf.0.active_membership.oneOf.0.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":"client.oneOf.0.active_membership.oneOf.0.renews_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"client.oneOf.0.active_membership.oneOf.0.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":"client.oneOf.0.active_membership.oneOf.0.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":"client.oneOf.0.active_membership.oneOf.0.next_credit_date.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"client.oneOf.0.active_membership.oneOf.0.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":"client.oneOf.0.active_membership.oneOf.0.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":"client.oneOf.0.active_membership.oneOf.0.cancelled_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","isRequired":true,"uniqueKey":"client.oneOf.0.active_membership.oneOf.0.cancelled_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"client.oneOf.0.active_membership.oneOf.0.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":"client.oneOf.0.active_membership.oneOf.0.suspension_reason.oneOf.0","typeLabel":"string"},{"type":"null","description":"Por qué se suspendió, como texto; `null` si no está suspendida.","isRequired":true,"uniqueKey":"client.oneOf.0.active_membership.oneOf.0.suspension_reason.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"client.oneOf.0.active_membership.oneOf.0.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":"client.oneOf.0.active_membership.oneOf.0.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":"client.oneOf.0.active_membership.oneOf.0.discount.oneOf.0.percent.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"client.oneOf.0.active_membership.oneOf.0.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.","examples":[250000],"isRequired":true,"uniqueKey":"client.oneOf.0.active_membership.oneOf.0.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":"client.oneOf.0.active_membership.oneOf.0.discount.oneOf.0.fixed_amount.oneOf.0.currency","typeLabel":"string"}},"isRequired":true,"uniqueKey":"client.oneOf.0.active_membership.oneOf.0.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":"client.oneOf.0.active_membership.oneOf.0.discount.oneOf.0.fixed_amount.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"client.oneOf.0.active_membership.oneOf.0.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":"client.oneOf.0.active_membership.oneOf.0.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":"client.oneOf.0.active_membership.oneOf.0.discount.oneOf.0.periods_remaining.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"client.oneOf.0.active_membership.oneOf.0.discount.oneOf.0.periods_remaining","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"client.oneOf.0.active_membership.oneOf.0.discount.oneOf.0","typeLabel":"object"},{"type":"null","description":"El descuento que tiene la membresía; `null` si no tiene.","isRequired":true,"uniqueKey":"client.oneOf.0.active_membership.oneOf.0.discount.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"client.oneOf.0.active_membership.oneOf.0.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":"client.oneOf.0.active_membership.oneOf.0.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":"client.oneOf.0.active_membership.oneOf.0.active_freeze_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"client.oneOf.0.active_membership.oneOf.0.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":"client.oneOf.0.active_membership.oneOf.0.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":"client.oneOf.0.active_membership.oneOf.0.updated_at","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"client.oneOf.0.active_membership.oneOf.0","typeLabel":"object"},{"type":"null","description":"Solo en `GET /v1/clients/{id}` con `expand[]=active_membership` (pide `memberships:read`): la\nmembresía que tiene ahora (la `active`; si no hay, la más nueva `paused`, `suspended` o\n`pending_payment`). `null` si no tiene ninguna.\n","uniqueKey":"client.oneOf.0.active_membership.oneOf.1","typeLabel":"null"}],"uniqueKey":"client.oneOf.0.active_membership","typeLabel":"object | null"},"credit_balance":{"type":"object","description":"Solo en `GET /v1/clients/{id}` con `expand[]=credit_balance` (pide `credits:read`).","required":["object","livemode","client_id","total_credits","grants","grants_has_more"],"properties":{"object":{"type":"string","const":"credit_balance","isRequired":true,"uniqueKey":"client.oneOf.0.credit_balance.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":"client.oneOf.0.credit_balance.livemode","typeLabel":"boolean"},"client_id":{"type":"string","description":"Id de un cliente del estudio.","pattern":"^cli_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["cli_01jatfha5h4nkg77c3wfrvd3cw"],"isRequired":true,"uniqueKey":"client.oneOf.0.credit_balance.client_id","typeLabel":"string"},"total_credits":{"type":"integer","description":"El saldo del cliente; `0` si nunca tuvo créditos.","isRequired":true,"uniqueKey":"client.oneOf.0.credit_balance.total_credits","typeLabel":"integer"},"grants":{"type":"array","description":"Los lotes que se pueden usar (sin anular, con créditos y sin vencer), del que vence primero al último. Como mucho 100.","items":{"type":"object","required":["credit_grant_id","kind","credits_remaining","expires_at","course_ids"],"properties":{"credit_grant_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":"client.oneOf.0.credit_balance.grants.items.[INDEX].credit_grant_id","typeLabel":"string"},"kind":{"oneOf":[{"type":"string","description":"`pack`, `intro_offer` o `membership_period`. La lista puede crecer.","enum":["pack","intro_offer","membership_period",null],"x-extensible-enum":true,"isRequired":true,"uniqueKey":"client.oneOf.0.credit_balance.grants.items.[INDEX].kind.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"`pack`, `intro_offer` o `membership_period`. La lista puede crecer.","enum":["pack","intro_offer","membership_period",null],"x-extensible-enum":true,"isRequired":true,"uniqueKey":"client.oneOf.0.credit_balance.grants.items.[INDEX].kind.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"client.oneOf.0.credit_balance.grants.items.[INDEX].kind","typeLabel":"enum\u003cstring> | null"},"credits_remaining":{"type":"integer","isRequired":true,"uniqueKey":"client.oneOf.0.credit_balance.grants.items.[INDEX].credits_remaining","typeLabel":"integer"},"expires_at":{"oneOf":[{"type":"string","description":"Cuándo vencen; `null` si no vencen.","format":"date-time","example":"2026-12-02T19:00:00-03:00","isRequired":true,"uniqueKey":"client.oneOf.0.credit_balance.grants.items.[INDEX].expires_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"Cuándo vencen; `null` si no vencen.","isRequired":true,"uniqueKey":"client.oneOf.0.credit_balance.grants.items.[INDEX].expires_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"client.oneOf.0.credit_balance.grants.items.[INDEX].expires_at","typeLabel":"string\u003cdate-time> | null"},"course_ids":{"oneOf":[{"description":"Las disciplinas en las que sirven; `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":"client.oneOf.0.credit_balance.grants.items.[INDEX].course_ids.oneOf.0.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"client.oneOf.0.credit_balance.grants.items.[INDEX].course_ids.oneOf.0","typeLabel":"string[]"},{"description":"Las disciplinas en las que sirven; `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":"client.oneOf.0.credit_balance.grants.items.[INDEX].course_ids.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"client.oneOf.0.credit_balance.grants.items.[INDEX].course_ids","typeLabel":"string[] | null"}},"uniqueKey":"client.oneOf.0.credit_balance.grants.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"client.oneOf.0.credit_balance.grants","typeLabel":"object[]"},"grants_has_more":{"type":"boolean","description":"`true` si el cliente tiene más de 100 lotes vivos; la lista completa está en `GET /v1/credit_grants?client_id=…\u0026status=active`.","isRequired":true,"uniqueKey":"client.oneOf.0.credit_balance.grants_has_more","typeLabel":"boolean"}},"uniqueKey":"client.oneOf.0.credit_balance","typeLabel":"object"}},"uniqueKey":"client.oneOf.0","typeLabel":"object"},{"type":"null","description":"Solo con `expand[]=client` (pide `clients:read`). `null` si `client_id` es `null`.","uniqueKey":"client.oneOf.1","typeLabel":"null"}],"uniqueKey":"client","typeLabel":"object | null"},"session":{"oneOf":[{"type":"object","description":"Solo con `expand[]=session` (pide `sessions:read`). `null` si `session_id` es `null`.","required":["id","object","livemode","class_id","course_id","center_id","room_id","teacher_id","starts_at","ends_at","local_date","local_start_time","local_end_time","time_zone","status","capacity","booked_count","waitlist_count","available_spots","created_at","updated_at"],"properties":{"id":{"type":"string","description":"Id de una sesión (una fecha de una clase).","pattern":"^ses_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["ses_01jnb07m4yxxe0s687jf750tkv"],"isRequired":true,"uniqueKey":"session.oneOf.0.id","typeLabel":"string"},"object":{"type":"string","const":"session","isRequired":true,"uniqueKey":"session.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":"session.oneOf.0.livemode","typeLabel":"boolean"},"class_id":{"type":"string","description":"Id de una clase (el grupo con su horario semanal).","pattern":"^cls_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["cls_01jryg07jeazdbx61dnx96ckmv"],"isRequired":true,"uniqueKey":"session.oneOf.0.class_id","typeLabel":"string"},"course_id":{"type":"string","description":"Id de una disciplina.","pattern":"^crs_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["crs_01jff81dk7rxtacmye5nanfp0h"],"isRequired":true,"uniqueKey":"session.oneOf.0.course_id","typeLabel":"string"},"center_id":{"oneOf":[{"type":"string","description":"Id de una sede.","pattern":"^ctr_[0-7][0-9a-hjkmnp-tv-z]{25}$","example":"ctr_01j65pdnq74qvnh0953pzvtczg","isRequired":true,"uniqueKey":"session.oneOf.0.center_id.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"session.oneOf.0.center_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"session.oneOf.0.center_id","typeLabel":"string | null"},"room_id":{"oneOf":[{"type":"string","description":"El salón de esta sesión, si tiene uno asignado.","pattern":"^room_[0-7][0-9a-hjkmnp-tv-z]{25}$","example":"room_01jhweg897s9npa0tasfgt6a65","isRequired":true,"uniqueKey":"session.oneOf.0.room_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"El salón de esta sesión, si tiene uno asignado.","isRequired":true,"uniqueKey":"session.oneOf.0.room_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"session.oneOf.0.room_id","typeLabel":"string | null"},"teacher_id":{"oneOf":[{"type":"string","description":"Quien da esta sesión, con la suplencia aplicada (igual que el calendario del estudio). `null`\nsi no tiene instructor asignado.\n","pattern":"^tch_[0-7][0-9a-hjkmnp-tv-z]{25}$","example":"tch_01jmwqh91chk154n8xwnaw5ynd","isRequired":true,"uniqueKey":"session.oneOf.0.teacher_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"Quien da esta sesión, con la suplencia aplicada (igual que el calendario del estudio). `null`\nsi no tiene instructor asignado.\n","isRequired":true,"uniqueKey":"session.oneOf.0.teacher_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"session.oneOf.0.teacher_id","typeLabel":"string | null"},"starts_at":{"type":"string","format":"date-time","description":"El inicio, con el offset del estudio en ese momento. Una hora local que no existe por el\ncambio de horario (por ejemplo 00:30 la noche en que se adelanta el reloj) se corre una hora,\nigual que al reservar: en ese caso `starts_at` y `local_start_time` no coinciden.\n","examples":["2026-12-02T19:00:00-03:00"],"isRequired":true,"uniqueKey":"session.oneOf.0.starts_at","typeLabel":"string\u003cdate-time>"},"ends_at":{"type":"string","format":"date-time","description":"El fin. Una clase que cruza la medianoche termina al día siguiente.","examples":["2026-12-02T19:00:00-03:00"],"isRequired":true,"uniqueKey":"session.oneOf.0.ends_at","typeLabel":"string\u003cdate-time>"},"local_date":{"type":"string","format":"date","description":"Fecha local del negocio, `YYYY-MM-DD`.","pattern":"^\\d{4}-\\d{2}-\\d{2}$","examples":["2026-12-02"],"isRequired":true,"uniqueKey":"session.oneOf.0.local_date","typeLabel":"string\u003cdate>"},"local_start_time":{"type":"string","description":"Hora local del negocio, `HH:MM` (24 horas).","pattern":"^\\d{2}:\\d{2}$","examples":["19:00"],"isRequired":true,"uniqueKey":"session.oneOf.0.local_start_time","typeLabel":"string"},"local_end_time":{"type":"string","description":"Hora local del negocio, `HH:MM` (24 horas).","pattern":"^\\d{2}:\\d{2}$","examples":["19:00"],"isRequired":true,"uniqueKey":"session.oneOf.0.local_end_time","typeLabel":"string"},"time_zone":{"oneOf":[{"type":"string","description":"La zona horaria del estudio (IANA). `null` si el estudio no eligió una; los instantes salen en `+00:00`.","examples":["America/Montevideo"],"isRequired":true,"uniqueKey":"session.oneOf.0.time_zone.oneOf.0","typeLabel":"string"},{"type":"null","description":"La zona horaria del estudio (IANA). `null` si el estudio no eligió una; los instantes salen en `+00:00`.","examples":["America/Montevideo"],"isRequired":true,"uniqueKey":"session.oneOf.0.time_zone.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"session.oneOf.0.time_zone","typeLabel":"string | null"},"status":{"type":"string","description":"`scheduled`, `cancelled` (el estudio la canceló) o `studio_closed` (el estudio cerró ese día).\nLa lista puede crecer: trata un valor que no conoces como una sesión que no se da.\n","enum":["scheduled","cancelled","studio_closed"],"x-extensible-enum":true,"isRequired":true,"uniqueKey":"session.oneOf.0.status","typeLabel":"enum\u003cstring>"},"capacity":{"oneOf":[{"type":"integer","description":"El cupo de la sesión. `null` si la clase no tiene cupo.","isRequired":true,"uniqueKey":"session.oneOf.0.capacity.oneOf.0","typeLabel":"integer"},{"type":"null","description":"El cupo de la sesión. `null` si la clase no tiene cupo.","isRequired":true,"uniqueKey":"session.oneOf.0.capacity.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"session.oneOf.0.capacity","typeLabel":"integer | null"},"booked_count":{"type":"integer","description":"Los lugares tomados: reservas confirmadas, asistidas y ausentes hasta que la sesión empieza. Es\nla misma cuenta que usa Craqui al reservar.\n","minimum":0,"isRequired":true,"uniqueKey":"session.oneOf.0.booked_count","typeLabel":"integer"},"waitlist_count":{"type":"integer","description":"Cuántas personas esperan en la lista de espera.","minimum":0,"isRequired":true,"uniqueKey":"session.oneOf.0.waitlist_count","typeLabel":"integer"},"available_spots":{"oneOf":[{"type":"integer","description":"`capacity - booked_count`, nunca menos de 0. `null` si la clase no tiene cupo.","minimum":0,"isRequired":true,"uniqueKey":"session.oneOf.0.available_spots.oneOf.0","typeLabel":"integer"},{"type":"null","description":"`capacity - booked_count`, nunca menos de 0. `null` si la clase no tiene cupo.","minimum":0,"isRequired":true,"uniqueKey":"session.oneOf.0.available_spots.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"session.oneOf.0.available_spots","typeLabel":"integer | 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":"session.oneOf.0.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":"session.oneOf.0.updated_at","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"session.oneOf.0","typeLabel":"object"},{"type":"null","description":"Solo con `expand[]=session` (pide `sessions:read`). `null` si `session_id` es `null`.","uniqueKey":"session.oneOf.1","typeLabel":"null"}],"uniqueKey":"session","typeLabel":"object | null"}},"uniqueKey":"","typeLabel":"object"},"example":{"id":"bkg_3w3mn9wjsz9t59t8azd9xrs78e","object":"booking","livemode":true,"client_id":"cli_01jqy553dmxw6vmq7g5vzfa9yz","session_id":"ses_01j2d1vb84pqs90137c12qvz8q","status":"confirmed","credits_charged":1,"waitlist_position":null,"booked_at":"2026-12-01T10:00:04-03:00","cancelled_at":null,"free_cancel_until":"2026-12-02T20:00:00-03:00","recurring":false,"credit_refunded":false,"source":"api","created_at":"2026-12-01T10:00:04-03:00","updated_at":"2026-12-01T10:00:04-03:00"},"examples":{"Example":{"title":"Example","value":{"id":"bkg_3w3mn9wjsz9t59t8azd9xrs78e","object":"booking","livemode":true,"client_id":"cli_01jqy553dmxw6vmq7g5vzfa9yz","session_id":"ses_01j2d1vb84pqs90137c12qvz8q","status":"confirmed","credits_charged":1,"waitlist_position":null,"booked_at":"2026-12-01T10:00:04-03:00","cancelled_at":null,"free_cancel_until":"2026-12-02T20:00:00-03:00","recurring":false,"credit_refunded":false,"source":"api","created_at":"2026-12-01T10:00:04-03:00","updated_at":"2026-12-01T10:00:04-03:00"}}},"exampleType":"examples"}},"exampleType":"examples"},"27b99319-9936-4cdb-bcb3-4f6b869c2ad3":{"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`).\nEl 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 `session_id`).","examples":["session_id"],"isRequired":true,"uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","description":"Qué tiene mal el campo.","examples":["invalid_prefix"],"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[]"}},"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":"session_id","code":"invalid_prefix","detail":"\u003cstring>"}]}}},"exampleType":"generated"}},"exampleType":"generated"},"2e002c3a-fc89-434d-a086-699285368a5b":{"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`.\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 `session_id`).","examples":["session_id"],"isRequired":true,"uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","description":"Qué tiene mal el campo.","examples":["invalid_prefix"],"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[]"}},"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"},"c37294ac-e916-4610-af9b-aecbd37bbf59":{"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).\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 `session_id`).","examples":["session_id"],"isRequired":true,"uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","description":"Qué tiene mal el campo.","examples":["invalid_prefix"],"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[]"}},"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":"session_id","code":"invalid_prefix","detail":"\u003cstring>"}]}}},"exampleType":"generated"}},"exampleType":"generated"},"1229907a-f96c-4860-b8f1-e7954bef9fc8":{"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 `session_id`).","examples":["session_id"],"isRequired":true,"uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","description":"Qué tiene mal el campo.","examples":["invalid_prefix"],"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[]"}},"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":"session_id","code":"invalid_prefix","detail":"\u003cstring>"}]}}},"exampleType":"generated"}},"exampleType":"generated"},"c732a359-826b-4fed-b897-49b6ba1f9cd4":{"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 `session_id`).","examples":["session_id"],"isRequired":true,"uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","description":"Qué tiene mal el campo.","examples":["invalid_prefix"],"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[]"}},"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"},"44641dda-615e-4d62-8534-955b4b03ec21":{"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).\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 `session_id`).","examples":["session_id"],"isRequired":true,"uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","description":"Qué tiene mal el campo.","examples":["invalid_prefix"],"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[]"}},"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":"session_id","code":"invalid_prefix","detail":"\u003cstring>"}]}}},"exampleType":"generated"}},"exampleType":"generated"},"291d1967-8331-4412-8c6f-9091568d18b1":{"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 `session_id`).","examples":["session_id"],"isRequired":true,"uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","description":"Qué tiene mal el campo.","examples":["invalid_prefix"],"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[]"}},"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":"session_id","code":"invalid_prefix","detail":"\u003cstring>"}]}}},"exampleType":"generated"}},"exampleType":"generated"},"2c2b187c-4ec0-4122-a5a3-f14882714893":{"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 `session_id`).","examples":["session_id"],"isRequired":true,"uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","description":"Qué tiene mal el campo.","examples":["invalid_prefix"],"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[]"}},"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":"session_id","code":"invalid_prefix","detail":"\u003cstring>"}]}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"e42aeacc-927b-4f46-9a4c-f147b0702366":{"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"}}},"servers":{"96e51283-5f3d-46d8-ab6e-60af9e53f037":{"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"}]},"originalFileLocation":"openapi.yaml"},"subdomain":"craqui","siteName":"API de Craqui","title":"Reservar una sesión - API de Craqui","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-08T19:18:16.774Z","originalFileLocation":"api-reference/bookings/reservar-una-sesión.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=\"Reserva una sesión para un cliente, con las mismas reglas que tiene el cliente al reservar desde la web del estudio: la anticipación máxima, el tope de reservas, el límite de ausencias, las clases que solo reserva el estudio y la sede propia. Cuesta 1 crédito. Si la sesión está completa, anota al cliente en la lista de espera, salvo con allow_waitlist: false. Avisa al cliente como cualquier reserva, salvo con notify: false. Responde 201 con la reserva. Si el cliente había cancelado esa sesión, la reserva vuelve con el mismo bkg_. Con dry_run=true responde 200 con la vista previa. Rechazos (409): already_booked, session_full, session_started, session_cancelled, session_on_vacation, class_archived, client_inactive, membership_suspended, membership_frozen, class_restricted_to_studio, outside_home_center, booking_window_closed, no_show_limit_reached, max_active_bookings_reached, insufficient_credits, credits_not_valid_for_class, credits_not_valid_for_date. Un client_id o un session_id que no es de tu negocio responde 404 not_found. Una escritura: lleva Idempotency-Key (salvo con dry_run=true), solo para estudios (en una academia responde wrong_vertical), y solo si tu negocio tiene habilitada la escritura por la API (write_access_disabled si no). Un campo que el cuerpo no declara responde validation_failed con unknown_field. Cuenta para el límite de escrituras (30 por minuto).\">\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=\"Reservar una sesión - API de Craqui\">\u003cmeta data-mint-head property=\"og:description\" content=\"Reserva una sesión para un cliente, con las mismas reglas que tiene el cliente al reservar desde la web del estudio: la anticipación máxima, el tope de reservas, el límite de ausencias, las clases que solo reserva el estudio y la sede propia. Cuesta 1 crédito. Si la sesión está completa, anota al cliente en la lista de espera, salvo con allow_waitlist: false. Avisa al cliente como cualquier reserva, salvo con notify: false. Responde 201 con la reserva. Si el cliente había cancelado esa sesión, la reserva vuelve con el mismo bkg_. Con dry_run=true responde 200 con la vista previa. Rechazos (409): already_booked, session_full, session_started, session_cancelled, session_on_vacation, class_archived, client_inactive, membership_suspended, membership_frozen, class_restricted_to_studio, outside_home_center, booking_window_closed, no_show_limit_reached, max_active_bookings_reached, insufficient_credits, credits_not_valid_for_class, credits_not_valid_for_date. Un client_id o un session_id que no es de tu negocio responde 404 not_found. Una escritura: lleva Idempotency-Key (salvo con dry_run=true), solo para estudios (en una academia responde wrong_vertical), y solo si tu negocio tiene habilitada la escritura por la API (write_access_disabled si no). Un campo que el cuerpo no declara responde validation_failed con unknown_field. Cuenta para el límite de escrituras (30 por minuto).\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"API de Craqui\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.craqui.com/api-reference/bookings/reservar-una-sesión\">\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=bookings\u0026amp;title=Reservar+una+sesi%C3%B3n\u0026amp;description=Reserva+una+sesi%C3%B3n+para+un+cliente%2C+con+las+mismas+reglas+que+tiene+el+cliente+al+reservar+desde+la+web%0Adel+estudio%3A+la+anticipaci%C3%B3n+m%C3%A1xima%2C+el+tope+de+reservas\u0026amp;theme=c4e9c429a4105a1e8f962c5f\u0026amp;signature=42539d87d80acabe176d486327a1d1d88d22e3736caf481ca749804843fba017\">\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=\"Reservar una sesión - API de Craqui\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Reserva una sesión para un cliente, con las mismas reglas que tiene el cliente al reservar desde la web del estudio: la anticipación máxima, el tope de reservas, el límite de ausencias, las clases que solo reserva el estudio y la sede propia. Cuesta 1 crédito. Si la sesión está completa, anota al cliente en la lista de espera, salvo con allow_waitlist: false. Avisa al cliente como cualquier reserva, salvo con notify: false. Responde 201 con la reserva. Si el cliente había cancelado esa sesión, la reserva vuelve con el mismo bkg_. Con dry_run=true responde 200 con la vista previa. Rechazos (409): already_booked, session_full, session_started, session_cancelled, session_on_vacation, class_archived, client_inactive, membership_suspended, membership_frozen, class_restricted_to_studio, outside_home_center, booking_window_closed, no_show_limit_reached, max_active_bookings_reached, insufficient_credits, credits_not_valid_for_class, credits_not_valid_for_date. Un client_id o un session_id que no es de tu negocio responde 404 not_found. Una escritura: lleva Idempotency-Key (salvo con dry_run=true), solo para estudios (en una academia responde wrong_vertical), y solo si tu negocio tiene habilitada la escritura por la API (write_access_disabled si no). Un campo que el cuerpo no declara responde validation_failed con unknown_field. Cuenta para el límite de escrituras (30 por minuto).\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://craqui.mintlify.site/_mintlify/api/og/v2?division=bookings\u0026amp;title=Reservar+una+sesi%C3%B3n\u0026amp;description=Reserva+una+sesi%C3%B3n+para+un+cliente%2C+con+las+mismas+reglas+que+tiene+el+cliente+al+reservar+desde+la+web%0Adel+estudio%3A+la+anticipaci%C3%B3n+m%C3%A1xima%2C+el+tope+de+reservas\u0026amp;theme=c4e9c429a4105a1e8f962c5f\u0026amp;signature=42539d87d80acabe176d486327a1d1d88d22e3736caf481ca749804843fba017\">\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/api-reference/bookings/reservar-una-sesión\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/bookings/reservar-una-sesi%C3%B3n.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/api-reference/bookings/reservar-una-sesi%C3%B3n#webpage\",\"url\":\"https://docs.craqui.com/api-reference/bookings/reservar-una-sesi%C3%B3n\",\"name\":\"Reservar una sesión\",\"description\":\"Reserva una sesión para un cliente, con las mismas reglas que tiene el cliente al reservar desde la web del estudio: la anticipación máxima, el tope de reservas, el límite de ausencias, las clases que solo reserva el estudio y la sede propia. Cuesta 1 crédito. Si la sesión está completa, anota al cliente en la lista de espera, salvo con allow_waitlist: false. Avisa al cliente como cualquier reserva, salvo con notify: false. Responde 201 con la reserva. Si el cliente había cancelado esa sesión, la reserva vuelve con el mismo bkg_. Con dry_run=true responde 200 con la vista previa. Rechazos (409): already_booked, session_full, session_started, session_cancelled, session_on_vacation, class_archived, client_inactive, membership_suspended, membership_frozen, class_restricted_to_studio, outside_home_center, booking_window_closed, no_show_limit_reached, max_active_bookings_reached, insufficient_credits, credits_not_valid_for_class, credits_not_valid_for_date. Un client_id o un session_id que no es de tu negocio responde 404 not_found. Una escritura: lleva Idempotency-Key (salvo con dry_run=true), solo para estudios (en una academia responde wrong_vertical), y solo si tu negocio tiene habilitada la escritura por la API (write_access_disabled si no). Un campo que el cuerpo no declara responde validation_failed con unknown_field. Cuenta para el límite de escrituras (30 por minuto).\",\"dateModified\":\"2026-11-08T19:18:16.774Z\",\"isPartOf\":{\"@id\":\"https://docs.craqui.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.craqui.com/api-reference/bookings/reservar-una-sesi%C3%B3n#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.craqui.com/api-reference/bookings/reservar-una-sesi%C3%B3n#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"bookings\",\"item\":\"https://docs.craqui.com/api-reference/bookings/listar-reservas\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Reservar una sesión\",\"item\":\"https://docs.craqui.com/api-reference/bookings/reservar-una-sesi%C3%B3n\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.craqui.com/api-reference/bookings/reservar-una-sesi%C3%B3n#apireference\",\"headline\":\"Reservar una sesión\",\"name\":\"Reservar una sesión\",\"description\":\"Reserva una sesión para un cliente, con las mismas reglas que tiene el cliente al reservar desde la web del estudio: la anticipación máxima, el tope de reservas, el límite de ausencias, las clases que solo reserva el estudio y la sede propia. Cuesta 1 crédito. Si la sesión está completa, anota al cliente en la lista de espera, salvo con allow_waitlist: false. Avisa al cliente como cualquier reserva, salvo con notify: false. Responde 201 con la reserva. Si el cliente había cancelado esa sesión, la reserva vuelve con el mismo bkg_. Con dry_run=true responde 200 con la vista previa. Rechazos (409): already_booked, session_full, session_started, session_cancelled, session_on_vacation, class_archived, client_inactive, membership_suspended, membership_frozen, class_restricted_to_studio, outside_home_center, booking_window_closed, no_show_limit_reached, max_active_bookings_reached, insufficient_credits, credits_not_valid_for_class, credits_not_valid_for_date. Un client_id o un session_id que no es de tu negocio responde 404 not_found. Una escritura: lleva Idempotency-Key (salvo con dry_run=true), solo para estudios (en una academia responde wrong_vertical), y solo si tu negocio tiene habilitada la escritura por la API (write_access_disabled si no). Un campo que el cuerpo no declara responde validation_failed con unknown_field. Cuenta para el límite de escrituras (30 por minuto).\",\"url\":\"https://docs.craqui.com/api-reference/bookings/reservar-una-sesi%C3%B3n\",\"mainEntityOfPage\":{\"@id\":\"https://docs.craqui.com/api-reference/bookings/reservar-una-sesi%C3%B3n#webpage\"},\"dateModified\":\"2026-11-08T19:18:16.774Z\",\"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":"/openapi.yaml get /business","href":"/api-reference/business/ver-el-negocio-de-la-clave"}]},{"group":"booking_policy","pages":[{"title":"Ver las reglas de reserva","deprecated":null,"version":null,"openapi":"/openapi.yaml get /booking_policy","href":"/api-reference/booking_policy/ver-las-reglas-de-reserva"}]},{"group":"centers","pages":[{"title":"Listar sedes","deprecated":null,"version":null,"openapi":"/openapi.yaml get /centers","href":"/api-reference/centers/listar-sedes"},{"title":"Ver una sede","deprecated":null,"version":null,"openapi":"/openapi.yaml get /centers/{id}","href":"/api-reference/centers/ver-una-sede"}]},{"group":"rooms","pages":[{"title":"Listar salones","deprecated":null,"version":null,"openapi":"/openapi.yaml get /rooms","href":"/api-reference/rooms/listar-salones"},{"title":"Ver un salón","deprecated":null,"version":null,"openapi":"/openapi.yaml get /rooms/{id}","href":"/api-reference/rooms/ver-un-salón"}]},{"group":"teachers","pages":[{"title":"Listar instructores","deprecated":null,"version":null,"openapi":"/openapi.yaml get /teachers","href":"/api-reference/teachers/listar-instructores"},{"title":"Ver un instructor","deprecated":null,"version":null,"openapi":"/openapi.yaml get /teachers/{id}","href":"/api-reference/teachers/ver-un-instructor"}]},{"group":"courses","pages":[{"title":"Listar disciplinas","deprecated":null,"version":null,"openapi":"/openapi.yaml get /courses","href":"/api-reference/courses/listar-disciplinas"}]},{"group":"classes","pages":[{"title":"Listar clases","deprecated":null,"version":null,"openapi":"/openapi.yaml get /classes","href":"/api-reference/classes/listar-clases"},{"title":"Ver una clase","deprecated":null,"version":null,"openapi":"/openapi.yaml get /classes/{id}","href":"/api-reference/classes/ver-una-clase"}]},{"group":"credit_packs","pages":[{"title":"Listar packs de créditos","deprecated":null,"version":null,"openapi":"/openapi.yaml get /credit_packs","href":"/api-reference/credit_packs/listar-packs-de-créditos"}]},{"group":"membership_plans","pages":[{"title":"Listar planes de membresía","deprecated":null,"version":null,"openapi":"/openapi.yaml get /membership_plans","href":"/api-reference/membership_plans/listar-planes-de-membresía"}]},{"group":"intro_offers","pages":[{"title":"Listar ofertas de bienvenida","deprecated":null,"version":null,"openapi":"/openapi.yaml get /intro_offers","href":"/api-reference/intro_offers/listar-ofertas-de-bienvenida"}]},{"group":"sessions","pages":[{"title":"Listar sesiones","deprecated":null,"version":null,"openapi":"/openapi.yaml get /sessions","href":"/api-reference/sessions/listar-sesiones"},{"title":"Ver una sesión","deprecated":null,"version":null,"openapi":"/openapi.yaml get /sessions/{id}","href":"/api-reference/sessions/ver-una-sesión"},{"title":"Listar las reservas de una sesión","deprecated":null,"version":null,"openapi":"/openapi.yaml get /sessions/{id}/bookings","href":"/api-reference/sessions/listar-las-reservas-de-una-sesión"}]},{"group":"clients","pages":[{"title":"Listar clientes","deprecated":null,"version":null,"openapi":"/openapi.yaml get /clients","href":"/api-reference/clients/listar-clientes"},{"title":"Ver un cliente","deprecated":null,"version":null,"openapi":"/openapi.yaml get /clients/{id}","href":"/api-reference/clients/ver-un-cliente"}]},{"group":"bookings","pages":[{"title":"Listar reservas","description":"Las reservas del estudio, de la más nueva a la más vieja. Los filtros de fecha son por la fecha local\nde la sesión: una reserva cuya sesión se borró queda fuera de un filtro de fecha.\n\n Paginada por cursor: para sincronizar todo, pide `limit=100` y sigue `next_cursor`.\n\n Solo para estudios: en una academia responde `wrong_vertical`. Un parámetro que la ruta no\n declara responde `validation_failed` con `unknown_parameter`.\n","deprecated":null,"version":null,"openapi":"/openapi.yaml get /bookings","href":"/api-reference/bookings/listar-reservas"},{"title":"Reservar una sesión","deprecated":null,"version":null,"openapi":"/openapi.yaml post /bookings","href":"/api-reference/bookings/reservar-una-sesión"},{"title":"Ver una reserva","description":"Una reserva del estudio.\n\n Solo para estudios: en una academia responde `wrong_vertical`. Un parámetro que la ruta no\n declara responde `validation_failed` con `unknown_parameter`.\n","deprecated":null,"version":null,"openapi":"/openapi.yaml get /bookings/{id}","href":"/api-reference/bookings/ver-una-reserva"},{"title":"Cancelar una reserva","deprecated":null,"version":null,"openapi":"/openapi.yaml post /bookings/{id}/cancel","href":"/api-reference/bookings/cancelar-una-reserva"},{"title":"Marcar la asistencia","deprecated":null,"version":null,"openapi":"/openapi.yaml post /bookings/{id}/attendance","href":"/api-reference/bookings/marcar-la-asistencia"}]},{"group":"credits","pages":[{"title":"Ver el saldo de créditos de un cliente","deprecated":null,"version":null,"openapi":"/openapi.yaml get /clients/{id}/credit_balance","href":"/api-reference/credits/ver-el-saldo-de-créditos-de-un-cliente"},{"title":"Listar lotes de créditos","deprecated":null,"version":null,"openapi":"/openapi.yaml get /credit_grants","href":"/api-reference/credits/listar-lotes-de-créditos"},{"title":"Listar movimientos de créditos","deprecated":null,"version":null,"openapi":"/openapi.yaml get /credit_transactions","href":"/api-reference/credits/listar-movimientos-de-créditos"}]},{"group":"memberships","pages":[{"title":"Listar membresías","deprecated":null,"version":null,"openapi":"/openapi.yaml get /memberships","href":"/api-reference/memberships/listar-membresías"},{"title":"Ver una membresía","deprecated":null,"version":null,"openapi":"/openapi.yaml get /memberships/{id}","href":"/api-reference/memberships/ver-una-membresía"},{"title":"Listar los congelamientos de una membresía","deprecated":null,"version":null,"openapi":"/openapi.yaml get /memberships/{id}/freezes","href":"/api-reference/memberships/listar-los-congelamientos-de-una-membresía"}]},{"group":"fees","pages":[{"title":"Listar cuotas","deprecated":null,"version":null,"openapi":"/openapi.yaml get /fees","href":"/api-reference/fees/listar-cuotas"},{"title":"Ver una cuota","deprecated":null,"version":null,"openapi":"/openapi.yaml get /fees/{id}","href":"/api-reference/fees/ver-una-cuota"}]},{"group":"payments","pages":[{"title":"Listar pagos","deprecated":null,"version":null,"openapi":"/openapi.yaml get /payments","href":"/api-reference/payments/listar-pagos"},{"title":"Ver un pago","deprecated":null,"version":null,"openapi":"/openapi.yaml get /payments/{id}","href":"/api-reference/payments/ver-un-pago"}]},{"group":"refunds","pages":[{"title":"Listar reembolsos","deprecated":null,"version":null,"openapi":"/openapi.yaml get /refunds","href":"/api-reference/refunds/listar-reembolsos"}]},{"group":"events","pages":[{"title":"Listar eventos","deprecated":null,"version":null,"openapi":"/openapi.yaml get /events","href":"/api-reference/events/listar-eventos"},{"title":"Ver un evento","deprecated":null,"version":null,"openapi":"/openapi.yaml get /events/{id}","href":"/api-reference/events/ver-un-evento"}]},{"group":"webhook_endpoints","pages":[{"title":"Listar URLs de avisos","deprecated":null,"version":null,"openapi":"/openapi.yaml get /webhook_endpoints","href":"/api-reference/webhook_endpoints/listar-urls-de-avisos"},{"title":"Agregar una URL de avisos","deprecated":null,"version":null,"openapi":"/openapi.yaml post /webhook_endpoints","href":"/api-reference/webhook_endpoints/agregar-una-url-de-avisos"},{"title":"Ver una URL de avisos","deprecated":null,"version":null,"openapi":"/openapi.yaml get /webhook_endpoints/{id}","href":"/api-reference/webhook_endpoints/ver-una-url-de-avisos"},{"title":"Borrar una URL de avisos","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /webhook_endpoints/{id}","href":"/api-reference/webhook_endpoints/borrar-una-url-de-avisos"},{"title":"Editar una URL de avisos","deprecated":null,"version":null,"openapi":"/openapi.yaml patch /webhook_endpoints/{id}","href":"/api-reference/webhook_endpoints/editar-una-url-de-avisos"},{"title":"Enviar un aviso de prueba","deprecated":null,"version":null,"openapi":"/openapi.yaml post /webhook_endpoints/{id}/test","href":"/api-reference/webhook_endpoints/enviar-un-aviso-de-prueba"},{"title":"Cambiar el secreto de una URL de avisos","deprecated":null,"version":null,"openapi":"/openapi.yaml post /webhook_endpoints/{id}/rotate_secret","href":"/api-reference/webhook_endpoints/cambiar-el-secreto-de-una-url-de-avisos"},{"title":"El aviso que recibe tu sistema","version":null,"deprecated":null,"openapi":"/openapi.yaml webhook event","href":"/api-reference/webhook_endpoints/el-aviso-que-recibe-tu-sistema"}]}]}]},"basePath":"","title":"Reservar una sesión - API de Craqui","buildId":"dpl_DTau1J5HqS9UTgVSDwGksstFWtPa","deploymentId":"dpl_DTau1J5HqS9UTgVSDwGksstFWtPa","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-5FCzAcfS.js","utils-SLtAG4EZ.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-2DZi8ZMu.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-D7J3nkzE.js","snippetPresets-D0Alv0AH.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-BI4qNJ2c.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BD3uyr8j.js","shallow-D8iEBr5z.js","getApiPlaygroundDisplay-CgNP4lzR.js","CodeSnippet-CX-QHuMs.js","CodeSnippets-VlXE-ZUf.js","Page-D9ithiIZ.js","getPastedJson-DYNQkZ1M.js","icon-CzacdwOi.js","MethodPill-2JVqoYKi.js","DuplicateIcon-_xVXs-U8.js","createIcon-BRHrweLo.js","DynamicMarkdown-mQG_iQiE.js","SectionHeading-DMpJzv8f.js","axios-vUo_bRtp.js","Markdown-5FGIym-8.js","clsx-D-TRO5q5.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CdrJecqK.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-CHlcWBLM.js"]}