[{"data":1,"prerenderedAt":572},["ShallowReactive",2],{"docs:\u002Fdocs\u002Fportal-del-cliente":3,"docs-surround:\u002Fdocs\u002Fportal-del-cliente":548,"docs-navigation":556},{"id":4,"title":5,"body":6,"description":540,"extension":541,"meta":542,"navigation":543,"path":544,"seo":545,"stem":546,"__hash__":547},"docs\u002Fdocs\u002F5.portal-del-cliente.md","Portal del cliente",{"type":7,"value":8,"toc":535},"minimark",[9,18,40,48,53,56,130,234,245,274,278,285,366,369,373,404,521,531],[10,11,12,13,17],"p",{},"El portal del cliente (",[14,15,16],"code",{},"checkout.paygumi.com\u002Fportal",") es donde tu cliente gestiona su suscripción por su cuenta, con la marca de tu empresa:",[19,20,21,25,28,31,34,37],"ul",{},[22,23,24],"li",{},"Ver sus suscripciones: plan, estado, monto y próxima fecha de cobro.",[22,26,27],{},"Ver su historial de pagos.",[22,29,30],{},"Actualizar su tarjeta.",[22,32,33],{},"Pagar ahora un cobro rechazado.",[22,35,36],{},"Cancelar (y deshacer la cancelación mientras el periodo no termine).",[22,38,39],{},"Si lo permites: cambiar de plan y pausar.",[10,41,42,43,47],{},"Tu cliente no tiene cuenta en Paygumi: quien lo autentica eres tú. Por eso entra con una ",[44,45,46],"strong",{},"sesión de portal"," que crea tu backend.",[49,50,52],"h2",{"id":51},"crear-la-sesión","Crear la sesión",[10,54,55],{},"Pon en tu app un botón como \"Gestionar mi suscripción\". Al hacer clic, tu backend crea la sesión y redirige al usuario:",[57,58,63],"pre",{"className":59,"code":60,"language":61,"meta":62,"style":62},"language-bash shiki shiki-themes github-light github-dark","curl https:\u002F\u002Fapi.paygumi.com\u002Fv1\u002Fportal-sessions \\\n  -H \"Authorization: Bearer pgm_test_...\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"external_id\": \"user_42\",\n    \"return_url\": \"https:\u002F\u002Ftuapp.co\u002Fcuenta\"\n  }'\n","bash","",[14,64,65,82,93,103,112,118,124],{"__ignoreMap":62},[66,67,70,74,78],"span",{"class":68,"line":69},"line",1,[66,71,73],{"class":72},"sScJk","curl",[66,75,77],{"class":76},"sZZnC"," https:\u002F\u002Fapi.paygumi.com\u002Fv1\u002Fportal-sessions",[66,79,81],{"class":80},"sj4cs"," \\\n",[66,83,85,88,91],{"class":68,"line":84},2,[66,86,87],{"class":80},"  -H",[66,89,90],{"class":76}," \"Authorization: Bearer pgm_test_...\"",[66,92,81],{"class":80},[66,94,96,98,101],{"class":68,"line":95},3,[66,97,87],{"class":80},[66,99,100],{"class":76}," \"Content-Type: application\u002Fjson\"",[66,102,81],{"class":80},[66,104,106,109],{"class":68,"line":105},4,[66,107,108],{"class":80},"  -d",[66,110,111],{"class":76}," '{\n",[66,113,115],{"class":68,"line":114},5,[66,116,117],{"class":76},"    \"external_id\": \"user_42\",\n",[66,119,121],{"class":68,"line":120},6,[66,122,123],{"class":76},"    \"return_url\": \"https:\u002F\u002Ftuapp.co\u002Fcuenta\"\n",[66,125,127],{"class":68,"line":126},7,[66,128,129],{"class":76},"  }'\n",[57,131,135],{"className":132,"code":133,"language":134,"meta":62,"style":62},"language-json shiki shiki-themes github-light github-dark","{\n  \"id\": \"ps_01JB86R800ABCDEFGHJKMNPQRS\",\n  \"environment\": \"SANDBOX\",\n  \"customer_id\": \"cus_01JB86R800ABCDEFGHJKMNPQRS\",\n  \"url\": \"https:\u002F\u002Fcheckout.paygumi.com\u002Fportal\u002Fs\u002F3q2-7wEXAMPLEtokenEXAMPLEtokenEXAMPLEtoke\",\n  \"return_url\": \"https:\u002F\u002Ftuapp.co\u002Fcuenta\",\n  \"expires_at\": \"2026-11-01T05:05:00Z\",\n  \"created_at\": \"2026-11-01T05:00:00Z\"\n}\n","json",[14,136,137,143,157,169,181,193,205,217,228],{"__ignoreMap":62},[66,138,139],{"class":68,"line":69},[66,140,142],{"class":141},"sVt8B","{\n",[66,144,145,148,151,154],{"class":68,"line":84},[66,146,147],{"class":80},"  \"id\"",[66,149,150],{"class":141},": ",[66,152,153],{"class":76},"\"ps_01JB86R800ABCDEFGHJKMNPQRS\"",[66,155,156],{"class":141},",\n",[66,158,159,162,164,167],{"class":68,"line":95},[66,160,161],{"class":80},"  \"environment\"",[66,163,150],{"class":141},[66,165,166],{"class":76},"\"SANDBOX\"",[66,168,156],{"class":141},[66,170,171,174,176,179],{"class":68,"line":105},[66,172,173],{"class":80},"  \"customer_id\"",[66,175,150],{"class":141},[66,177,178],{"class":76},"\"cus_01JB86R800ABCDEFGHJKMNPQRS\"",[66,180,156],{"class":141},[66,182,183,186,188,191],{"class":68,"line":114},[66,184,185],{"class":80},"  \"url\"",[66,187,150],{"class":141},[66,189,190],{"class":76},"\"https:\u002F\u002Fcheckout.paygumi.com\u002Fportal\u002Fs\u002F3q2-7wEXAMPLEtokenEXAMPLEtokenEXAMPLEtoke\"",[66,192,156],{"class":141},[66,194,195,198,200,203],{"class":68,"line":120},[66,196,197],{"class":80},"  \"return_url\"",[66,199,150],{"class":141},[66,201,202],{"class":76},"\"https:\u002F\u002Ftuapp.co\u002Fcuenta\"",[66,204,156],{"class":141},[66,206,207,210,212,215],{"class":68,"line":126},[66,208,209],{"class":80},"  \"expires_at\"",[66,211,150],{"class":141},[66,213,214],{"class":76},"\"2026-11-01T05:05:00Z\"",[66,216,156],{"class":141},[66,218,220,223,225],{"class":68,"line":219},8,[66,221,222],{"class":80},"  \"created_at\"",[66,224,150],{"class":141},[66,226,227],{"class":76},"\"2026-11-01T05:00:00Z\"\n",[66,229,231],{"class":68,"line":230},9,[66,232,233],{"class":141},"}\n",[10,235,236,237,240,241,244],{},"Redirige a ",[14,238,239],{},"url"," con un ",[14,242,243],{},"303 See Other",".",[19,246,247,258,264,271],{},[22,248,249,250,253,254,257],{},"Identifica al cliente con ",[14,251,252],{},"customer_id"," o con tu ",[14,255,256],{},"external_id"," (uno de los dos).",[22,259,260,263],{},[14,261,262],{},"return_url"," es a dónde lleva el botón \"Volver\" del portal. Si no la envías, se usa la URL de retorno por defecto que configuraste en el panel.",[22,265,266,267,270],{},"El enlace ",[44,268,269],{},"vence en 5 minutos y sirve una sola vez",". Créalo justo en el clic; no lo envíes por correo ni lo guardes.",[22,272,273],{},"Al abrirlo, el portal da a tu cliente un acceso de 60 minutos. Al vencer, vuelve a tu app para entrar de nuevo.",[49,275,277],{"id":276},"qué-puede-hacer-tu-cliente","Qué puede hacer tu cliente",[10,279,280,281,284],{},"Lo decides en el panel, en ",[44,282,283],{},"Configuración → Portal del cliente",", por entorno:",[286,287,288,301],"table",{},[289,290,291],"thead",{},[292,293,294,298],"tr",{},[295,296,297],"th",{},"Opción",[295,299,300],{},"Valores",[302,303,304,316,324,332,340,348,358],"tbody",{},[292,305,306,310],{},[307,308,309],"td",{},"Portal habilitado",[307,311,312,313,244],{},"Sí \u002F no. Deshabilitado, crear la sesión responde ",[14,314,315],{},"409 portal_disabled",[292,317,318,321],{},[307,319,320],{},"Cancelación",[307,322,323],{},"Deshabilitada, al final del periodo o inmediata.",[292,325,326,329],{},[307,327,328],{},"Motivos de cancelación",[307,330,331],{},"Lista de motivos a preguntar (o ninguno).",[292,333,334,337],{},[307,335,336],{},"Cambio de plan",[307,338,339],{},"Sí \u002F no, y a qué planes. Se aplica al cierre del periodo.",[292,341,342,345],{},[307,343,344],{},"Pausa",[307,346,347],{},"Sí \u002F no.",[292,349,350,353],{},[307,351,352],{},"URL de retorno por defecto",[307,354,355,356,244],{},"A dónde vuelve el cliente si la sesión no trae ",[14,357,262],{},[292,359,360,363],{},[307,361,362],{},"URL de soporte",[307,364,365],{},"Enlace de ayuda de tu empresa.",[10,367,368],{},"Las reglas se validan en Paygumi, no solo en la pantalla: tu cliente no puede hacer nada que no permitiste.",[49,370,372],{"id":371},"cómo-te-enteras","Cómo te enteras",[10,374,375,376,381,382,385,386,385,389,385,392,395,396,399,400,403],{},"Las acciones del portal generan los mismos ",[377,378,380],"a",{"href":379},"\u002Fdocs\u002Fwebhooks","webhooks"," que las de tu API (",[14,383,384],{},"subscription.updated",", ",[14,387,388],{},"subscription.canceled",[14,390,391],{},"subscription.plan_changed",[14,393,394],{},"payment_method.added","…), con ",[14,397,398],{},"initiated_by: \"customer_portal\"",". Si el cliente canceló, ",[14,401,402],{},"data.cancellation"," trae el motivo:",[57,405,407],{"className":132,"code":406,"language":134,"meta":62,"style":62},"{\n  \"type\": \"subscription.canceled\",\n  \"initiated_by\": \"customer_portal\",\n  \"data\": {\n    \"subscription\": { \"id\": \"sub_01JB86R800ABCDEFGHJKMNPQRS\", \"status\": \"canceled\", \"access_status\": \"revoked\" },\n    \"cancellation\": { \"reason\": \"Muy caro\", \"comment\": \"Lo retomo en enero\" }\n  }\n}\n",[14,408,409,413,425,437,445,484,512,517],{"__ignoreMap":62},[66,410,411],{"class":68,"line":69},[66,412,142],{"class":141},[66,414,415,418,420,423],{"class":68,"line":84},[66,416,417],{"class":80},"  \"type\"",[66,419,150],{"class":141},[66,421,422],{"class":76},"\"subscription.canceled\"",[66,424,156],{"class":141},[66,426,427,430,432,435],{"class":68,"line":95},[66,428,429],{"class":80},"  \"initiated_by\"",[66,431,150],{"class":141},[66,433,434],{"class":76},"\"customer_portal\"",[66,436,156],{"class":141},[66,438,439,442],{"class":68,"line":105},[66,440,441],{"class":80},"  \"data\"",[66,443,444],{"class":141},": {\n",[66,446,447,450,453,456,458,461,463,466,468,471,473,476,478,481],{"class":68,"line":114},[66,448,449],{"class":80},"    \"subscription\"",[66,451,452],{"class":141},": { ",[66,454,455],{"class":80},"\"id\"",[66,457,150],{"class":141},[66,459,460],{"class":76},"\"sub_01JB86R800ABCDEFGHJKMNPQRS\"",[66,462,385],{"class":141},[66,464,465],{"class":80},"\"status\"",[66,467,150],{"class":141},[66,469,470],{"class":76},"\"canceled\"",[66,472,385],{"class":141},[66,474,475],{"class":80},"\"access_status\"",[66,477,150],{"class":141},[66,479,480],{"class":76},"\"revoked\"",[66,482,483],{"class":141}," },\n",[66,485,486,489,491,494,496,499,501,504,506,509],{"class":68,"line":120},[66,487,488],{"class":80},"    \"cancellation\"",[66,490,452],{"class":141},[66,492,493],{"class":80},"\"reason\"",[66,495,150],{"class":141},[66,497,498],{"class":76},"\"Muy caro\"",[66,500,385],{"class":141},[66,502,503],{"class":80},"\"comment\"",[66,505,150],{"class":141},[66,507,508],{"class":76},"\"Lo retomo en enero\"",[66,510,511],{"class":141}," }\n",[66,513,514],{"class":68,"line":126},[66,515,516],{"class":141},"  }\n",[66,518,519],{"class":68,"line":219},[66,520,233],{"class":141},[10,522,523,524,527,528,244],{},"Cuando el cliente actualiza su tarjeta y tenía un cobro rechazado, Paygumi lo reintenta de inmediato y recibes ",[14,525,526],{},"payment.approved"," o ",[14,529,530],{},"payment.declined",[532,533,534],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":62,"searchDepth":95,"depth":95,"links":536},[537,538,539],{"id":51,"depth":84,"text":52},{"id":276,"depth":84,"text":277},{"id":371,"depth":84,"text":372},"Deja que tus clientes vean sus pagos, actualicen su tarjeta, paguen un cobro rechazado o cancelen, sin construir esas pantallas.","md",{},true,"\u002Fdocs\u002Fportal-del-cliente",{"title":5,"description":540},"docs\u002F5.portal-del-cliente","yHILcnNu2OUKue3WqP9uRFu5jt7HbFGk3Vc6WeKnN1o",[549,552],{"title":550,"path":379,"stem":551,"children":-1},"Webhooks","docs\u002F4.webhooks",{"title":553,"path":554,"stem":555,"children":-1},"Idempotencia y errores","\u002Fdocs\u002Fidempotencia-y-errores","docs\u002F6.idempotencia-y-errores",[557,560,563,566,569,570,571],{"title":558,"path":559},"Introducción","\u002Fdocs",{"title":561,"path":562},"Primeros pasos","\u002Fdocs\u002Fprimeros-pasos",{"title":564,"path":565},"Crear una sesión de checkout","\u002Fdocs\u002Fsesiones-de-checkout",{"title":567,"path":568},"Suscripciones y estados de acceso","\u002Fdocs\u002Fsuscripciones-y-acceso",{"title":550,"path":379},{"title":5,"path":544},{"title":553,"path":554},1794279320106]