Docs durchsuchen

Guides und API-Endpunkte durchsuchen

API-Dokumentation

Public API · docs.campaignkit.ventureon.io · v1 (gepinnt auf Meta v25.0)

01

Einführung

Die CampaignKit API ist eine Middleware vor der Meta Marketing API: deine Kundenplattform sendet einfache, immer gleiche Requests — wir übersetzen sie in die korrekten Meta-Calls im richtigen Werbekonto. Push-Modell (du sendest uns Daten, wir holen nichts ab), REST, JSON, eine gepinnte Meta-Version.

Base URL
https://api.campaignkit.ventureon.io/v1
Hierarchie
Campaign → Ad Set → Ad (+ Creative)
KI-optimiert. Konsistente Benennung, eine OpenAPI-Spec als Single Source of Truth, plus Docs als gebündeltes Markdown (llms.txt) und ein MCP-Server — damit Coding-KIs (Claude Code, Cursor) sich sofort zurechtfinden.

Maschinenlesbar

02

Quickstart · Next.js

In drei Schritten zur ersten Anbindung. Beispiele sind auf Next.js (TypeScript, fetch) ausgelegt — der API-Key lebt ausschließlich serverseitig.

1 · API-Key hinterlegen

.env.local

// .env.local
CAMPAIGNKIT_API_KEY=ck_live_xxxxxxxxxxxxxxxx

lib/campaignkit.ts

// lib/campaignkit.ts — schmaler Server-Wrapper (nur serverseitig nutzen)
const BASE = "https://api.campaignkit.ventureon.io/v1";

export async function campaignkit<T>(
  path: string,
  init: RequestInit = {},
): Promise<T> {
  const res = await fetch(`${BASE}${path}`, {
    ...init,
    headers: {
      Authorization: `Bearer ${process.env.CAMPAIGNKIT_API_KEY}`,
      "Content-Type": "application/json",
      ...init.headers,
    },
  });
  if (!res.ok) throw new Error(`CampaignKit ${res.status}: ${await res.text()}`);
  return res.json() as Promise<T>;
}

2 · Verbindung prüfen

Route Handler

// app/api/check/route.ts  (Next.js Route Handler)
import { campaignkit } from "@/lib/campaignkit";

export async function GET() {
  const health = await campaignkit("/health");
  return Response.json(health); // { data: { status: "ok", api_version: "v1" }, … }
}

3 · Kampagne anlegen (geplant)

Server Action

// Server Action / Route Handler
import { campaignkit } from "@/lib/campaignkit";

// Ad Set unter dem von uns eingerichteten Ziel anlegen (target = Ziel-Schlüssel).
const adset = await campaignkit("/adsets", {
  method: "POST",
  headers: { "Idempotency-Key": crypto.randomUUID() },
  body: JSON.stringify({
    target: "sommerfest-2026",
    daily_budget_cents: 5000,
  }),
});
03

Authentifizierung & Header

Jeder API-Call trägt den API-Key im Authorization-Header als Bearer-Token. Der Key bestimmt Kunde, Werbekonto und Plan — dahinter liegt der Meta-Token, den die Plattform nie sieht.

Authorization-Header

Authorization: Bearer ck_live_xxxxxxxxxxxxxxxx

Server-only: Key niemals im Browser/Client-Bundle verwenden. In Next.js nur in Route Handlers, Server Actions oder Server Components.

Standard-Header

HeaderPflichtBeschreibung
AuthorizationimmerBearer <API-Key>. Bestimmt Kunde + Plan. Niemals clientseitig im Browser verwenden.
Content-Typebei JSON-Bodyapplication/json — entfällt bei Multipart-Uploads (Media).
Idempotency-Keyempfohlen (POST)Eindeutige UUID pro Erstellung. Wiederholte Requests mit gleichem Key erzeugen keine Dubletten.
CampaignKit-VersionoptionalPinnt die API-Version (z. B. v1). Ohne Header gilt die Account-Default-Version.
X-Request-IdoptionalEigene Korrelations-ID; wird in Logs & Support-Anfragen zurückgegeben.

Zugang zur Doku

Menschen

SSO-Login → volle Docs

KI-Tools

scoped read-only Token

MCP
mcp://campaignkit/docs
04

Konventionen

Gelten für alle Endpunkte: Cursor-Pagination, Rate-Limits und Idempotenz.

Pagination (Cursor)

Listen liefern data[] + paging.after. Den Cursor an die nächste Anfrage als after übergeben.

