API-Dokumentation

API-Doku

Rufe alle KI-Funktionen via API-Schlüssel auf, nutzungsabhängig, integriere in wenigen Codezeilen.

Authentifizierung

Alle API-Anfragen müssen den Header Authorization enthalten.

Authorization: Bearer sk-xxxxxxxxxxxxxxxx

API-Schlüssel in der Konsole unter „API-Schlüssel" abrufen. Ein Schlüssel pro Konto. Zurücksetzen in der Konsole; der alte wird sofort ungültig.

Aufgabe erstellen

POST https://nsfwrouter.xyz/api/v1/tasks/create

Sende eine KI-Aufgabe an den GPU-Cluster. Aufgaben sind asynchron und geben eine ID zurück. Ergebnisse via Abfrage-API oder Webhook.

Anfrageparameter
Parameter Typ Erforderlich Beschreibung
tool_idintJaTool-ID, aus der Tool-Liste
paramsobjectJaAufgabenparameter, JSON-Objekt, Felder toolabhängig
webhook_urlstringNeinCallback-URL für Abschlussbenachrichtigung
priorityintNeinAufgabenpriorität 1-10, Standard 5
idempotency_keystringNeinIdempotenz-Key, verhindert Doppelsubmission
execution_optionsobjectNeinAusführungsoptionen, JSON-Objekt
Anfragebeispiel
curl -X POST https://nsfwrouter.xyz/api/v1/tasks/create \
  -H "Authorization: Bearer sk-xxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "tool_id": 1,
    "params": {
      "image": "https://example.com/photo.jpg",
      "prompt": "a beautiful landscape"
    },
    "webhook_url": "https://your-server.com/webhook"
  }'
Antwortbeispiel
{
  "code": 0,
  "message": "success",
  "data": {
    "task": {
      "id": 123,
      "status": 0,
      "consume_coins": 5
    },
    "message": "task_submitted"
  }
}

Vor Aufruf wird das Guthaben geprüft. Bei unzureichendem Guthaben: insufficient_coins. Coins werden bei erfolgreicher Submission sofort abgezogen.

Aufgabendetails abfragen

GET https://nsfwrouter.xyz/api/v1/tasks/query

Details und Status per ID abfragen. Während der Verarbeitung wird der neueste Status vom GPU-Cluster geholt. Wiederholte Abfragen innerhalb 10 Sekunden liefern gecachte DB-Ergebnisse ohne Remote-Anfragen.

Abfrageparameter
Parameter Typ Erforderlich Beschreibung
idintJaAufgaben-ID
Antwortbeispiel
{
  "code": 0,
  "message": "success",
  "data": {
    "task": {
      "id": 123,
      "status": 1,
      "task_output_json": [
        {
          "type": "image",
          "url": "https://cdn.example.com/outputs/abc123.png",
          "file_name": "abc123.png",
          "file_size": 1024000,
          "mime_type": "image/png",
          "width": 1024,
          "height": 1024
        }
      ],
      "consume_coins": 5,
      "created_at": 1718200000,
      "completed_at": 1718200015
    }
  }
}
Aufgabenstatuswerte
status Bedeutung
0In Verarbeitung
1Abgeschlossen
-1Abgebrochen
-2Fehlgeschlagen

Aufgabenliste

GET https://nsfwrouter.xyz/api/v1/tasks

Paginierte Abfrage der Aufgaben des aktuellen Kontos, mit Filterung nach Tool, Status und Zeitraum.

