Swappr · API REST

Öffentliche Swappr API

Automatisiere deine KI-Generierungen (Bild, Video, Audio, Face Swap, Camera Roll, Personas) aus jeder Sprache. REST JSON, Bearer-Auth, Idempotency und Rate-Limit pro Key.

Start in 60 Sekunden

  1. Lege einen API-Key in deinem Swappr-Konto (wähle die Scopes read und generate).
  2. Speichere ihn als Umgebungsvariable (SWAPPR_API_KEY). Er beginnt mit sk_swp_.
  3. Mach deinen ersten Call: GET /api/v1/me, um die Authentifizierung zu prüfen.
  4. Starte eine Generierung: POST /api/v1/studio/image/generate, /studio/video/generate, /faceswap/generate oder /camera-roll/generate, dann poll GET /api/v1/jobs/{id} bis status: completed.
# 1. Test auth
curl -H "Authorization: Bearer $SWAPPR_API_KEY" https://swappr.fr/api/v1/me

# 2. Génération
curl -X POST https://swappr.fr/api/v1/studio/image/generate \
  -H "Authorization: Bearer $SWAPPR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"prompt":"luxury café, golden hour","modelId":"seedream-5"}'

# 3. Récupère le résultat
curl -H "Authorization: Bearer $SWAPPR_API_KEY" https://swappr.fr/api/v1/jobs/JOB_ID

Authentifizierung