Envelope

{
  "data": [ { "id": "238471029384", "name": "" } ],
  "paging": { "after": "QVFIUm...", "has_next": true }
}

// nächste Seite:
GET /v1/adsets?offset=25&limit=25

Rate-Limits

Jede Antwort trägt X-RateLimit-*. Bei 429 die Sekundenzahl aus Retry-After abwarten (exponentielles Backoff empfohlen).

429-Antwort

HTTP/1.1 429 Too Many Requests
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 0
Retry-After: 12

Idempotenz

Bei POST-Erstellungen einen Idempotency-Key (UUID) mitsenden. Wiederholungen mit gleichem Key liefern dasselbe Ergebnis — keine doppelten Kampagnen bei Netzwerk-Retries.

05

Fehler

Einheitliches Fehler-Objekt mit stabilem code, lesbarer message und request_id für den Support. 4xx = dein Request, 5xx = wir/Meta.

Fehler-Schema

{
  "error": {
    "code": "validation_error",
    "message": "objective must be OUTCOME_TRAFFIC or OUTCOME_SALES",
    "details": [
      { "field": "objective", "issue": "invalid_enum" }
    ]
  },
  "request_id": "550e8400-e29b-41d4-a716-446655440000"
}
StatusCodeBedeutung
400bad_requestRequest-Format ungültig (JSON-Syntax, fehlende Felder).
401unauthorizedAPI-Key fehlt, ungültig oder rotiert.
403forbiddenKey-Scope deckt diese Operation nicht (z. B. reporting-only).
404not_foundRessource oder Endpunkt existiert nicht (falsche ID oder unbekannter Pfad).
405method_not_allowedHTTP-Methode für diesen Endpunkt nicht erlaubt (erlaubte Methoden im Allow-Header).
409conflictIdempotenz-Konflikt oder Statuskollision (u. a. deaktivierte Ziel-Kampagne beim Anlegen/Ändern/Aktivieren von Ad-Sets oder Ads).
402payment_requiredKein aktiver Schreibzugang: Konto deaktiviert, Zahlung überfällig, Checkout offen oder Vertrag beendet (Lesen bleibt im deaktivierten/überfälligen Zustand möglich).
422validation_errorFelder vorhanden, aber inhaltlich ungültig (siehe details[]); auch bei unvollständigem Onboarding des Kunden (details.missing listet fehlende Pflichtdaten).
429rate_limitedZu viele Requests → Retry-After beachten.
5xxinternal_errorFehler bei uns oder bei Meta. Mit Backoff erneut versuchen.
06

Plan-Gating & Quotas

Der API-Key trägt den Plan des Kunden. Pläne unterscheiden sich nur in den Kosten — der volle API-Funktionsumfang ist überall identisch.

Publizierte Ads oder Media-Spend über dem Plan-Limit → 402 quota_exceeded: neue Ads werden gesperrt, bis der Kunde upgradet (POST /v1/plan/upgrade). Downgrade jederzeit zum nächsten Zyklus.

KostendimensionStarterGrowthScaleEnterprise
Grundgebühr149 €299 €599 €ab 1.500 €
Inkl. Ads / Monat525100custom
Inkl. Spend / Monat2.500,00 €10.000,00 €50.000,00 €custom
Media-Fee5 %4 %3 %1–2 %

Gleich in allen Plänen: Account-Erstellung · API-Automatisierung · Reporting · Support · Rate-Limit

07

Webhooks

Statt zu pollen, registrierst du eine HTTPS-URL und wir pushen Statusänderungen (z. B. Ad genehmigt/abgelehnt). Jeder Request ist HMAC-signiert.

Signatur verifizieren

Header X-CampaignKit-Signature = HMAC-SHA256 des Roh-Bodys mit deinem Webhook-Secret. Immer verifizieren, bevor du das Event verarbeitest.

Verifizierung · Next.js

// app/api/webhooks/campaignkit/route.ts
import crypto from "node:crypto";

export async function POST(req: Request) {
  const raw = await req.text();
  const sig = req.headers.get("X-CampaignKit-Signature") ?? "";
  const expected = crypto
    .createHmac("sha256", process.env.CAMPAIGNKIT_WEBHOOK_SECRET!)
    .update(raw)
    .digest("hex");
  if (sig !== expected) return new Response("invalid signature", { status: 401 });

  const event = JSON.parse(raw); // { type: "ad.status_changed", data: {…} }
  // … Status verarbeiten, schnell 200 zurückgeben
  return new Response("ok");
}

