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.
Diese Seite wurde der Einfachheit halber maschinell übersetzt. Es gilt das englische Original.
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.
| Feld | Typ | erforderlich | Beschreibung |
|---|---|---|---|
model | String | Ja | Ein Generator ID, wie nano-banana. |
prompt | String | Ja | Nur die ersten 2000 Zeichen werden verwendet. |
n | integrieren | Nein | 1 bis 4. Standard 1. Auch akzeptiert als num_images. |
size | String | Nein | Ein 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_ratio | String | Nein | Das gleiche wie sizeund gewinnt, wenn beide gesendet werden. |
quality | String | Nein | Generatoren spezifisch, wie "low", "medium" oder "high". |
negative_prompt | String | Nein | Was zu verlassen. |
output_format | String | Nein | "png", "jpeg" oder "webp". |
response_format | String | Nein | "url" (die Verzögerung) oder "b64_json". |
image_url | String | Nein | Das 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 }
}
| Status | Wann |
|---|---|
400 | nicht 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). |
402 | Die Bilanz kann nicht jedes angeforderte Bild abdecken. |
404 | Kein Modell mit diesem Namen (model_not_found). |
502 | Der Generator scheitert (upstream_errorNichts wird berechnet, es sei denn, der Anbieter hat für den Versuch berechnet; dann ist der Fehler charged_sats. |
503 | Bilder 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.
| Feld | Typ | erforderlich | Beschreibung |
|---|---|---|---|
image | Datei | Ja | Das Bild zu bearbeiten: PNG, JPEG, WebP oder GIF, bis zu 20 MB. image[]Der erste wird verwendet. |
prompt | String | Ja | Was zu ändern. |
model | String | Ja | Ein Generator mit edit. |
n | integrieren | Nein | 1 bis 4 |
sizeaspect_ratioqualitynegative_promptoutput_format | String | Nein | Für die Generation. |
response_format | String | Nein | "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 }
}
| Status | Wann |
|---|---|
400 | Kein Bild oder eine Datei, die kein Bild ist (invalid_image) oder ein Generator, der nicht editieren kann (edit_unsupported). |
413 | Das Bild ist größer als 20 MB (file_too_large), oder die gesamte Anfrage über 32 MB. |
503 | Das 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.
| Feld | Typ | erforderlich | Beschreibung |
|---|---|---|---|
model | String | Ja | Ein Video Generator ID von GET /api/v1/models?type=videoSo wie veo. |
prompt | String | Ja | Was sollte passieren. |
duration | Nummer oder String | Nein | Lä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_ratio | String | Nein | So wie "16:9" oder "9:16"Eine Größe wie "1280x720" Es wird die nächstgelegene Ratio. |
resolutionquality | String | Nein | Einer der Generatoren resolutions In der Modellliste, wie "720p" oder "1080p"Es setzt den Preis. Alles andere wird abgelehnt unsupported_resolution. |
image_url | String | Nein | Das 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.
| Status | Wann |
|---|---|
400 | Kein 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). |
402 | Die Pro-Balance kann das Video nicht abdecken. |
404 | Kein 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). |
429 | Ihre nym hat bereits 10 videos rendering (video_jobs_limitÜberprüfen Sie sie und übermitteln Sie mehr, sobald eine abgeschlossen ist. |
502 | Der Generator lehnte den Job ab. Es wird nichts berechnet, es sei denn, der Anbieter hat dafür berechnet. |
503 | Videos 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.
| Feld | Typ | erforderlich | Beschreibung |
|---|---|---|---|
model | String | Nein | Ein Sprachmodell von Liste der AudiomodelleDefault: Die Standard-Stimme @cf/myshell-ai/melotts. aura-2 Das ist Deepgram Aura 2. |
input | String | Ja | Der Text zum Lesen: bis zu 800 Zeichen für die Standard-Stimme, 2.000 für Aura 2. |
voice | String | Nein | Eine 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. |
language | String | Nein | Ein 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_format | String | Nein | Die Standard-Stimme kehrt zurück mp3 Aura 2 kommt zurück mp3 (Das ist ein Default) opus, aac, flac, wav oder pcm. |
speed | Anzahl | Nein | Akzeptiert 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)
| Status | Wann |
|---|---|
400 | Keine 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). |
422 | Die Stimme spricht nicht die gegebenen Sprache, oder das Modell hat keine Stimme dafür. |
502 | Das 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.
| Feld | Typ | erforderlich | Beschreibung |
|---|---|---|---|
language | String für Query | Nein | Nur Stimmen für diese Sprache. |
model | String für Query | Nein | Nur 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.
| Feld | Typ | erforderlich | Beschreibung |
|---|---|---|---|
file | Datei | Ja | Die 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. |
model | String | Nein | Defekt whisperDas ist Whisper Large v3 Turbo. whisper-1, whisper-large-v3-turbo Und @cf/openai/whisper-large-v3-turbo Meint das Gleiche. |
language | String | Nein | Die gesprochene Sprache, wie enErkannt, wenn Sie verlassen wurden. |
prompt | String | Nein | Wörter oder Rechtschreibungen, die Sie erwarten können, z. B. Namen. Nur die ersten 1000 Zeichen werden verwendet. |
response_format | String | Nein | json (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.
| Status | Wann |
|---|---|
400 | Keine Datei, eine Datei ohne nutzbaren Audio (invalid_audio, ein unbekanntes Format oder ein Modell, das kein Transkriptionsmodell ist (invalid_model). |
402 | Auch das Gleichgewicht kann es nicht abdecken. |
413 | Die 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). |
502 | Whisper 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.
| Feld | Typ | erforderlich | Beschreibung |
|---|---|---|---|
model | String | Ja | Ein eingebettetes Modell von GET /api/v1/models?type=embedding. |
input | String oder Array von Strings | Ja | Der 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_format | String | Nein | float (die Verzögerung) oder base64 (Little-endian 32-Bit Flowers sind nicht verfügbar) |
dimensions | integrieren | Nein | Die 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. |
| Modell | Dimensionen | Kontext |
|---|---|---|
@cf/baai/bge-m3 | 1024 in vielen Sprachen | 8 192 Token |
@cf/qwen/qwen3-embedding-0.6b | 1024 in vielen Sprachen | 8 192 Token |
@cf/baai/bge-large-en-v1.5 | 1024 Englisch | 512 Token |
@cf/baai/bge-base-en-v1.5 | 768, Englisch | 512 Token |
@cf/baai/bge-small-en-v1.5 | 384 Englisch | 512 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 }
}
| Status | Wann |
|---|---|
400 | Keine 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). |
402 | Das Standard-Gleichgewicht ist zu niedrig. Embeddings verwenden nie das Pro-Gleichgewicht. |
404 | Kein Modell mit diesem Namen. |
502 | Das 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);