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:
| Campo | Significado |
|---|---|
plan | pro o proplus |
months | 1, 3, 6 o 12 (la duración de la plaza), o days |
count | cuántos códigos (1–5000); puede omitirse si das referencias |
customer_refs | opcional: 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_days | cuá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. |
batch | nombre 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
- Cada llamada va por HTTPS; las claves se comparan en tiempo constante y solo se guarda su huella con clave.
- Escribimos a tu dirección de contacto cada vez que se crea o rota una clave.
- Los códigos tienen 16 caracteres de 32 símbolos (80 bits), se muestran una vez, se guardan solo como huella y se limitan a 10 intentos por hora y cuenta al introducirlos.