Springe zum Inhalt
Zurück zu Nymbot

Wissensdatenbank Entwickler

Bilder, Audio und Embeddings

Die Generatoren aus der App und die Bausteine für die Suche: Bilder, Video, Sprache, Transkription und Embeddings, die jeweils pro Verwendung aus Ihrem Saldo in Rechnung gestellt werden.

Bilder generieren

Erstellt ein bis vier Bilder aus einer Anzeige und gibt sie zurück, wenn sie fertig sind. ?image In der App.

POST https://nymbot.ai/api/v1/images/generations Sie benötigen einen API-Schlüssel oder Lightning-Zahlung auf Anfrage.

Ids stammen aus GET /api/v1/models?type=imageDer Standard Generator, @cf/black-forest-labs/flux-1-schnell, kostet ein flaches 5 Standard-Credits (50 sats) ein Bild. Jeder andere Generator verbringt Pro-Credits zu seinem eigenen Preis, mit der üblichen Gebühr und Marge, wie in Die App. n Bilder kosten n Ein Feld, das ein Generator nicht nimmt, wird eher abgeworfen als abgelehnt; der Standardgenerator verwendet nur den Anruf.

FeldTyperforderlichBeschreibung
modelStringJaEin Generator ID, wie nano-banana.
promptStringJaNur die ersten 2000 Zeichen werden verwendet.
nintegrierenNein1 bis 4. Standard 1. Auch akzeptiert als num_images.
sizeStringNeinEin Aspekt Verhältnis wie "16:9"oder eine OpenAI-Größe wie "1792x1024", die dem nächstgelegenen von 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 21:9, 5:4 und 4:5 wird. "auto" Lassen Sie es auf den Generator.
aspect_ratioStringNeinDas gleiche wie sizeund gewinnt, wenn beide gesendet werden.
qualityStringNeinGeneratoren spezifisch, wie "low", "medium" oder "high".
negative_promptStringNeinWas zu verlassen.
output_formatStringNein"png", "jpeg" oder "webp".
response_formatStringNein"url" (die Verzögerung) oder "b64_json".
image_urlStringNeinDas Bild beginnt mit: ein https:// Link von höchstens 4.096 Zeichen ohne Benutzername oder Passwort, oder data:image/…;base64 URL (PNG, JPEG, WebP oder GIF; nicht SVG). Nur für Generatoren mit editvon denjenigen verlangt, die mit requires_image_url.

resolution nicht verwendet wird: Jeder Generator macht seine eigene Größe. url, jedes Bild wird auf einen öffentlichen Blossom-Host hochgeladen und Sie erhalten seinen Link (einige Generatoren geben nur einen eigenen Link zurück, der weitergeleitet wird). Was das Feuer sehen kannmit b64_json Das Bild wird in der Antwort zurückgegeben und wird niemals hochgeladen. data: URL in image_url Es wird genauso geprüft wie eine Edit und zuerst auf Blossom hochgeladen, damit der Generator es abholen kann; es wird erneut gelöscht, wenn die Anfrage fehlschlägt.

Wenn einige der n Bilder scheitern, Sie erhalten diejenigen, die gearbeitet haben, werden nur für diejenigen berechnet (plus alle, die der Anbieter trotz des Scheiterns berechnet hat), und nymbot.failed sagt, wie viele fehlen. Wenn alle fehlschlagen, wird die Anfrage zurückgegeben 502.

Reaktionen

