Sesiones y configuración del Customer Portal

Cómo un cliente inicia sesión en el portal — el flujo de magic-link, la sesión actual, los datos de bootstrap y la configuración del portal.

El Customer Portal permite que un cliente gestione sus propias suscripciones y métodos de pago sin necesidad de contactar al soporte. Una sesión comienza con un magic link: el cliente solicita un enlace por correo electrónico y, luego, el paso de verificación intercambia el token enviado por correo por una cookie de sesión. Estos endpoints cubren ese handshake, la sesión actual, el payload de bootstrap que la interfaz carga primero, y la configuración del portal.

Todo lo demás en el portal — suscripciones, métodos de pago, cuenta — funciona sobre la cookie establecida aquí. El portal es white-label, por lo que su branding y las acciones permitidas provienen de la configuración del portal del Merchant.

Estos endpoints impulsan el Customer Portal — la superficie de self-service que usan tus clientes finales, bajo tu marca. Se autentican mediante una cookie de sesión del portal, establecida a través del flujo de magic-link (solicitar un enlace y luego verificar el token), y no mediante una clave de API. Consulta Sesiones y configuración.

La sesión del portal

Devuelto por los endpoints de listado y consulta de esta página.

FieldTypeDescription
idstringId de la cuenta del portal.
organization_idstring—
merchant_idstringMerchant al que está vinculada la sesión.
emailstring—
expires_innumberTiempo de vida de la sesión en segundos.

Endpoints

GET/api/v1/merchants/:merchant_id/portal-config

Auth: Customer Portal session (cookie establecida por el flujo de magic-link).

Branding y comportamiento del portal self-service que usan tus clientes para gestionar sus suscripciones. Devuelve valores predeterminados cuando aún no se ha configurado nada.

Parámetros de ruta

FieldTypeRequiredDescription
merchant_idstringSí—

Ejemplo de solicitud

curl https://api.tokeflow.com/api/v1/merchants/mrc_8a3f12d9/portal-config \
  -H "Cookie: tf_portal_session=…"

Ejemplo de respuesta — 200

{
  "merchant_id": "mrc_123",
  "allow_cancellation": true,
  "allow_plan_change": true,
  "allow_payment_method_change": true,
  "cancellation_survey": true,
  "custom_cancellation_message": "Operation completed successfully"
}

PUT/api/v1/merchants/:merchant_id/portal-config

Auth: Customer Portal session (cookie establecida por el flujo de magic-link).

Hace upsert de la configuración — la primera llamada la crea, las llamadas posteriores reemplazan los campos que envías.

Parámetros de ruta

FieldTypeRequiredDescription
merchant_idstringSí—

Campos de la solicitud

FieldTypeRequiredDescription
allow_cancellationbooleanNoPermite que los clientes cancelen a través del portal.
allow_plan_changebooleanNoPermite que los clientes cambien de plan a través del portal.
allow_payment_method_changebooleanNoPermite que los clientes agreguen una tarjeta durante el dunning.
cancellation_surveybooleanNoMuestra una encuesta de cancelación.
custom_cancellation_messagestringNoMarkdown que se muestra en la pantalla de cancelación.

Ejemplo de solicitud

curl -X PUT https://api.tokeflow.com/api/v1/merchants/mrc_8a3f12d9/portal-config \
  -H "Cookie: tf_portal_session=…" \
  -H "Content-Type: application/json" \
  -d '{
    "allow_cancellation": true,
    "allow_plan_change": true,
    "allow_payment_method_change": true,
    "cancellation_survey": true,
    "custom_cancellation_message": "Operation completed successfully"
  }'

Ejemplo de respuesta — 200

{
  "merchant_id": "mrc_123",
  "allow_cancellation": true,
  "allow_plan_change": true,
  "allow_payment_method_change": true,
  "cancellation_survey": true,
  "custom_cancellation_message": "Operation completed successfully"
}

POST/api/v1/portal/auth/email-change/confirm

Auth: Customer Portal session (cookie establecida por el flujo de magic-link).

Confirma un cambio de correo electrónico mediante el token enviado por correo.

Campos de la solicitud

FieldTypeRequiredDescription
tokenstringSíToken del correo de confirmación.

Ejemplo de solicitud

curl -X POST https://api.tokeflow.com/api/v1/portal/auth/email-change/confirm \
  -H "Cookie: tf_portal_session=…" \
  -H "Content-Type: application/json" \
  -d '{
    "token": "string"
  }'

