Documentación

API de socios

Para socios aprobados: crea códigos de activación de Chart Premium para tus clientes desde tus propios sistemas (CRM, área de clientes, alta) y ve cuáles se han usado. Sobre el programa de socios.

Autenticación

Crea una clave en tu página de socio y envíala en la cabecera Authorization. Las claves tienen el aspecto mdp_pk_3f9a1c07de_…; solo guardamos una huella, así que una clave perdida no se puede volver a mostrar: crea una nueva.

curl https://app.marketapi.app/partner/v1/account \
  -H "Authorization: Bearer mdp_pk_YOUR_KEY"

Rotación sin cortes: Rotar crea una clave nueva y mantiene la anterior funcionando 24 horas. Pon la clave nueva en tus sistemas y la anterior caducará sola (o revócala al instante). Nunca pongas una clave en una página web o una app móvil: llama a la API desde tu servidor.

Límites: 120 solicitudes por minuto por socio; demasiadas claves fallidas desde una dirección se bloquean durante 10 minutos. Los errores son JSON: {"error": "…", "code": "invalid"} con HTTP 400, 401, 405 o 429.

Tus plazas

GET /partner/v1/account

{"partner_id": "MP-7KQ3TA", "name": "Example Broker", "status": "active",
 "seats": [{"plan": "pro", "name": "Pro", "days": 30, "left": 48, "trial": false, "expires_at": null}]}

Cada plaza es un código de activación para un plan y una duración (30, 91, 182 o 365 días). Compra paquetes de plazas en tu página de socio (30 % menos que el precio normal, paquetes de 10, 50, 250).

Crear códigos

POST /partner/v1/codes con un cuerpo JSON:

CampoSignificado
planpro o proplus
months1, 3, 6 o 12 (la duración de la plaza), o days
countcuántos códigos (1–5000); puede omitirse si das referencias
customer_refsopcional: tu propia referencia para cada código (p. ej. el número de cuenta del cliente), hasta 120 caracteres cada una. La guardamos enmascarada (45•••68) con una huella con clave, así puedes encontrar un código por la referencia completa, pero nunca la conservamos.
expires_dayscuánto tiempo sigue siendo válido un código sin usar (por defecto 365; las plazas de prueba terminan antes). Un código sin usar que caduca devuelve su plaza.
batchnombre opcional para reconocer el lote

Envía una cabecera Idempotency-Key (cualquier texto único): si tu solicitud se reintenta, recibes los mismos códigos en lugar de otros nuevos (durante 24 horas).

curl -X POST https://app.marketapi.app/partner/v1/codes \
  -H "Authorization: Bearer mdp_pk_YOUR_KEY" -H "Content-Type: application/json" \
  -H "Idempotency-Key: onboarding-45123468" \
  -d '{"plan": "pro", "months": 1, "customer_refs": ["45123468"]}'
201 {"count": 1, "codes": [{"code": "K7QM-3XTP-9RWA-FD2H", "hint": "FD2H", "customer_ref": "45•••68",
      "plan": "pro", "days": 30, "expires_at": "2027-10-17T08:00:00+00:00"}]}

Los códigos aparecen en la respuesta solo una vez. Da a cada cliente su código; lo introduce en https://app.marketapi.app/premium (con sesión iniciada) y el plan empieza al instante, o después del plan que ya tenga.

Lotes grandes: más de 100 códigos los crea nuestra cola de tareas. La respuesta es 202 {"job": 812, "url": "/partner/v1/jobs/812"}; consulta esa URL hasta que status sea done; los códigos aparecen en esa respuesta solo la primera vez.

GET /partner/v1/jobs/812
{"status": "queued", "position": 2, "eta_s": 4.0}  →  {"status": "done", "count": 2000, "codes": [ … ]}

Buscar códigos

GET /partner/v1/codes?customer_ref=45123468&status=unused&limit=100&offset=0 — estado: unused, redeemed o cancelled.

{"codes": [{"id": 9134, "hint": "FD2H", "customer_ref": "45•••68", "plan": "pro", "days": 30, "status": "redeemed",
            "created_at": "…", "expires_at": "…", "redeemed_at": "…"}]}

Cancelar un código

POST /partner/v1/codes/9134/cancel — solo códigos sin usar; la plaza queda libre al instante.

Seguridad