{
  "created": 1790726400,
  "model": "nano-banana",
  "cost": 0.2126,
  "data": [
    {
      "url": "https://blossom.example/5c0e4b7d3a91f2e8...c4.png",
      "content_type": "image/png"
    }
  ],
  "nymbot": { "balance": "pro", "charged_credits": 1.817, "charged_sats": 181.7, "balance_credits": 410.608, "balance_sats": 41060.8 }
}
StatusWann
400nicht so schnell; n von 1 bis 4 (invalid_valueEine schlechte Größe (invalid_size) oder ein Bild (invalid_image, invalid_image_url); ein Modell, das existiert, aber kein Bildgenerator ist (invalid_model); ein Bild für einen Generator, der nicht editieren kann (edit_unsupported); kein Bild für jemanden, der es braucht (image_required).
402Die Bilanz kann nicht jedes angeforderte Bild abdecken.
404Kein Modell mit diesem Namen (model_not_found).
502Der Generator scheitert (upstream_errorNichts wird berechnet, es sei denn, der Anbieter hat für den Versuch berechnet; dann ist der Fehler charged_sats.
503Bilder können derzeit nicht gehostet werden (media_hosting_unavailable). b64_json immer noch funktioniert.

cURL

curl https://nymbot.ai/api/v1/images/generations \
  -H "Authorization: Bearer $NYMBOT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "nano-banana",
    "prompt": "A lighthouse at dusk, oil painting",
    "size": "16:9"
  }'

Python

import os
import requests

res = requests.post(
    "https://nymbot.ai/api/v1/images/generations",
    headers={"Authorization": "Bearer " + os.environ["NYMBOT_API_KEY"]},
    json={"model": "nano-banana", "prompt": "A lighthouse at dusk, oil painting", "size": "16:9"},
)
res.raise_for_status()
print(res.json()["data"][0]["url"])

JavaScript

const res = await fetch("https://nymbot.ai/api/v1/images/generations", {
  method: "POST",
  headers: {
    "Authorization": "Bearer " + process.env.NYMBOT_API_KEY,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ model: "nano-banana", prompt: "A lighthouse at dusk, oil painting", size: "16:9" }),
});
const body = await res.json();
console.log(body.data[0].url);

Bildbearbeitung

Ändert ein Bild, das Sie hochladen, nach einer Anweisung.Dies ist der Edit-Endpunkt von OpenAI, so dass die OpenAI SDKs images.edit funktioniert, wie es ist. nur Pro-Generatoren mit edit in der Modellliste akzeptieren.

POST https://nymbot.ai/api/v1/images/edits Sie benötigen einen API-Schlüssel oder Lightning-Zahlung auf AnfrageDer Körper ist multipart/form-dataBis zu 32 MB.

FeldTyperforderlichBeschreibung
imageDateiJaDas Bild zu bearbeiten: PNG, JPEG, WebP oder GIF, bis zu 20 MB. image[]Der erste wird verwendet.
promptStringJaWas zu ändern.
modelStringJaEin Generator mit edit.
nintegrierenNein1 bis 4
size
aspect_ratio
quality
negative_prompt
output_format
StringNeinFür die Generation.
response_formatStringNein"b64_json" (das Default hier) oder "url".

Das Bild, das Sie hochladen, wird überprüft, ob es sich um ein gut geformtes PNG, JPEG, WebP oder GIF handelt, als sein echter Typ übermittelt und auf einem öffentlichen Blossom-Host gesendet wird, da die Generatoren ihre Eingabe per Link abholen. Behandeln Sie es als öffentlich. Wenn die Bearbeitung fehlschlägt und nichts aufgeladen wird, wird die gehostete Kopie erneut gelöscht. Die Antwort hat die gleiche Form wie für die Generation.

Reaktionen

{
  "created": 1790726460,
  "model": "nano-banana",
  "cost": 0.2126,
  "data": [{ "b64_json": "iVBORw0KGgoAAAANSUhEUgAA..." }],
  "nymbot": { "balance": "pro", "charged_credits": 1.817, "charged_sats": 181.7, "balance_credits": 408.791, "balance_sats": 40879.1 }
}
StatusWann
400Kein Bild oder eine Datei, die kein Bild ist (invalid_image) oder ein Generator, der nicht editieren kann (edit_unsupported).
413Das Bild ist größer als 20 MB (file_too_large), oder die gesamte Anfrage über 32 MB.
503Das Bild kann derzeit nicht gehostet werden (media_hosting_unavailable).

cURL

