Cancela hasta 50 deudas en un request. Cada deuda sigue la misma regla que POST /debts//cancel y se resuelve sola: la que falla no frena a las demás. Una deuda que ya estaba cancelada cuenta como cancelada, así que reintentar el mismo lote es seguro. Las canceladas vienen en data y el resto en errors, con su index y el id tal como lo enviaste.
Solo si tu cliente tiene varias companies: indica en cuál operas. En POST y PATCH también se puede enviar en el cuerpo (el cuerpo tiene prioridad). Si tu cliente tiene varias companies y no lo envías, 400 BAD_REQUEST; si no es una company de tu cliente, 422 RESOLUTION_ERROR (403 en /v2/debts/orders).
Ejemplo:
"MX-S-67890"
Cuerpo
application/json
Lote de hasta 50 deudas a cancelar en un solo request. En el nivel superior solo se acepta debts (y companyCode): cualquier otro campo devuelve 400. Cada item solo lleva id. Si un item es inválido no se cancela ninguna deuda, y cada entrada de details[] trae index, field e issue.
Deudas canceladas, en el orden en que fueron enviadas, incluidas las que ya estaban canceladas. paymentUrl viene en null: una deuda cancelada ya no se paga.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"TapiPay","colors":{"primary":"#044B47","light":"#D0ED9B","dark":"#044B47"},"logo":{"light":"https://mintcdn.com/tapi-d0a74b1d/Ee-T_CDRZ18YJiKr/logo/light.png?fit=max\u0026auto=format\u0026n=Ee-T_CDRZ18YJiKr\u0026q=85\u0026s=a650c74357b75b59b5494647173fef25","dark":"https://mintcdn.com/tapi-d0a74b1d/Ee-T_CDRZ18YJiKr/logo/dark.png?fit=max\u0026auto=format\u0026n=Ee-T_CDRZ18YJiKr\u0026q=85\u0026s=34a42dafe938a870ed1f27c0f971b55d"},"favicon":"https://mintcdn.com/tapi-d0a74b1d/Ee-T_CDRZ18YJiKr/favicon.png?fit=max\u0026auto=format\u0026n=Ee-T_CDRZ18YJiKr\u0026q=85\u0026s=793ff4a5f69525cee04ab417331cb460","contextual":{"options":["copy","chatgpt","claude","cursor","vscode","mcp"],"display":"header"},"styling":{"latex":false},"navigation":{"languages":[{"language":"es","default":true,"href":"es"},{"language":"en","href":"en"}]}},"deployment":{"deploymentMetadataValue":{"subdomain":"tapi-d0a74b1d","hasAudioNarration":false,"actualSubdomain":"tapi-d0a74b1d","customDomains":["devs.tapipay.la"],"gitSource":{"type":"github","owner":"tapipay-la","repo":"tapipay-facade-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"collectionId":"8504fe3c-d760-4924-9b02-0eb5f606ab89","liveDeploymentHistoryId":"6ae517556a8b4f1ab78fae3b","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae517556a8b4f1ab78fae3b"},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6ae51881f1e7dfc07c0b9a2f","clientVersion":"0.0.4043","searchFilterCounts":[{"language":"default","tag":"API Reference","count":35},{"language":"en","tag":"Guides","count":32},{"language":"es","tag":"Guías","count":32},{"language":"en","tag":"Webhooks","count":11},{"language":"es","tag":"Webhooks","count":11},{"language":"default","tag":"Subscriptions","count":8},{"language":"en","tag":"Resources","count":7},{"language":"es","tag":"Recursos","count":7},{"language":"en","tag":"Payment portal","count":6},{"language":"es","tag":"Portal de pagos","count":6},{"language":"default","tag":"Debts","count":6},{"language":"default","tag":"Payment Links","count":6},{"language":"default","tag":"Products","count":5},{"language":"en","tag":"Concepts","count":4},{"language":"es","tag":"Conceptos","count":4},{"language":"default","tag":"Contacts","count":4},{"language":"en","tag":"Get started","count":3},{"language":"es","tag":"Empieza aquí","count":3},{"language":"default","tag":"Adhesions","count":2},{"language":"default","tag":"Payment methods","count":2},{"language":"default","tag":"Payment orders","count":2},{"language":"en","tag":"What's new","count":1},{"language":"en","tag":"Connect your MCP","count":1},{"language":"es","tag":"Novedades","count":1},{"language":"es","tag":"Conecta tu MCP","count":1}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"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":"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":"byok-sep-25","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":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","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}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"html[lang=es] #localization-select-trigger::before{content:\"🇲🇽\";margin-right:-.15rem}html[lang=en] #localization-select-trigger::before{content:\"🇺🇸\";margin-right:-.15rem}#localization-select-content [data-component-part=localization-select-item]:first-child::before{content:\"🇲🇽\";margin-right:-.25rem}#localization-select-content [data-component-part=localization-select-item]:last-child::before{content:\"🇺🇸\";margin-right:-.25rem}::-webkit-scrollbar{width:12px!important;height:12px!important}::-webkit-scrollbar-track{background:0 0!important}::-webkit-scrollbar-corner{background:0 0!important}::-webkit-scrollbar-thumb{background-color:rgba(0,0,0,.18)!important;border-radius:9999px!important;border:3px solid transparent!important;background-clip:content-box!important}::-webkit-scrollbar-thumb:hover{background-color:rgba(0,0,0,.32)!important}.dark ::-webkit-scrollbar-thumb{background-color:rgba(255,255,255,.22)!important}.dark ::-webkit-scrollbar-thumb:hover{background-color:rgba(255,255,255,.38)!important}*{scrollbar-width:thin;scrollbar-color:rgba(0,0,0,.25) transparent}.dark *{scrollbar-color:rgba(255,255,255,.25) transparent}.stable-scrollbar-gutter .code-block-background,[class*=\"100dvh-11rem\"]{overflow:visible!important}[class*=\"100dvh-11rem\"]{max-height:none!important}html:has([class*=max-w-screen-xl][class*=\"100dvh-6rem\"]){overflow:hidden!important}[class*=max-w-screen-xl][class*=\"100dvh-6rem\"]{box-sizing:border-box!important;border-right:14px solid transparent!important;background-clip:border-box!important}[class*=max-w-screen-xl][class*=\"100dvh-6rem\"]::-webkit-scrollbar{width:8px!important}.method-nav-pill{width:2.75rem!important}.method-nav-pill span{font-size:.65rem!important;line-height:1!important}#sidebar a[aria-current=page] span[class*=break-words]{font-weight:400!important}#sidebar,#sidebar *{hyphens:none!important;overflow-wrap:normal!important;word-break:normal!important}@media (min-width:1024px){#sidebar{width:21rem!important}}#content-area table code{white-space:nowrap!important}#search-bar-entry{width:auto!important;flex:0 0 auto!important;justify-content:center!important;gap:.4rem!important}#assistant-entry>svg,#search-bar-entry .truncate,#search-bar-entry>span{display:none!important}html[lang=es] #search-bar-entry>div::after{content:\"Buscar\"}html[lang=en] #search-bar-entry>div::after{content:\"Search\"}div:has(>#search-bar-entry){justify-content:center!important}.chat-assistant-sheet-header>div:first-child>svg{display:none!important}[role=tablist]{flex-wrap:wrap!important;overflow:visible!important;gap:.4rem 1rem!important}"}],"page":{"pagePath":"api-reference/debts/cancelar-deudas-en-lote","slug":"/api-reference/debts/cancelar-deudas-en-lote","pageMetadata":{"title":"Cancelar deudas en lote","description":"Cancela hasta 50 deudas en un request. Cada deuda sigue la misma regla que POST /debts/{id}/cancel y se resuelve sola: la que falla no frena a las demás. Una deuda que ya estaba cancelada cuenta como cancelada, así que reintentar el mismo lote es seguro. Las canceladas vienen en `data` y el resto en `errors`, con su `index` y el `id` tal como lo enviaste.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /debts/cancel","href":"/api-reference/debts/cancelar-deudas-en-lote","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {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(_components.p, {\n children: [\"Cancela hasta 50 deudas en un request. Cada deuda sigue la misma regla que POST /debts/\", \"/cancel y se resuelve sola: la que falla no frena a las demás. Una deuda que ya estaba cancelada cuenta como cancelada, así que reintentar el mismo lote es seguro. Las canceladas vienen en \", _jsx(_components.code, {\n children: \"data\"\n }), \" y el resto en \", _jsx(_components.code, {\n children: \"errors\"\n }), \", con su \", _jsx(_components.code, {\n children: \"index\"\n }), \" y el \", _jsx(_components.code, {\n children: \"id\"\n }), \" tal como lo enviaste.\"]\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":"Cancelar deudas en lote","description":"Cancela hasta 50 deudas en un request. Cada deuda sigue la misma regla que POST /debts/{id}/cancel y se resuelve sola: la que falla no frena a las demás. Una deuda que ya estaba cancelada cuenta como cancelada, así que reintentar el mismo lote es seguro. Las canceladas vienen en `data` y el resto en `errors`, con su `index` y el `id` tal como lo enviaste.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /debts/cancel","href":"/api-reference/debts/cancelar-deudas-en-lote","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"summary":"Cancelar deudas en lote","description":"Cancela hasta 50 deudas en un request. Cada deuda sigue la misma regla que POST /debts/{id}/cancel y se resuelve sola: la que falla no frena a las demás. Una deuda que ya estaba cancelada cuenta como cancelada, así que reintentar el mismo lote es seguro. Las canceladas vienen en `data` y el resto en `errors`, con su `index` y el `id` tal como lo enviaste.","operationId":"cancelDebtsBatch","tags":["Debts"],"parameters":["d31dee98-efdb-49a5-b651-a70d32c923e3"],"requestBody":"d9012be1-77b9-4e3b-be14-912f8487376b","responses":{"200":"45642905-fbec-4217-90c8-4f4aa03a6237","207":"941afee3-b81d-441a-9ce1-677f7da7fca5","400":"5297298c-8bc1-4d46-90b4-8c0f2b4b632f","401":"c36e8f21-3c37-4791-98e1-43ade649118b","403":"859f54d8-06e2-43ef-b67d-d3f3d97f1487","422":"a581ea8d-5ff7-4b92-942c-534a0e0554fd","500":"372cf3d9-2040-456d-b90a-a35f0df3c150"},"method":"post","type":"path","servers":["1d12f346-b1e5-4ae4-a0a6-770670705ed5"],"security":["46a030e3-08cf-4cef-9c85-fa930c9d2dd2"],"path":"/debts/cancel","baseUrlOptions":["https://tapipay-facade.homo.tapila.cloud"],"title":"Cancelar deudas en lote","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"d31dee98-efdb-49a5-b651-a70d32c923e3":{"name":"companyCode","in":"query","required":false,"schema":{"type":"string","example":"MX-S-67890","isRequired":false,"description":"Solo si tu cliente tiene varias companies: indica en cuál operas. En POST y PATCH también se puede enviar en el cuerpo (el cuerpo tiene prioridad). Si tu cliente tiene varias companies y no lo envías, 400 BAD_REQUEST; si no es una company de tu cliente, 422 RESOLUTION_ERROR (403 en /v2/debts/orders).","uniqueKey":"","typeLabel":"string"},"description":"Solo si tu cliente tiene varias companies: indica en cuál operas. En POST y PATCH también se puede enviar en el cuerpo (el cuerpo tiene prioridad). Si tu cliente tiene varias companies y no lo envías, 400 BAD_REQUEST; si no es una company de tu cliente, 422 RESOLUTION_ERROR (403 en /v2/debts/orders)."}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["debts"],"description":"Lote de hasta 50 deudas a cancelar en un solo request. En el nivel superior solo se acepta `debts` (y `companyCode`): cualquier otro campo devuelve 400. Cada item solo lleva `id`. Si un item es inválido no se cancela ninguna deuda, y cada entrada de `details[]` trae `index`, `field` e `issue`.","properties":{"debts":{"type":"array","minItems":1,"maxItems":50,"items":{"type":"object","required":["id"],"properties":{"id":{"type":"string","example":"debt_COLE-OCT-00042","description":"debtId (`debt_...`) o externalRequestId sin prefijo, igual que en POST /debts/{id}/cancel. Sin espacios al principio ni al final, y sin repetir dentro del lote: `debt_A` y `A` son la misma deuda.","isRequired":true,"uniqueKey":"debts.items.[INDEX].id","typeLabel":"string"}},"uniqueKey":"debts.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"debts","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"debts":[{"id":"debt_COLE-OCT-00042"}]}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"45642905-fbec-4217-90c8-4f4aa03a6237":{"description":"Todas las deudas quedaron canceladas. `data` las trae en el orden enviado y no viene `errors`.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","description":"Deudas canceladas, en el orden en que fueron enviadas, incluidas las que ya estaban canceladas. `paymentUrl` viene en null: una deuda cancelada ya no se paga.","items":{"type":"object","required":["autopay","debtId","externalRequestId","status","amount","amountPaid","currency","dueDate","allowOverduePayment","allowPartialPayments","createdAt"],"properties":{"debtId":{"type":"string","pattern":"^debt_[a-zA-Z0-9_-]+$","example":"debt_COLE-OCT-00042","description":"ID público de la deuda: `debt_` + externalRequestId (ej. `debt_COLE-OCT-00042`). En la deuda de una liga de pago es `debt_pl-debt-` + externalPaymentLinkId.","isRequired":true,"uniqueKey":"data.items.[INDEX].debtId","typeLabel":"string"},"externalRequestId":{"type":"string","description":"Llave única permanente de la deuda (sin TTL). Igual al header `Idempotency-Key` si se envió, o generada por el backend (UUID). Es única por organización: crear con un `externalRequestId` ya usado no crea una segunda deuda. Para ver la deuda guardada, consulta GET /debts/{id}.\n","isRequired":true,"uniqueKey":"data.items.[INDEX].externalRequestId","typeLabel":"string"},"status":{"type":"string","enum":["PENDING","PARTIALLY_PAID","PAID","OVERDUE","CANCELLED"],"isRequired":true,"uniqueKey":"data.items.[INDEX].status","typeLabel":"enum\u003cstring>"},"amount":{"type":"number","description":"Monto total en pesos (hasta 2 decimales)","isRequired":true,"uniqueKey":"data.items.[INDEX].amount","typeLabel":"number"},"amountPaid":{"type":"number","description":"Monto pagado acumulado en pesos (hasta 2 decimales). En una deuda OPEN es la suma de los pagos recibidos.","isRequired":true,"uniqueKey":"data.items.[INDEX].amountPaid","typeLabel":"number"},"currency":{"type":"string","enum":["MXN","ARS","PEN","COP","CLP","USD"],"default":"MXN","description":"Código de moneda ISO 4217. Whitelist de monedas aceptadas por la API. Default MXN. Si se envía un valor fuera de este whitelist, la API devuelve 400 INVALID_REQUEST.\n","isRequired":true,"uniqueKey":"data.items.[INDEX].currency","typeLabel":"enum\u003cstring>"},"dueDate":{"type":"string","format":"date","description":"Fecha de vencimiento (YYYY-MM-DD)","isRequired":true,"uniqueKey":"data.items.[INDEX].dueDate","typeLabel":"string\u003cdate>"},"allowOverduePayment":{"type":"boolean","isRequired":true,"uniqueKey":"data.items.[INDEX].allowOverduePayment","typeLabel":"boolean"},"allowPartialPayments":{"type":"boolean","isRequired":true,"uniqueKey":"data.items.[INDEX].allowPartialPayments","typeLabel":"boolean"},"createdAt":{"type":"string","format":"date-time","description":"Timestamp de creación (ISO 8601 en UTC con milisegundos y Z, ej. 2026-09-17T10:00:00.000Z)","isRequired":true,"uniqueKey":"data.items.[INDEX].createdAt","typeLabel":"string\u003cdate-time>"},"autopay":{"type":"boolean","description":"Flag propio de la deuda. No indica que exista una adhesion vigente: la adhesion se gestiona aparte, por producto.","isRequired":true,"uniqueKey":"data.items.[INDEX].autopay","typeLabel":"boolean"},"amountType":{"type":"string","enum":["CLOSED","OPEN"],"description":"CLOSED: el monto exacto es el que se cobra. OPEN: el deudor elige cuánto paga dentro de un rango.","uniqueKey":"data.items.[INDEX].amountType","typeLabel":"enum\u003cstring>"},"description":{"type":"string","description":"Descripción. Se devuelve en la creación y en las lecturas (GET /debts/{id}, GET /debts) cuando la deuda tiene una; si no, el campo no viene (ausente, no null).","uniqueKey":"data.items.[INDEX].description","typeLabel":"string"},"paymentMethods":{"type":"array","items":{"type":"string","enum":["CASH","CARD","TRANSFER","WALLET","BANK_TRANSFER"],"uniqueKey":"data.items.[INDEX].paymentMethods.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Medios de pago habilitados para esta deuda","uniqueKey":"data.items.[INDEX].paymentMethods","typeLabel":"enum\u003cstring>[]"},"paymentUrl":{"oneOf":[{"type":"string","format":"uri","description":"URL pública del portal de pago. Es una URL opaca: no la parsees ni construyas a mano.\nPuede llevar ?externalRequestId=\u003cexternalRequestId> para abrir directo esta deuda.\nEj: `https://app.tapipay.la/s/acme-corp/portal/aB3dE5fG7h/debts/payment-methods?externalRequestId=COLE-OCT-00042`.\nPuede ser null si falla la integración con el portal.","uniqueKey":"data.items.[INDEX].paymentUrl.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","format":"uri","description":"URL pública del portal de pago. Es una URL opaca: no la parsees ni construyas a mano.\nPuede llevar ?externalRequestId=\u003cexternalRequestId> para abrir directo esta deuda.\nEj: `https://app.tapipay.la/s/acme-corp/portal/aB3dE5fG7h/debts/payment-methods?externalRequestId=COLE-OCT-00042`.\nPuede ser null si falla la integración con el portal.","uniqueKey":"data.items.[INDEX].paymentUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.items.[INDEX].paymentUrl","typeLabel":"string\u003curi> | null"},"contact":{"type":"object","required":["contactId","externalClientId","createdInline"],"properties":{"contactId":{"oneOf":[{"type":"string","pattern":"^con_[a-zA-Z0-9]+$","description":"ID interno del contacto (prefijo con_, también cuando el contacto se crea inline). Puede venir en null si el contacto recién creado todavía no se pudo leer; consúltalo después con GET /contacts.","isRequired":true,"uniqueKey":"data.items.[INDEX].contact.contactId.oneOf.0","typeLabel":"string"},{"type":"null","pattern":"^con_[a-zA-Z0-9]+$","description":"ID interno del contacto (prefijo con_, también cuando el contacto se crea inline). Puede venir en null si el contacto recién creado todavía no se pudo leer; consúltalo después con GET /contacts.","isRequired":true,"uniqueKey":"data.items.[INDEX].contact.contactId.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].contact.contactId","typeLabel":"string | null"},"externalClientId":{"type":"string","description":"Llave natural del contacto","isRequired":true,"uniqueKey":"data.items.[INDEX].contact.externalClientId","typeLabel":"string"},"createdInline":{"type":"boolean","description":"Indica si el contacto fue creado inline en esta operación. NOTA: Este es un embedded thin contact (no incluye name/email/phones/active/updatedAt del contacto completo). Para obtener datos completos del contacto, consultá GET /contacts/{id}.\n","isRequired":true,"uniqueKey":"data.items.[INDEX].contact.createdInline","typeLabel":"boolean"}},"description":"Datos del contacto resuelto o creado inline","uniqueKey":"data.items.[INDEX].contact","typeLabel":"object"},"product":{"type":"object","required":["productId","name","active","createdInline"],"properties":{"productId":{"type":"string","pattern":"^prd_\\d+$","description":"ID público del producto, con prefijo `prd_` (ej. `prd_12985`).","isRequired":true,"uniqueKey":"data.items.[INDEX].product.productId","typeLabel":"string"},"name":{"type":"string","description":"Nombre del producto","isRequired":true,"uniqueKey":"data.items.[INDEX].product.name","typeLabel":"string"},"active":{"type":"boolean","description":"Estado del producto","isRequired":true,"uniqueKey":"data.items.[INDEX].product.active","typeLabel":"boolean"},"createdInline":{"type":"boolean","description":"Indica si el producto fue creado inline en esta operación (solo posible via productName en suscripciones y ligas de pago). En deudas es siempre false: el producto debe existir de antemano. Se conserva en las lecturas.","isRequired":true,"uniqueKey":"data.items.[INDEX].product.createdInline","typeLabel":"boolean"}},"description":"Datos del producto si se asoció","uniqueKey":"data.items.[INDEX].product","typeLabel":"object"}},"uniqueKey":"data.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data","typeLabel":"object[]"},"errors":{"type":"array","description":"Deudas que no se cancelaron o cuya cancelación no se pudo confirmar. Solo viene si hay alguna.","items":{"type":"object","properties":{"index":{"type":"integer","description":"Posición del item en el array `debts` enviado.","uniqueKey":"errors.items.[INDEX].index","typeLabel":"integer"},"id":{"type":"string","description":"El `id` tal como lo enviaste.","uniqueKey":"errors.items.[INDEX].id","typeLabel":"string"},"code":{"type":"string","description":"RESOURCE_NOT_FOUND si la deuda no existe. BUSINESS_RULE_VIOLATION si no se puede cancelar en su estado actual, también si se pagó o entró en débito justo antes de la cancelación. RESOURCE_CONFLICT si se pidió la cancelación pero la deuda sigue activa: el reintento la cancela. RATE_LIMITED si no se pudo consultar la deuda: no se pidió su cancelación. INTERNAL_ERROR si falló de nuestro lado: la cancelación no se llegó a pedir o no se pudo confirmar, y `message` dice cuál.","uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"},"requestId":{"type":"string","uniqueKey":"requestId","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"data":[{"debtId":"debt_COLE-OCT-00042","externalRequestId":"\u003cstring>","status":"PENDING","amount":123,"amountPaid":123,"currency":"MXN","dueDate":"2023-12-25","allowOverduePayment":true,"allowPartialPayments":true,"createdAt":"2023-11-07T05:31:56Z","autopay":true,"amountType":"CLOSED","description":"\u003cstring>","paymentMethods":["CASH"],"paymentUrl":"\u003cstring>","contact":{"contactId":"\u003cstring>","externalClientId":"\u003cstring>","createdInline":true},"product":{"productId":"\u003cstring>","name":"\u003cstring>","active":true,"createdInline":true}}],"errors":[{"index":123,"id":"\u003cstring>","code":"\u003cstring>","message":"\u003cstring>"}],"requestId":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"941afee3-b81d-441a-9ce1-677f7da7fca5":{"description":"Algunas deudas se cancelaron y otras no. `data` trae las canceladas y `errors` el resto.","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","description":"Deudas canceladas, en el orden en que fueron enviadas, incluidas las que ya estaban canceladas. `paymentUrl` viene en null: una deuda cancelada ya no se paga.","items":{"type":"object","required":["autopay","debtId","externalRequestId","status","amount","amountPaid","currency","dueDate","allowOverduePayment","allowPartialPayments","createdAt"],"properties":{"debtId":{"type":"string","pattern":"^debt_[a-zA-Z0-9_-]+$","example":"debt_COLE-OCT-00042","description":"ID público de la deuda: `debt_` + externalRequestId (ej. `debt_COLE-OCT-00042`). En la deuda de una liga de pago es `debt_pl-debt-` + externalPaymentLinkId.","isRequired":true,"uniqueKey":"data.items.[INDEX].debtId","typeLabel":"string"},"externalRequestId":{"type":"string","description":"Llave única permanente de la deuda (sin TTL). Igual al header `Idempotency-Key` si se envió, o generada por el backend (UUID). Es única por organización: crear con un `externalRequestId` ya usado no crea una segunda deuda. Para ver la deuda guardada, consulta GET /debts/{id}.\n","isRequired":true,"uniqueKey":"data.items.[INDEX].externalRequestId","typeLabel":"string"},"status":{"type":"string","enum":["PENDING","PARTIALLY_PAID","PAID","OVERDUE","CANCELLED"],"isRequired":true,"uniqueKey":"data.items.[INDEX].status","typeLabel":"enum\u003cstring>"},"amount":{"type":"number","description":"Monto total en pesos (hasta 2 decimales)","isRequired":true,"uniqueKey":"data.items.[INDEX].amount","typeLabel":"number"},"amountPaid":{"type":"number","description":"Monto pagado acumulado en pesos (hasta 2 decimales). En una deuda OPEN es la suma de los pagos recibidos.","isRequired":true,"uniqueKey":"data.items.[INDEX].amountPaid","typeLabel":"number"},"currency":{"type":"string","enum":["MXN","ARS","PEN","COP","CLP","USD"],"default":"MXN","description":"Código de moneda ISO 4217. Whitelist de monedas aceptadas por la API. Default MXN. Si se envía un valor fuera de este whitelist, la API devuelve 400 INVALID_REQUEST.\n","isRequired":true,"uniqueKey":"data.items.[INDEX].currency","typeLabel":"enum\u003cstring>"},"dueDate":{"type":"string","format":"date","description":"Fecha de vencimiento (YYYY-MM-DD)","isRequired":true,"uniqueKey":"data.items.[INDEX].dueDate","typeLabel":"string\u003cdate>"},"allowOverduePayment":{"type":"boolean","isRequired":true,"uniqueKey":"data.items.[INDEX].allowOverduePayment","typeLabel":"boolean"},"allowPartialPayments":{"type":"boolean","isRequired":true,"uniqueKey":"data.items.[INDEX].allowPartialPayments","typeLabel":"boolean"},"createdAt":{"type":"string","format":"date-time","description":"Timestamp de creación (ISO 8601 en UTC con milisegundos y Z, ej. 2026-09-17T10:00:00.000Z)","isRequired":true,"uniqueKey":"data.items.[INDEX].createdAt","typeLabel":"string\u003cdate-time>"},"autopay":{"type":"boolean","description":"Flag propio de la deuda. No indica que exista una adhesion vigente: la adhesion se gestiona aparte, por producto.","isRequired":true,"uniqueKey":"data.items.[INDEX].autopay","typeLabel":"boolean"},"amountType":{"type":"string","enum":["CLOSED","OPEN"],"description":"CLOSED: el monto exacto es el que se cobra. OPEN: el deudor elige cuánto paga dentro de un rango.","uniqueKey":"data.items.[INDEX].amountType","typeLabel":"enum\u003cstring>"},"description":{"type":"string","description":"Descripción. Se devuelve en la creación y en las lecturas (GET /debts/{id}, GET /debts) cuando la deuda tiene una; si no, el campo no viene (ausente, no null).","uniqueKey":"data.items.[INDEX].description","typeLabel":"string"},"paymentMethods":{"type":"array","items":{"type":"string","enum":["CASH","CARD","TRANSFER","WALLET","BANK_TRANSFER"],"uniqueKey":"data.items.[INDEX].paymentMethods.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Medios de pago habilitados para esta deuda","uniqueKey":"data.items.[INDEX].paymentMethods","typeLabel":"enum\u003cstring>[]"},"paymentUrl":{"oneOf":[{"type":"string","format":"uri","description":"URL pública del portal de pago. Es una URL opaca: no la parsees ni construyas a mano.\nPuede llevar ?externalRequestId=\u003cexternalRequestId> para abrir directo esta deuda.\nEj: `https://app.tapipay.la/s/acme-corp/portal/aB3dE5fG7h/debts/payment-methods?externalRequestId=COLE-OCT-00042`.\nPuede ser null si falla la integración con el portal.","uniqueKey":"data.items.[INDEX].paymentUrl.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","format":"uri","description":"URL pública del portal de pago. Es una URL opaca: no la parsees ni construyas a mano.\nPuede llevar ?externalRequestId=\u003cexternalRequestId> para abrir directo esta deuda.\nEj: `https://app.tapipay.la/s/acme-corp/portal/aB3dE5fG7h/debts/payment-methods?externalRequestId=COLE-OCT-00042`.\nPuede ser null si falla la integración con el portal.","uniqueKey":"data.items.[INDEX].paymentUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"data.items.[INDEX].paymentUrl","typeLabel":"string\u003curi> | null"},"contact":{"type":"object","required":["contactId","externalClientId","createdInline"],"properties":{"contactId":{"oneOf":[{"type":"string","pattern":"^con_[a-zA-Z0-9]+$","description":"ID interno del contacto (prefijo con_, también cuando el contacto se crea inline). Puede venir en null si el contacto recién creado todavía no se pudo leer; consúltalo después con GET /contacts.","isRequired":true,"uniqueKey":"data.items.[INDEX].contact.contactId.oneOf.0","typeLabel":"string"},{"type":"null","pattern":"^con_[a-zA-Z0-9]+$","description":"ID interno del contacto (prefijo con_, también cuando el contacto se crea inline). Puede venir en null si el contacto recién creado todavía no se pudo leer; consúltalo después con GET /contacts.","isRequired":true,"uniqueKey":"data.items.[INDEX].contact.contactId.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"data.items.[INDEX].contact.contactId","typeLabel":"string | null"},"externalClientId":{"type":"string","description":"Llave natural del contacto","isRequired":true,"uniqueKey":"data.items.[INDEX].contact.externalClientId","typeLabel":"string"},"createdInline":{"type":"boolean","description":"Indica si el contacto fue creado inline en esta operación. NOTA: Este es un embedded thin contact (no incluye name/email/phones/active/updatedAt del contacto completo). Para obtener datos completos del contacto, consultá GET /contacts/{id}.\n","isRequired":true,"uniqueKey":"data.items.[INDEX].contact.createdInline","typeLabel":"boolean"}},"description":"Datos del contacto resuelto o creado inline","uniqueKey":"data.items.[INDEX].contact","typeLabel":"object"},"product":{"type":"object","required":["productId","name","active","createdInline"],"properties":{"productId":{"type":"string","pattern":"^prd_\\d+$","description":"ID público del producto, con prefijo `prd_` (ej. `prd_12985`).","isRequired":true,"uniqueKey":"data.items.[INDEX].product.productId","typeLabel":"string"},"name":{"type":"string","description":"Nombre del producto","isRequired":true,"uniqueKey":"data.items.[INDEX].product.name","typeLabel":"string"},"active":{"type":"boolean","description":"Estado del producto","isRequired":true,"uniqueKey":"data.items.[INDEX].product.active","typeLabel":"boolean"},"createdInline":{"type":"boolean","description":"Indica si el producto fue creado inline en esta operación (solo posible via productName en suscripciones y ligas de pago). En deudas es siempre false: el producto debe existir de antemano. Se conserva en las lecturas.","isRequired":true,"uniqueKey":"data.items.[INDEX].product.createdInline","typeLabel":"boolean"}},"description":"Datos del producto si se asoció","uniqueKey":"data.items.[INDEX].product","typeLabel":"object"}},"uniqueKey":"data.items.[INDEX]","typeLabel":"object"},"uniqueKey":"data","typeLabel":"object[]"},"errors":{"type":"array","description":"Deudas que no se cancelaron o cuya cancelación no se pudo confirmar. Solo viene si hay alguna.","items":{"type":"object","properties":{"index":{"type":"integer","description":"Posición del item en el array `debts` enviado.","uniqueKey":"errors.items.[INDEX].index","typeLabel":"integer"},"id":{"type":"string","description":"El `id` tal como lo enviaste.","uniqueKey":"errors.items.[INDEX].id","typeLabel":"string"},"code":{"type":"string","description":"RESOURCE_NOT_FOUND si la deuda no existe. BUSINESS_RULE_VIOLATION si no se puede cancelar en su estado actual, también si se pagó o entró en débito justo antes de la cancelación. RESOURCE_CONFLICT si se pidió la cancelación pero la deuda sigue activa: el reintento la cancela. RATE_LIMITED si no se pudo consultar la deuda: no se pidió su cancelación. INTERNAL_ERROR si falló de nuestro lado: la cancelación no se llegó a pedir o no se pudo confirmar, y `message` dice cuál.","uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","uniqueKey":"errors.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"},"requestId":{"type":"string","uniqueKey":"requestId","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"data":[{"debtId":"debt_COLE-OCT-00042","externalRequestId":"\u003cstring>","status":"PENDING","amount":123,"amountPaid":123,"currency":"MXN","dueDate":"2023-12-25","allowOverduePayment":true,"allowPartialPayments":true,"createdAt":"2023-11-07T05:31:56Z","autopay":true,"amountType":"CLOSED","description":"\u003cstring>","paymentMethods":["CASH"],"paymentUrl":"\u003cstring>","contact":{"contactId":"\u003cstring>","externalClientId":"\u003cstring>","createdInline":true},"product":{"productId":"\u003cstring>","name":"\u003cstring>","active":true,"createdInline":true}}],"errors":[{"index":123,"id":"\u003cstring>","code":"\u003cstring>","message":"\u003cstring>"}],"requestId":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"5297298c-8bc1-4d46-90b4-8c0f2b4b632f":{"description":"Validación fallida, y no se canceló ninguna deuda: falta `debts` o no es un array con items, trae más de 50, hay otro campo en el nivel superior, o un item es inválido (sin `id`, `id` que no es string o tiene espacios al principio o al final, solo el prefijo `debt_`, repetido o con otros campos). Cada `details[]` trae `index`, `field` e `issue`. También BAD_REQUEST si tu cliente tiene varias companies y no envías companyCode.","content":{"application/json":{"schema":{"type":"object","required":["error","requestId"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["INVALID_REQUEST","BAD_REQUEST","RESOURCE_NOT_FOUND","RESOURCE_CONFLICT","RESOLUTION_ERROR","BUSINESS_RULE_VIOLATION","RATE_LIMITED","INTERNAL_ERROR","PARTIAL_UPDATE","NO_ACTIVE_PAYMENT_METHOD","COMPANY_WITHOUT_PRODUCT_MODALITY","CONTACT_NOT_FOUND","COMPANY_WITHOUT_DEBT_ID_MODALITY","PAYMENT_METHODS_NOT_ENABLED","ORDER_NOT_CREATED","PAYMENT_METHOD_NOT_AVAILABLE","PAYMENT_METHOD_CASCADE_FAILED","PAYMENT_METHOD_NOT_DELETED"],"description":"Código de error estándar. BAD_REQUEST se usa cuando tu cliente tiene varias companies y no se envía `companyCode`. NO_ACTIVE_PAYMENT_METHOD y COMPANY_WITHOUT_PRODUCT_MODALITY aparecen en POST /adhesions (el primero también en POST /v2/debts/orders). CONTACT_NOT_FOUND, COMPANY_WITHOUT_DEBT_ID_MODALITY, PAYMENT_METHODS_NOT_ENABLED, ORDER_NOT_CREATED y PAYMENT_METHOD_NOT_AVAILABLE solo aparecen en POST /v2/debts/orders. PAYMENT_METHOD_CASCADE_FAILED y PAYMENT_METHOD_NOT_DELETED solo aparecen en DELETE /payment-methods/{externalPaymentMethodId}. PARTIAL_UPDATE solo aparece en el 207 de PATCH /subscriptions/{id}: la suscripción se actualizó, pero alguna de sus deudas no. Los 401 y 403 los emite el API Gateway y no usan este envelope (ver GatewayError). Excepción: en /v2/debts/orders, RESOLUTION_ERROR responde 403 con este envelope.","isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Mensaje legible del error. Es informativo: no lo parsees, usa `code` y `details[].field`.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"details":{"type":"array","description":"Array de detalles adicionales (validaciones por campo, etc.). Un JSON malformado devuelve `[{ \"field\": \"body\", \"issue\": \"Invalid JSON syntax\" }]`.","items":{"type":"object","properties":{"field":{"type":"string","description":"Campo que falló la validación","uniqueKey":"error.details.items.[INDEX].field","typeLabel":"string"},"issue":{"type":"string","description":"Descripción del problema","uniqueKey":"error.details.items.[INDEX].issue","typeLabel":"string"},"index":{"type":"integer","description":"Solo en los lotes de POST /v2/debts y POST /debts/cancel. Posición del item en `debts`.","uniqueKey":"error.details.items.[INDEX].index","typeLabel":"integer"},"externalRequestId":{"type":"string","description":"Solo en el modo lote de POST /v2/debts. externalRequestId del item.","uniqueKey":"error.details.items.[INDEX].externalRequestId","typeLabel":"string"},"productId":{"oneOf":[{"type":"string","description":"Solo en DELETE /payment-methods/{externalPaymentMethodId}. Producto de la adhesión.","uniqueKey":"error.details.items.[INDEX].productId.oneOf.0","typeLabel":"string"},{"type":"null","description":"Solo en DELETE /payment-methods/{externalPaymentMethodId}. Producto de la adhesión.","uniqueKey":"error.details.items.[INDEX].productId.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.details.items.[INDEX].productId","typeLabel":"string | null"},"outcome":{"type":"string","enum":["DEACTIVATED","FAILED"],"description":"Solo en PAYMENT_METHOD_CASCADE_FAILED. Si la adhesión se dio de baja o no.","uniqueKey":"error.details.items.[INDEX].outcome","typeLabel":"enum\u003cstring>"}},"uniqueKey":"error.details.items.[INDEX]","typeLabel":"object"},"uniqueKey":"error.details","typeLabel":"object[]"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"},"requestId":{"type":"string","pattern":"^req_[a-zA-Z0-9]+$","description":"ID único del request para trazabilidad","isRequired":true,"uniqueKey":"requestId","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"INVALID_REQUEST","message":"\u003cstring>","details":[{"field":"\u003cstring>","issue":"\u003cstring>","index":123,"externalRequestId":"\u003cstring>","productId":"\u003cstring>","outcome":"DEACTIVATED"}]},"requestId":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"c36e8f21-3c37-4791-98e1-43ade649118b":{"description":"No autenticado. Lo emite el API Gateway cuando falta o es inválido el token en `x-authorization-token`. Body `{\"message\": \"Unauthorized\"}`, sin envelope `error` ni `requestId`.","content":{"application/json":{"schema":{"type":"object","description":"Respuesta de error emitida por el API Gateway, antes de llegar al servicio. No lleva el envelope `error` ni `requestId`. Casos: token faltante o inválido en `x-authorization-token` devuelve `401 {\"message\": \"Unauthorized\"}`; `x-api-key` faltante o inválida devuelve `403 {\"message\": \"Forbidden\"}`; token válido sin permiso sobre el recurso devuelve `403 {\"Message\": \"User is not authorized to access this resource with an explicit deny\"}`. Ojo al tipar: en este último caso el campo viene con mayúscula (`Message`), no `message`.","properties":{"message":{"type":"string","example":"Unauthorized","uniqueKey":"message","typeLabel":"string"},"Message":{"type":"string","description":"Solo en el 403 de explicit deny (con mayúscula).","example":"User is not authorized to access this resource with an explicit deny","uniqueKey":"Message","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"example":{"message":"Unauthorized"},"examples":{"Example":{"title":"Example","value":{"message":"Unauthorized"}}},"exampleType":"examples"}},"exampleType":"examples"},"859f54d8-06e2-43ef-b67d-d3f3d97f1487":{"description":"Prohibido. Lo emite el API Gateway, sin envelope `error` ni `requestId`. Si falta o es inválida la `x-api-key`, el body es `{\"message\": \"Forbidden\"}`. Si el token es válido pero no tiene permiso sobre el recurso, el body es `{\"Message\": \"User is not authorized to access this resource with an explicit deny\"}` (campo con mayúscula).","content":{"application/json":{"schema":{"type":"object","description":"Respuesta de error emitida por el API Gateway, antes de llegar al servicio. No lleva el envelope `error` ni `requestId`. Casos: token faltante o inválido en `x-authorization-token` devuelve `401 {\"message\": \"Unauthorized\"}`; `x-api-key` faltante o inválida devuelve `403 {\"message\": \"Forbidden\"}`; token válido sin permiso sobre el recurso devuelve `403 {\"Message\": \"User is not authorized to access this resource with an explicit deny\"}`. Ojo al tipar: en este último caso el campo viene con mayúscula (`Message`), no `message`.","properties":{"message":{"type":"string","example":"Unauthorized","uniqueKey":"message","typeLabel":"string"},"Message":{"type":"string","description":"Solo en el 403 de explicit deny (con mayúscula).","example":"User is not authorized to access this resource with an explicit deny","uniqueKey":"Message","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"apiKey":{"title":"apiKey","value":{"message":"Forbidden"}},"explicitDeny":{"title":"explicitDeny","value":{"Message":"User is not authorized to access this resource with an explicit deny"}}},"exampleType":"examples"}},"exampleType":"examples"},"a581ea8d-5ff7-4b92-942c-534a0e0554fd":{"description":"No se canceló ninguna deuda y ningún item trae INTERNAL_ERROR (por ejemplo, no existen, no se pueden cancelar en su estado o no se pudieron consultar): el body es un DebtCancelBatchResult con `data` vacío y todos los items en `errors`. Un companyCode que no es de tu cliente responde 422 RESOLUTION_ERROR con el envelope de error.","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"data":{"type":"array","description":"Deudas canceladas, en el orden en que fueron enviadas, incluidas las que ya estaban canceladas. `paymentUrl` viene en null: una deuda cancelada ya no se paga.","items":{"type":"object","required":["autopay","debtId","externalRequestId","status","amount","amountPaid","currency","dueDate","allowOverduePayment","allowPartialPayments","createdAt"],"properties":{"debtId":{"type":"string","pattern":"^debt_[a-zA-Z0-9_-]+$","example":"debt_COLE-OCT-00042","description":"ID público de la deuda: `debt_` + externalRequestId (ej. `debt_COLE-OCT-00042`). En la deuda de una liga de pago es `debt_pl-debt-` + externalPaymentLinkId.","isRequired":true,"uniqueKey":"oneOf.0.data.items.[INDEX].debtId","typeLabel":"string"},"externalRequestId":{"type":"string","description":"Llave única permanente de la deuda (sin TTL). Igual al header `Idempotency-Key` si se envió, o generada por el backend (UUID). Es única por organización: crear con un `externalRequestId` ya usado no crea una segunda deuda. Para ver la deuda guardada, consulta GET /debts/{id}.\n","isRequired":true,"uniqueKey":"oneOf.0.data.items.[INDEX].externalRequestId","typeLabel":"string"},"status":{"type":"string","enum":["PENDING","PARTIALLY_PAID","PAID","OVERDUE","CANCELLED"],"isRequired":true,"uniqueKey":"oneOf.0.data.items.[INDEX].status","typeLabel":"enum\u003cstring>"},"amount":{"type":"number","description":"Monto total en pesos (hasta 2 decimales)","isRequired":true,"uniqueKey":"oneOf.0.data.items.[INDEX].amount","typeLabel":"number"},"amountPaid":{"type":"number","description":"Monto pagado acumulado en pesos (hasta 2 decimales). En una deuda OPEN es la suma de los pagos recibidos.","isRequired":true,"uniqueKey":"oneOf.0.data.items.[INDEX].amountPaid","typeLabel":"number"},"currency":{"type":"string","enum":["MXN","ARS","PEN","COP","CLP","USD"],"default":"MXN","description":"Código de moneda ISO 4217. Whitelist de monedas aceptadas por la API. Default MXN. Si se envía un valor fuera de este whitelist, la API devuelve 400 INVALID_REQUEST.\n","isRequired":true,"uniqueKey":"oneOf.0.data.items.[INDEX].currency","typeLabel":"enum\u003cstring>"},"dueDate":{"type":"string","format":"date","description":"Fecha de vencimiento (YYYY-MM-DD)","isRequired":true,"uniqueKey":"oneOf.0.data.items.[INDEX].dueDate","typeLabel":"string\u003cdate>"},"allowOverduePayment":{"type":"boolean","isRequired":true,"uniqueKey":"oneOf.0.data.items.[INDEX].allowOverduePayment","typeLabel":"boolean"},"allowPartialPayments":{"type":"boolean","isRequired":true,"uniqueKey":"oneOf.0.data.items.[INDEX].allowPartialPayments","typeLabel":"boolean"},"createdAt":{"type":"string","format":"date-time","description":"Timestamp de creación (ISO 8601 en UTC con milisegundos y Z, ej. 2026-09-17T10:00:00.000Z)","isRequired":true,"uniqueKey":"oneOf.0.data.items.[INDEX].createdAt","typeLabel":"string\u003cdate-time>"},"autopay":{"type":"boolean","description":"Flag propio de la deuda. No indica que exista una adhesion vigente: la adhesion se gestiona aparte, por producto.","isRequired":true,"uniqueKey":"oneOf.0.data.items.[INDEX].autopay","typeLabel":"boolean"},"amountType":{"type":"string","enum":["CLOSED","OPEN"],"description":"CLOSED: el monto exacto es el que se cobra. OPEN: el deudor elige cuánto paga dentro de un rango.","uniqueKey":"oneOf.0.data.items.[INDEX].amountType","typeLabel":"enum\u003cstring>"},"description":{"type":"string","description":"Descripción. Se devuelve en la creación y en las lecturas (GET /debts/{id}, GET /debts) cuando la deuda tiene una; si no, el campo no viene (ausente, no null).","uniqueKey":"oneOf.0.data.items.[INDEX].description","typeLabel":"string"},"paymentMethods":{"type":"array","items":{"type":"string","enum":["CASH","CARD","TRANSFER","WALLET","BANK_TRANSFER"],"uniqueKey":"oneOf.0.data.items.[INDEX].paymentMethods.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Medios de pago habilitados para esta deuda","uniqueKey":"oneOf.0.data.items.[INDEX].paymentMethods","typeLabel":"enum\u003cstring>[]"},"paymentUrl":{"oneOf":[{"type":"string","format":"uri","description":"URL pública del portal de pago. Es una URL opaca: no la parsees ni construyas a mano.\nPuede llevar ?externalRequestId=\u003cexternalRequestId> para abrir directo esta deuda.\nEj: `https://app.tapipay.la/s/acme-corp/portal/aB3dE5fG7h/debts/payment-methods?externalRequestId=COLE-OCT-00042`.\nPuede ser null si falla la integración con el portal.","uniqueKey":"oneOf.0.data.items.[INDEX].paymentUrl.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","format":"uri","description":"URL pública del portal de pago. Es una URL opaca: no la parsees ni construyas a mano.\nPuede llevar ?externalRequestId=\u003cexternalRequestId> para abrir directo esta deuda.\nEj: `https://app.tapipay.la/s/acme-corp/portal/aB3dE5fG7h/debts/payment-methods?externalRequestId=COLE-OCT-00042`.\nPuede ser null si falla la integración con el portal.","uniqueKey":"oneOf.0.data.items.[INDEX].paymentUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.data.items.[INDEX].paymentUrl","typeLabel":"string\u003curi> | null"},"contact":{"type":"object","required":["contactId","externalClientId","createdInline"],"properties":{"contactId":{"oneOf":[{"type":"string","pattern":"^con_[a-zA-Z0-9]+$","description":"ID interno del contacto (prefijo con_, también cuando el contacto se crea inline). Puede venir en null si el contacto recién creado todavía no se pudo leer; consúltalo después con GET /contacts.","isRequired":true,"uniqueKey":"oneOf.0.data.items.[INDEX].contact.contactId.oneOf.0","typeLabel":"string"},{"type":"null","pattern":"^con_[a-zA-Z0-9]+$","description":"ID interno del contacto (prefijo con_, también cuando el contacto se crea inline). Puede venir en null si el contacto recién creado todavía no se pudo leer; consúltalo después con GET /contacts.","isRequired":true,"uniqueKey":"oneOf.0.data.items.[INDEX].contact.contactId.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.0.data.items.[INDEX].contact.contactId","typeLabel":"string | null"},"externalClientId":{"type":"string","description":"Llave natural del contacto","isRequired":true,"uniqueKey":"oneOf.0.data.items.[INDEX].contact.externalClientId","typeLabel":"string"},"createdInline":{"type":"boolean","description":"Indica si el contacto fue creado inline en esta operación. NOTA: Este es un embedded thin contact (no incluye name/email/phones/active/updatedAt del contacto completo). Para obtener datos completos del contacto, consultá GET /contacts/{id}.\n","isRequired":true,"uniqueKey":"oneOf.0.data.items.[INDEX].contact.createdInline","typeLabel":"boolean"}},"description":"Datos del contacto resuelto o creado inline","uniqueKey":"oneOf.0.data.items.[INDEX].contact","typeLabel":"object"},"product":{"type":"object","required":["productId","name","active","createdInline"],"properties":{"productId":{"type":"string","pattern":"^prd_\\d+$","description":"ID público del producto, con prefijo `prd_` (ej. `prd_12985`).","isRequired":true,"uniqueKey":"oneOf.0.data.items.[INDEX].product.productId","typeLabel":"string"},"name":{"type":"string","description":"Nombre del producto","isRequired":true,"uniqueKey":"oneOf.0.data.items.[INDEX].product.name","typeLabel":"string"},"active":{"type":"boolean","description":"Estado del producto","isRequired":true,"uniqueKey":"oneOf.0.data.items.[INDEX].product.active","typeLabel":"boolean"},"createdInline":{"type":"boolean","description":"Indica si el producto fue creado inline en esta operación (solo posible via productName en suscripciones y ligas de pago). En deudas es siempre false: el producto debe existir de antemano. Se conserva en las lecturas.","isRequired":true,"uniqueKey":"oneOf.0.data.items.[INDEX].product.createdInline","typeLabel":"boolean"}},"description":"Datos del producto si se asoció","uniqueKey":"oneOf.0.data.items.[INDEX].product","typeLabel":"object"}},"uniqueKey":"oneOf.0.data.items.[INDEX]","typeLabel":"object"},"uniqueKey":"oneOf.0.data","typeLabel":"object[]"},"errors":{"type":"array","description":"Deudas que no se cancelaron o cuya cancelación no se pudo confirmar. Solo viene si hay alguna.","items":{"type":"object","properties":{"index":{"type":"integer","description":"Posición del item en el array `debts` enviado.","uniqueKey":"oneOf.0.errors.items.[INDEX].index","typeLabel":"integer"},"id":{"type":"string","description":"El `id` tal como lo enviaste.","uniqueKey":"oneOf.0.errors.items.[INDEX].id","typeLabel":"string"},"code":{"type":"string","description":"RESOURCE_NOT_FOUND si la deuda no existe. BUSINESS_RULE_VIOLATION si no se puede cancelar en su estado actual, también si se pagó o entró en débito justo antes de la cancelación. RESOURCE_CONFLICT si se pidió la cancelación pero la deuda sigue activa: el reintento la cancela. RATE_LIMITED si no se pudo consultar la deuda: no se pidió su cancelación. INTERNAL_ERROR si falló de nuestro lado: la cancelación no se llegó a pedir o no se pudo confirmar, y `message` dice cuál.","uniqueKey":"oneOf.0.errors.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","uniqueKey":"oneOf.0.errors.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"oneOf.0.errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"oneOf.0.errors","typeLabel":"object[]"},"requestId":{"type":"string","uniqueKey":"oneOf.0.requestId","typeLabel":"string"}},"uniqueKey":"oneOf.0","typeLabel":"object"},{"type":"object","required":["error","requestId"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["INVALID_REQUEST","BAD_REQUEST","RESOURCE_NOT_FOUND","RESOURCE_CONFLICT","RESOLUTION_ERROR","BUSINESS_RULE_VIOLATION","RATE_LIMITED","INTERNAL_ERROR","PARTIAL_UPDATE","NO_ACTIVE_PAYMENT_METHOD","COMPANY_WITHOUT_PRODUCT_MODALITY","CONTACT_NOT_FOUND","COMPANY_WITHOUT_DEBT_ID_MODALITY","PAYMENT_METHODS_NOT_ENABLED","ORDER_NOT_CREATED","PAYMENT_METHOD_NOT_AVAILABLE","PAYMENT_METHOD_CASCADE_FAILED","PAYMENT_METHOD_NOT_DELETED"],"description":"Código de error estándar. BAD_REQUEST se usa cuando tu cliente tiene varias companies y no se envía `companyCode`. NO_ACTIVE_PAYMENT_METHOD y COMPANY_WITHOUT_PRODUCT_MODALITY aparecen en POST /adhesions (el primero también en POST /v2/debts/orders). CONTACT_NOT_FOUND, COMPANY_WITHOUT_DEBT_ID_MODALITY, PAYMENT_METHODS_NOT_ENABLED, ORDER_NOT_CREATED y PAYMENT_METHOD_NOT_AVAILABLE solo aparecen en POST /v2/debts/orders. PAYMENT_METHOD_CASCADE_FAILED y PAYMENT_METHOD_NOT_DELETED solo aparecen en DELETE /payment-methods/{externalPaymentMethodId}. PARTIAL_UPDATE solo aparece en el 207 de PATCH /subscriptions/{id}: la suscripción se actualizó, pero alguna de sus deudas no. Los 401 y 403 los emite el API Gateway y no usan este envelope (ver GatewayError). Excepción: en /v2/debts/orders, RESOLUTION_ERROR responde 403 con este envelope.","isRequired":true,"uniqueKey":"oneOf.1.error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Mensaje legible del error. Es informativo: no lo parsees, usa `code` y `details[].field`.","isRequired":true,"uniqueKey":"oneOf.1.error.message","typeLabel":"string"},"details":{"type":"array","description":"Array de detalles adicionales (validaciones por campo, etc.). Un JSON malformado devuelve `[{ \"field\": \"body\", \"issue\": \"Invalid JSON syntax\" }]`.","items":{"type":"object","properties":{"field":{"type":"string","description":"Campo que falló la validación","uniqueKey":"oneOf.1.error.details.items.[INDEX].field","typeLabel":"string"},"issue":{"type":"string","description":"Descripción del problema","uniqueKey":"oneOf.1.error.details.items.[INDEX].issue","typeLabel":"string"},"index":{"type":"integer","description":"Solo en los lotes de POST /v2/debts y POST /debts/cancel. Posición del item en `debts`.","uniqueKey":"oneOf.1.error.details.items.[INDEX].index","typeLabel":"integer"},"externalRequestId":{"type":"string","description":"Solo en el modo lote de POST /v2/debts. externalRequestId del item.","uniqueKey":"oneOf.1.error.details.items.[INDEX].externalRequestId","typeLabel":"string"},"productId":{"oneOf":[{"type":"string","description":"Solo en DELETE /payment-methods/{externalPaymentMethodId}. Producto de la adhesión.","uniqueKey":"oneOf.1.error.details.items.[INDEX].productId.oneOf.0","typeLabel":"string"},{"type":"null","description":"Solo en DELETE /payment-methods/{externalPaymentMethodId}. Producto de la adhesión.","uniqueKey":"oneOf.1.error.details.items.[INDEX].productId.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.error.details.items.[INDEX].productId","typeLabel":"string | null"},"outcome":{"type":"string","enum":["DEACTIVATED","FAILED"],"description":"Solo en PAYMENT_METHOD_CASCADE_FAILED. Si la adhesión se dio de baja o no.","uniqueKey":"oneOf.1.error.details.items.[INDEX].outcome","typeLabel":"enum\u003cstring>"}},"uniqueKey":"oneOf.1.error.details.items.[INDEX]","typeLabel":"object"},"uniqueKey":"oneOf.1.error.details","typeLabel":"object[]"}},"isRequired":true,"uniqueKey":"oneOf.1.error","typeLabel":"object"},"requestId":{"type":"string","pattern":"^req_[a-zA-Z0-9]+$","description":"ID único del request para trazabilidad","isRequired":true,"uniqueKey":"oneOf.1.requestId","typeLabel":"string"}},"uniqueKey":"oneOf.1","typeLabel":"object"}],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"data":[{"debtId":"debt_COLE-OCT-00042","externalRequestId":"\u003cstring>","status":"PENDING","amount":123,"amountPaid":123,"currency":"MXN","dueDate":"2023-12-25","allowOverduePayment":true,"allowPartialPayments":true,"createdAt":"2023-11-07T05:31:56Z","autopay":true,"amountType":"CLOSED","description":"\u003cstring>","paymentMethods":["CASH"],"paymentUrl":"\u003cstring>","contact":{"contactId":"\u003cstring>","externalClientId":"\u003cstring>","createdInline":true},"product":{"productId":"\u003cstring>","name":"\u003cstring>","active":true,"createdInline":true}}],"errors":[{"index":123,"id":"\u003cstring>","code":"\u003cstring>","message":"\u003cstring>"}],"requestId":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"372cf3d9-2040-456d-b90a-a35f0df3c150":{"description":"Ninguna deuda se confirmó como cancelada y al menos un item trae INTERNAL_ERROR, una falla de nuestro lado: no significa que no se hayan cancelado. Reintenta el mismo lote; una deuda que ya quedó cancelada vuelve en `data`. El body es un DebtCancelBatchResult con los items en `errors`, o el envelope de error si la falla fue de todo el request.","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"data":{"type":"array","description":"Deudas canceladas, en el orden en que fueron enviadas, incluidas las que ya estaban canceladas. `paymentUrl` viene en null: una deuda cancelada ya no se paga.","items":{"type":"object","required":["autopay","debtId","externalRequestId","status","amount","amountPaid","currency","dueDate","allowOverduePayment","allowPartialPayments","createdAt"],"properties":{"debtId":{"type":"string","pattern":"^debt_[a-zA-Z0-9_-]+$","example":"debt_COLE-OCT-00042","description":"ID público de la deuda: `debt_` + externalRequestId (ej. `debt_COLE-OCT-00042`). En la deuda de una liga de pago es `debt_pl-debt-` + externalPaymentLinkId.","isRequired":true,"uniqueKey":"oneOf.0.data.items.[INDEX].debtId","typeLabel":"string"},"externalRequestId":{"type":"string","description":"Llave única permanente de la deuda (sin TTL). Igual al header `Idempotency-Key` si se envió, o generada por el backend (UUID). Es única por organización: crear con un `externalRequestId` ya usado no crea una segunda deuda. Para ver la deuda guardada, consulta GET /debts/{id}.\n","isRequired":true,"uniqueKey":"oneOf.0.data.items.[INDEX].externalRequestId","typeLabel":"string"},"status":{"type":"string","enum":["PENDING","PARTIALLY_PAID","PAID","OVERDUE","CANCELLED"],"isRequired":true,"uniqueKey":"oneOf.0.data.items.[INDEX].status","typeLabel":"enum\u003cstring>"},"amount":{"type":"number","description":"Monto total en pesos (hasta 2 decimales)","isRequired":true,"uniqueKey":"oneOf.0.data.items.[INDEX].amount","typeLabel":"number"},"amountPaid":{"type":"number","description":"Monto pagado acumulado en pesos (hasta 2 decimales). En una deuda OPEN es la suma de los pagos recibidos.","isRequired":true,"uniqueKey":"oneOf.0.data.items.[INDEX].amountPaid","typeLabel":"number"},"currency":{"type":"string","enum":["MXN","ARS","PEN","COP","CLP","USD"],"default":"MXN","description":"Código de moneda ISO 4217. Whitelist de monedas aceptadas por la API. Default MXN. Si se envía un valor fuera de este whitelist, la API devuelve 400 INVALID_REQUEST.\n","isRequired":true,"uniqueKey":"oneOf.0.data.items.[INDEX].currency","typeLabel":"enum\u003cstring>"},"dueDate":{"type":"string","format":"date","description":"Fecha de vencimiento (YYYY-MM-DD)","isRequired":true,"uniqueKey":"oneOf.0.data.items.[INDEX].dueDate","typeLabel":"string\u003cdate>"},"allowOverduePayment":{"type":"boolean","isRequired":true,"uniqueKey":"oneOf.0.data.items.[INDEX].allowOverduePayment","typeLabel":"boolean"},"allowPartialPayments":{"type":"boolean","isRequired":true,"uniqueKey":"oneOf.0.data.items.[INDEX].allowPartialPayments","typeLabel":"boolean"},"createdAt":{"type":"string","format":"date-time","description":"Timestamp de creación (ISO 8601 en UTC con milisegundos y Z, ej. 2026-09-17T10:00:00.000Z)","isRequired":true,"uniqueKey":"oneOf.0.data.items.[INDEX].createdAt","typeLabel":"string\u003cdate-time>"},"autopay":{"type":"boolean","description":"Flag propio de la deuda. No indica que exista una adhesion vigente: la adhesion se gestiona aparte, por producto.","isRequired":true,"uniqueKey":"oneOf.0.data.items.[INDEX].autopay","typeLabel":"boolean"},"amountType":{"type":"string","enum":["CLOSED","OPEN"],"description":"CLOSED: el monto exacto es el que se cobra. OPEN: el deudor elige cuánto paga dentro de un rango.","uniqueKey":"oneOf.0.data.items.[INDEX].amountType","typeLabel":"enum\u003cstring>"},"description":{"type":"string","description":"Descripción. Se devuelve en la creación y en las lecturas (GET /debts/{id}, GET /debts) cuando la deuda tiene una; si no, el campo no viene (ausente, no null).","uniqueKey":"oneOf.0.data.items.[INDEX].description","typeLabel":"string"},"paymentMethods":{"type":"array","items":{"type":"string","enum":["CASH","CARD","TRANSFER","WALLET","BANK_TRANSFER"],"uniqueKey":"oneOf.0.data.items.[INDEX].paymentMethods.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"Medios de pago habilitados para esta deuda","uniqueKey":"oneOf.0.data.items.[INDEX].paymentMethods","typeLabel":"enum\u003cstring>[]"},"paymentUrl":{"oneOf":[{"type":"string","format":"uri","description":"URL pública del portal de pago. Es una URL opaca: no la parsees ni construyas a mano.\nPuede llevar ?externalRequestId=\u003cexternalRequestId> para abrir directo esta deuda.\nEj: `https://app.tapipay.la/s/acme-corp/portal/aB3dE5fG7h/debts/payment-methods?externalRequestId=COLE-OCT-00042`.\nPuede ser null si falla la integración con el portal.","uniqueKey":"oneOf.0.data.items.[INDEX].paymentUrl.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","format":"uri","description":"URL pública del portal de pago. Es una URL opaca: no la parsees ni construyas a mano.\nPuede llevar ?externalRequestId=\u003cexternalRequestId> para abrir directo esta deuda.\nEj: `https://app.tapipay.la/s/acme-corp/portal/aB3dE5fG7h/debts/payment-methods?externalRequestId=COLE-OCT-00042`.\nPuede ser null si falla la integración con el portal.","uniqueKey":"oneOf.0.data.items.[INDEX].paymentUrl.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.data.items.[INDEX].paymentUrl","typeLabel":"string\u003curi> | null"},"contact":{"type":"object","required":["contactId","externalClientId","createdInline"],"properties":{"contactId":{"oneOf":[{"type":"string","pattern":"^con_[a-zA-Z0-9]+$","description":"ID interno del contacto (prefijo con_, también cuando el contacto se crea inline). Puede venir en null si el contacto recién creado todavía no se pudo leer; consúltalo después con GET /contacts.","isRequired":true,"uniqueKey":"oneOf.0.data.items.[INDEX].contact.contactId.oneOf.0","typeLabel":"string"},{"type":"null","pattern":"^con_[a-zA-Z0-9]+$","description":"ID interno del contacto (prefijo con_, también cuando el contacto se crea inline). Puede venir en null si el contacto recién creado todavía no se pudo leer; consúltalo después con GET /contacts.","isRequired":true,"uniqueKey":"oneOf.0.data.items.[INDEX].contact.contactId.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.0.data.items.[INDEX].contact.contactId","typeLabel":"string | null"},"externalClientId":{"type":"string","description":"Llave natural del contacto","isRequired":true,"uniqueKey":"oneOf.0.data.items.[INDEX].contact.externalClientId","typeLabel":"string"},"createdInline":{"type":"boolean","description":"Indica si el contacto fue creado inline en esta operación. NOTA: Este es un embedded thin contact (no incluye name/email/phones/active/updatedAt del contacto completo). Para obtener datos completos del contacto, consultá GET /contacts/{id}.\n","isRequired":true,"uniqueKey":"oneOf.0.data.items.[INDEX].contact.createdInline","typeLabel":"boolean"}},"description":"Datos del contacto resuelto o creado inline","uniqueKey":"oneOf.0.data.items.[INDEX].contact","typeLabel":"object"},"product":{"type":"object","required":["productId","name","active","createdInline"],"properties":{"productId":{"type":"string","pattern":"^prd_\\d+$","description":"ID público del producto, con prefijo `prd_` (ej. `prd_12985`).","isRequired":true,"uniqueKey":"oneOf.0.data.items.[INDEX].product.productId","typeLabel":"string"},"name":{"type":"string","description":"Nombre del producto","isRequired":true,"uniqueKey":"oneOf.0.data.items.[INDEX].product.name","typeLabel":"string"},"active":{"type":"boolean","description":"Estado del producto","isRequired":true,"uniqueKey":"oneOf.0.data.items.[INDEX].product.active","typeLabel":"boolean"},"createdInline":{"type":"boolean","description":"Indica si el producto fue creado inline en esta operación (solo posible via productName en suscripciones y ligas de pago). En deudas es siempre false: el producto debe existir de antemano. Se conserva en las lecturas.","isRequired":true,"uniqueKey":"oneOf.0.data.items.[INDEX].product.createdInline","typeLabel":"boolean"}},"description":"Datos del producto si se asoció","uniqueKey":"oneOf.0.data.items.[INDEX].product","typeLabel":"object"}},"uniqueKey":"oneOf.0.data.items.[INDEX]","typeLabel":"object"},"uniqueKey":"oneOf.0.data","typeLabel":"object[]"},"errors":{"type":"array","description":"Deudas que no se cancelaron o cuya cancelación no se pudo confirmar. Solo viene si hay alguna.","items":{"type":"object","properties":{"index":{"type":"integer","description":"Posición del item en el array `debts` enviado.","uniqueKey":"oneOf.0.errors.items.[INDEX].index","typeLabel":"integer"},"id":{"type":"string","description":"El `id` tal como lo enviaste.","uniqueKey":"oneOf.0.errors.items.[INDEX].id","typeLabel":"string"},"code":{"type":"string","description":"RESOURCE_NOT_FOUND si la deuda no existe. BUSINESS_RULE_VIOLATION si no se puede cancelar en su estado actual, también si se pagó o entró en débito justo antes de la cancelación. RESOURCE_CONFLICT si se pidió la cancelación pero la deuda sigue activa: el reintento la cancela. RATE_LIMITED si no se pudo consultar la deuda: no se pidió su cancelación. INTERNAL_ERROR si falló de nuestro lado: la cancelación no se llegó a pedir o no se pudo confirmar, y `message` dice cuál.","uniqueKey":"oneOf.0.errors.items.[INDEX].code","typeLabel":"string"},"message":{"type":"string","uniqueKey":"oneOf.0.errors.items.[INDEX].message","typeLabel":"string"}},"uniqueKey":"oneOf.0.errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"oneOf.0.errors","typeLabel":"object[]"},"requestId":{"type":"string","uniqueKey":"oneOf.0.requestId","typeLabel":"string"}},"uniqueKey":"oneOf.0","typeLabel":"object"},{"type":"object","required":["error","requestId"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["INVALID_REQUEST","BAD_REQUEST","RESOURCE_NOT_FOUND","RESOURCE_CONFLICT","RESOLUTION_ERROR","BUSINESS_RULE_VIOLATION","RATE_LIMITED","INTERNAL_ERROR","PARTIAL_UPDATE","NO_ACTIVE_PAYMENT_METHOD","COMPANY_WITHOUT_PRODUCT_MODALITY","CONTACT_NOT_FOUND","COMPANY_WITHOUT_DEBT_ID_MODALITY","PAYMENT_METHODS_NOT_ENABLED","ORDER_NOT_CREATED","PAYMENT_METHOD_NOT_AVAILABLE","PAYMENT_METHOD_CASCADE_FAILED","PAYMENT_METHOD_NOT_DELETED"],"description":"Código de error estándar. BAD_REQUEST se usa cuando tu cliente tiene varias companies y no se envía `companyCode`. NO_ACTIVE_PAYMENT_METHOD y COMPANY_WITHOUT_PRODUCT_MODALITY aparecen en POST /adhesions (el primero también en POST /v2/debts/orders). CONTACT_NOT_FOUND, COMPANY_WITHOUT_DEBT_ID_MODALITY, PAYMENT_METHODS_NOT_ENABLED, ORDER_NOT_CREATED y PAYMENT_METHOD_NOT_AVAILABLE solo aparecen en POST /v2/debts/orders. PAYMENT_METHOD_CASCADE_FAILED y PAYMENT_METHOD_NOT_DELETED solo aparecen en DELETE /payment-methods/{externalPaymentMethodId}. PARTIAL_UPDATE solo aparece en el 207 de PATCH /subscriptions/{id}: la suscripción se actualizó, pero alguna de sus deudas no. Los 401 y 403 los emite el API Gateway y no usan este envelope (ver GatewayError). Excepción: en /v2/debts/orders, RESOLUTION_ERROR responde 403 con este envelope.","isRequired":true,"uniqueKey":"oneOf.1.error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"Mensaje legible del error. Es informativo: no lo parsees, usa `code` y `details[].field`.","isRequired":true,"uniqueKey":"oneOf.1.error.message","typeLabel":"string"},"details":{"type":"array","description":"Array de detalles adicionales (validaciones por campo, etc.). Un JSON malformado devuelve `[{ \"field\": \"body\", \"issue\": \"Invalid JSON syntax\" }]`.","items":{"type":"object","properties":{"field":{"type":"string","description":"Campo que falló la validación","uniqueKey":"oneOf.1.error.details.items.[INDEX].field","typeLabel":"string"},"issue":{"type":"string","description":"Descripción del problema","uniqueKey":"oneOf.1.error.details.items.[INDEX].issue","typeLabel":"string"},"index":{"type":"integer","description":"Solo en los lotes de POST /v2/debts y POST /debts/cancel. Posición del item en `debts`.","uniqueKey":"oneOf.1.error.details.items.[INDEX].index","typeLabel":"integer"},"externalRequestId":{"type":"string","description":"Solo en el modo lote de POST /v2/debts. externalRequestId del item.","uniqueKey":"oneOf.1.error.details.items.[INDEX].externalRequestId","typeLabel":"string"},"productId":{"oneOf":[{"type":"string","description":"Solo en DELETE /payment-methods/{externalPaymentMethodId}. Producto de la adhesión.","uniqueKey":"oneOf.1.error.details.items.[INDEX].productId.oneOf.0","typeLabel":"string"},{"type":"null","description":"Solo en DELETE /payment-methods/{externalPaymentMethodId}. Producto de la adhesión.","uniqueKey":"oneOf.1.error.details.items.[INDEX].productId.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.error.details.items.[INDEX].productId","typeLabel":"string | null"},"outcome":{"type":"string","enum":["DEACTIVATED","FAILED"],"description":"Solo en PAYMENT_METHOD_CASCADE_FAILED. Si la adhesión se dio de baja o no.","uniqueKey":"oneOf.1.error.details.items.[INDEX].outcome","typeLabel":"enum\u003cstring>"}},"uniqueKey":"oneOf.1.error.details.items.[INDEX]","typeLabel":"object"},"uniqueKey":"oneOf.1.error.details","typeLabel":"object[]"}},"isRequired":true,"uniqueKey":"oneOf.1.error","typeLabel":"object"},"requestId":{"type":"string","pattern":"^req_[a-zA-Z0-9]+$","description":"ID único del request para trazabilidad","isRequired":true,"uniqueKey":"oneOf.1.requestId","typeLabel":"string"}},"uniqueKey":"oneOf.1","typeLabel":"object"}],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"data":[{"debtId":"debt_COLE-OCT-00042","externalRequestId":"\u003cstring>","status":"PENDING","amount":123,"amountPaid":123,"currency":"MXN","dueDate":"2023-12-25","allowOverduePayment":true,"allowPartialPayments":true,"createdAt":"2023-11-07T05:31:56Z","autopay":true,"amountType":"CLOSED","description":"\u003cstring>","paymentMethods":["CASH"],"paymentUrl":"\u003cstring>","contact":{"contactId":"\u003cstring>","externalClientId":"\u003cstring>","createdInline":true},"product":{"productId":"\u003cstring>","name":"\u003cstring>","active":true,"createdInline":true}}],"errors":[{"index":123,"id":"\u003cstring>","code":"\u003cstring>","message":"\u003cstring>"}],"requestId":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"46a030e3-08cf-4cef-9c85-fa930c9d2dd2":{"apiKeyAuth":{"type":"apiKey","in":"header","name":"x-api-key","description":"API key del API Gateway de Tapi. Requerida en todas las operaciones. Distinta por ambiente (desarrollo, homologación, producción).\n","scopes":[],"schemeName":"apiKeyAuth"},"tapiAuth":{"type":"apiKey","in":"header","name":"x-authorization-token","description":"Token TAPI JWT. Requerido en todas las operaciones. Se envía sin prefijo \"Bearer\". Ej: x-authorization-token: eyJhbGci...\n","scopes":[],"schemeName":"tapiAuth"}}},"servers":{"1d12f346-b1e5-4ae4-a0a6-770670705ed5":{"url":"https://tapipay-facade.homo.tapila.cloud","description":"Homologación"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"apiKey","in":"header","name":"x-api-key","description":"API key del API Gateway de Tapi. Requerida en todas las operaciones. Distinta por ambiente (desarrollo, homologación, producción).\n","scopes":[],"schemeName":"apiKeyAuth"},"schema":{"title":"x-api-key","type":"string","description":"API key del API Gateway de Tapi. Requerida en todas las operaciones. Distinta por ambiente (desarrollo, homologación, producción).\n","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"apiKeyAuth","name":"x-api-key"},{"scheme":{"type":"apiKey","in":"header","name":"x-authorization-token","description":"Token TAPI JWT. Requerido en todas las operaciones. Se envía sin prefijo \"Bearer\". Ej: x-authorization-token: eyJhbGci...\n","scopes":[],"schemeName":"tapiAuth"},"schema":{"title":"x-authorization-token","type":"string","description":"Token TAPI JWT. Requerido en todas las operaciones. Se envía sin prefijo \"Bearer\". Ej: x-authorization-token: eyJhbGci...\n","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"tapiAuth","name":"x-authorization-token"}],"title":"apiKeyAuth \u0026 tapiAuth"}]},"originalFileLocation":"api-reference/openapi.yaml"},"subdomain":"tapi-d0a74b1d","siteName":"TapiPay","title":"Cancelar deudas en lote - TapiPay","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{"es":{"href":"/api-reference/debts/cancelar-deudas-en-lote","matchLevel":0},"en":{"href":"/api-reference/debts/cancelar-deudas-en-lote","matchLevel":0}}},"lastModified":"2026-10-30T22:16:57.410Z","originalFileLocation":"api-reference/debts/cancelar-deudas-en-lote.mdx","locale":"es"},"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=\"Cancela hasta 50 deudas en un request. Cada deuda sigue la misma regla que POST /debts/{id}/cancel y se resuelve sola: la que falla no frena a las demás. Una deuda que ya estaba cancelada cuenta como cancelada, así que reintentar el mismo lote es seguro. Las canceladas vienen en data y el resto en errors, con su index y el id tal como lo enviaste.\">\u003cmeta data-mint-head name=\"application-name\" content=\"TapiPay\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/tapi-d0a74b1d/W5k8z0F4uKv5MVzy/_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/tapi-d0a74b1d/W5k8z0F4uKv5MVzy/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/tapi-d0a74b1d/W5k8z0F4uKv5MVzy/_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/tapi-d0a74b1d/W5k8z0F4uKv5MVzy/_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/tapi-d0a74b1d/W5k8z0F4uKv5MVzy/_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/tapi-d0a74b1d/W5k8z0F4uKv5MVzy/_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/tapi-d0a74b1d/W5k8z0F4uKv5MVzy/_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/tapi-d0a74b1d/W5k8z0F4uKv5MVzy/_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/tapi-d0a74b1d/W5k8z0F4uKv5MVzy/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Cancelar deudas en lote - TapiPay\">\u003cmeta data-mint-head property=\"og:description\" content=\"Cancela hasta 50 deudas en un request. Cada deuda sigue la misma regla que POST /debts/{id}/cancel y se resuelve sola: la que falla no frena a las demás. Una deuda que ya estaba cancelada cuenta como cancelada, así que reintentar el mismo lote es seguro. Las canceladas vienen en data y el resto en errors, con su index y el id tal como lo enviaste.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"TapiPay\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://devs.tapipay.la/api-reference/debts/cancelar-deudas-en-lote\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://tapi-d0a74b1d.mintlify.app/_mintlify/api/og/v2?division=Debts\u0026amp;title=Cancelar+deudas+en+lote\u0026amp;description=Cancela+hasta+50+deudas+en+un+request.+Cada+deuda+sigue+la+misma+regla+que+POST+%2Fdebts%2F%7Bid%7D%2Fcancel+y+se+resuelve+sola%3A+la+que+falla+no+frena+a+las+dem%C3%A1s.+Una+de\u0026amp;theme=52fedc80ca9d1dbcaea24359\u0026amp;signature=7a1e1ef8f0af6b1457e36b888993027c64eb3751e655fed0121ecfbb688cfed5\">\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=\"Cancelar deudas en lote - TapiPay\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Cancela hasta 50 deudas en un request. Cada deuda sigue la misma regla que POST /debts/{id}/cancel y se resuelve sola: la que falla no frena a las demás. Una deuda que ya estaba cancelada cuenta como cancelada, así que reintentar el mismo lote es seguro. Las canceladas vienen en data y el resto en errors, con su index y el id tal como lo enviaste.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://tapi-d0a74b1d.mintlify.app/_mintlify/api/og/v2?division=Debts\u0026amp;title=Cancelar+deudas+en+lote\u0026amp;description=Cancela+hasta+50+deudas+en+un+request.+Cada+deuda+sigue+la+misma+regla+que+POST+%2Fdebts%2F%7Bid%7D%2Fcancel+y+se+resuelve+sola%3A+la+que+falla+no+frena+a+las+dem%C3%A1s.+Una+de\u0026amp;theme=52fedc80ca9d1dbcaea24359\u0026amp;signature=7a1e1ef8f0af6b1457e36b888993027c64eb3751e655fed0121ecfbb688cfed5\">\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/tapi-d0a74b1d/W5k8z0F4uKv5MVzy/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"TapiPay\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#044B47\">\u003clink data-mint-head rel=\"canonical\" href=\"https://devs.tapipay.la/api-reference/debts/cancelar-deudas-en-lote\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/debts/cancelar-deudas-en-lote.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://devs.tapipay.la/#organization\",\"name\":\"TapiPay\",\"url\":\"https://devs.tapipay.la\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/tapi-d0a74b1d/Ee-T_CDRZ18YJiKr/logo/light.png?fit=max\u0026auto=format\u0026n=Ee-T_CDRZ18YJiKr\u0026q=85\u0026s=a650c74357b75b59b5494647173fef25\"}},{\"@type\":\"WebSite\",\"@id\":\"https://devs.tapipay.la#website\",\"name\":\"TapiPay\",\"url\":\"https://devs.tapipay.la\",\"publisher\":{\"@id\":\"https://devs.tapipay.la/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://devs.tapipay.la/api-reference/debts/cancelar-deudas-en-lote#webpage\",\"url\":\"https://devs.tapipay.la/api-reference/debts/cancelar-deudas-en-lote\",\"name\":\"Cancelar deudas en lote\",\"description\":\"Cancela hasta 50 deudas en un request. Cada deuda sigue la misma regla que POST /debts/{id}/cancel y se resuelve sola: la que falla no frena a las demás. Una deuda que ya estaba cancelada cuenta como cancelada, así que reintentar el mismo lote es seguro. Las canceladas vienen en data y el resto en errors, con su index y el id tal como lo enviaste.\",\"dateModified\":\"2026-10-30T22:16:57.410Z\",\"isPartOf\":{\"@id\":\"https://devs.tapipay.la#website\"},\"breadcrumb\":{\"@id\":\"https://devs.tapipay.la/api-reference/debts/cancelar-deudas-en-lote#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://devs.tapipay.la/api-reference/debts/cancelar-deudas-en-lote#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Debts\",\"item\":\"https://devs.tapipay.la/api-reference/debts/crear-deuda-con-debito-automatico\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Cancelar deudas en lote\",\"item\":\"https://devs.tapipay.la/api-reference/debts/cancelar-deudas-en-lote\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://devs.tapipay.la/api-reference/debts/cancelar-deudas-en-lote#apireference\",\"headline\":\"Cancelar deudas en lote\",\"name\":\"Cancelar deudas en lote\",\"description\":\"Cancela hasta 50 deudas en un request. Cada deuda sigue la misma regla que POST /debts/{id}/cancel y se resuelve sola: la que falla no frena a las demás. Una deuda que ya estaba cancelada cuenta como cancelada, así que reintentar el mismo lote es seguro. Las canceladas vienen en data y el resto en errors, con su index y el id tal como lo enviaste.\",\"url\":\"https://devs.tapipay.la/api-reference/debts/cancelar-deudas-en-lote\",\"mainEntityOfPage\":{\"@id\":\"https://devs.tapipay.la/api-reference/debts/cancelar-deudas-en-lote#webpage\"},\"dateModified\":\"2026-10-30T22:16:57.410Z\",\"publisher\":{\"@id\":\"https://devs.tapipay.la/#organization\"},\"isPartOf\":{\"@id\":\"https://devs.tapipay.la#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"TapiPay\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"TapiPay","nav":{"global":null,"languages":[{"language":"es","default":true,"tabs":[{"tab":"Guías","pages":[{"title":"Guías","href":"/es"}]},{"tab":"API Reference","groups":[{"group":"Contacts","pages":[{"title":"Listar contactos","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /contacts","href":"/api-reference/contacts/listar-contactos"},{"title":"Crear contacto","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /contacts","href":"/api-reference/contacts/crear-contacto"},{"title":"Obtener contacto","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /contacts/{id}","href":"/api-reference/contacts/obtener-contacto"},{"title":"Actualizar contacto","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /contacts/{id}","href":"/api-reference/contacts/actualizar-contacto"}]},{"group":"Products","pages":[{"title":"Listar productos","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /products","href":"/api-reference/products/listar-productos"},{"title":"Crear producto","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /products","href":"/api-reference/products/crear-producto"},{"title":"Obtener producto","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /products/{id}","href":"/api-reference/products/obtener-producto"},{"title":"Eliminar producto","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /products/{id}","href":"/api-reference/products/eliminar-producto"},{"title":"Actualizar producto","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /products/{id}","href":"/api-reference/products/actualizar-producto"}]},{"group":"Debts","pages":[{"title":"Crear deuda con debito automatico","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v2/debts","href":"/api-reference/debts/crear-deuda-con-debito-automatico"},{"title":"Listar deudas","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /debts","href":"/api-reference/debts/listar-deudas"},{"title":"Obtener deuda","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /debts/{id}","href":"/api-reference/debts/obtener-deuda"},{"title":"Actualizar deuda","description":"Modifica el monto y la fecha de vencimiento. Solo en estado PENDING. Envía al menos uno de amount o dueDate (body vacío devuelve 400). No modifica allowPartialPayments. `companyCode` en el body se toma como contexto y no como campo a modificar.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /debts/{id}","href":"/api-reference/debts/actualizar-deuda"},{"title":"Cancelar deudas en lote","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /debts/cancel","href":"/api-reference/debts/cancelar-deudas-en-lote"},{"title":"Cancelar deuda","description":"Cancela una deuda en estado PENDING, PARTIALLY_PAID u OVERDUE. Una deuda PAID solo se puede cancelar si es recurrente (`recurring: true`). Cancelar una deuda que ya está cancelada es idempotente: devuelve 200 con la deuda en CANCELLED. No lleva body (si se envía, se ignora). La deuda cancelada se sigue leyendo con GET /debts/{id}.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /debts/{id}/cancel","href":"/api-reference/debts/cancelar-deuda"}]},{"group":"Payment methods","pages":[{"title":"Listar medios de pago del usuario","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /payment-methods","href":"/api-reference/payment-methods/listar-medios-de-pago-del-usuario"},{"title":"Eliminar un medio de pago del usuario","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /payment-methods/{externalPaymentMethodId}","href":"/api-reference/payment-methods/eliminar-un-medio-de-pago-del-usuario"}]},{"group":"Adhesions","pages":[{"title":"Adherir un usuario a un producto","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /adhesions","href":"/api-reference/adhesions/adherir-un-usuario-a-un-producto"},{"title":"Dar de baja la adhesión de un usuario a un producto","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /adhesions/cancel","href":"/api-reference/adhesions/dar-de-baja-la-adhesión-de-un-usuario-a-un-producto"}]},{"group":"Payment orders","pages":[{"title":"Consultar orden de pago","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v2/debts/orders","href":"/api-reference/payment-orders/consultar-orden-de-pago"},{"title":"Crear orden de pago","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v2/debts/orders","href":"/api-reference/payment-orders/crear-orden-de-pago"}]},{"group":"Subscriptions","pages":[{"title":"Listar suscripciones","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /subscriptions","href":"/api-reference/subscriptions/listar-suscripciones"},{"title":"Crear suscripción","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /subscriptions","href":"/api-reference/subscriptions/crear-suscripción"},{"title":"Obtener suscripción","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /subscriptions/{id}","href":"/api-reference/subscriptions/obtener-suscripción"},{"title":"Actualizar suscripción","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /subscriptions/{id}","href":"/api-reference/subscriptions/actualizar-suscripción"},{"title":"Pausar suscripción","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /subscriptions/{id}/pause","href":"/api-reference/subscriptions/pausar-suscripción"},{"title":"Reanudar suscripción","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /subscriptions/{id}/resume","href":"/api-reference/subscriptions/reanudar-suscripción"},{"title":"Cancelar suscripción","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /subscriptions/{id}/cancel","href":"/api-reference/subscriptions/cancelar-suscripción"},{"title":"Listar deudas de la suscripción","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /subscriptions/{id}/debts","href":"/api-reference/subscriptions/listar-deudas-de-la-suscripción"}]},{"group":"Payment Links","pages":[{"title":"Listar links de pago","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /payment-links","href":"/api-reference/payment-links/listar-links-de-pago"},{"title":"Crear link de pago","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /payment-links","href":"/api-reference/payment-links/crear-link-de-pago"},{"title":"Obtener link de pago","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /payment-links/{id}","href":"/api-reference/payment-links/obtener-link-de-pago"},{"title":"Actualizar link de pago","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /payment-links/{id}","href":"/api-reference/payment-links/actualizar-link-de-pago"},{"title":"Cancelar link de pago","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /payment-links/{id}/cancel","href":"/api-reference/payment-links/cancelar-link-de-pago"},{"title":"Listar pagos del link","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /payment-links/{id}/payments","href":"/api-reference/payment-links/listar-pagos-del-link"}]}]},{"tab":"Conecta tu MCP","pages":[{"title":"Conecta tu MCP","href":"/es/mcp"}]}]},{"language":"en","tabs":[{"tab":"Guides","pages":[{"title":"Guides","href":"/en"}]},{"tab":"API Reference","groups":[{"group":"Contacts","pages":[{"title":"Listar contactos","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /contacts","href":"/api-reference/contacts/listar-contactos"},{"title":"Crear contacto","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /contacts","href":"/api-reference/contacts/crear-contacto"},{"title":"Obtener contacto","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /contacts/{id}","href":"/api-reference/contacts/obtener-contacto"},{"title":"Actualizar contacto","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /contacts/{id}","href":"/api-reference/contacts/actualizar-contacto"}]},{"group":"Products","pages":[{"title":"Listar productos","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /products","href":"/api-reference/products/listar-productos"},{"title":"Crear producto","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /products","href":"/api-reference/products/crear-producto"},{"title":"Obtener producto","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /products/{id}","href":"/api-reference/products/obtener-producto"},{"title":"Eliminar producto","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /products/{id}","href":"/api-reference/products/eliminar-producto"},{"title":"Actualizar producto","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /products/{id}","href":"/api-reference/products/actualizar-producto"}]},{"group":"Debts","pages":[{"title":"Crear deuda con debito automatico","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v2/debts","href":"/api-reference/debts/crear-deuda-con-debito-automatico"},{"title":"Listar deudas","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /debts","href":"/api-reference/debts/listar-deudas"},{"title":"Obtener deuda","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /debts/{id}","href":"/api-reference/debts/obtener-deuda"},{"title":"Actualizar deuda","description":"Modifica el monto y la fecha de vencimiento. Solo en estado PENDING. Envía al menos uno de amount o dueDate (body vacío devuelve 400). No modifica allowPartialPayments. `companyCode` en el body se toma como contexto y no como campo a modificar.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /debts/{id}","href":"/api-reference/debts/actualizar-deuda"},{"title":"Cancelar deudas en lote","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /debts/cancel","href":"/api-reference/debts/cancelar-deudas-en-lote"},{"title":"Cancelar deuda","description":"Cancela una deuda en estado PENDING, PARTIALLY_PAID u OVERDUE. Una deuda PAID solo se puede cancelar si es recurrente (`recurring: true`). Cancelar una deuda que ya está cancelada es idempotente: devuelve 200 con la deuda en CANCELLED. No lleva body (si se envía, se ignora). La deuda cancelada se sigue leyendo con GET /debts/{id}.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /debts/{id}/cancel","href":"/api-reference/debts/cancelar-deuda"}]},{"group":"Payment methods","pages":[{"title":"Listar medios de pago del usuario","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /payment-methods","href":"/api-reference/payment-methods/listar-medios-de-pago-del-usuario"},{"title":"Eliminar un medio de pago del usuario","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /payment-methods/{externalPaymentMethodId}","href":"/api-reference/payment-methods/eliminar-un-medio-de-pago-del-usuario"}]},{"group":"Adhesions","pages":[{"title":"Adherir un usuario a un producto","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /adhesions","href":"/api-reference/adhesions/adherir-un-usuario-a-un-producto"},{"title":"Dar de baja la adhesión de un usuario a un producto","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /adhesions/cancel","href":"/api-reference/adhesions/dar-de-baja-la-adhesión-de-un-usuario-a-un-producto"}]},{"group":"Payment orders","pages":[{"title":"Consultar orden de pago","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v2/debts/orders","href":"/api-reference/payment-orders/consultar-orden-de-pago"},{"title":"Crear orden de pago","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v2/debts/orders","href":"/api-reference/payment-orders/crear-orden-de-pago"}]},{"group":"Subscriptions","pages":[{"title":"Listar suscripciones","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /subscriptions","href":"/api-reference/subscriptions/listar-suscripciones"},{"title":"Crear suscripción","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /subscriptions","href":"/api-reference/subscriptions/crear-suscripción"},{"title":"Obtener suscripción","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /subscriptions/{id}","href":"/api-reference/subscriptions/obtener-suscripción"},{"title":"Actualizar suscripción","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /subscriptions/{id}","href":"/api-reference/subscriptions/actualizar-suscripción"},{"title":"Pausar suscripción","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /subscriptions/{id}/pause","href":"/api-reference/subscriptions/pausar-suscripción"},{"title":"Reanudar suscripción","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /subscriptions/{id}/resume","href":"/api-reference/subscriptions/reanudar-suscripción"},{"title":"Cancelar suscripción","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /subscriptions/{id}/cancel","href":"/api-reference/subscriptions/cancelar-suscripción"},{"title":"Listar deudas de la suscripción","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /subscriptions/{id}/debts","href":"/api-reference/subscriptions/listar-deudas-de-la-suscripción"}]},{"group":"Payment Links","pages":[{"title":"Listar links de pago","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /payment-links","href":"/api-reference/payment-links/listar-links-de-pago"},{"title":"Crear link de pago","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /payment-links","href":"/api-reference/payment-links/crear-link-de-pago"},{"title":"Obtener link de pago","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /payment-links/{id}","href":"/api-reference/payment-links/obtener-link-de-pago"},{"title":"Actualizar link de pago","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /payment-links/{id}","href":"/api-reference/payment-links/actualizar-link-de-pago"},{"title":"Cancelar link de pago","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /payment-links/{id}/cancel","href":"/api-reference/payment-links/cancelar-link-de-pago"},{"title":"Listar pagos del link","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /payment-links/{id}/payments","href":"/api-reference/payment-links/listar-pagos-del-link"}]}]},{"tab":"Connect your MCP","pages":[{"title":"Connect your MCP","href":"/en/mcp"}]}]}]},"basePath":"","title":"Cancelar deudas en lote - TapiPay","buildId":"dpl_G9nrg4qeJSZtah1Ziwbc2n6WkLch","deploymentId":"dpl_G9nrg4qeJSZtah1Ziwbc2n6WkLch","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-B7XKH4J3.js","utils-lOYzL7z-.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-DF6jUUIM.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-Dpsj5f7C.js","snippetPresets-CYeiDe8v.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-CUFz1YZ_.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-D8H_iLS4.js","shallow-DdluZBHX.js","getApiPlaygroundDisplay-B9922vev.js","CodeSnippet-CMoRNGYs.js","CodeSnippets-DwyrPHuw.js","Page-DSVu9Ucl.js","getPastedJson-G-zIvlHh.js","icon-B03fnEy0.js","MethodPill-CW7teklc.js","DuplicateIcon-CtO8eekd.js","createIcon-DZTKdM_A.js","DynamicMarkdown-D5M2At0B.js","SectionHeading-C_2NaA2U.js","axios-vUo_bRtp.js","Markdown-D7QRHV3m.js","clsx-D1Z-ELXV.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-lvhuD9Du.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-CKfC4ywL.js"]}