Wiesselt op den Inhalt
Zurück zu Nymbot

Wëssensbasis Entwéckler

Bild, Audio a Embeddings

D'Generatoren vun der App, an d'Buildbläcke fir d'Suche: Bildern, Videoen, Sprach, Transkriptioun an Embeddings, all fir all Gebrauch aus Ärem Bilan.

Generatioun vun Bildern

Et ass eng vun de gréissten a gréissten Schëffer, déi op der Säit geschéckt ginn. ?image an der App.

POST https://nymbot.ai/api/v1/images/generations - braucht eng API Schlëssel, oder Mir akzeptéieren Lightning Payment op Anfrage.

Et gëtt aus GET /api/v1/models?type=imageDe Standard Generator ass @cf/black-forest-labs/flux-1-schnell, kostet eng flat 5 Standard Credits (50 sats) eng Bild. All aner Generator verbréngt Pro Credits zu sengem eegene Präis, mat der gewëssen Gebühr a Marge, wéi an Déi App. n Fotografie kostet n E Feld, deen de Generator net nimmt, gëtt gefall anstatt refuséiert; de Standardgenerator benotzt nëmmen d'Prompt.

FënnefTypVläichtBeschreiwung
modelStrengJoEng Generator ID, wéi nano-banana.
promptStrengJoWat ze ziehen. nëmmen déi éischt 2000 Charaktere sinn benotzt.
nIntegratiounNieft1 bis 4. Default 1. Also accepted as num_images.
sizeStrengNieftDéi aner Aspekter wéi "16:9"Oder op anerersäits wierklech. "1792x1024"Et ass eng vun de gréissten vun de gréissten vun de gréissten vun de gréissten vun de gréissten vun de gréissten vun de gréissten vun de gréissten vun de gréissten vun de gréissten vun de gréissten vun de gréissten. "auto" Et gëtt den Generator.
aspect_ratioStrengNieftDéi aner als sizeEt gewënnt och, wann déi zwee geschriwwen ginn.
qualityStrengNieftGenerator spezifesch, wéi "low", "medium" oder "high".
negative_promptStrengNieftWat ze verléieren.
output_formatStrengNieft"png", "jpeg" oder "webp".
response_formatStrengNieft"url" (an der Zäit) oder "b64_json".
image_urlStrengNieftD'Bild fir ze starten vun: an https:// Link vun maximal 4096 Zeichen ohne Benutzername oder Passwort an et, oder data:image/…;base64 URL (PNG, JPEG, WebP oder GIF; net SVG). editFirwat ee steet, a wéi eng Visioun ee fir Lëtzebuerg hätt. requires_image_url.

resolution ass net benotzt: all Generator schafft seng eegene Gréisst. url, all Bild ass op eng öffentlech Blossom Host uploaden an Dir kritt seng Link (e puer Generatoren hunn nëmmen e Link vu hinnen, deen iwwerginn gëtt). Wat de Feuer kann gesinn... an b64_json D'Bild kënnt an der Reaktioun zréck an gëtt nie uploaden. data: Url an image_url Et gëtt genauso kontrolléiert wéi e Editioun Et gëtt zu Blossom erstallt, fir de Generator ze kréien; et gëtt erneut geléist, wann d'Bezéiung feelt.

Wann e puer vun den n Dir kënnt d'Fotos kréien, déi funktionnéiert, ginn nëmmen fir déi (plus all de Provider bezeechent trotz fehlgeschlagen), an nymbot.failed Et ass net ganz einfach, wann all de Bewäertungen gespaart sinn. 502.

Reaktioun