curl https://nymbot.ai/api/v1/images/edits \
  -H "Authorization: Bearer $NYMBOT_API_KEY" \
  -F model=nano-banana \
  -F [email protected] \
  -F prompt="Make it a snowy evening"

Python

import base64, os
from openai import OpenAI

client = OpenAI(base_url="https://nymbot.ai/api/v1", api_key=os.environ["NYMBOT_API_KEY"])

with open("photo.png", "rb") as f:
    result = client.images.edit(model="nano-banana", image=f, prompt="Make it a snowy evening")

with open("edited.png", "wb") as out:
    out.write(base64.b64decode(result.data[0].b64_json))

JavaScript

import fs from "node:fs";
import { writeFile } from "node:fs/promises";
import OpenAI from "openai";

const client = new OpenAI({ baseURL: "https://nymbot.ai/api/v1", apiKey: process.env.NYMBOT_API_KEY });

const result = await client.images.edit({
  model: "nano-banana",
  image: fs.createReadStream("photo.png"),
  prompt: "Make it a snowy evening",
});
await writeFile("edited.png", Buffer.from(result.data[0].b64_json, "base64"));

Das Video

Ein Video dauert Minuten, also läuft es im Hintergrund. Sie senden es ein, erhalten sofort eine ID und fragen nach der ID, bis es fertig ist.

POST https://nymbot.ai/api/v1/videos Sie benötigen einen API-Schlüssel oder Lightning-Zahlung auf AnfrageDie Rückkehr 202.

FeldTyperforderlichBeschreibung
modelStringJaEin Video Generator ID von GET /api/v1/models?type=videoSo wie veo.
promptStringJaWas sollte passieren.
durationNummer oder StringNeinLänge in Sekunden, mehr als 0 und bis zu 60. Nur von Generatoren verwendet, die Ihnen erlauben, die Länge zu wählen; die anderen machen ihre übliche Länge, was seconds Die Antwort und der Preis folgen.
aspect_ratioStringNeinSo wie "16:9" oder "9:16"Eine Größe wie "1280x720" Es wird die nächstgelegene Ratio.
resolution
quality
StringNeinEiner der Generatoren resolutions In der Modellliste, wie "720p" oder "1080p"Es setzt den Preis. Alles andere wird abgelehnt unsupported_resolution.
image_urlStringNeinDas Bild beginnt mit: ein https:// Link oder A data:image/… URL, die zuerst auf einen öffentlichen Blossom-Host hochgeladen wird. requires_image_url.

Der Preis ist festgelegt, wenn Sie einreichen, von der Generator, Auflösung und Länge, so dass es von Ihrem Pro-Guthaben berechnet wird, sobald der Anbieter die Arbeit akzeptiert, und angezeigt als cost, estimated_cost Und nymbot.Wenn der Anbieter die Arbeit ablehnt, wird nichts berechnet.Wenn die Renderung später fehlschlägt oder der fertige Clip nicht gespeichert werden kann und der Anbieter keine Rechnung dafür erhoben hat, wird die Gebühr automatisch einmal zurückerstattet.Eine Renderung, die nach einer Stunde noch läuft, wird aufgegeben und behält ihre Gebühr, da der Anbieter eine Renderung berechnet, sobald er sie akzeptiert.Eine Rückerstattung gibt die Credits zurück, senkt aber nicht die Ausgabenzahlung des Schlüssels.

Beantwortung (202)

{
  "id": "vid_3e9a51c07b2f4d86e0a1c4f2",
  "object": "video",
  "model": "veo",
  "status": "in_progress",
  "created": 1790726400,
  "seconds": 8,
  "resolution": "1080p",
  "estimated_cost": 3.18,
  "expires_at": 1790812800,
  "cost": 3.18,
  "nymbot": { "balance": "pro", "charged_credits": 31.8, "charged_sats": 3180, "balance_credits": 378.808, "balance_sats": 37880.8 }
}

status beginnt als in_progressoder completed Mit dem Video bereits in data Der Generator hat es sofort zurückgegeben.

Überprüfen auf einem Video

