Docs

API partenaire

Pour les partenaires approuvés : créez des codes d’activation Chart Premium pour vos clients depuis vos propres systèmes (CRM, espace client, onboarding) et voyez lesquels ont été utilisés. À propos du programme partenaires.

Authentification

Créez une clé sur votre page partenaire et envoyez-la dans l’en-tête Authorization. Les clés ressemblent à mdp_pk_3f9a1c07de_… ; nous ne gardons qu’une empreinte, une clé perdue ne peut donc pas être réaffichée : créez-en une nouvelle.

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

Rotation sans interruption : Renouveler crée une nouvelle clé et garde l’ancienne active 24 heures. Mettez la nouvelle clé dans vos systèmes, puis l’ancienne expire d’elle-même (ou révoquez-la aussitôt). Ne mettez jamais une clé dans une page web ou une application mobile : appelez l’API depuis votre serveur.

Limites : 120 requêtes par minute et par partenaire ; trop de clés invalides depuis une même adresse entraînent un blocage de 10 minutes. Les erreurs sont en JSON : {"error": "…", "code": "invalid"} avec HTTP 400, 401, 405 ou 429.

Vos places

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}]}

Chaque place est un code d’activation pour une offre et une durée (30, 91, 182 ou 365 jours). Achetez des packs de places sur votre page partenaire (30 % de remise sur le prix normal, packs de 10, 50, 250).

Créer les codes

POST /partner/v1/codes avec un corps JSON :

ChampSignification
planpro ou proplus
months1, 3, 6 ou 12 (la durée de la place), ou days
countnombre de codes (1–5000) ; peut être omis si vous fournissez des références
customer_refsfacultatif : votre propre référence pour chaque code (p. ex. le numéro de compte du client), jusqu’à 120 caractères chacune. Nous la stockons masquée (45•••68) avec une empreinte à clé, vous pouvez donc retrouver un code par la référence complète, mais nous ne la conservons jamais.
expires_daysdurée de validité d’un code inutilisé (365 par défaut ; les places d’essai se terminent plus tôt). Un code inutilisé qui expire libère sa place.
batchnom facultatif pour reconnaître le lot

Envoyez un en-tête Idempotency-Key (n’importe quel texte unique) : si votre requête est relancée, vous recevez les mêmes codes au lieu de nouveaux (pendant 24 heures).

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"}]}

Les codes figurent dans la réponse une seule fois. Donnez à chaque client son code ; il le saisit sur https://app.marketapi.app/premium (connecté) et l’offre démarre aussitôt, ou après celle qu’il a déjà.

Gros lots : au-delà de 100 codes, ils sont créés par notre file de tâches. La réponse est 202 {"job": 812, "url": "/partner/v1/jobs/812"} ; interrogez cette URL jusqu’à ce que status soit done ; les codes figurent dans cette réponse la première fois seulement.

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

Trouver des codes

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

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

Annuler un code

POST /partner/v1/codes/9134/cancel — codes inutilisés seulement ; la place redevient libre aussitôt.

Sécurité