Alle Requests /api/v1/* müssen den Header Authorization: Bearer sk_swp_… enthalten. Keys hängen an einem User, sind per Scope begrenzt und unterliegen einem Rate-Limit (60 req/min, 5 000 req/Tag Default). Format: sk_swp_ plus 24 Base62-Zeichen. Das Prefix (erste 6 Zeichen des Suffix) ist im Dashboard zur Identifikation sichtbar.

read

Lesen von Profil, Credits, Jobs, Modellen, Pricing, Bibliothek

generate

Startet Studio Bild/Video/Audio, Face Swap und Camera Roll

Endpoints

GET/api/v1/mescope: read

Profil + Credit-Saldo + Abo + Metadaten des aktuellen API-Keys.

Response

{
  "user": { "id": "user_…", "email": "…", "createdAt": "…" },
  "credits": { "balance": 4750, "monthlyQuota": 5300, "usedThisMonth": 550 },
  "subscription": { "planId": "pro", "status": "active", "currentPeriodEnd": "…" },
  "apiKey": { "id": "…", "scopes": ["read","generate"], "rateLimit": { "perMinute": 60, "perDay": 5000 } }
}

cURL

curl -H "Authorization: Bearer sk_swp_xxx" https://swappr.fr/api/v1/me

JavaScript

const res = await fetch("https://swappr.fr/api/v1/me", {
  headers: { Authorization: `Bearer ${SWAPPR_KEY}` },
});
const data = await res.json();

Python

import requests
r = requests.get("https://swappr.fr/api/v1/me",
  headers={"Authorization": f"Bearer {SWAPPR_KEY}"})
print(r.json())
GET/api/v1/credits/balancescope: read

Aktueller Credit-Saldo.

Response

{ "balance": 4750, "monthlyQuota": 5300, "usedThisMonth": 550, "welcomeTrialRemaining": 0 }

cURL

curl -H "Authorization: Bearer sk_swp_xxx" https://swappr.fr/api/v1/credits/balance

JavaScript

await fetch("https://swappr.fr/api/v1/credits/balance", { headers: { Authorization: `Bearer ${k}` }})

Python

requests.get("https://swappr.fr/api/v1/credits/balance", headers={"Authorization": f"Bearer {k}"})
GET/api/v1/jobsscope: read

Listet aktive und kürzlich beendete Jobs. `?include=active,recent&limit=40`.

Response

{
  "jobs": [{ "id": "…", "status": "processing", "workflow": "studio_image", "createdAt": "…" }],
  "hasMore": false
}

cURL

curl -H "Authorization: Bearer sk_swp_xxx" "https://swappr.fr/api/v1/jobs?include=active,recent&limit=40"

JavaScript

await fetch("https://swappr.fr/api/v1/jobs?include=active,recent", { headers: { Authorization: `Bearer ${k}` }})

Python

requests.get("https://swappr.fr/api/v1/jobs?include=active,recent", headers={"Authorization": f"Bearer {k}"})
POST/api/v1/studio/image/generatescope: generate

Startet eine Bildgenerierung. Gibt eine jobId zum Polling zurück. Modelle: gpt-image-2, nano-banana-2, seedream-5, wan-27-image, grok-imagine. Mit nsfw=true: Default seedream-5, 3 API-Guards (Plan, Dashboard-Consent, kompatibles Modell).

Request body

{
  "prompt": "luxury café interior, golden hour, cinematic",
  "modelId": "seedream-5",
  "imageCount": 1,
  "aspectRatio": "4:5",
  "nsfw": false,
  "referenceImageUrls": []
}

Response

{ "jobId": "…", "batchId": "…", "status": "queued", "creditsCharged": 10 }

cURL

curl -X POST https://swappr.fr/api/v1/studio/image/generate \
  -H "Authorization: Bearer sk_swp_xxx" \
  -H "Content-Type: application/json" \
  -d '{"prompt":"café interior","modelId":"seedream-5","aspectRatio":"4:5"}'

JavaScript

const res = await fetch("https://swappr.fr/api/v1/studio/image/generate", {
  method: "POST",
  headers: { Authorization: `Bearer ${k}`, "Content-Type": "application/json" },
  body: JSON.stringify({ prompt: "café interior", modelId: "seedream-5" }),
});

Python

requests.post("https://swappr.fr/api/v1/studio/image/generate",
  headers={"Authorization": f"Bearer {k}", "Content-Type": "application/json"},
  json={"prompt": "café interior", "modelId": "seedream-5"})
GET/api/v1/studio/modelsscope: read

Katalog der Studio-Bild/Video-Modelle: Preise, Qualitäten, Ratios, NSFW-Support.

Response

{
  "imageModels": [{ "id": "seedream-5", "label": "Seedream 5", "nsfwCapable": true }],
  "videoModels": [{ "id": "kling-3", "label": "Kling", "durations": [5, 10] }]
}

cURL

curl -H "Authorization: Bearer sk_swp_xxx" https://swappr.fr/api/v1/studio/models

JavaScript

await fetch("https://swappr.fr/api/v1/studio/models", { headers: { Authorization: `Bearer ${k}` }})

Python

requests.get("https://swappr.fr/api/v1/studio/models", headers={"Authorization": f"Bearer {k}"})
POST/api/v1/studio/video/generatescope: generate

Startet eine asynchrone Videogenerierung. Unterstützt Bild/Video-Referenzen, Audio je Modell, Ratios und Dauern.

Request body

{
  "prompt": "cinematic rooftop reel",
  "modelId": "kling-3",
  "aspectRatio": "9:16",
  "duration": 5,
  "referenceImageUrls": ["https://…"],
  "generateAudio": false
}

Response

{ "jobId": "…", "status": "queued", "creditsCharged": 120 }

cURL

curl -X POST https://swappr.fr/api/v1/studio/video/generate \
  -H "Authorization: Bearer sk_swp_xxx" -H "Content-Type: application/json" \
  -d '{"prompt":"rooftop reel","modelId":"kling-3","aspectRatio":"9:16","duration":5}'

JavaScript

await fetch("https://swappr.fr/api/v1/studio/video/generate", {
  method: "POST",
  headers: { Authorization: `Bearer ${k}`, "Content-Type": "application/json" },
  body: JSON.stringify({ prompt: "rooftop reel", modelId: "kling-3", duration: 5 }),
});

Python

requests.post("https://swappr.fr/api/v1/studio/video/generate",
  headers={"Authorization": f"Bearer {k}", "Content-Type": "application/json"},
  json={"prompt": "rooftop reel", "modelId": "kling-3", "duration": 5})
POST/api/v1/studio/audio/ttsscope: generate

Synchrone ElevenLabs-Sprachsynthese. Gibt ein Audio-Medium zurück und belastet Credits zum Studio-Son-Tarif.

Request body

{
  "text": "Bienvenue sur Swappr.",
  "voiceId": "VOICE_ID",
  "modelId": "eleven_multilingual_v2",
  "languageCode": "fr"
}

Response

{ "url": "https://…/audio.mp3", "mediaType": "audio", "creditsCharged": 4 }

cURL

curl -X POST https://swappr.fr/api/v1/studio/audio/tts \
  -H "Authorization: Bearer sk_swp_xxx" -H "Content-Type: application/json" \
  -d '{"text":"Bienvenue sur Swappr.","voiceId":"VOICE_ID"}'

JavaScript

await fetch("https://swappr.fr/api/v1/studio/audio/tts", {
  method: "POST",
  headers: { Authorization: `Bearer ${k}`, "Content-Type": "application/json" },
  body: JSON.stringify({ text: "Bienvenue sur Swappr.", voiceId: "VOICE_ID" }),
});

Python

requests.post("https://swappr.fr/api/v1/studio/audio/tts",
  headers={"Authorization": f"Bearer {k}", "Content-Type": "application/json"},
  json={"text": "Bienvenue sur Swappr.", "voiceId": "VOICE_ID"})
POST/api/v1/studio/audio/dialoguescope: generate

Synchroner ElevenLabs-Multi-Voice-Dialog, bis zu 10 Repliken.

Request body

{
  "inputs": [
    { "text": "Salut !", "voiceId": "VOICE_A" },
    { "text": "On tourne maintenant ?", "voiceId": "VOICE_B" }
  ],
  "languageCode": "fr"
}

Response

{ "url": "https://…/dialogue.mp3", "mediaType": "audio", "creditsCharged": 8 }

cURL

curl -X POST https://swappr.fr/api/v1/studio/audio/dialogue \
  -H "Authorization: Bearer sk_swp_xxx" -H "Content-Type: application/json" \
  -d '{"inputs":[{"text":"Salut !","voiceId":"VOICE_A"}]}'

JavaScript

await fetch("https://swappr.fr/api/v1/studio/audio/dialogue", {
  method: "POST",
  headers: { Authorization: `Bearer ${k}`, "Content-Type": "application/json" },
  body: JSON.stringify({ inputs: [{ text: "Salut !", voiceId: "VOICE_A" }] }),
});

Python

requests.post("https://swappr.fr/api/v1/studio/audio/dialogue",
  headers={"Authorization": f"Bearer {k}", "Content-Type": "application/json"},
  json={"inputs": [{"text": "Salut !", "voiceId": "VOICE_A"}]})
GET/api/v1/jobs/{id}scope: read

Status + Outputs eines Jobs. Poll alle 3 s empfohlen.

Response

{
  "id": "…", "status": "completed", "outputs": ["https://…"],
  "creditsCharged": 10, "createdAt": "…", "updatedAt": "…"
}

cURL

curl -H "Authorization: Bearer sk_swp_xxx" https://swappr.fr/api/v1/jobs/JOB_ID

JavaScript

await fetch(`https://swappr.fr/api/v1/jobs/${jobId}`, { headers: { Authorization: `Bearer ${k}` }})

Python

requests.get(f"https://swappr.fr/api/v1/jobs/{job_id}", headers={"Authorization": f"Bearer {k}"})
POST/api/v1/uploadsscope: generate

Multipart-Upload einer Bild-, Video- oder Audio-Referenz. Nutze danach `storagePath` oder `url` in den Generate-Endpoints.

Request body

multipart/form-data
[email protected]

Response

{ "url": "https://…", "storagePath": "api-uploads/user/…", "mimeType": "image/jpeg", "size": 123456 }

cURL

curl -X POST https://swappr.fr/api/v1/uploads \
  -H "Authorization: Bearer sk_swp_xxx" \
  -F "[email protected]"

JavaScript

const form = new FormData();
form.append("file", file);
await fetch("https://swappr.fr/api/v1/uploads", { method: "POST", headers: { Authorization: `Bearer ${k}` }, body: form });

Python

requests.post("https://swappr.fr/api/v1/uploads",
  headers={"Authorization": f"Bearer {k}"},
  files={"file": open("reference.jpg", "rb")})
GET/api/v1/nsfw/statusscope: read

NSFW-Zugang: kompatibler Plan, unterschriebener Consent, Modus verfügbar.

Response

{ "eligible": true, "consentRequired": false, "planId": "pro", "surchargeMultiplier": 1.25 }

cURL

curl -H "Authorization: Bearer sk_swp_xxx" https://swappr.fr/api/v1/nsfw/status

JavaScript

await fetch("https://swappr.fr/api/v1/nsfw/status", { headers: { Authorization: `Bearer ${k}` }})

Python

requests.get("https://swappr.fr/api/v1/nsfw/status", headers={"Authorization": f"Bearer {k}"})
GET/api/v1/library/itemsscope: read

Paginierte Liste der Bibliotheksmedien. `?kind=saved|temporary&limit=20&cursor=<iso>`.

Response

{
  "items": [{ "id": "…", "url": "…", "mediaType": "image", "retention": "saved", "createdAt": "…", "jobId": "…" }],
  "nextCursor": "2026-06-12T12:00:00Z",
  "hasMore": true
}

cURL

curl -H "Authorization: Bearer sk_swp_xxx" "https://swappr.fr/api/v1/library/items?limit=20&kind=saved"

JavaScript

await fetch("https://swappr.fr/api/v1/library/items?limit=20", { headers: { Authorization: `Bearer ${k}` }})

Python

requests.get("https://swappr.fr/api/v1/library/items?limit=20", headers={"Authorization": f"Bearer {k}"})
POST/api/v1/library/items/{id}/savescope: generate

Dauerhaftes Speichern eines temporären Bibliotheksmediums.

Request body

{ "mediaType": "image", "modelId": "seedream-5" }

Response

{ "id": "…", "retention": "saved", "url": "https://…" }

cURL

curl -X POST https://swappr.fr/api/v1/library/items/ITEM_ID/save \
  -H "Authorization: Bearer sk_swp_xxx" -H "Content-Type: application/json" -d '{}'

JavaScript

await fetch("https://swappr.fr/api/v1/library/items/ITEM_ID/save", { method: "POST", headers: { Authorization: `Bearer ${k}` }})

Python

requests.post("https://swappr.fr/api/v1/library/items/ITEM_ID/save", headers={"Authorization": f"Bearer {k}"})
DELETE/api/v1/library/items/{id}scope: generate

Löscht ein Bibliotheksmedium, das dem User gehört.

Response

{ "ok": true }

cURL

curl -X DELETE -H "Authorization: Bearer sk_swp_xxx" https://swappr.fr/api/v1/library/items/ITEM_ID

JavaScript

await fetch("https://swappr.fr/api/v1/library/items/ITEM_ID", { method: "DELETE", headers: { Authorization: `Bearer ${k}` }})

Python

requests.delete("https://swappr.fr/api/v1/library/items/ITEM_ID", headers={"Authorization": f"Bearer {k}"})
GET/api/v1/modelsscope: read

Liste der vom User gespeicherten KI-Personas/Modelle, nutzbar als Identitätsreferenz.

Response

{ "models": [{ "id": "…", "name": "Maya", "imageUrl": "https://…", "createdAt": "…" }] }

cURL

curl -H "Authorization: Bearer sk_swp_xxx" https://swappr.fr/api/v1/models

JavaScript

await fetch("https://swappr.fr/api/v1/models", { headers: { Authorization: `Bearer ${k}` }})

Python

requests.get("https://swappr.fr/api/v1/models", headers={"Authorization": f"Bearer {k}"})
GET/api/v1/faceswap/pricingscope: read

Face Swap HD- und Refine-Preise nach Motor, NSFW und Optionen.

Response

{ "refineCredits": { "safe": 18, "nsfw": 23 }, "matrix": { "gpt": { "2k": 18 } } }

cURL

curl -H "Authorization: Bearer sk_swp_xxx" https://swappr.fr/api/v1/faceswap/pricing

JavaScript

await fetch("https://swappr.fr/api/v1/faceswap/pricing", { headers: { Authorization: `Bearer ${k}` }})

Python

requests.get("https://swappr.fr/api/v1/faceswap/pricing", headers={"Authorization": f"Bearer {k}"})
POST/api/v1/faceswap/generatescope: generate

Asynchroner HD Face Swap: Quelle + Ziel über öffentliche URL oder Upload-`storagePath`.

Request body

{
  "baseImage": { "url": "https://example.com/scene.jpg" },
  "identity": { "modelId": "persona-uuid" },
  "engine": "gpt",
  "quality": "2k",
  "nsfw": false
}

Response

{ "jobId": "…", "status": "queued", "creditsCharged": 15 }

cURL

curl -X POST https://swappr.fr/api/v1/faceswap/generate \
  -H "Authorization: Bearer sk_swp_xxx" -H "Content-Type: application/json" \
  -d '{"baseImage":{"url":"https://example.com/scene.jpg"},"identity":{"modelId":"persona-uuid"},"engine":"gpt"}'

JavaScript

await fetch("https://swappr.fr/api/v1/faceswap/generate", {
  method: "POST",
  headers: { Authorization: `Bearer ${k}`, "Content-Type": "application/json" },
  body: JSON.stringify({
    baseImage: { url: "https://example.com/scene.jpg" },
    identity: { modelId: "persona-uuid" },
    engine: "gpt",
  }),
});

Python

requests.post("https://swappr.fr/api/v1/faceswap/generate",
  headers={"Authorization": f"Bearer {k}", "Content-Type": "application/json"},
  json={
    "baseImage": {"url": "https://example.com/scene.jpg"},
    "identity": {"modelId": "persona-uuid"},
    "engine": "gpt",
  })
POST/api/v1/faceswap/refinescope: generate

Feinarbeit/Realismus nach Face Swap. Nützlich nach einem validierten Swap für Licht, Haut und Blending.

Request body

{ "faceSwapResultImageUrl": "https://example.com/swap-result.jpg", "engine": "gpt", "nsfw": false }

Response

{ "jobId": "…", "status": "queued", "creditsCharged": 18 }

cURL

curl -X POST https://swappr.fr/api/v1/faceswap/refine \
  -H "Authorization: Bearer sk_swp_xxx" -H "Content-Type: application/json" \
  -d '{"faceSwapResultImageUrl":"https://example.com/swap-result.jpg"}'

JavaScript

await fetch("https://swappr.fr/api/v1/faceswap/refine", {
  method: "POST",
  headers: { Authorization: `Bearer ${k}`, "Content-Type": "application/json" },
  body: JSON.stringify({ faceSwapResultImageUrl: "https://example.com/swap-result.jpg" }),
});

Python

requests.post("https://swappr.fr/api/v1/faceswap/refine",
  headers={"Authorization": f"Bearer {k}", "Content-Type": "application/json"},
  json={"faceSwapResultImageUrl": "https://example.com/swap-result.jpg"})
GET/api/v1/camera-roll/pricingscope: read

Camera-Roll-Preise (safe-only) nach Motor, Auflösung und Fotoanzahl.

Response

{ "engines": ["gpt", "nano"], "qualities": ["1k", "2k", "4k"], "photoCounts": [4, 8, 12, 20] }

cURL

curl -H "Authorization: Bearer sk_swp_xxx" https://swappr.fr/api/v1/camera-roll/pricing

JavaScript

await fetch("https://swappr.fr/api/v1/camera-roll/pricing", { headers: { Authorization: `Bearer ${k}` }})

Python

requests.get("https://swappr.fr/api/v1/camera-roll/pricing", headers={"Authorization": f"Bearer {k}"})
GET/api/v1/camera-roll/scenesscope: read

Katalog der iPhone-style Camera-Roll-Szenen, filterbar nach Vibe/Kategorie.

Response

{ "scenes": [{ "id": "parking-selfie", "title": "Parking selfie", "category": "lifestyle" }] }

cURL

curl -H "Authorization: Bearer sk_swp_xxx" https://swappr.fr/api/v1/camera-roll/scenes

JavaScript

await fetch("https://swappr.fr/api/v1/camera-roll/scenes", { headers: { Authorization: `Bearer ${k}` }})

Python

requests.get("https://swappr.fr/api/v1/camera-roll/scenes", headers={"Authorization": f"Bearer {k}"})
POST/api/v1/camera-roll/generatescope: generate

Erzeugt eine kohärente Camera-Roll-Galerie aus einer Identität oder Referenz. `subjectGender` akzeptiert `feminine`, `masculine`, `neutral`, `auto`.

Request body

{
  "referenceImage": { "url": "https://example.com/portrait.jpg" },
  "sceneId": "car_passenger_bad_selfie",
  "photoIndex": 0,
  "totalPhotos": 4,
  "engine": "gpt",
  "quality": "2k",
  "subjectGender": "feminine"
}

Response

{ "jobId": "…", "batchParentId": "…", "status": "queued", "creditsCharged": 18 }

cURL

curl -X POST https://swappr.fr/api/v1/camera-roll/generate \
  -H "Authorization: Bearer sk_swp_xxx" -H "Content-Type: application/json" \
  -d '{"referenceImage":{"url":"https://example.com/portrait.jpg"},"sceneId":"car_passenger_bad_selfie","photoIndex":0,"totalPhotos":4,"subjectGender":"feminine"}'

JavaScript

await fetch("https://swappr.fr/api/v1/camera-roll/generate", {
  method: "POST",
  headers: { Authorization: `Bearer ${k}`, "Content-Type": "application/json" },
  body: JSON.stringify({
    referenceImage: { url: "https://example.com/portrait.jpg" },
    sceneId: "car_passenger_bad_selfie",
    photoIndex: 0,
    totalPhotos: 4,
    subjectGender: "feminine",
  }),
});

Python

requests.post("https://swappr.fr/api/v1/camera-roll/generate",
  headers={"Authorization": f"Bearer {k}", "Content-Type": "application/json"},
  json={
    "referenceImage": {"url": "https://example.com/portrait.jpg"},
    "sceneId": "car_passenger_bad_selfie",
    "photoIndex": 0,
    "totalPhotos": 4,
    "subjectGender": "feminine",
  })

NSFW-Modus über die API

Der Parameter nsfw: true in POST /api/v1/studio/image/generate aktiviert den Adult-Modus (Kie-Filter aus + Aufschlag ×1,25). 3 Bedingungen müssen erfüllt sein:

  1. NSFW-Recht : Pro/Studio inklusive oder NSFW-Option aktiv. Sonst 403 nsfw_plan_required.
  2. Unterschriebener rechtlicher Consent einmal im Dashboard (Modal beim ersten NSFW-Toggle). Sonst 403 nsfw_consent_required.
  3. Kompatibles Modell : seedream-5, wan-27-image, grok-imagine, nano-banana-2. gpt-image-2 ist nicht NSFW-fähig. Sonst 400 model_not_nsfw_capable.

Default-Modell : ohne modelId nutzt die API gpt-image-2 (safe) oder wan-27-image wenn nsfw: true.

Aufschlag-Befreiung : User mit 3+ aktiven Referrals (Affiliate-Programm) oder Admin-Flag nsfw_surcharge_exempt werden automatisch erkannt, kein ×1,25.

Immer verboten : Inhalte mit Minderjährigen oder realen Personen ohne Consent (Deepfake, sanktioniert durch das französische Gesetz vom 21. Mai 2024). Jeder Verstoß führt zur sofortigen Key-Sperre und Meldung.

Fehlercodes

Alle Fehler liefern einen JSON-Body : { "error": { "code": "…", "message": "…", "details"?: { … } } }

StatusCodeCause
400invalid_bodyJSON-Body fehlt oder ungültig
400missing_prompt`prompt` für generate erforderlich
400invalid_aspect_ratioRatio vom Modell oder Workflow nicht unterstützt
400model_not_supportedUnbekanntes oder auf diesem Endpoint nicht verfügbares Modell
401missing_or_invalid_keyAuthorization-Header fehlt oder falsch
401invalid_keyUnbekannter oder widerrufener Key
401key_expiredKey abgelaufen (Feld expires_at)
402insufficient_creditsSaldo reicht für die Generierung nicht
403scope_missingDem Key fehlt der nötige Scope
403nsfw_plan_requiredNSFW nicht enthalten, NSFW-Option oder Upgrade Pro/Studio
403nsfw_consent_requiredNSFW-Consent nicht unterschrieben, einmal im Dashboard bestätigen
403FRAUD_BLOCKEDKonto gesperrt: zurück ins Dashboard und Pro-Reaktivierung
404job_not_foundJob nicht gefunden oder gehört nicht zum User
404library_item_not_foundMedium nicht gefunden oder gehört nicht zum User
409idempotency_conflictDieselbe Idempotency-Key mit anderem Body wiederverwendet
413file_too_largeUpload zu groß
415unsupported_media_typeMIME für den Upload nicht unterstützt
400model_not_nsfw_capableModell unterstützt kein NSFW (seedream-5/wan-27-image/grok-imagine/nano-banana-2 nutzen)
429rate_limit_minuteMehr als 60 req/min
429rate_limit_dayMehr als 5 000 req/Tag
500internal_errorServerfehler, Ticket öffnen wenn es wiederkehrt

Fertige Integrationen

Skill Claude

ZIP laden unter Konto & Credits → API oder kopiere docs/agents/skills/swappr-api/ dans ~/.claude/skills/.

Skill ansehen

MCP-Server

npx -y @swappr/[email protected], verbindet Claude Desktop, Cursor, Continue, jeden MCP-Client mit der Swappr API.

MCP-Server ansehen

Spec OpenAPI 3.1

Die YAML-Datei liegt unter /openapi.yaml. Importierbar in Postman, Insomnia, Stoplight oder zum Generieren von Clients (openapi-generator).