{
"statusCode": 400,
"timestamp": "2026-07-31T14:05:12.431Z",
"path": "/external/tags/add",
"method": "POST",
"message": "La operación no otorga ningún punto: el valor enviado no alcanza para sumar ni un punto con la configuración del comercio.",
"errors": [
{}
],
"data": {}
}
{
"statusCode": 403,
"timestamp": "2026-07-31T14:05:12.431Z",
"path": "/external/tags/add",
"method": "POST",
"message": "El cliente al que estás intentando sumar puntos se encuentra suspendido",
"errors": [
{}
],
"data": {}
}
Devuelve cuántos puntos se acreditarían, con el desglose, sin acreditar nada. Sirve para mostrarle al cliente lo que va a sumar antes de cerrar la venta.
Mandá uno de estos tres: amount (monto de la compra), initialPointsToGive (puntos directos) o pointItems (ítems de puntos con sus cantidades, cuyos IDs salen de GET /external/point-items).
A diferencia de POST /external/tags/add, el cliente se identifica por clientId y tiene que existir: previsualizar no da de alta a nadie.
No reserva nada. El resultado es el de este momento: si cambian las bonificaciones, el nivel del cliente o el catálogo de ítems, la suma real puede dar distinto. Mandá el mismo branch_id que vas a usar después, porque hay bonificaciones por sucursal.
Cómo pasar de la simulación a la suma real: POST /external/tags/add acepta amount o pointItems, pero con otro formato: allá pointItems es un array de ids donde la cantidad se expresa repitiendo el id ([{ "id": 12, "quantity": 2 }] acá equivale a [12, 12] allá). La suma real no acepta initialPointsToGive: si simulás por ese modo, no hay una acreditación equivalente por esta API.
{
"statusCode": 400,
"timestamp": "2026-07-31T14:05:12.431Z",
"path": "/external/tags/add",
"method": "POST",
"message": "La operación no otorga ningún punto: el valor enviado no alcanza para sumar ni un punto con la configuración del comercio.",
"errors": [
{}
],
"data": {}
}
{
"statusCode": 403,
"timestamp": "2026-07-31T14:05:12.431Z",
"path": "/external/tags/add",
"method": "POST",
"message": "El cliente al que estás intentando sumar puntos se encuentra suspendido",
"errors": [
{}
],
"data": {}
}
ID del cliente en Tienda de Puntos. A diferencia de POST /external/tags/add, acá es obligatorio y el cliente tiene que existir: previsualizar no da de alta a nadie.
Monto de la compra en pesos. Se convierte a puntos con la regla del comercio, igual que en POST /external/tags/add. Tiene que ser mayor a cero: el preview no simula restas.
Ítems de puntos de la venta, con sus cantidades. Cada ítem aporta sus puntos fijos o su equivalencia en pesos, según cómo lo haya configurado el comercio.
Sucursal de la venta. Cambia el resultado: hay bonificaciones que aplican solo a ciertas sucursales. Mandá la misma que vas a usar después en la suma real.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Tienda de Puntos","description":"Guías y recursos para conectar Tienda de Puntos con tu negocio.","colors":{"primary":"#5b53f0","light":"#5b53f0","dark":"#8b85f5"},"logo":{"light":"https://mintcdn.com/tiendadepuntos/WnSIFgAFSkI7bdnr/logo/light.png?fit=max\u0026auto=format\u0026n=WnSIFgAFSkI7bdnr\u0026q=85\u0026s=8187339b0bc9e96cfb1fede6be7db42f","dark":"https://mintcdn.com/tiendadepuntos/WnSIFgAFSkI7bdnr/logo/dark.png?fit=max\u0026auto=format\u0026n=WnSIFgAFSkI7bdnr\u0026q=85\u0026s=81c582f44eeca4f00583f870e53ab395"},"favicon":"https://mintcdn.com/tiendadepuntos/WnSIFgAFSkI7bdnr/favicon.png?fit=max\u0026auto=format\u0026n=WnSIFgAFSkI7bdnr\u0026q=85\u0026s=6e6c345757dc587a976308ee43c1a0a5","appearance":{"default":"light"},"navbar":{"links":[{"href":"mailto:hola@tiendadepuntos.com","label":"Soporte"}],"primary":{"type":"button","label":"Buscar mi Tienda de Puntos","href":"https://mi.tiendadepuntos.com/auth/my-business"}},"footer":{"socials":{"website":"https://www.tiendadepuntos.com","linkedin":"https://www.linkedin.com/company/tienda-de-puntos"},"links":[{"header":"Plataforma","items":[{"label":"Sitio web","href":"https://www.tiendadepuntos.com"},{"label":"Ingresá a tu tienda","href":"https://mi.tiendadepuntos.com/auth/my-business"}]},{"header":"Recursos","items":[{"label":"Blog","href":"https://www.tiendadepuntos.com/blog"},{"label":"Contacto","href":"mailto:hola@tiendadepuntos.com"}]}]},"fonts":{"family":"Inter"},"icons":{"library":"lucide"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"tiendadepuntos","hasAudioNarration":false,"actualSubdomain":"tiendadepuntos","customDomains":["developers.tiendadepuntos.com"],"gitSource":{"type":"github","owner":"tiendadepuntos","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"entitlements":{},"buildId":"6ac1d0a6cd821381e02d7458","clientVersion":"0.0.4088","searchFilterCounts":[{"language":"default","tag":"Documentación","count":49},{"language":"default","tag":"API · Endpoints","count":41},{"language":"default","tag":"Clientes","count":6},{"language":"default","tag":"API · Empezar","count":5},{"language":"default","tag":"Canjes","count":5},{"language":"default","tag":"Ítems de puntos","count":5},{"language":"default","tag":"Niveles","count":5},{"language":"default","tag":"Operadores","count":5},{"language":"default","tag":"Premios","count":5},{"language":"default","tag":"Puntos","count":5}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":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":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":":root{--tdp-page-bg: #ffffff;--tdp-primary: #5b53f0;--tdp-primary-hover: #4a42d9;--tdp-accent-text: #5b53f0;--tdp-ink: #17171b;--tdp-muted: #686872;--tdp-border: #e7e7eb;--tdp-surface: #f7f7f8;--tdp-card-bg: #ffffff;--tdp-card-border: #e9e9ee;--tdp-card-hover-border: #d8d6e8;--tdp-card-shadow: 0 14px 38px rgba(25, 22, 55, 0.06);--tdp-icon-bg: #ffffff;--tdp-icon-border: #dfddef;--tdp-arrow: #a3a3aa;--tdp-hero-button-bg: #17171b;--tdp-hero-button-text: #ffffff;--tdp-visual-points-bg:\n radial-gradient(circle at 80% 18%, rgba(255, 255, 255, 0.8), transparent 23%),\n linear-gradient(145deg, #eeecff, #c9c4ff);--tdp-visual-ring: rgba(91, 83, 240, 0.15);--tdp-purchase-bg: rgba(255, 255, 255, 0.85);--tdp-purchase-border: rgba(255, 255, 255, 0.75);--tdp-purchase-shadow: 0 30px 70px rgba(59, 49, 145, 0.2);--tdp-purchase-divider: #e9e7f5;--tdp-purchase-title: #24232b;--tdp-purchase-muted: #777482}html.dark,body.dark,[data-theme=\"dark\"],[data-mode=\"dark\"],.dark{--tdp-page-bg: #0f1014;--tdp-primary: #5b53f0;--tdp-primary-hover: #4a42d9;--tdp-accent-text: #a8a3ff;--tdp-ink: #f4f4f6;--tdp-muted: #b5b5bf;--tdp-border: #2c2d36;--tdp-surface: #191a21;--tdp-card-bg: #15161d;--tdp-card-border: #2a2b35;--tdp-card-hover-border: #49465f;--tdp-card-shadow: 0 18px 42px rgba(0, 0, 0, 0.28);--tdp-icon-bg: #1d1e27;--tdp-icon-border: #373449;--tdp-arrow: #858796;--tdp-hero-button-bg: #f4f4f6;--tdp-hero-button-text: #101116;--tdp-visual-points-bg:\n radial-gradient(circle at 80% 18%, rgba(255, 255, 255, 0.12), transparent 23%),\n linear-gradient(145deg, #1e1c38, #3f3974);--tdp-visual-ring: rgba(168, 163, 255, 0.18);--tdp-purchase-bg: rgba(20, 21, 29, 0.88);--tdp-purchase-border: rgba(255, 255, 255, 0.12);--tdp-purchase-shadow: 0 30px 70px rgba(0, 0, 0, 0.34);--tdp-purchase-divider: #333247;--tdp-purchase-title: #f4f4f6;--tdp-purchase-muted: #b6b4c4}html,#background-color,body{background:var(--tdp-page-bg)}#topbar-cta-button{border:0;background:transparent;box-shadow:none}#topbar-cta-button>a{min-height:38px;padding:0 11px 0 16px;border:0;border-radius:999px;background:var(--tdp-primary);box-shadow:0 2px 8px rgba(91, 83, 240, 0.22);color:#fff;font-size:13px;font-weight:600;transition:background-color 160ms ease, box-shadow 160ms ease}#topbar-cta-button>a:hover{background:var(--tdp-primary-hover);color:#fff;box-shadow:0 3px 10px rgba(91, 83, 240, 0.3)}#topbar-cta-button *{color:#fff}#topbar-cta-button svg{width:18px;height:18px;margin-left:3px}.tdp-landing{max-width:1080px;min-height:calc(100vh - 4rem);margin:0 auto;padding:0 28px 96px;background:var(--tdp-page-bg);color:var(--tdp-ink)}.tdp-landing *{box-sizing:border-box}.tdp-landing a{text-decoration:none}.tdp-hero{max-width:780px;margin:0 auto;padding:112px 0 76px;text-align:center}.tdp-kicker,.tdp-eyebrow{display:block;color:var(--tdp-accent-text);font-size:11px;font-weight:700;letter-spacing:0.12em;line-height:1.4}.tdp-hero-title{margin:18px 0 0;color:var(--tdp-ink);font-size:60px;font-weight:560;letter-spacing:0;line-height:1.02}.tdp-hero-subtitle{max-width:650px;margin:26px auto 0;color:var(--tdp-muted);font-size:18px;line-height:1.65}.tdp-hero-actions{display:flex;align-items:center;justify-content:center;gap:12px;margin-top:34px}.tdp-btn-primary,.tdp-btn-secondary,.tdp-btn-light{display:inline-flex;align-items:center;justify-content:center;gap:9px;min-height:44px;padding:0 18px;border-radius:999px;font-size:14px;font-weight:600;transition:transform 160ms ease, background-color 160ms ease}.tdp-btn-primary{background:var(--tdp-hero-button-bg);color:var(--tdp-hero-button-text)}.tdp-btn-primary:hover,.tdp-btn-light:hover{transform:translateY(-1px)}.tdp-btn-secondary{border:1px solid var(--tdp-border);color:var(--tdp-ink)}.tdp-btn-secondary:hover{background:var(--tdp-surface)}.tdp-topics{display:grid;grid-template-columns:repeat(3, 1fr);gap:14px;scroll-margin-top:90px}.tdp-topic-card{position:relative;display:flex;min-height:258px;flex-direction:column;padding:26px;border:1px solid var(--tdp-card-border);border-radius:18px;background:var(--tdp-card-bg);color:inherit;transition:border-color 180ms ease, transform 180ms ease, box-shadow 180ms ease}.tdp-topic-card:hover{border-color:var(--tdp-card-hover-border);box-shadow:var(--tdp-card-shadow);transform:translateY(-3px)}.tdp-topic-icon{display:grid;width:42px;height:42px;place-items:center;border:1px solid var(--tdp-icon-border);border-radius:12px;background:var(--tdp-icon-bg);color:var(--tdp-accent-text)}.tdp-topic-copy{margin-top:auto}.tdp-topic-copy h2{margin:9px 0 7px;color:var(--tdp-ink);font-size:19px;font-weight:620;letter-spacing:0;line-height:1.25}.tdp-topic-copy p{margin:0;color:var(--tdp-muted);font-size:14px;line-height:1.55}.tdp-card-arrow{position:absolute;top:28px;right:28px;color:var(--tdp-arrow);font-size:18px;transition:color 160ms ease, transform 160ms ease}.tdp-topic-card:hover .tdp-card-arrow{color:var(--tdp-accent-text);transform:translateX(3px)}.tdp-feature-row{display:grid;grid-template-columns:minmax(0, 0.9fr) minmax(0, 1.1fr);align-items:center;gap:70px;padding:120px 0 24px;scroll-margin-top:80px}.tdp-feature-row-reverse{grid-template-columns:minmax(0, 1.1fr) minmax(0, 0.9fr)}.tdp-feature-copy h2,.tdp-api-banner h2{margin:14px 0 16px;color:var(--tdp-ink);font-size:32px;font-weight:580;letter-spacing:0;line-height:1.15}.tdp-feature-copy p,.tdp-api-banner p{margin:0;color:var(--tdp-muted);font-size:16px;line-height:1.7}.tdp-text-link{display:inline-flex;gap:8px;margin-top:25px;color:var(--tdp-ink);font-size:14px;font-weight:650}.tdp-text-link span{transition:transform 160ms ease}.tdp-text-link:hover span{transform:translateX(4px)}.tdp-visual{position:relative;display:grid;min-height:390px;place-items:center;overflow:hidden;border-radius:28px}.tdp-visual-points{background:var(--tdp-visual-points-bg)}.tdp-visual-points::before,.tdp-visual-points::after{position:absolute;width:210px;height:210px;border:1px solid var(--tdp-visual-ring);border-radius:50%;content:\"\"}.tdp-visual-points::before{top:-80px;left:-45px}.tdp-visual-points::after{right:-70px;bottom:-100px}.tdp-purchase-card{position:relative;z-index:1;width:min(78%, 340px);padding:22px;border:1px solid var(--tdp-purchase-border);border-radius:18px;background:var(--tdp-purchase-bg);box-shadow:var(--tdp-purchase-shadow);backdrop-filter:blur(12px);transform:rotate(-2deg)}.tdp-purchase-header{display:flex;align-items:center;gap:12px;padding-bottom:18px;border-bottom:1px solid var(--tdp-purchase-divider)}.tdp-purchase-header span:last-child{display:flex;flex-direction:column}.tdp-purchase-header strong{color:var(--tdp-purchase-title);font-size:14px}.tdp-purchase-header small,.tdp-points-row small{color:var(--tdp-purchase-muted);font-size:11px}.tdp-avatar{display:grid;width:40px;height:40px;place-items:center;border-radius:50%;background:var(--tdp-primary);color:#fff;font-size:12px;font-weight:700}.tdp-points-row{display:flex;align-items:baseline;justify-content:space-between;padding-top:20px}.tdp-points-row>span{color:var(--tdp-accent-text);font-size:28px;font-weight:700;letter-spacing:0}.tdp-visual-integrations{background:linear-gradient(rgba(255, 255, 255, 0.055) 1px, transparent 1px),\n linear-gradient(90deg, rgba(255, 255, 255, 0.055) 1px, transparent 1px),\n #17171b;background-size:32px 32px}.tdp-integration-node{position:absolute;z-index:2;display:grid;width:74px;height:74px;place-items:center;border:1px solid rgba(255, 255, 255, 0.16);border-radius:20px;background:#27262e;color:#fff;box-shadow:0 15px 35px rgba(0, 0, 0, 0.24);font-size:12px;font-weight:700;letter-spacing:0.06em}.tdp-node-center{width:92px;height:92px;border-color:rgba(139, 133, 245, 0.55);background:#5b53f0}.tdp-node-left{left:13%;bottom:17%}.tdp-node-right{top:16%;right:13%}.tdp-connector{position:absolute;z-index:1;width:150px;height:1px;background:linear-gradient(90deg, transparent, #7770ee);transform-origin:right}.tdp-connector-left{transform:translate(-58px, 60px) rotate(-34deg)}.tdp-connector-right{background:linear-gradient(90deg, #7770ee, transparent);transform:translate(58px, -60px) rotate(-34deg);transform-origin:left}.tdp-api-banner{display:flex;align-items:center;justify-content:space-between;gap:48px;margin-top:120px;padding:46px 50px;border-radius:26px;background:var(--tdp-primary)}.tdp-api-banner .tdp-eyebrow{color:#cbc8ff}.tdp-api-banner h2{margin-top:10px;color:#fff}.tdp-api-banner p{max-width:600px;color:#dedcff}.tdp-btn-light{flex:0 0 auto;background:#fff;color:#262331}.tdp-integration-logo{display:block;width:min(190px, 60%);max-height:74px;object-fit:contain;margin:10px 0 22px;padding:12px 16px;border:1px solid var(--tdp-card-border);border-radius:12px;background:var(--tdp-card-bg)}@media (max-width: 820px){.tdp-hero-title{font-size:48px}.tdp-topics{grid-template-columns:1fr}.tdp-topic-card{min-height:220px}.tdp-feature-row,.tdp-feature-row-reverse{grid-template-columns:1fr;gap:36px;padding-top:88px}.tdp-feature-row-reverse .tdp-visual{order:2}.tdp-api-banner{align-items:flex-start;flex-direction:column}}@media (max-width: 560px){.tdp-landing{padding:0 18px 64px}.tdp-hero{padding:76px 0 56px}.tdp-hero-title{font-size:38px}.tdp-hero-subtitle{font-size:16px}.tdp-hero-actions{align-items:stretch;flex-direction:column}.tdp-visual{min-height:320px;border-radius:22px}.tdp-api-banner{margin-top:88px;padding:32px 26px}}"}],"page":{"pagePath":"api-reference/endpoints/puntos/simular-una-suma-de-puntos","slug":"/api-reference/endpoints/puntos/simular-una-suma-de-puntos","pageMetadata":{"title":"Simular una suma de puntos","description":"Devuelve cuántos puntos se acreditarían, con el desglose, **sin acreditar nada**. Sirve para mostrarle al cliente lo que va a sumar antes de cerrar la venta.\n\nMandá **uno** de estos tres: `amount` (monto de la compra), `initialPointsToGive` (puntos directos) o `pointItems` (ítems de puntos con sus cantidades, cuyos IDs salen de `GET /external/point-items`).\n\nA diferencia de `POST /external/tags/add`, el cliente se identifica por `clientId` y tiene que existir: previsualizar no da de alta a nadie.\n\n**No reserva nada.** El resultado es el de este momento: si cambian las bonificaciones, el nivel del cliente o el catálogo de ítems, la suma real puede dar distinto. Mandá el mismo `branch_id` que vas a usar después, porque hay bonificaciones por sucursal.\n\n**Cómo pasar de la simulación a la suma real**: `POST /external/tags/add` acepta `amount` o `pointItems`, pero con otro formato: allá `pointItems` es un array de ids donde la cantidad se expresa repitiendo el id (`[{ \"id\": 12, \"quantity\": 2 }]` acá equivale a `[12, 12]` allá). La suma real no acepta `initialPointsToGive`: si simulás por ese modo, no hay una acreditación equivalente por esta API.","deprecated":null,"version":null,"sidebarTitle":"Simular una suma de puntos","openapi":"/api-reference/openapi.json post /external/tags/add/preview","href":"/api-reference/endpoints/puntos/simular-una-suma-de-puntos","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n strong: \"strong\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Devuelve cuántos puntos se acreditarían, con el desglose, \", _jsx(_components.strong, {\n children: \"sin acreditar nada\"\n }), \". Sirve para mostrarle al cliente lo que va a sumar antes de cerrar la venta.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Mandá \", _jsx(_components.strong, {\n children: \"uno\"\n }), \" de estos tres: \", _jsx(_components.code, {\n children: \"amount\"\n }), \" (monto de la compra), \", _jsx(_components.code, {\n children: \"initialPointsToGive\"\n }), \" (puntos directos) o \", _jsx(_components.code, {\n children: \"pointItems\"\n }), \" (ítems de puntos con sus cantidades, cuyos IDs salen de \", _jsx(_components.code, {\n children: \"GET /external/point-items\"\n }), \").\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"A diferencia de \", _jsx(_components.code, {\n children: \"POST /external/tags/add\"\n }), \", el cliente se identifica por \", _jsx(_components.code, {\n children: \"clientId\"\n }), \" y tiene que existir: previsualizar no da de alta a nadie.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"No reserva nada.\"\n }), \" El resultado es el de este momento: si cambian las bonificaciones, el nivel del cliente o el catálogo de ítems, la suma real puede dar distinto. Mandá el mismo \", _jsx(_components.code, {\n children: \"branch_id\"\n }), \" que vas a usar después, porque hay bonificaciones por sucursal.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Cómo pasar de la simulación a la suma real\"\n }), \": \", _jsx(_components.code, {\n children: \"POST /external/tags/add\"\n }), \" acepta \", _jsx(_components.code, {\n children: \"amount\"\n }), \" o \", _jsx(_components.code, {\n children: \"pointItems\"\n }), \", pero con otro formato: allá \", _jsx(_components.code, {\n children: \"pointItems\"\n }), \" es un array de ids donde la cantidad se expresa repitiendo el id (\", _jsx(_components.code, {\n children: \"[{ \\\"id\\\": 12, \\\"quantity\\\": 2 }]\"\n }), \" acá equivale a \", _jsx(_components.code, {\n children: \"[12, 12]\"\n }), \" allá). La suma real no acepta \", _jsx(_components.code, {\n children: \"initialPointsToGive\"\n }), \": si simulás por ese modo, no hay una acreditación equivalente por esta API.\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Simular una suma de puntos","description":"Devuelve cuántos puntos se acreditarían, con el desglose, **sin acreditar nada**. Sirve para mostrarle al cliente lo que va a sumar antes de cerrar la venta.\n\nMandá **uno** de estos tres: `amount` (monto de la compra), `initialPointsToGive` (puntos directos) o `pointItems` (ítems de puntos con sus cantidades, cuyos IDs salen de `GET /external/point-items`).\n\nA diferencia de `POST /external/tags/add`, el cliente se identifica por `clientId` y tiene que existir: previsualizar no da de alta a nadie.\n\n**No reserva nada.** El resultado es el de este momento: si cambian las bonificaciones, el nivel del cliente o el catálogo de ítems, la suma real puede dar distinto. Mandá el mismo `branch_id` que vas a usar después, porque hay bonificaciones por sucursal.\n\n**Cómo pasar de la simulación a la suma real**: `POST /external/tags/add` acepta `amount` o `pointItems`, pero con otro formato: allá `pointItems` es un array de ids donde la cantidad se expresa repitiendo el id (`[{ \"id\": 12, \"quantity\": 2 }]` acá equivale a `[12, 12]` allá). La suma real no acepta `initialPointsToGive`: si simulás por ese modo, no hay una acreditación equivalente por esta API.","deprecated":null,"version":null,"sidebarTitle":"Simular una suma de puntos","openapi":"/api-reference/openapi.json post /external/tags/add/preview","href":"/api-reference/endpoints/puntos/simular-una-suma-de-puntos","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"description":"Devuelve cuántos puntos se acreditarían, con el desglose, **sin acreditar nada**. Sirve para mostrarle al cliente lo que va a sumar antes de cerrar la venta.\n\nMandá **uno** de estos tres: `amount` (monto de la compra), `initialPointsToGive` (puntos directos) o `pointItems` (ítems de puntos con sus cantidades, cuyos IDs salen de `GET /external/point-items`).\n\nA diferencia de `POST /external/tags/add`, el cliente se identifica por `clientId` y tiene que existir: previsualizar no da de alta a nadie.\n\n**No reserva nada.** El resultado es el de este momento: si cambian las bonificaciones, el nivel del cliente o el catálogo de ítems, la suma real puede dar distinto. Mandá el mismo `branch_id` que vas a usar después, porque hay bonificaciones por sucursal.\n\n**Cómo pasar de la simulación a la suma real**: `POST /external/tags/add` acepta `amount` o `pointItems`, pero con otro formato: allá `pointItems` es un array de ids donde la cantidad se expresa repitiendo el id (`[{ \"id\": 12, \"quantity\": 2 }]` acá equivale a `[12, 12]` allá). La suma real no acepta `initialPointsToGive`: si simulás por ese modo, no hay una acreditación equivalente por esta API.","operationId":"ExternalTagsController_previewPointOperation","parameters":[],"requestBody":"92590382-db0a-47f2-ace1-89363ff5868e","responses":{"200":"da35a6d2-f4fd-4ed4-b473-07ac221c52e0","400":"dfa13b08-4206-44b1-916f-bc4e65eb89a3","401":"1d488b39-1469-4c63-b3ae-b32fbc601302","403":"2b6a233c-a540-43b8-85ea-83bd902d2cee","404":"a2f57e84-ce92-4ad0-ae13-0fd96a88ad38"},"security":["e4e218c7-0301-4b62-bb5b-e8ace236935e"],"summary":"Simular una suma de puntos","tags":["Puntos"],"x-mint":{"href":"/api-reference/endpoints/puntos/simular-una-suma-de-puntos","metadata":{"title":"Simular una suma de puntos","sidebarTitle":"Simular una suma de puntos"}},"method":"post","type":"path","servers":["b3a69718-a9fe-4116-a340-620ea57d373e","b1c4d4f7-1090-47b8-b751-e9830f418b25"],"path":"/external/tags/add/preview","baseUrlOptions":["https://api.tiendadepuntos.com","https://api-qa.tiendadepuntos.com"],"title":"Simular una suma de puntos","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"clientId":{"type":"number","description":"ID del cliente en Tienda de Puntos. A diferencia de `POST /external/tags/add`, acá es obligatorio y el cliente tiene que existir: previsualizar no da de alta a nadie.","example":84512,"isRequired":true,"uniqueKey":"clientId","typeLabel":"number"},"amount":{"type":"number","description":"Monto de la compra en pesos. Se convierte a puntos con la regla del comercio, igual que en `POST /external/tags/add`. Tiene que ser mayor a cero: el preview no simula restas.","example":4000,"uniqueKey":"amount","typeLabel":"number"},"initialPointsToGive":{"type":"number","description":"Puntos base, sin convertir. Se usan tal cual llegan.","example":50,"uniqueKey":"initialPointsToGive","typeLabel":"number"},"pointItems":{"description":"Ítems de puntos de la venta, con sus cantidades. Cada ítem aporta sus puntos fijos o su equivalencia en pesos, según cómo lo haya configurado el comercio.","type":"array","items":{"type":"object","properties":{"id":{"type":"number","description":"ID del ítem de puntos. Sale de `GET /external/point-items`.","example":87,"isRequired":true,"uniqueKey":"pointItems.items.[INDEX].id","typeLabel":"number"},"quantity":{"type":"number","description":"Unidades de ese ítem en la venta. Si se omite, se asume 1.","example":2,"default":1,"uniqueKey":"pointItems.items.[INDEX].quantity","typeLabel":"number"}},"required":["id"],"uniqueKey":"pointItems.items.[INDEX]","typeLabel":"object"},"uniqueKey":"pointItems","typeLabel":"object[]"},"branch_id":{"type":"number","description":"Sucursal de la venta. Cambia el resultado: hay bonificaciones que aplican solo a ciertas sucursales. Mandá la misma que vas a usar después en la suma real.","example":1972,"uniqueKey":"branch_id","typeLabel":"number"}},"required":["clientId"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"clientId":84512,"amount":4000,"initialPointsToGive":50,"pointItems":[{"id":87,"quantity":2}],"branch_id":1972}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"da35a6d2-f4fd-4ed4-b473-07ac221c52e0":{"description":"Desglose de los puntos que se acreditarían.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean","example":true,"isRequired":true,"uniqueKey":"success","typeLabel":"boolean"},"status":{"type":"integer","example":200,"isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"message":{"type":"string","example":"Request was successful","isRequired":true,"uniqueKey":"message","typeLabel":"string"},"data":{"type":"object","properties":{"points":{"type":"object","description":"Desglose de los puntos.","required":["initialPointsToGive","levelBonusPoints","pointRulesBonusPoints","totalPointsToGive"],"properties":{"initialPointsToGive":{"type":"number","description":"Puntos base, antes de cualquier bonificación.","example":40,"isRequired":true,"uniqueKey":"data.points.initialPointsToGive","typeLabel":"number"},"levelBonusPoints":{"type":"number","description":"Puntos extra por el nivel del cliente. `0` si no tiene nivel o no multiplica.","example":8,"isRequired":true,"uniqueKey":"data.points.levelBonusPoints","typeLabel":"number"},"pointRulesBonusPoints":{"type":"number","description":"Puntos extra por las bonificaciones activas del comercio.","example":12,"isRequired":true,"uniqueKey":"data.points.pointRulesBonusPoints","typeLabel":"number"},"totalPointsToGive":{"type":"number","description":"Total que se acreditaría: la suma de los tres anteriores.","example":60,"isRequired":true,"uniqueKey":"data.points.totalPointsToGive","typeLabel":"number"}},"isRequired":true,"uniqueKey":"data.points","typeLabel":"object"},"calculatedAt":{"format":"date-time","type":"string","description":"Momento del cálculo. El preview no reserva ni congela nada: si entre la simulación y la suma real cambian las bonificaciones, el nivel del cliente o el catálogo de ítems, el resultado puede variar.","example":"2026-09-21T14:32:11.000Z","isRequired":true,"uniqueKey":"data.calculatedAt","typeLabel":"string\u003cdate-time>"}},"required":["points","calculatedAt"],"uniqueKey":"data","typeLabel":"object"}},"required":["success","status","message"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"success":true,"status":200,"message":"Request was successful","data":{"points":{"initialPointsToGive":40,"levelBonusPoints":8,"pointRulesBonusPoints":12,"totalPointsToGive":60},"calculatedAt":"2026-09-21T14:32:11.000Z"}}}},"exampleType":"generated"}},"exampleType":"generated"},"dfa13b08-4206-44b1-916f-bc4e65eb89a3":{"description":"Faltan los tres modos de carga, vinieron más de uno, o el valor enviado no alcanza para otorgar ni un punto.","content":{"application/json":{"schema":{"type":"object","properties":{"statusCode":{"type":"integer","example":400,"uniqueKey":"statusCode","typeLabel":"integer"},"timestamp":{"type":"string","format":"date-time","example":"2026-07-31T14:05:12.431Z","uniqueKey":"timestamp","typeLabel":"string\u003cdate-time>"},"path":{"type":"string","example":"/external/tags/add","uniqueKey":"path","typeLabel":"string"},"method":{"type":"string","example":"POST","uniqueKey":"method","typeLabel":"string"},"message":{"type":"string","example":"La operación no otorga ningún punto: el valor enviado no alcanza para sumar ni un punto con la configuración del comercio.","uniqueKey":"message","typeLabel":"string"},"errors":{"oneOf":[{"type":"array","items":{"type":"object","uniqueKey":"errors.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object"},"uniqueKey":"errors.oneOf.1","typeLabel":"null"}],"uniqueKey":"errors","typeLabel":"object[] | null"},"data":{"oneOf":[{"type":"object","uniqueKey":"data.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"data.oneOf.1","typeLabel":"null"}],"uniqueKey":"data","typeLabel":"object | null"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"statusCode":400,"timestamp":"2026-07-31T14:05:12.431Z","path":"/external/tags/add","method":"POST","message":"La operación no otorga ningún punto: el valor enviado no alcanza para sumar ni un punto con la configuración del comercio.","errors":[{}],"data":{}}}},"exampleType":"generated"}},"exampleType":"generated"},"1d488b39-1469-4c63-b3ae-b32fbc601302":{"description":"Falta el header `x-api-key` (`Api Key is required`), o está presente pero no corresponde a ningún comercio (`Api key is invalid`).","content":{"application/json":{"schema":{"type":"object","properties":{"statusCode":{"type":"integer","example":401,"uniqueKey":"statusCode","typeLabel":"integer"},"timestamp":{"type":"string","format":"date-time","example":"2026-07-31T14:05:12.431Z","uniqueKey":"timestamp","typeLabel":"string\u003cdate-time>"},"path":{"type":"string","example":"/external/tags/add","uniqueKey":"path","typeLabel":"string"},"method":{"type":"string","example":"POST","uniqueKey":"method","typeLabel":"string"},"message":{"type":"string","example":"Api key is invalid","uniqueKey":"message","typeLabel":"string"},"errors":{"oneOf":[{"type":"array","items":{"type":"object","uniqueKey":"errors.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object"},"uniqueKey":"errors.oneOf.1","typeLabel":"null"}],"uniqueKey":"errors","typeLabel":"object[] | null"},"data":{"oneOf":[{"type":"object","uniqueKey":"data.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"data.oneOf.1","typeLabel":"null"}],"uniqueKey":"data","typeLabel":"object | null"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"statusCode":401,"timestamp":"2026-07-31T14:05:12.431Z","path":"/external/tags/add","method":"POST","message":"Api key is invalid","errors":[{}],"data":{}}}},"exampleType":"generated"}},"exampleType":"generated"},"2b6a233c-a540-43b8-85ea-83bd902d2cee":{"description":"El cliente está suspendido, así que la suma real tampoco se acreditaría.","content":{"application/json":{"schema":{"type":"object","properties":{"statusCode":{"type":"integer","example":403,"uniqueKey":"statusCode","typeLabel":"integer"},"timestamp":{"type":"string","format":"date-time","example":"2026-07-31T14:05:12.431Z","uniqueKey":"timestamp","typeLabel":"string\u003cdate-time>"},"path":{"type":"string","example":"/external/tags/add","uniqueKey":"path","typeLabel":"string"},"method":{"type":"string","example":"POST","uniqueKey":"method","typeLabel":"string"},"message":{"type":"string","example":"El cliente al que estás intentando sumar puntos se encuentra suspendido","uniqueKey":"message","typeLabel":"string"},"errors":{"oneOf":[{"type":"array","items":{"type":"object","uniqueKey":"errors.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object"},"uniqueKey":"errors.oneOf.1","typeLabel":"null"}],"uniqueKey":"errors","typeLabel":"object[] | null"},"data":{"oneOf":[{"type":"object","uniqueKey":"data.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"data.oneOf.1","typeLabel":"null"}],"uniqueKey":"data","typeLabel":"object | null"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"statusCode":403,"timestamp":"2026-07-31T14:05:12.431Z","path":"/external/tags/add","method":"POST","message":"El cliente al que estás intentando sumar puntos se encuentra suspendido","errors":[{}],"data":{}}}},"exampleType":"generated"}},"exampleType":"generated"},"a2f57e84-ce92-4ad0-ae13-0fd96a88ad38":{"description":"El cliente, la sucursal o alguno de los ítems no existe para este comercio.","content":{"application/json":{"schema":{"type":"object","properties":{"statusCode":{"type":"integer","example":404,"uniqueKey":"statusCode","typeLabel":"integer"},"timestamp":{"type":"string","format":"date-time","example":"2026-07-31T14:05:12.431Z","uniqueKey":"timestamp","typeLabel":"string\u003cdate-time>"},"path":{"type":"string","example":"/external/tags/add","uniqueKey":"path","typeLabel":"string"},"method":{"type":"string","example":"POST","uniqueKey":"method","typeLabel":"string"},"message":{"type":"string","example":"Client not found","uniqueKey":"message","typeLabel":"string"},"errors":{"oneOf":[{"type":"array","items":{"type":"object","uniqueKey":"errors.oneOf.0.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors.oneOf.0","typeLabel":"object[]"},{"type":"null","items":{"type":"object"},"uniqueKey":"errors.oneOf.1","typeLabel":"null"}],"uniqueKey":"errors","typeLabel":"object[] | null"},"data":{"oneOf":[{"type":"object","uniqueKey":"data.oneOf.0","typeLabel":"object"},{"type":"null","uniqueKey":"data.oneOf.1","typeLabel":"null"}],"uniqueKey":"data","typeLabel":"object | null"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"statusCode":404,"timestamp":"2026-07-31T14:05:12.431Z","path":"/external/tags/add","method":"POST","message":"Client not found","errors":[{}],"data":{}}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"e4e218c7-0301-4b62-bb5b-e8ace236935e":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"x-api-key","description":"API key del comercio. Se genera desde el panel de Tienda de Puntos, en Configuración → Integraciones.","scopes":[]}}},"servers":{"b3a69718-a9fe-4116-a340-620ea57d373e":{"url":"https://api.tiendadepuntos.com","description":"Producción"},"b1c4d4f7-1090-47b8-b751-e9830f418b25":{"url":"https://api-qa.tiendadepuntos.com","description":"QA"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"apiKey","in":"header","name":"x-api-key","description":"API key del comercio. Se genera desde el panel de Tienda de Puntos, en Configuración → Integraciones.","scopes":[]},"schema":{"title":"x-api-key","type":"string","description":"API key del comercio. Se genera desde el panel de Tienda de Puntos, en Configuración → Integraciones.","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"ApiKeyAuth","name":"x-api-key"}],"title":"ApiKeyAuth"}]},"originalFileLocation":"api-reference/openapi.json"},"subdomain":"tiendadepuntos","siteName":"Tienda de Puntos","title":"Simular una suma de puntos - Tienda de Puntos","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-04T04:06:03.854Z","originalFileLocation":"api-reference/endpoints/puntos/simular-una-suma-de-puntos.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"light\"}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=\"Devuelve cuántos puntos se acreditarían, con el desglose, sin acreditar nada. Sirve para mostrarle al cliente lo que va a sumar antes de cerrar la venta. Mandá uno de estos tres: amount (monto de la compra), initialPointsToGive (puntos directos) o pointItems (ítems de puntos con sus cantidades, cuyos IDs salen de GET /external/point-items). A diferencia de POST /external/tags/add, el cliente se identifica por clientId y tiene que existir: previsualizar no da de alta a nadie. No reserva nada. El resultado es el de este momento: si cambian las bonificaciones, el nivel del cliente o el catálogo de ítems, la suma real puede dar distinto. Mandá el mismo branch_id que vas a usar después, porque hay bonificaciones por sucursal. Cómo pasar de la simulación a la suma real: POST /external/tags/add acepta amount o pointItems, pero con otro formato: allá pointItems es un array de ids donde la cantidad se expresa repitiendo el id ([{ \u0026quot;id\u0026quot;: 12, \u0026quot;quantity\u0026quot;: 2 }] acá equivale a [12, 12] allá). La suma real no acepta initialPointsToGive: si simulás por ese modo, no hay una acreditación equivalente por esta API.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Tienda de Puntos\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/tiendadepuntos/ZKpZ9fYtIWUbQCtI/_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/tiendadepuntos/ZKpZ9fYtIWUbQCtI/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/tiendadepuntos/ZKpZ9fYtIWUbQCtI/_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/tiendadepuntos/ZKpZ9fYtIWUbQCtI/_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/tiendadepuntos/ZKpZ9fYtIWUbQCtI/_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/tiendadepuntos/ZKpZ9fYtIWUbQCtI/_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/tiendadepuntos/ZKpZ9fYtIWUbQCtI/_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/tiendadepuntos/ZKpZ9fYtIWUbQCtI/_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/tiendadepuntos/ZKpZ9fYtIWUbQCtI/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Simular una suma de puntos - Tienda de Puntos\">\u003cmeta data-mint-head property=\"og:description\" content=\"Devuelve cuántos puntos se acreditarían, con el desglose, sin acreditar nada. Sirve para mostrarle al cliente lo que va a sumar antes de cerrar la venta. Mandá uno de estos tres: amount (monto de la compra), initialPointsToGive (puntos directos) o pointItems (ítems de puntos con sus cantidades, cuyos IDs salen de GET /external/point-items). A diferencia de POST /external/tags/add, el cliente se identifica por clientId y tiene que existir: previsualizar no da de alta a nadie. No reserva nada. El resultado es el de este momento: si cambian las bonificaciones, el nivel del cliente o el catálogo de ítems, la suma real puede dar distinto. Mandá el mismo branch_id que vas a usar después, porque hay bonificaciones por sucursal. Cómo pasar de la simulación a la suma real: POST /external/tags/add acepta amount o pointItems, pero con otro formato: allá pointItems es un array de ids donde la cantidad se expresa repitiendo el id ([{ \u0026quot;id\u0026quot;: 12, \u0026quot;quantity\u0026quot;: 2 }] acá equivale a [12, 12] allá). La suma real no acepta initialPointsToGive: si simulás por ese modo, no hay una acreditación equivalente por esta API.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Tienda de Puntos\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://developers.tiendadepuntos.com/api-reference/endpoints/puntos/simular-una-suma-de-puntos\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://tiendadepuntos.mintlify.site/_mintlify/api/og/v2?division=Puntos\u0026amp;title=Simular+una+suma+de+puntos\u0026amp;description=Devuelve+cu%C3%A1ntos+puntos+se+acreditar%C3%ADan%2C+con+el+desglose%2C+**sin+acreditar+nada**.+Sirve+para+mostrarle+al+cliente+lo+que+va+a+sumar+antes+de+cerrar+la+venta.%0A%0AM\u0026amp;theme=60cc8662eaf373727367a979\u0026amp;signature=d50bd0e17f1077a580f3067fc114d43da4ccba185a01716eed9f90ef2fcf623d\">\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=\"Simular una suma de puntos - Tienda de Puntos\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Devuelve cuántos puntos se acreditarían, con el desglose, sin acreditar nada. Sirve para mostrarle al cliente lo que va a sumar antes de cerrar la venta. Mandá uno de estos tres: amount (monto de la compra), initialPointsToGive (puntos directos) o pointItems (ítems de puntos con sus cantidades, cuyos IDs salen de GET /external/point-items). A diferencia de POST /external/tags/add, el cliente se identifica por clientId y tiene que existir: previsualizar no da de alta a nadie. No reserva nada. El resultado es el de este momento: si cambian las bonificaciones, el nivel del cliente o el catálogo de ítems, la suma real puede dar distinto. Mandá el mismo branch_id que vas a usar después, porque hay bonificaciones por sucursal. Cómo pasar de la simulación a la suma real: POST /external/tags/add acepta amount o pointItems, pero con otro formato: allá pointItems es un array de ids donde la cantidad se expresa repitiendo el id ([{ \u0026quot;id\u0026quot;: 12, \u0026quot;quantity\u0026quot;: 2 }] acá equivale a [12, 12] allá). La suma real no acepta initialPointsToGive: si simulás por ese modo, no hay una acreditación equivalente por esta API.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://tiendadepuntos.mintlify.site/_mintlify/api/og/v2?division=Puntos\u0026amp;title=Simular+una+suma+de+puntos\u0026amp;description=Devuelve+cu%C3%A1ntos+puntos+se+acreditar%C3%ADan%2C+con+el+desglose%2C+**sin+acreditar+nada**.+Sirve+para+mostrarle+al+cliente+lo+que+va+a+sumar+antes+de+cerrar+la+venta.%0A%0AM\u0026amp;theme=60cc8662eaf373727367a979\u0026amp;signature=d50bd0e17f1077a580f3067fc114d43da4ccba185a01716eed9f90ef2fcf623d\">\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/tiendadepuntos/ZKpZ9fYtIWUbQCtI/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Tienda de Puntos\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#5b53f0\">\u003clink data-mint-head rel=\"canonical\" href=\"https://developers.tiendadepuntos.com/api-reference/endpoints/puntos/simular-una-suma-de-puntos\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/endpoints/puntos/simular-una-suma-de-puntos.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://developers.tiendadepuntos.com/#organization\",\"name\":\"Tienda de Puntos\",\"url\":\"https://developers.tiendadepuntos.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/tiendadepuntos/WnSIFgAFSkI7bdnr/logo/light.png?fit=max\u0026auto=format\u0026n=WnSIFgAFSkI7bdnr\u0026q=85\u0026s=8187339b0bc9e96cfb1fede6be7db42f\"}},{\"@type\":\"WebSite\",\"@id\":\"https://developers.tiendadepuntos.com#website\",\"name\":\"Tienda de Puntos\",\"url\":\"https://developers.tiendadepuntos.com\",\"publisher\":{\"@id\":\"https://developers.tiendadepuntos.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://developers.tiendadepuntos.com/api-reference/endpoints/puntos/simular-una-suma-de-puntos#webpage\",\"url\":\"https://developers.tiendadepuntos.com/api-reference/endpoints/puntos/simular-una-suma-de-puntos\",\"name\":\"Simular una suma de puntos\",\"description\":\"Devuelve cuántos puntos se acreditarían, con el desglose, sin acreditar nada. Sirve para mostrarle al cliente lo que va a sumar antes de cerrar la venta. Mandá uno de estos tres: amount (monto de la compra), initialPointsToGive (puntos directos) o pointItems (ítems de puntos con sus cantidades, cuyos IDs salen de GET /external/point-items). A diferencia de POST /external/tags/add, el cliente se identifica por clientId y tiene que existir: previsualizar no da de alta a nadie. No reserva nada. El resultado es el de este momento: si cambian las bonificaciones, el nivel del cliente o el catálogo de ítems, la suma real puede dar distinto. Mandá el mismo branch_id que vas a usar después, porque hay bonificaciones por sucursal. Cómo pasar de la simulación a la suma real: POST /external/tags/add acepta amount o pointItems, pero con otro formato: allá pointItems es un array de ids donde la cantidad se expresa repitiendo el id ([{ \\\"id\\\": 12, \\\"quantity\\\": 2 }] acá equivale a [12, 12] allá). La suma real no acepta initialPointsToGive: si simulás por ese modo, no hay una acreditación equivalente por esta API.\",\"dateModified\":\"2026-10-04T04:06:03.854Z\",\"isPartOf\":{\"@id\":\"https://developers.tiendadepuntos.com#website\"},\"breadcrumb\":{\"@id\":\"https://developers.tiendadepuntos.com/api-reference/endpoints/puntos/simular-una-suma-de-puntos#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://developers.tiendadepuntos.com/api-reference/endpoints/puntos/simular-una-suma-de-puntos#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"API · Endpoints\",\"item\":\"https://developers.tiendadepuntos.com/api-reference/endpoints/operadores/listar-operadores\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Puntos\",\"item\":\"https://developers.tiendadepuntos.com/api-reference/endpoints/puntos/crear-una-oferta-de-puntos-qr-o-email\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Simular una suma de puntos\",\"item\":\"https://developers.tiendadepuntos.com/api-reference/endpoints/puntos/simular-una-suma-de-puntos\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://developers.tiendadepuntos.com/api-reference/endpoints/puntos/simular-una-suma-de-puntos#apireference\",\"headline\":\"Simular una suma de puntos\",\"name\":\"Simular una suma de puntos\",\"description\":\"Devuelve cuántos puntos se acreditarían, con el desglose, sin acreditar nada. Sirve para mostrarle al cliente lo que va a sumar antes de cerrar la venta. Mandá uno de estos tres: amount (monto de la compra), initialPointsToGive (puntos directos) o pointItems (ítems de puntos con sus cantidades, cuyos IDs salen de GET /external/point-items). A diferencia de POST /external/tags/add, el cliente se identifica por clientId y tiene que existir: previsualizar no da de alta a nadie. No reserva nada. El resultado es el de este momento: si cambian las bonificaciones, el nivel del cliente o el catálogo de ítems, la suma real puede dar distinto. Mandá el mismo branch_id que vas a usar después, porque hay bonificaciones por sucursal. Cómo pasar de la simulación a la suma real: POST /external/tags/add acepta amount o pointItems, pero con otro formato: allá pointItems es un array de ids donde la cantidad se expresa repitiendo el id ([{ \\\"id\\\": 12, \\\"quantity\\\": 2 }] acá equivale a [12, 12] allá). La suma real no acepta initialPointsToGive: si simulás por ese modo, no hay una acreditación equivalente por esta API.\",\"url\":\"https://developers.tiendadepuntos.com/api-reference/endpoints/puntos/simular-una-suma-de-puntos\",\"mainEntityOfPage\":{\"@id\":\"https://developers.tiendadepuntos.com/api-reference/endpoints/puntos/simular-una-suma-de-puntos#webpage\"},\"dateModified\":\"2026-10-04T04:06:03.854Z\",\"publisher\":{\"@id\":\"https://developers.tiendadepuntos.com/#organization\"},\"isPartOf\":{\"@id\":\"https://developers.tiendadepuntos.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Tienda de Puntos\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Tienda de Puntos","nav":{"global":null,"tabs":[{"tab":"Ayuda","pages":[{"title":"Ayuda","href":""}]},{"tab":"Documentación","groups":[{"group":"Guías del panel","pages":[{"title":"Documentación","href":"/documentacion"},{"title":"Primeros pasos","href":"/primeros-pasos"},{"title":"Pantallas principales","href":"/pantallas-principales"}]},{"group":"API · Empezar","pages":[{"title":"Introducción a la API","href":"/api-reference/introduccion"},{"title":"Autenticación","href":"/api-reference/autenticacion"},{"title":"Integrar tu punto de venta","href":"/api-reference/quickstart"},{"title":"Administrar el programa","href":"/api-reference/administracion"},{"title":"Errores y límites","href":"/api-reference/errores"}]},{"group":"API · Endpoints","pages":[{"group":"Operadores","pages":[{"title":"Listar operadores","deprecated":null,"version":null,"sidebarTitle":"Listar operadores","openapi":"/api-reference/openapi.json get /external/operators","href":"/api-reference/endpoints/operadores/listar-operadores"},{"title":"Crear un operador","deprecated":null,"version":null,"sidebarTitle":"Crear un operador","openapi":"/api-reference/openapi.json post /external/operators","href":"/api-reference/endpoints/operadores/crear-un-operador"},{"title":"Obtener un operador","deprecated":null,"version":null,"sidebarTitle":"Obtener un operador","openapi":"/api-reference/openapi.json get /external/operators/{id}","href":"/api-reference/endpoints/operadores/obtener-un-operador"},{"title":"Actualizar un operador","deprecated":null,"version":null,"sidebarTitle":"Actualizar un operador","openapi":"/api-reference/openapi.json put /external/operators/{id}","href":"/api-reference/endpoints/operadores/actualizar-un-operador"},{"title":"Eliminar un operador","deprecated":null,"version":null,"sidebarTitle":"Eliminar un operador","openapi":"/api-reference/openapi.json delete /external/operators/{id}","href":"/api-reference/endpoints/operadores/eliminar-un-operador"}]},{"group":"Clientes","pages":[{"title":"Listar clientes","deprecated":null,"version":null,"sidebarTitle":"Listar clientes","openapi":"/api-reference/openapi.json get /external/clients","href":"/api-reference/endpoints/clientes/listar-clientes"},{"title":"Crear un cliente","deprecated":null,"version":null,"sidebarTitle":"Crear un cliente","openapi":"/api-reference/openapi.json post /external/clients","href":"/api-reference/endpoints/clientes/crear-un-cliente"},{"title":"Buscar un cliente por email o documento","deprecated":null,"version":null,"sidebarTitle":"Buscar un cliente por email o documento","openapi":"/api-reference/openapi.json get /external/clients/search","href":"/api-reference/endpoints/clientes/buscar-un-cliente-por-email-o-documento"},{"title":"Actualizar un cliente","deprecated":null,"version":null,"sidebarTitle":"Actualizar un cliente","openapi":"/api-reference/openapi.json put /external/clients/{id}","href":"/api-reference/endpoints/clientes/actualizar-un-cliente"},{"title":"Eliminar un cliente","deprecated":null,"version":null,"sidebarTitle":"Eliminar un cliente","openapi":"/api-reference/openapi.json delete /external/clients/{id}","href":"/api-reference/endpoints/clientes/eliminar-un-cliente"},{"title":"Cambiar el estado de un cliente","deprecated":null,"version":null,"sidebarTitle":"Cambiar el estado de un cliente","openapi":"/api-reference/openapi.json put /external/clients/{id}/status","href":"/api-reference/endpoints/clientes/cambiar-el-estado-de-un-cliente"}]},{"group":"Sucursales","pages":[{"title":"Listar sucursales","deprecated":null,"version":null,"sidebarTitle":"Listar sucursales","openapi":"/api-reference/openapi.json get /external/branch","href":"/api-reference/endpoints/sucursales/listar-sucursales"},{"title":"Obtener una sucursal","deprecated":null,"version":null,"sidebarTitle":"Obtener una sucursal","openapi":"/api-reference/openapi.json get /external/branch/{id}","href":"/api-reference/endpoints/sucursales/obtener-una-sucursal"}]},{"group":"Premios","pages":[{"title":"Listar premios","deprecated":null,"version":null,"sidebarTitle":"Listar premios","openapi":"/api-reference/openapi.json get /external/products","href":"/api-reference/endpoints/premios/listar-premios"},{"title":"Crear un premio","deprecated":null,"version":null,"sidebarTitle":"Crear un premio","openapi":"/api-reference/openapi.json post /external/products","href":"/api-reference/endpoints/premios/crear-un-premio"},{"title":"Obtener un premio","deprecated":null,"version":null,"sidebarTitle":"Obtener un premio","openapi":"/api-reference/openapi.json get /external/products/{id}","href":"/api-reference/endpoints/premios/obtener-un-premio"},{"title":"Actualizar un premio","deprecated":null,"version":null,"sidebarTitle":"Actualizar un premio","openapi":"/api-reference/openapi.json put /external/products/{id}","href":"/api-reference/endpoints/premios/actualizar-un-premio"},{"title":"Eliminar un premio","deprecated":null,"version":null,"sidebarTitle":"Eliminar un premio","openapi":"/api-reference/openapi.json delete /external/products/{id}","href":"/api-reference/endpoints/premios/eliminar-un-premio"}]},{"group":"Niveles","pages":[{"title":"Listar niveles","deprecated":null,"version":null,"sidebarTitle":"Listar niveles","openapi":"/api-reference/openapi.json get /external/levels","href":"/api-reference/endpoints/niveles/listar-niveles"},{"title":"Crear un nivel","deprecated":null,"version":null,"sidebarTitle":"Crear un nivel","openapi":"/api-reference/openapi.json post /external/levels","href":"/api-reference/endpoints/niveles/crear-un-nivel"},{"title":"Obtener un nivel","deprecated":null,"version":null,"sidebarTitle":"Obtener un nivel","openapi":"/api-reference/openapi.json get /external/levels/{id}","href":"/api-reference/endpoints/niveles/obtener-un-nivel"},{"title":"Actualizar un nivel","deprecated":null,"version":null,"sidebarTitle":"Actualizar un nivel","openapi":"/api-reference/openapi.json put /external/levels/{id}","href":"/api-reference/endpoints/niveles/actualizar-un-nivel"},{"title":"Eliminar un nivel","deprecated":null,"version":null,"sidebarTitle":"Eliminar un nivel","openapi":"/api-reference/openapi.json delete /external/levels/{id}","href":"/api-reference/endpoints/niveles/eliminar-un-nivel"}]},{"group":"Puntos","pages":[{"title":"Crear una oferta de puntos (QR o email)","deprecated":null,"version":null,"sidebarTitle":"Crear una oferta de puntos (QR o email)","openapi":"/api-reference/openapi.json post /external/tags","href":"/api-reference/endpoints/puntos/crear-una-oferta-de-puntos-qr-o-email"},{"title":"Actualizar el monto de una oferta QR","deprecated":null,"version":null,"sidebarTitle":"Actualizar el monto de una oferta QR","openapi":"/api-reference/openapi.json put /external/tags/{id}","href":"/api-reference/endpoints/puntos/actualizar-el-monto-de-una-oferta-qr"},{"title":"Sumar puntos a un cliente por una compra","description":"Acredita puntos de forma inmediata a partir del monto de una compra. Es el endpoint principal para integrar un POS o ERP.\n\nEl cliente se identifica por `email` o `dni`. Si no existe, se crea automáticamente, salvo que se mande `ignoreCreateClient: true`.\n\n**Idempotencia**: mandá siempre `external_id` con el identificador de la venta en tu sistema (número de factura, id de ticket). Si llega un `external_id` que ya tiene una operación activa, la API responde 409 en vez de duplicar los puntos. Ese mismo `external_id` es el que se usa para cancelar la operación después.\n\n**Sumar por ítems (`pointItems`)**: en vez del monto podés mandar los ids de los ítems de puntos del catálogo del comercio. Repetí el mismo id para cargar más de una unidad del ítem (tope de 100 ids). Si viene `pointItems`, el `amount` del body se ignora y el `amount` de la respuesta es la suma de los montos de los ítems; `points.selectedRewardType` pasa a `items`. Las bonificaciones de nivel y las reglas de puntos se siguen aplicando igual que en la suma por monto.","deprecated":null,"version":null,"sidebarTitle":"Sumar puntos a un cliente por una compra","openapi":"/api-reference/openapi.json post /external/tags/add","href":"/api-reference/endpoints/puntos/sumar-puntos-a-un-cliente-por-una-compra"},{"title":"Simular una suma de puntos","deprecated":null,"version":null,"sidebarTitle":"Simular una suma de puntos","openapi":"/api-reference/openapi.json post /external/tags/add/preview","href":"/api-reference/endpoints/puntos/simular-una-suma-de-puntos"},{"title":"Cancelar una suma de puntos","description":"Revierte una operación de puntos identificada por el `external_id` con el que se creó. Se usa cuando se anula la venta en el sistema de origen. Descuenta los puntos que se habían acreditado.","deprecated":null,"version":null,"sidebarTitle":"Cancelar una suma de puntos","openapi":"/api-reference/openapi.json put /external/tags/cancel/{externalId}","href":"/api-reference/endpoints/puntos/cancelar-una-suma-de-puntos"}]},{"group":"Códigos de validación","pages":[{"title":"Listar QRs con código de validación","deprecated":null,"version":null,"sidebarTitle":"Listar QRs con código de validación","openapi":"/api-reference/openapi.json get /external/validation-code/qrs","href":"/api-reference/endpoints/codigos-de-validacion/listar-qrs-con-codigo-de-validacion"},{"title":"Obtener el código vigente de un QR","deprecated":null,"version":null,"sidebarTitle":"Obtener el código vigente de un QR","openapi":"/api-reference/openapi.json get /external/validation-code/{qrId}/current","href":"/api-reference/endpoints/codigos-de-validacion/obtener-el-codigo-vigente-de-un-qr"},{"title":"Validar el código ingresado por el cliente","deprecated":null,"version":null,"sidebarTitle":"Validar el código ingresado por el cliente","openapi":"/api-reference/openapi.json post /external/validation-code/{qrId}/validate","href":"/api-reference/endpoints/codigos-de-validacion/validar-el-codigo-ingresado-por-el-cliente"}]},{"group":"Ítems de puntos","pages":[{"title":"Listar ítems de puntos","deprecated":null,"version":null,"sidebarTitle":"Listar ítems de puntos","openapi":"/api-reference/openapi.json get /external/point-items","href":"/api-reference/endpoints/items-de-puntos/listar-items-de-puntos"},{"title":"Crear un ítem de puntos","deprecated":null,"version":null,"sidebarTitle":"Crear un ítem de puntos","openapi":"/api-reference/openapi.json post /external/point-items","href":"/api-reference/endpoints/items-de-puntos/crear-un-item-de-puntos"},{"title":"Obtener un ítem de puntos","deprecated":null,"version":null,"sidebarTitle":"Obtener un ítem de puntos","openapi":"/api-reference/openapi.json get /external/point-items/{id}","href":"/api-reference/endpoints/items-de-puntos/obtener-un-item-de-puntos"},{"title":"Actualizar un ítem de puntos","deprecated":null,"version":null,"sidebarTitle":"Actualizar un ítem de puntos","openapi":"/api-reference/openapi.json put /external/point-items/{id}","href":"/api-reference/endpoints/items-de-puntos/actualizar-un-item-de-puntos"},{"title":"Eliminar un ítem de puntos","deprecated":null,"version":null,"sidebarTitle":"Eliminar un ítem de puntos","openapi":"/api-reference/openapi.json delete /external/point-items/{id}","href":"/api-reference/endpoints/items-de-puntos/eliminar-un-item-de-puntos"}]},{"group":"Canjes","pages":[{"title":"Listar canjes","deprecated":null,"version":null,"sidebarTitle":"Listar canjes","openapi":"/api-reference/openapi.json get /external/purchase","href":"/api-reference/endpoints/canjes/listar-canjes"},{"title":"Entregar un canje","deprecated":null,"version":null,"sidebarTitle":"Entregar un canje","openapi":"/api-reference/openapi.json post /external/purchase/redeem/{code}","href":"/api-reference/endpoints/canjes/entregar-un-canje"},{"title":"Consultar un canje por código","deprecated":null,"version":null,"sidebarTitle":"Consultar un canje por código","openapi":"/api-reference/openapi.json get /external/purchase/code/{code}","href":"/api-reference/endpoints/canjes/consultar-un-canje-por-codigo"},{"title":"Canjear un premio","deprecated":null,"version":null,"sidebarTitle":"Canjear un premio","openapi":"/api-reference/openapi.json post /external/exchange/product","href":"/api-reference/endpoints/canjes/canjear-un-premio"},{"title":"Canjear puntos por dinero","deprecated":null,"version":null,"sidebarTitle":"Canjear puntos por dinero","openapi":"/api-reference/openapi.json post /external/exchange/money","href":"/api-reference/endpoints/canjes/canjear-puntos-por-dinero"}]}]}]},{"tab":"Integraciones","pages":[{"title":"Integraciones","href":"/integraciones"}]},{"tab":"Blog","href":"https://www.tiendadepuntos.com/blog"}]},"basePath":"","title":"Simular una suma de puntos - Tienda de Puntos","buildId":"dpl_DTau1J5HqS9UTgVSDwGksstFWtPa","deploymentId":"dpl_DTau1J5HqS9UTgVSDwGksstFWtPa","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-5FCzAcfS.js","utils-SLtAG4EZ.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-2DZi8ZMu.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-D7J3nkzE.js","snippetPresets-D0Alv0AH.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-BI4qNJ2c.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BD3uyr8j.js","shallow-D8iEBr5z.js","getApiPlaygroundDisplay-CgNP4lzR.js","CodeSnippet-CX-QHuMs.js","CodeSnippets-VlXE-ZUf.js","Page-D9ithiIZ.js","getPastedJson-DYNQkZ1M.js","icon-CzacdwOi.js","MethodPill-2JVqoYKi.js","DuplicateIcon-_xVXs-U8.js","createIcon-BRHrweLo.js","DynamicMarkdown-mQG_iQiE.js","SectionHeading-DMpJzv8f.js","axios-vUo_bRtp.js","Markdown-5FGIym-8.js","clsx-D-TRO5q5.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CdrJecqK.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-CHlcWBLM.js"]}