Event-Payload

Beispiel

{
  "id": "evt_2026_0001",
  "type": "ad.status_changed",
  "created": 1748505600,
  "data": {
    "ad_id": "120210394857",
    "effective_status": "DISAPPROVED",
    "reason": "Text-Overlay > 20%"
  }
}

Antworte schnell mit 200. Bei nicht-2xx wiederholen wir mit exponentiellem Backoff (bis zu 24 h), danach wird der Webhook als inaktiv markiert.

08

Versionierung

Die Version steckt im Pfad-Präfix (/v1). Innerhalb von v1 sind nur additive, nicht-brechende Änderungen erlaubt — neue Felder/Endpunkte kommen hinzu, bestehende verschwinden nicht.

v1 · stablev2 · geplant
  • Pinnen: optionaler Header CampaignKit-Version: v1 fixiert das Verhalten unabhängig vom Account-Default.
  • Breaking Changes erscheinen nur in einer neuen Major-Version (/v2) — niemals in /v1.
  • Deprecation: abgekündigte Versionen laufen mind. 6 Monate weiter; Hinweise via Sunset-Header + Changelog.

Referenz

11 Gruppen · 41 Endpunkte

Jede Ressourcen-Gruppe hat eine eigene Seite mit allen Endpunkten, Parametern und Beispielen.

System

Verbindung & Health. Der einzige bereits implementierte Endpunkt — prüft API-Key und Erreichbarkeit.

1 Endpunkt

Media

Übergibt fertige Bild und Video-Assets per URL an Meta und liefert die Referenz (image_hash bzw. video_id) für Creatives. Wir komprimieren NICHT und speichern die Datei nicht. Der Kunde ist für Format, Größe, Kompression und Versionierung selbst zuständig und übergibt nur die finale, öffentlich erreichbare URL.

5 Endpunkte

Ad Sets

Oberste für dich sichtbare Ebene (Ad Set → Ad). Beim Anlegen referenzierst du über `target` (Ziel-Schlüssel) das von uns eingerichtete Ziel — die übergeordnete Kampagne und ihre Konfiguration verwalten wir für dich. Du lieferst nur Budget/Laufzeit und optional Alter/Geschlecht/Interessen — Optimierung, Platzierung, Geo, Abrechnung, DSA und der Name kommen verbindlich aus der hinterlegten Konfiguration.

4 Endpunkte

Creatives

Visuelles Asset (Bild ODER Video) + Text, Link und Call-to-Action. Die Absender-Identität (Facebook-Page, optional Instagram) kommt aus der Kunden-Konfiguration — nicht aus dem Request.

4 Endpunkte

Templates

Zwei Wege: (1) VORLAGEN ANZEIGEN — GET /v1/templates liefert je Vorlage bereits fertige, gecachte `preview_urls` (je Format), die du unverändert direkt als Bild einbettest (img-Tag). Kein eigenes Rendern nötig, kein API-Key in der Bild-URL. (2) EIGENES CREATIVE — GET /v1/templates/{id} (Felder lesen) + POST /v1/templates/render (eigene Inhalte) erzeugt ein Werbemittel für POST /v1/ads.

6 Endpunkte

Ads

Verknüpft Ad Set + Creative zur fertigen Anzeige. Der Name wird automatisch vergeben (Naming Convention); die Ad startet als PAUSED-Entwurf.

4 Endpunkte

Audiences

Custom Audiences aus rohen CRM-Kontakten (serverseitig gehasht) und darauf basierende Lookalikes.

8 Endpunkte

Targeting

Lookup-Helfer, um gültige Geo- und Interessen-Keys für das Targeting zu finden.

2 Endpunkte

Reporting

Normalisierte Performance-Metriken aus täglich gesyncten Snapshots. Die Kundenplattform verknüpft sie mit eigenen Verkaufsdaten.

1 Endpunkt

Status / Webhooks

Review-/Lieferstatus live abfragen (Pull) oder per registrierter Webhook-URL empfangen (Push).

3 Endpunkte

Plan & Abrechnung

Vertragszustand und voraussichtliche Gebühr lesen, Konto selbst deaktivieren und jederzeit an die Rechnungen kommen. Es gibt keine Tarifwahl: die Stufe ergibt sich rückwirkend aus dem realen Ad-Spend.

3 Endpunkte