GET https://nymbot.ai/api/v1/videos/{id} - benötigt einen Schlüssel, der dem Nym gehört, der ihn eingereicht hat. Ein Schlüssel, der seine Kappe erreicht hat, kann immer noch überprüfen.

Es antwortet 202 Während das Video erstellt wird und 200 wenn es fertig ist oder gescheitert ist. Fragen Sie alle 5 bis 10 Sekunden. Jeder Check fragt den Anbieter einmal und antwortet sofort; es wartet nie auf das Video. GET /api/v1/videos Liste der letzten 50 Jobs des Schlüssels als {"object": "list", "data": […]}.

Die Antwort (200)

{
  "id": "vid_3e9a51c07b2f4d86e0a1c4f2",
  "object": "video",
  "model": "veo",
  "status": "completed",
  "created": 1790726400,
  "seconds": 8,
  "resolution": "1080p",
  "estimated_cost": 3.18,
  "expires_at": 1790812800,
  "completed_at": 1790726590,
  "data": { "url": "https://blossom.example/9b41d0c2e7a3f658...1e.mp4", "content_type": "video/mp4" },
  "cost": 3.18,
  "nymbot": { "balance": "pro", "charged_credits": 31.8, "charged_sats": 3180 }
}

status ist in_progress, completed oder failedEin gescheiterter Job trägt error ({"code": "generation_failed", "message": …}wenn es zurückgezahlt wurde, cost 0 ist und nymbot Hinzufügen refunded_credits Und refunded_satsDas fertige Video ist auf einem öffentlichen Blossom-Host, wie erzeugte Bilder.

StatusWann
400Kein schneller; eine Dauer außerhalb von 0 bis 60 (invalid_value); eine Auflösung, die der Generator nicht anbietet (unsupported_resolution); kein Bild für einen Generator, der einen benötigt (image_required); ein Modell, das kein Videogenerator ist (invalid_model).
402Die Pro-Balance kann das Video nicht abdecken.
404Kein solcher Generator (model_not_found), oder keine Arbeit durch diese id für Ihren nym, oder es ist mehr als 24 Stunden alt (video_not_found).
429Ihre nym hat bereits 10 videos rendering (video_jobs_limitÜberprüfen Sie sie und übermitteln Sie mehr, sobald eine abgeschlossen ist.
502Der Generator lehnte den Job ab. Es wird nichts berechnet, es sei denn, der Anbieter hat dafür berechnet.
503Videos können derzeit nicht geliefert oder gespeichert werden (media_hosting_unavailable, service_unavailable).

cURL

curl https://nymbot.ai/api/v1/videos \
  -H "Authorization: Bearer $NYMBOT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "veo", "prompt": "Waves rolling onto a beach at sunrise", "duration": 8, "aspect_ratio": "16:9"}'

curl https://nymbot.ai/api/v1/videos/vid_3e9a51c07b2f4d86 \
  -H "Authorization: Bearer $NYMBOT_API_KEY"

Python

import os, time
import requests

headers = {"Authorization": "Bearer " + os.environ["NYMBOT_API_KEY"]}

job = requests.post(
    "https://nymbot.ai/api/v1/videos",
    headers=headers,
    json={"model": "veo", "prompt": "Waves rolling onto a beach at sunrise", "duration": 8, "aspect_ratio": "16:9"},
).json()

while True:
    time.sleep(8)
    status = requests.get("https://nymbot.ai/api/v1/videos/" + job["id"], headers=headers).json()
    if status["status"] in ("completed", "failed"):
        break

print(status["data"]["url"] if status["status"] == "completed" else status["error"])

JavaScript

const headers = {
  "Authorization": "Bearer " + process.env.NYMBOT_API_KEY,
  "Content-Type": "application/json",
};

const job = await (await fetch("https://nymbot.ai/api/v1/videos", {
  method: "POST",
  headers,
  body: JSON.stringify({ model: "veo", prompt: "Waves rolling onto a beach at sunrise", duration: 8, aspect_ratio: "16:9" }),
})).json();

let status;
do {
  await new Promise((r) => setTimeout(r, 8000));
  status = await (await fetch("https://nymbot.ai/api/v1/videos/" + job.id, { headers })).json();
} while (status.status !== "completed" && status.status !== "failed");

console.log(status.status === "completed" ? status.data.url : status.error);

Text zur Rede

Lesen Sie Text laut und geben Sie die Audio-Datei selbst zurück, nicht einen Link. audio.speech.create In den OpenAI SDKs funktioniert.

POST https://nymbot.ai/api/v1/audio/speech Sie benötigen einen API-Schlüssel oder Lightning-Zahlung auf Anfrage.

FeldTyperforderlichBeschreibung
modelStringNeinEin Sprachmodell von Liste der AudiomodelleDefault: Die Standard-Stimme @cf/myshell-ai/melotts. aura-2 Das ist Deepgram Aura 2.
inputStringJaDer Text zum Lesen: bis zu 800 Zeichen für die Standard-Stimme, 2.000 für Aura 2.
voiceStringNeinEine Voice-ID von Die Stimmenliste: ein Aura-Sprecher wie luna (oder aura-2-luna-en, oder eine MeloTTS Sprache (en, es, fr, zhOpenAI Sprachnamen wie alloy Sie werden akzeptiert und geben die Standard-Stimme des Modells.
languageStringNeinEin Sprachcode wie esOhne eine Stimme wählt sie eine für diese Sprache. Eine Stimme, die eine andere Sprache spricht, kehrt zurück. 422 voice_language_mismatchund eine Sprache, für die das Modell keine Stimme hat 422 unsupported_language.
response_formatStringNeinDie Standard-Stimme kehrt zurück mp3 Aura 2 kommt zurück mp3 (Das ist ein Default) opus, aac, flac, wav oder pcm.
speedAnzahlNeinAkzeptiert und ignoriert.

Die Standard-Stimme kostet 3 Standard-Credits (30 Sätze) pro Anfrage, wie in der App. Aura 2 ist Pro, preisgegeben nach den Zeichen, die Sie senden. Content-TypeDie Kosten liegen in der X-Nymbot-Cost-Sats Wenn das Sprachmodell fehlschlägt, wird nichts aufgeladen.

Reaktionen

HTTP/1.1 200 OK
Content-Type: audio/mpeg
X-Nymbot-Cost-Sats: 4.2
X-Nymbot-Balance-Sats: 41055.6

(audio bytes)
StatusWann
400Keine Eingabe; Eingabe über die Modellgrenze (input_too_long); ein Format, das das Modell nicht produzieren kann (unsupported_response_formatEine unbekannte Stimme (invalid_voice); ein Modell, das kein Sprachmodell ist (invalid_model).
422Die Stimme spricht nicht die gegebenen Sprache, oder das Modell hat keine Stimme dafür.
502Das Sprachmodell ist gescheitert.Nichts wird belastet.

cURL

curl https://nymbot.ai/api/v1/audio/speech \
  -H "Authorization: Bearer $NYMBOT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "aura-2", "voice": "luna", "input": "Your invoice has been paid."}' \
  --output speech.mp3

Python

import os
from openai import OpenAI

client = OpenAI(base_url="https://nymbot.ai/api/v1", api_key=os.environ["NYMBOT_API_KEY"])

audio = client.audio.speech.create(
    model="aura-2",
    voice="luna",
    input="Your invoice has been paid.",
)
audio.write_to_file("speech.mp3")

JavaScript

import { writeFile } from "node:fs/promises";
import OpenAI from "openai";

const client = new OpenAI({ baseURL: "https://nymbot.ai/api/v1", apiKey: process.env.NYMBOT_API_KEY });

const audio = await client.audio.speech.create({
  model: "aura-2",
  voice: "luna",
  input: "Your invoice has been paid.",
});
await writeFile("speech.mp3", Buffer.from(await audio.arrayBuffer()));

Audiomodelle und Stimmen

Zwei öffentliche Listen zur Auswahl eines Sprachmodells und einer Stimme oder eines Transkriptionsmodells.Es gibt 41 Aura 2 Englischsprachler und vier MeloTTS-Sprachen.

GET https://nymbot.ai/api/v1/audio/models Kein Schlüssel benötigt.

GET https://nymbot.ai/api/v1/audio/voices?language=en Kein Schlüssel benötigt.

FeldTyperforderlichBeschreibung
languageString für QueryNeinNur Stimmen für diese Sprache.
modelString für QueryNeinNur Stimmen für dieses Modell.

Die Antwort (die Stimme)

{
  "object": "list",
  "data": [
    { "id": "luna", "name": "Luna", "provider": "deepgram", "model_id": "aura-2", "models": ["aura-2"], "language": "en", "description": "Aura 2 English voice", "gender": "female", "preview_url": null },
    { "id": "en", "name": "MeloTTS English", "provider": "myshell", "model_id": "@cf/myshell-ai/melotts", "models": ["@cf/myshell-ai/melotts", "melotts"], "language": "en", "description": "English (MeloTTS)", "gender": null, "preview_url": null }
  ]
}

Die Modelle Liste Antworten {"object": "list", "data": {"tts": […], "stt": […]}}Jedes Sprachmodell gibt seine Balance, seinen Preis, max_input_chars, response_formats, languages Und default_voiceDas Transkriptionsmodell gibt seine Alias, max_file_bytes, max_secondsFormate und Preis pro Minute.

cURL

curl https://nymbot.ai/api/v1/audio/models
curl "https://nymbot.ai/api/v1/audio/voices?language=en"

Python

import requests

print(requests.get("https://nymbot.ai/api/v1/audio/models").json())
for voice in requests.get("https://nymbot.ai/api/v1/audio/voices", params={"language": "en"}).json()["data"]:
    print(voice["id"], voice["model_id"])

JavaScript

console.log(await (await fetch("https://nymbot.ai/api/v1/audio/models")).json());
const voices = await (await fetch("https://nymbot.ai/api/v1/audio/voices?language=en")).json();
for (const v of voices.data) console.log(v.id, v.model_id);

Rede zum Text

Verwandelt eine Aufnahme in Text mit Whisper. Dies ist der Transcription-Endpunkt von OpenAI. audio.transcriptions.create Die Arbeiten.

POST https://nymbot.ai/api/v1/audio/transcriptions Sie benötigen einen API-Schlüssel oder Lightning-Zahlung auf AnfrageDer Körper ist multipart/form-data.

FeldTyperforderlichBeschreibung
fileDateiJaDie Aufzeichnung, von 256 Bytes bis 25 MB und bis zu 30 Minuten: WAV, WebM, MP4 oder M4A, Ogg oder Opus, MP3 und die anderen Formate Whisper liest.
modelStringNeinDefekt whisperDas ist Whisper Large v3 Turbo. whisper-1, whisper-large-v3-turbo Und @cf/openai/whisper-large-v3-turbo Meint das Gleiche.
languageStringNeinDie gesprochene Sprache, wie enErkannt, wenn Sie verlassen wurden.
promptStringNeinWörter oder Rechtschreibungen, die Sie erwarten können, z. B. Namen. Nur die ersten 1000 Zeichen werden verwendet.
response_formatStringNeinjson (Das ist ein Default) text, srt, vtt oder verbose_json.

Bei WAV, WebM, MP4 und Ogg-Dateien wird die Länge aus der Datei gelesen, bevor etwas ausgeführt wird, so dass eine Aufnahme über 30 Minuten vorne abgelehnt wird (mit 3 Sekunden Gnade). Die Länge einer WAV-Datei kommt von ihrer Probenrate, Kanälen und Probengröße. Die Länge anderer Formate, wie MP3, kann nicht vorne gelesen werden, so dass sie durch Größe begrenzt sind: bei der niedrigsten Bitrate Nymbot geht davon aus, 8 kbps, 30 Minuten ist 1,8 MB, und eine größere Datei in einem solchen Format wird abgelehnt. 413 audio_too_long Senden Sie längere Aufnahmen wie WAV, WebM, MP4 oder Ogg. Wenn Whisper dann jedenfalls mehr als 30 Minuten meldet, wird die Anfrage mit 413 audio_too_long, und da Whisper läuft, werden 30 Minuten aufgeladen.

Sie zahlen für die Länge des Audios, abgerundet auf die zweite: die längste Länge aus der Datei gelesen, die Länge Whisper Berichte, und die geringste Größe der Datei erlaubt, zu Whisper pro Minute Preis mit der üblichen Gebühr und Marge, und mindestens 0,05 Kredit eine Anfrage. 402 In der App kann die Transkription einer Sprachnachricht kostenlos sein; auf der API wird sie immer geladen.

Reaktionen

{
  "text": "Your invoice has been paid.",
  "usage": { "type": "duration", "seconds": 3 },
  "nymbot": { "balance": "standard", "charged_credits": 0.05, "charged_sats": 0.5, "balance_credits": 120.35, "balance_sats": 1203.5 }
}

text Rückgabe von klarem Text, srt Und vtt Rückkehr von Untertiteln und verbose_json fügt die Sprache, Dauer und zeitliche Segmente hinzu. Für die drei, die nicht JSON sind, liegen die Kosten in den Überschriften.

StatusWann
400Keine Datei, eine Datei ohne nutzbaren Audio (invalid_audio, ein unbekanntes Format oder ein Modell, das kein Transkriptionsmodell ist (invalid_model).
402Auch das Gleichgewicht kann es nicht abdecken.
413Die Datei ist größer als 25 MB (file_too_large) oder die Aufnahme von mehr als 30 Minuten oder, in einem Format, dessen Länge nicht vorne abgelesen werden kann, über 1,8 MB (audio_too_long).
502Whisper konnte das Audio nicht verarbeiten.

cURL

curl https://nymbot.ai/api/v1/audio/transcriptions \
  -H "Authorization: Bearer $NYMBOT_API_KEY" \
  -F [email protected] \
  -F model=whisper \
  -F response_format=json

Python

import os
from openai import OpenAI

client = OpenAI(base_url="https://nymbot.ai/api/v1", api_key=os.environ["NYMBOT_API_KEY"])

with open("memo.m4a", "rb") as f:
    transcript = client.audio.transcriptions.create(model="whisper", file=f)
print(transcript.text)

JavaScript

import fs from "node:fs";
import OpenAI from "openai";

const client = new OpenAI({ baseURL: "https://nymbot.ai/api/v1", apiKey: process.env.NYMBOT_API_KEY });

const transcript = await client.audio.transcriptions.create({
  model: "whisper",
  file: fs.createReadStream("memo.m4a"),
});
console.log(transcript.text);

Übersetzung der Rede ins Englische

POST https://nymbot.ai/api/v1/audio/translations Sie benötigen einen API-Schlüssel oder Lightning-Zahlung auf AnfrageDer Körper ist multipart/form-data.

Das gleiche wie Transkription, mit den gleichen Feldern abgesehen von language, Grenzen und Preis, aber der Text kommt auf Englisch zurück, egal welche Sprache gesprochen wurde. audio.translations.create.

cURL

curl https://nymbot.ai/api/v1/audio/translations \
  -H "Authorization: Bearer $NYMBOT_API_KEY" \
  -F [email protected] \
  -F model=whisper

Python

import os
from openai import OpenAI

client = OpenAI(base_url="https://nymbot.ai/api/v1", api_key=os.environ["NYMBOT_API_KEY"])

with open("nota.m4a", "rb") as f:
    translation = client.audio.translations.create(model="whisper", file=f)
print(translation.text)

JavaScript

import fs from "node:fs";
import OpenAI from "openai";

const client = new OpenAI({ baseURL: "https://nymbot.ai/api/v1", apiKey: process.env.NYMBOT_API_KEY });

const translation = await client.audio.translations.create({
  model: "whisper",
  file: fs.createReadStream("nota.m4a"),
});
console.log(translation.text);

Einbettungen

Verwandelt Text in Vektoren für die Suche, Clustering und Deduplizierung. Die Modelle laufen auf Cloudflare und verbrauchen das Standardguthaben.

POST https://nymbot.ai/api/v1/embeddings Sie benötigen einen API-Schlüssel oder Lightning-Zahlung auf Anfrage.

FeldTyperforderlichBeschreibung
modelStringJaEin eingebettetes Modell von GET /api/v1/models?type=embedding.
inputString oder Array von StringsJaDer Text, der eingebettet werden soll, beträgt bis zu 100 nicht leere Zeichenfolgen.token_input_unsupportedJede Eingabe muss dem Modell entsprechen context_length, berechnet als etwa vier Byte ein Token.
encoding_formatStringNeinfloat (die Verzögerung) oder base64 (Little-endian 32-Bit Flowers sind nicht verfügbar)
dimensionsintegrierenNeinDie Größe des Modells selbst oder für ein Modell mit supported_dimensions Der Vektor wird dann verkürzt und normalisiert, alles andere wird abgelehnt.
ModellDimensionenKontext
@cf/baai/bge-m31024 in vielen Sprachen8 192 Token
@cf/qwen/qwen3-embedding-0.6b1024 in vielen Sprachen8 192 Token
@cf/baai/bge-large-en-v1.51024 Englisch512 Token
@cf/baai/bge-base-en-v1.5768, Englisch512 Token
@cf/baai/bge-small-en-v1.5384 Englisch512 Token

Die Modellliste ist die Quelle der Wahrheit, für die sie verfügbar sind und was sie kosten; Googles EmbeddingGemma, mit kürzeren Vektoren auf Anfrage, erscheint dort auch, wenn der Katalog einen Preis dafür hat.

Reaktionen

{
  "object": "list",
  "data": [
    { "object": "embedding", "index": 0, "embedding": [0.0213, -0.0487, 0.0112] }
  ],
  "model": "@cf/baai/bge-m3",
  "usage": { "prompt_tokens": 9, "total_tokens": 9 },
  "nymbot": { "balance": "standard", "charged_credits": 0.05, "charged_sats": 0.5, "balance_credits": 1204.35, "balance_sats": 12043.5 }
}
StatusWann
400Keine Eingabe oder eine leere; Token-Array (token_input_unsupported); mehr als 100 Einträge (too_many_inputs); eine Eingabe länger als das Modell nimmt (input_too_longEine Größe, die das Modell nicht geben kann (unsupported_dimensions).
402Das Standard-Gleichgewicht ist zu niedrig. Embeddings verwenden nie das Pro-Gleichgewicht.
404Kein Modell mit diesem Namen.
502Das Modell ist gescheitert.Nichts wird berechnet.

cURL

curl https://nymbot.ai/api/v1/embeddings \
  -H "Authorization: Bearer $NYMBOT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "@cf/baai/bge-m3", "input": ["Lightning invoices expire.", "Invoices on Lightning have a time limit."]}'

Python

import os
from openai import OpenAI

client = OpenAI(base_url="https://nymbot.ai/api/v1", api_key=os.environ["NYMBOT_API_KEY"])

result = client.embeddings.create(
    model="@cf/baai/bge-m3",
    input=["Lightning invoices expire.", "Invoices on Lightning have a time limit."],
)
print(len(result.data), len(result.data[0].embedding))

JavaScript

import OpenAI from "openai";

const client = new OpenAI({ baseURL: "https://nymbot.ai/api/v1", apiKey: process.env.NYMBOT_API_KEY });

const result = await client.embeddings.create({
  model: "@cf/baai/bge-m3",
  input: ["Lightning invoices expire.", "Invoices on Lightning have a time limit."],
});
console.log(result.data.length, result.data[0].embedding.length);