Abfrageparameter
Parameter Typ Erforderlich Beschreibung
pageintNeinSeitennummer, Standard 1
page_sizeintNeinSeitengröße, Standard 20, max 50
tool_idintNeinNach Tool filtern
statusintNeinNach Status filtern (0/1/-1/-2)
daysintNeinAbfragezeitraum in Tagen, Standard 30
Antwortbeispiel
{
  "code": 0,
  "message": "success",
  "data": {
    "list": [
      {
        "id": 123,
        "tool_id": 1,
        "status": 1,
        "task_output_json": [
          {
            "type": "image",
            "url": "https://cdn.example.com/outputs/abc123.png",
            "file_name": "abc123.png",
            "file_size": 1024000,
            "mime_type": "image/png",
            "width": 1024,
            "height": 1024
          }
        ],
        "error": null,
        "consume_coins": 5,
        "created_at": 1718200000,
        "completed_at": 1718200015
      },
      {
        "id": 122,
        "tool_id": 3,
        "status": 0,
        "task_output_json": [],
        "error": null,
        "consume_coins": 10,
        "created_at": 1718199000,
        "completed_at": 0
      }
    ],
    "page": 1,
    "page_size": 20
  }
}
task_output_json Feldbeschreibungen
Feld Typ Beschreibung
typestringErgebnistyp: image oder video
urlstringCDN-URL der Ergebnisdatei
file_namestringDateiname
file_sizeintDateigröße (Bytes)
mime_typestringMIME-Typ, z.B. image/png, video/mp4
widthintBreite (Pixel)
heightintHöhe (Pixel)

Kontoguthaben

GET https://nsfwrouter.xyz/api/v1/account/balance

Aktuelles Coin-Guthaben, Gesamt-Aufladung und Gesamt-Verbrauch abfragen.

Antwortbeispiel
{
  "code": 0,
  "message": "success",
  "data": {
    "remain_coins": 5000,
    "total_coins": 10000,
    "used_coins": 5000
  }
}

Webhook-Callback

Wenn webhook_url angegeben wird, sendet das System bei Abschluss, Fehlschlag oder Abbruch ein POST an diese URL. Body ist JSON.

Callback-Anfrage-Header
Content-Type: application/json
Accept: application/json
User-Agent: OpenAPI-Webhook/1.0
Callback-Anfrage-Body
{
  "event": "task.finished",
  "task": {
    "id": 123,
    "status": 1,
    "task_output_json": [
      {
        "type": "image",
        "url": "https://cdn.example.com/outputs/abc123.png",
        "file_name": "abc123.png",
        "file_size": 1024000,
        "mime_type": "image/png",
        "width": 1024,
        "height": 1024
      }
    ],
    "consume_coins": 5,
    "created_at": 1718200000,
    "completed_at": 1718200015
  }
}

Dein Server muss HTTP 2xx zurückgeben. Bei non-2xx oder Timeout (10 Sek.) automatischer Retry bis zu 5× mit exponentiellem Backoff (60s → 120s → 240s → 480s → 960s).

Fehlercodes

Alle Fehlerantworten verwenden ein einheitliches Format: {"code": fehlercode, "message": "identifikator", "data": {}}

Fehlercode message Beschreibung
20001api_key_requiredAPI-Schlüssel nicht angegeben
20001invalid_api_keyUngültiger API-Schlüssel
20001ip_not_allowedIP nicht in Whitelist
20001permission_deniedZugriff verweigert
30001tool_not_foundTool nicht gefunden
30001task_not_foundAufgabe nicht gefunden
30001insufficient_coinsCoin-Guthaben unzureichend
30001task_submit_failedAufgaben-Submission fehlgeschlagen
30001task_query_failedAufgabenabfrage fehlgeschlagen
30001task_already_existsAufgabe existiert bereits (Idempotenz)
40001tool_id_requiredParameter tool_id fehlt
40001param_errorParameterfehler
40001webhook_url_invalidwebhook_url Format ungültig
40001params_must_be_json_object_or_arrayparams muss ein JSON-Objekt oder Array sein
40001execution_options_must_be_json_object_or_arrayexecution_options muss ein JSON-Objekt oder Array sein
Fehlercode-Bereiche
Bereich Kategorie
1xxxxSystemfehler
2xxxxAuthentifizierungsfehler
3xxxxGeschäftslogikfehler
4xxxxParameterfehler
5xxxxExterne Abhängigkeitsfehler