POST/api/v1/portal/auth/logout

Auth: Customer Portal session (cookie establecida por el flujo de magic-link).

Borra la cookie de sesión del portal.

Ejemplo de solicitud

curl -X POST https://api.tokeflow.com/api/v1/portal/auth/logout \
  -H "Cookie: tf_portal_session=…"

GET/api/v1/portal/auth/me

Auth: Customer Portal session (cookie establecida por el flujo de magic-link).

Obtiene la cuenta de la sesión actual del portal.

Ejemplo de solicitud

curl https://api.tokeflow.com/api/v1/portal/auth/me \
  -H "Cookie: tf_portal_session=…"

Ejemplo de respuesta — 200

{
  "id": "cpa_123",
  "organization_id": "org_123",
  "merchant_id": "mrc_123",
  "email": "customer@example.com",
  "expires_in": 1800
}

POST/api/v1/portal/auth/request-link

Auth: Customer Portal session (cookie establecida por el flujo de magic-link).

Solicita un correo electrónico de magic-link del portal.

Campos de la solicitud

FieldTypeRequiredDescription
organization_idstringSíOrganization a la que pertenece el portal.
merchant_idstringSíMerchant al que está vinculada la sesión del portal (a partir de la respuesta de bootstrap). Obligatorio — el portal es de Merchant único, y una sesión sin Merchant no puede estar vinculada a nada.
emailstringSíCorreo electrónico del cliente.

Ejemplo de solicitud

curl -X POST https://api.tokeflow.com/api/v1/portal/auth/request-link \
  -H "Cookie: tf_portal_session=…" \
  -H "Content-Type: application/json" \
  -d '{
    "organization_id": "org_123",
    "merchant_id": "mrc_123",
    "email": "customer@example.com"
  }'

POST/api/v1/portal/auth/verify

Auth: Customer Portal session (cookie establecida por el flujo de magic-link).

Verifica un token de magic-link; establece la cookie de sesión.

Campos de la solicitud

FieldTypeRequiredDescription
tokenstringSíToken en bruto del magic link enviado por correo.

Ejemplo de solicitud

curl -X POST https://api.tokeflow.com/api/v1/portal/auth/verify \
  -H "Cookie: tf_portal_session=…" \
  -H "Content-Type: application/json" \
  -d '{
    "token": "string"
  }'

Ejemplo de respuesta — 200

{
  "id": "cpa_123",
  "organization_id": "org_123",
  "merchant_id": "mrc_123",
  "email": "customer@example.com",
  "expires_in": 1800
}

GET/api/v1/portal/bootstrap

Auth: Customer Portal session (cookie establecida por el flujo de magic-link).

Resuelve el branding y las flags del Merchant para el portal.

Parámetros de consulta

FieldTypeRequiredDescription
merchant_idstringNo—
organization_idstringNo—
merchantstringNo—

Ejemplo de solicitud

curl -G https://api.tokeflow.com/api/v1/portal/bootstrap \
  -H "Cookie: tf_portal_session=…" \
  --data-urlencode "merchant_id=mrc_123" \
  --data-urlencode "organization_id=org_123" \
  --data-urlencode "merchant=acme-store"

Ejemplo de respuesta — 200

{
  "organization_id": "org_123",
  "merchant_id": "mrc_123",
  "merchant_slug": "acme-store",
  "merchant_name": "Acme Store",
  "branding": {
    "site_title": "Acme Store",
    "favicon": "string",
    "logo_light_mode": "string",
    "logo_dark_mode": "string",
    "theme_primary_color": "#1A73E8",
    "theme_secondary_color": "#0B5394",
    "custom_url": "https://acme.example.com",
    "show_name_with_logo": false
  },
  "config": {
    "allow_cancellation": true,
    "allow_plan_change": true,
    "allow_payment_method_change": true,
    "cancellation_survey": false,
    "custom_cancellation_message": "Operation completed successfully"
  }
}

Errores

Los errores usan el sobre estándar. Los casos más comunes aquí:

HTTPMeaning
400Parámetros inválidos o un estado que no permite esta operación.
401Token de sesión del Dashboard ausente, expirado o inválido.
403Autenticado, pero el usuario que inició sesión no tiene acceso a esta entidad.
404El registro no existe o no es visible para esta entidad.

Relacionados

En esta página