Doku

Partner-API

Für freigegebene Partner: Erstellen Sie Chart-Premium-Aktivierungscodes für Ihre Kunden aus Ihren eigenen Systemen (CRM, Kundenbereich, Onboarding) und sehen Sie, welche verwendet wurden. Über das Partnerprogramm.

Authentifizierung

Erstellen Sie einen Schlüssel auf Ihrer Partnerseite und senden Sie ihn im Authorization-Header. Schlüssel sehen aus wie mdp_pk_3f9a1c07de_…; wir speichern nur einen Fingerabdruck, ein verlorener Schlüssel kann also nicht erneut angezeigt werden: Erstellen Sie einen neuen.

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

Rotation ohne Ausfallzeit: Rotieren erstellt einen neuen Schlüssel und lässt den alten 24 Stunden weiterlaufen. Tragen Sie den neuen Schlüssel in Ihren Systemen ein, dann läuft der alte von selbst ab (oder widerrufen Sie ihn sofort). Legen Sie nie einen Schlüssel in eine Webseite oder mobile App: Rufen Sie die API von Ihrem Server auf.

Limits: 120 Anfragen pro Minute und Partner; zu viele fehlgeschlagene Schlüssel von einer Adresse werden für 10 Minuten gesperrt. Fehler sind JSON: {"error": "…", "code": "invalid"} mit HTTP 400, 401, 405 oder 429.

Ihre Plätze

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

Jeder Platz ist ein Aktivierungscode für einen Tarif und eine Laufzeit (30, 91, 182 oder 365 Tage). Kaufen Sie Platzpakete auf Ihrer Partnerseite (30 % unter dem Normalpreis, Pakete zu 10, 50, 250).

Codes erstellen

POST /partner/v1/codes mit einem JSON-Body:

FeldBedeutung
planpro oder proplus
months1, 3, 6 oder 12 (die Laufzeit des Platzes) oder days
countwie viele Codes (1–5000); kann weggelassen werden, wenn Sie Referenzen angeben
customer_refsoptional: Ihre eigene Referenz für jeden Code (z. B. die Kontonummer des Kunden), bis zu 120 Zeichen je Code. Wir speichern sie maskiert (45•••68) mit einem verschlüsselten Fingerabdruck, sodass Sie einen Code anhand der vollständigen Referenz finden können, wir sie aber nie aufbewahren.
expires_dayswie lange ein unbenutzter Code gültig bleibt (Standard 365; Testplätze enden früher). Ein unbenutzter Code, der abläuft, gibt seinen Platz zurück.
batchoptionaler Name, um den Stapel wiederzuerkennen

Senden Sie einen Idempotency-Key-Header (beliebiger eindeutiger Text): Wird Ihre Anfrage wiederholt, erhalten Sie dieselben Codes statt neuer zurück (24 Stunden lang).

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

Die Codes stehen nur einmal in der Antwort. Geben Sie jedem Kunden seinen Code; er gibt ihn auf https://app.marketapi.app/premium ein (angemeldet), und der Tarif beginnt sofort oder nach dem Tarif, den er bereits hat.

Große Stapel: Mehr als 100 Codes werden von unserer Aufgabenwarteschlange erstellt. Die Antwort lautet 202 {"job": 812, "url": "/partner/v1/jobs/812"}; fragen Sie diese URL ab, bis status done ist; die Codes stehen nur beim ersten Mal in dieser Antwort.

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

Codes finden

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

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

Einen Code stornieren

POST /partner/v1/codes/9134/cancel — nur unbenutzte Codes; der Platz ist sofort wieder frei.

Sicherheit