{
  "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 vumWann
400Et ass séier. n Déi éischt 4 (invalid_valueDéi éischt Kéier (invalid_sizeDéi éischt Foto (invalid_image, invalid_image_url); e Modell deen existéiert awer ass net e Bildgenerator (invalid_model); e Bild fir en Generator deen net editéiert kann (edit_unsupportedEt gëtt kee Gott awer Allah an de Muhammad ass den Allah.image_required).
402D'Balance kann net all d'Bild ze bedreiwen.
404Et gëtt keng Modell vum Numm (model_not_found).
502Déi éischt Generatioun (upstream_errorEt handelt sech ëm zwéi Stären, déi no beienee leien. charged_sats.
503Fotoen kënnen momentan net gehost ginn (media_hosting_unavailable). b64_json Et funktionnéiert nach.

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);

Editioun vum Image

Dëst ass den OpenAI Edit Endpoint, also d'OpenAI SDKs' images.edit funktionnéiert wéi et ass. Nur Pro Generatoren mat edit an der Modellliste akzeptéieren.

POST https://nymbot.ai/api/v1/images/edits - braucht eng API Schlëssel, oder Mir akzeptéieren Lightning Payment op AnfrageDe Kierper ass multipart/form-dataBis zu 32 MB.

FënnefTypVläichtBeschreiwung
imageDokumentatiounJoD'Bild ze bearbeiten: PNG, JPEG, WebP oder GIF, bis zu 20 MB. image[]Déi éischt gëtt benotzt.
promptStrengJoWat ze changéieren.
modelStrengJoDe Generator mat edit.
nIntegratiounNieft1 zu 4.
size
aspect_ratio
quality
negative_prompt
output_format
StrengNieftAn déi Generatioun.
response_formatStrengNieft"b64_json" (default hier) oder "url".

D'Bild, déi Dir uploadet, gëtt kontrolléiert, ob et eng gutt geforméiert PNG, JPEG, WebP oder GIF ass, als säi echte Typ geschéckt, an op engem öffentlechen Blossom-Host geschéckt gëtt, well d'Generatoren hir Input duerch Link kréien. Behandelt et als öffentlech. Wann d'Editioun falen an et net geléiert gëtt, gëtt d'hosted Kopie erneut geléiert. D'Reaktioun huet déi selwecht Form wéi fir d'Generatioun.

Reaktioun

{
  "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 vumWann
400No Bild oder Prompt, eng Datei, déi net eng Bild ass (invalid_imageOder op anerersäits wierklech, dat esou.edit_unsupported).
413D'Bild ass méi wéi 20 MB (file_too_large), oder d'ganz Recherche iwwer 32 MB.
503D'Bild kann momentan net gehost ginn (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"));

Videoen

A Video dauert Minutte, sou datt et am Hintergrund lafen. Dir sendet et, kritt eng id direkt, an gefragt iwwer d'id bis et geschéien ass. All Video Generator verbréngt de Pro Balance.

POST https://nymbot.ai/api/v1/videos - braucht eng API Schlëssel, oder Mir akzeptéieren Lightning Payment op AnfrageWëllkomm 202.

FënnefTypVläichtBeschreiwung
modelStrengJoA Video Generator Id vun GET /api/v1/models?type=videoDéi aner wéi veo.
promptStrengJoWat muss geschéien.
durationNummer oder StringNieftLängt an Sekonnen, méi wéi 0 an bis 60. Gebraucht nëmmen vun Generatoren, déi Iech d'Längt ze wählen; déi aner maachen hir gewëssen Längt, wat seconds an der Reaktioun an de Präis folgen.
aspect_ratioStrengNieftWéi "16:9" oder "9:16"Déi aner Gréisst wéi "1280x720" Et ass déi nächst Ratio.
resolution
quality
StrengNieftEe vun de Generatoren resolutions An der Modellliste, wéi zum Beispill "720p" oder "1080p"Et féiert den Präis. Alles anescht gëtt verweigert unsupported_resolution.
image_urlStrengNieftD'Bild fir ze starten vun: an https:// Link oder a data:image/… URL, déi an engem öffentlechen Blossom-Host éischt uploaden ass. requires_image_url.

De Präis ass fix, wann Dir de Generator, d'Resolutioun an d'Längt ze senden, sou datt et aus Ärem Pro-Balance bereet gëtt, wann de Provider d'Arbeit akzeptiert, an gezeigt als cost, estimated_cost an nymbotWann de Provider de Job verweigert, gëtt et net opgeluecht. Wann d'Rendering méi spéit misse, oder de fertige Clip kann net ze späicheren an de Provider huet net fir dat Rechnung gemaach, gëtt d'Gebühr eng Kéier, automatesch. Eng Rendering, déi nach eng Stonn gëtt, gëtt opgeholl, an behält d'Gebühr, well de Provider e Rendering rechnet, wann se et annoncéiert.

Déi éischt (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 Beginn vum in_progressoder completed D'Video ass schon am data De Generator huet se direkt gemaach.

Kontrolléieren op Video

GET https://nymbot.ai/api/v1/videos/{id} - braucht e Schlëssel, deen dem Nym gehéieren huet, deen se geschéckt huet.

Mir reagéieren 202 Während de Video gëtt gemaach an 200 Wann et komplett ass oder gefeelt huet. fragt all 5 bis 10 Sekonnen. All Check fragt de Provider eng Kéier an antwortet eng Kéier; et wacht nie fir de Video. GET /api/v1/videos listet déi lescht 50 Jobs vum Schlëssel als {"object": "list", "data": […]}.

Déi éischt (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 Déi in_progress, completed oder failedEng gescheitert Aarbecht féiert error ({"code": "generation_failed", "message": …}Och wann et erëm beim éischte Ravi!! cost Et ass 0 an nymbot D’Additioun refunded_credits an refunded_satsDe fertige Video ass op engem öffentlechen Blossom-Host, wéi generéiert Bilder.

Status vumWann
400No prompt; eng Dauer ausserhalb 0 bis 60 (invalid_value); eng Resolutioun déi de Generator net bitt (unsupported_resolution); keng Bild fir en Generator, deen eng braucht (image_required); e Modell deen eng Video Generator ass (invalid_model).
402De Pro Balance kann de Video net decken.
404Et gëtt keng Generatioun (model_not_found), oder keng Aarbecht vum id fir Är nym, oder et ass méi wéi 24 Stonnen al (video_not_found).
429Dir hutt schon 10 Videoen ze reproduzéieren (video_jobs_limitCheck op se a submit méi wann een Finishes.
502De Generator huet d'Arbeit refuséiert. Et gëtt net opgeluecht, wann de Provider fir et gebraucht huet.
503Videoen kënnen momentan net gelieft oder gespäichert ginn (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 fir d'Sprache

Liest Text haut an returnéiert d'Audio-Datei selbst, net e Link. audio.speech.create an den OpenAI SDKs funktionnéieren.

POST https://nymbot.ai/api/v1/audio/speech - braucht eng API Schlëssel, oder Mir akzeptéieren Lightning Payment op Anfrage.

FënnefTypVläichtBeschreiwung
modelStrengNieftEt ass e Sprachmodell vum D'Lëscht vun de Audio ModellerDefault: déi standard Voice. @cf/myshell-ai/melotts. aura-2 De Deepgram huet d'Aura 2 gemaach.
inputStrengJoDe Text ze liesen: bis zu 800 Zeichen fir d'Standard Voice, 2000 fir Aura 2.
voiceStrengNieftA Voice ID vun D'Lëscht vun de Voix: e Aura-Sprecher wéi luna oder aura-2-luna-enEt gëtt keng Erënnerung (en, es, fr, zh) OpenAI Voice Names wéi alloy Si sinn akzeptabel an gitt d'Default-Stem vum Modell.
languageStrengNieftEt ass eng Sprachkode, déi esNo enger Stimme wählt et eng fir déi Sprooch. 422 voice_language_mismatchEt ass eng Sprache, fir déi de Modell keng Stimme huet. 422 unsupported_language.
response_formatStrengNieftNormalerweis kënnt de mp3 D'Aura 2 ass de Retour. mp3 Duerfir gëtt klenggeschriwwen: opus, aac, flac, wav oder pcm.
speedD’NumérNieftVläicht ignoréiert a ignoréiert.

D'Standard-Voix kostet eng Flat 3 Standard-Credits (30 Sats) eng Recherche, wéi an der App. Aura 2 ass Pro, gepréift duerch d'Charakteren déi Dir sendet. Content-TypeD'Käschte läit an der X-Nymbot-Cost-Sats Wann de Sprachmodell feelt, gëtt nichts geladen.

Reaktioun

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

(audio bytes)
Status vumWann
400Et handelt sech ëm zwéi Stären, déi no beienee leien.input_too_long); e Format deen de Modell net produzéiert kann (unsupported_response_formatEt gëtt keng sou Adress (invalid_voiceEt handelt sech ëm zwéi Stären, déi no beienee leien.invalid_model).
422D'Stëmme spricht net d'Sprache, oder d'Modell huet keng Stëmme fir et.
502De Sprachmodell huet gescheit.

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()));

Audio Modeller a Stimmen

Zwee öffentlech Listen fir e Sprachmodell an d'Sprache ze wählen, oder e Transcription-Modell.

GET https://nymbot.ai/api/v1/audio/models Et braucht keng Schlëssel.

GET https://nymbot.ai/api/v1/audio/voices?language=en Et braucht keng Schlëssel.

FënnefTypVläichtBeschreiwung
languageD’Qualitéit (Question)NieftJust fir dës Sprache.
modelD’Qualitéit (Question)NieftJust fir dës Modell.

Reaktioune ( an d’Reaktioune)

{
  "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 }
  ]
}

D'Lëscht vun de Modeller huet Antworten {"object": "list", "data": {"tts": […], "stt": […]}}All Sprachmodell huet seng Balance, Präis, max_input_chars, response_formats, languages an default_voiceD'Transkriptiounsmodell huet seng Alias, max_file_bytes, max_seconds, Formater a Präis pro Minutt.

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);

Duerfir gëtt et Text

Dëst ass de Transcription Endpoint vun OpenAI, also audio.transcriptions.create Déi funktionnéiert.

POST https://nymbot.ai/api/v1/audio/transcriptions - braucht eng API Schlëssel, oder Mir akzeptéieren Lightning Payment op AnfrageDe Kierper ass multipart/form-data.

FënnefTypVläichtBeschreiwung
fileDokumentatiounJoD'Aufnahmen, vun 256 Byte bis 25 MB an bis zu 30 Minutten: WAV, WebM, MP4 oder M4A, Ogg oder Opus, MP3 an déi aner Formater Whisper liest.
modelStrengNieftDefault whisperD'Situatioun ass de Whisper Large v3 Turbo. whisper-1, whisper-large-v3-turbo an @cf/openai/whisper-large-v3-turbo Et ass déi selwecht.
languageStrengNieftDe Sprachgebrauch, wéi enEt gëtt entdeckt, wann et verpasst gëtt.
promptStrengNieftWorte oder Rechtschreibungen ze erwaart, wéi zum Beispill Namen.
response_formatStrengNieftjson Duerfir gëtt klenggeschriwwen: text, srt, vtt oder verbose_json.

Fir WAV, WebM, MP4 an Ogg Fichier d'Längt ass aus der Datei ze liesen, ier alles ausgeführt gëtt, sou datt eng Rekord méi wéi 30 Minutten an der Fräizäit refuséiert gëtt (met 3 Sekonnen). D'Längt vun enger WAV-Datei ass vun der Probe-Rate, Kanälen an Probe-Gréisst. D'Längt vun aner Formater, wéi MP3, kann net op der Fräizäit geléiert ginn, sou datt se vun der Gréisst beschränkt sinn: bei der niedrigsten Bitrate Nymbot ass, 8 kbps, 30 Minutten ass 1,8 MB, an eng méi grouss Datei an sou Format ass refuséiert. 413 audio_too_long Schreift länger Rekordunge wéi WAV, WebM, MP4 oder Ogg. Wann Whisper dann méi wéi 30 Minutten meldt, gëtt d'Anfrage verweigert mat 413 audio_too_long, a well Whisper huet geännert, 30 Minutten ginn opgelueden.

Dir bezuelt fir d'Längt vun der Audio, fir déi zweet: d'längste vun der Längt aus der Datei liest, d'Längt vu Whisper Rapporten, an d'minimum vun der Datei erméiglecht, zu Whisper's pro-Minutt Präis mat der gewöhnlechen Gebühr a Marge, an mindestens 0,05 Kredit eng Fro. 402 An der App kann d'Transkriptioun vun enger Sprachnachricht gratis sinn; op der API ass et ëmmer geladen.

Reaktioun

{
  "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 Returnéiert de klenge Text. srt an vtt Et gëtt subtituléiert, an verbose_json Et féiert d'Sprache, d'Dauer an d'Timed Segmente. Fir déi dräi, déi net JSON sinn, ass d'Käschte an de Header.

Status vumWann
400No der Datei, eng Datei mat engem net benotztbare Audio (invalid_audioEt handelt sech ëm zwéi Stären, déi no beienee leien.invalid_model).
402Et balancéiert net ze decken.
413D'Datei ass méi wéi 25 MB (file_too_large) oder d'Aufnahme méi wéi 30 Minutten, oder, an engem Format mat enger Längt, déi net op der Front liesen kann, méi wéi 1,8 MB (audio_too_long).
502D'Audio kann net verarbeitet ginn. Et gëtt net opgelueden.

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);

Sprachübersetzung op Englesch

POST https://nymbot.ai/api/v1/audio/translations - braucht eng API Schlëssel, oder Mir akzeptéieren Lightning Payment op AnfrageDe Kierper ass multipart/form-data.

Déi selwecht wéi d'Transcription, mat den selwechten Felder ausser dem language, Limite an Präis, awer de Text kënnt op Englesch, egal wéi d'Sprache gesot gouf. 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);

Emplikatiounen

Konvertéiert Text zu Vektoren fir Suen, Clustering a Deduplicatioun. D'Modeller lafen op Cloudflare a verbréngen de Standardgeld.

POST https://nymbot.ai/api/v1/embeddings - braucht eng API Schlëssel, oder Mir akzeptéieren Lightning Payment op Anfrage.

FënnefTypVläichtBeschreiwung
modelStrengJoE Modell vun der GET /api/v1/models?type=embedding.
inputString oder Array vun StringsJoDe Text fir ze embeddéieren, bis zu 100 net-leer Strings. Token Array gëtt verstoen (token_input_unsupportedAll Input muss mat dem Modell passen context_lengthEt gëtt ongeféier 4 Bytes a Token.
encoding_formatStrengNieftfloat (an der Zäit) oder base64 (Säit vun der 32-Bit Flowers)
dimensionsIntegratiounNieftD'Modell vun der Eigengréisst, oder fir e Modell mat supported_dimensions Et ass eng vun hinnen; de Vektor gëtt dann verkürzt an normaliséiert.
ModelléierenDimensiounenKontext
@cf/baai/bge-m31024 vill Sproochen8 192 Joer.
@cf/qwen/qwen3-embedding-0.6b1024 vill Sproochen8 192 Joer.
@cf/baai/bge-large-en-v1.5Englesch 1024512 Joer
@cf/baai/bge-base-en-v1.5Englesch 768.512 Joer
@cf/baai/bge-small-en-v1.5Englesch 384512 Joer

D'Modellliste ass d'Quell vun der Wahrheet fir wat se verfügbar sinn an wat se kosten; d'Google's EmbeddingGemma, mat kortere Vektoren op Recherche, erscheet da och wann de Katalog e Präis fir et huet.

Reaktioun

{
  "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 vumWann
400Et handelt sech ëm zwéi Stären, déi no beienee leien.token_input_unsupported); méi wéi 100 Inputs (too_many_inputs); eng Input länger wéi de Modell nimmt (input_too_longEt handelt sech ëm zwéi Stären, déi no beienee leien.unsupported_dimensions).
402De Standardbalans ass zu niedrig. d'Embeddings benotzen nie de Pro-Balance.
404Et gëtt keng Modell mat dësem Numm.
502D'Modell huet gefeelt. Et gëtt keng Gebühr gemaach.

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);