Gean nei de ynhâld
Komme nei Nymbot.

Kennisbasis De ûntwikkelers

Foto's, audio en embeddings

De generators út 'e app, en de boubljes foar ûndersyk: foto's, fideo, speech, transkripsje en ynbeddings, elk fakturearre per gebrûk út jo balans.

Ynstruksje Images

It giet om it meitsjen fan 1 oant 4 foto's fan in prompt en returns them as they are done. ?image Yn de app.

POST https://nymbot.ai/api/v1/images/generations - in API-sleutel is nedich, of In Lightning betelling op fraach.

De IDF komt út GET /api/v1/models?type=imageDe standert generator. @cf/black-forest-labs/flux-1-schnell, kostet in flat 5 standert credits (50 sats) in ôfbylding. Elke oare generator spilet Pro credits oan syn eigen priis, mei de gewoane fee en marge, as yn De app. n Foto kostet n In fjild dat in generator net yntrodusearret wurdt gean ynstee as weigerd; de standert generator brûkt allinnich de prompt.

De fjildDe typeNeffensBeskriuwing
modelStrjitteJaIn generator id, lykas nano-banana.
promptStrjitteJaWat te rjochtsjen. Allinne de earste 2000 karakters wurde brûkt.
nYntegraasjeNo yn1 oant 4. Default 1. ek akseptearre as num_images.
sizeStrjitteNo ynYn de aspekten lykas "16:9"Of as it yn 'e hûs wie. "1792x1024", dy't de tichtste fan 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 21:9, 5:4 en 4:5 wurdt. "auto" It giet om de generator.
aspect_ratioStrjitteNo ynItselde as sizeYn beide gefallen is de winner.
qualityStrjitteNo ynGenerator-specifike, lykas "low", "medium" Of "high".
negative_promptStrjitteNo ynWat om út te lieden.
output_formatStrjitteNo yn"png", "jpeg" Of "webp".
response_formatStrjitteNo yn"url" (De foarbyld) of "b64_json".
image_urlStrjitteNo ynIt earste krantsje kaam út yn: A https:// link fan maksimaal 4,096 karakters mei gjin brûkersnaam of wachtwoord yn it, of in data:image/…;base64 URL (PNG, JPEG, WebP of GIF; net SVG). editYn it ferbân mei de requires_image_url.

resolution is net brûkt: elke generator makket syn eigen grutte. url, elke ôfbylding wurdt uploade nei in iepenbiere Blossom-host en jo krije de link (e guon generators geane net in link werom fan har eigen, dy't wurdt oerbrocht). Wat de fire kin sjenYn b64_json De foto komt werom yn it antwurd en wurdt nooit uploaden. data: URL yn image_url It wurdt ek kontrolearre as in Edit yn En opladen nei Blossom earst sa'n generator kin helle it; it wurdt ferwiderje as de fraach mislitte de billing.

As wat fan de n foto's feroarjen, jo krije de dy't wurke, wurde berekend allinich foar dy't (plus alle de provider billed neffens feroarjen), en nymbot.failed It giet om it ûntdekken fan alle soargen. as alle soargen falen, komt de fraach werom. 502.

Antwurd

{
  "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 fanAs
400It is no hast. n Oer klasseboek en aktiviteiteplan, observaasje yn 'e basisskoalle by Theun Meestringa(invalid_valueIt earste krantsje kaam út yn april (invalid_sizeIt earste krantsje kaam út yn april (invalid_image, invalid_image_urlIt earste krantsje kaam út yn april Nadere informatie (invalid_modelIt earste krantsje kaam út yn april Nadere informatie (edit_unsupportedIt earste krantsje kaam út yn april Nadere informatie (image_required).
402De balans kin net alle foto's dy't ferwachte wurde.
404It earste krantsje kaam út yn april (model_not_found).
502It earste krantsje kaam út yn april (upstream_errorIt is noch net goedkard, mar it is net goedkard, mar it is net goedkard. charged_sats.
503It earste krantsje kaam út yn april (media_hosting_unavailable). b64_json Ek noch wurkje.

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

Editearje foto's

Dit is it edit-endpunt fan OpenAI, dus de OpenAI SDK's' images.edit Dêrom is de generaasje mei de edit Yn de modellijst akseptearje jo it.

POST https://nymbot.ai/api/v1/images/edits - in API-sleutel is nedich, of In Lightning betelling op fraachIt lichem is multipart/form-dataYn totaal binne der 32 MB.

De fjildDe typeNeffensBeskriuwing
imageFilterJaDe ôfbylding om te bewarjen: PNG, JPEG, WebP of GIF, oant 20 MB. Ek akseptearre as image[]De earste is yn gebrûk.
promptStrjitteJaWat te feroarjen.
modelStrjitteJaYn de generaasje mei edit.
nYntegraasjeNo yn1 oant 4.
size
aspect_ratio
quality
negative_prompt
output_format
StrjitteNo ynYn de generaasje.
response_formatStrjitteNo yn"b64_json" (de default hjir) of "url".

De ôfbylding dy't jo uploadsje wurdt kontrolearre om in goed foarme PNG, JPEG, WebP of GIF te wêzen, as syn echte type, en set op in iepenbiere Blossom-host, omdat de generators har yntrodusearje troch link. Treat it as iepenbiere. As it editearjen mislearre en niks is oplaad, wurdt de hûsde kopie opnommen. De antwurd hat itselde foarm as foar generaasje. Priis is de priis fan de generator, dy't foar guon generators ynklusyf in kosten foar de yntrodusearre ôfbylding.

Antwurd

{
  "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 fanAs
400Oer klasseboek en aktiviteplan, observaasje en registraasje yn 'e basisskoalle by Theun Meestringa(invalid_imageOer klasseboek en aktiviteplan, observaasje en registraasje yn 'e basisskoalle by Theun Meestringa(edit_unsupported).
413It earste krantsje kaam út yn april Nadere informatie (file_too_large), of de hiele fraach oer 32 MB.
503It earste krantsje kaam út yn april (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"));

De video

In fideo duorret minuten, dus it rûn yn 'e achtergrûn. Jo submit it, krije in id onmiddellik, en frage oer de id oant it is makke. Elke fideo generator spile de Pro saldo.

POST https://nymbot.ai/api/v1/videos - in API-sleutel is nedich, of In Lightning betelling op fraachYnterview 202.

De fjildDe typeNeffensBeskriuwing
modelStrjitteJaIn video generator id fan GET /api/v1/models?type=videoYn de veo.
promptStrjitteJaWat moat gebeure.
durationNummers of stringNo ynLengte yn sekonden, mear as 0 en oant 60. brûkt allinich troch generators dy't kinne jo selektearje de lengte; de oare meitsje har gewoane lengte, dat is wat seconds Yn de reaksje en de priis folgje.
aspect_ratioStrjitteNo ynAs wie "16:9" Of "9:16"Yn de grootte fan "1280x720" It is de meast ferneamde ferheging.
resolution
quality
StrjitteNo ynDe generaasje fan resolutions Yn de modellijst, lykas "720p" Of "1080p"It set de priis. Ien ding is weigere mei unsupported_resolution.
image_urlStrjitteNo ynIt earste krantsje kaam út yn: A https:// Link en A data:image/… URL, dy't opnommen wurdt nei in iepenbiere Blossom-host earst. requires_image_url.

De priis is fêste doe't jo oanmelde, út de generator, resolúsje en lengte, dus it wurdt belutsen út jo Pro saldo as de provider aksepteart de taak, en fûn as cost, estimated_cost en nymbotIf the provider refuses the job, nothing is charged. If the render later fails, or the finished clip cannot be stored and the provider did not bill for it, the charge is refunded once, automatically. A render that is still going after an hour is given up, and keeps its charge, because the provider bills a render once it accepts it. A refund returns the credits but does not lower the key's spending count.

Yn Ljouwert (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 Begjin as in_progressYn completed De video is al yn data As de generaasje it weromfûn.

Kontrolearje op in video

GET https://nymbot.ai/api/v1/videos/{id} In sleutel dy't syn cap hat, kin noch kontrolearje.

It antwurd 202 As de video wurdt makke en 200 as it is voltooid of hat mislearre. Befoarderje elke 5 oant 10 sekonden. Elke check freegje de provider ien kear en antwurde op 'e oere; it wacht nooit foar de fideo. In baan wurdt hâlden foar 24 oeren nei it wurde ynsteld. GET /api/v1/videos List de lêste 50 jobs fan de sleutel as {"object": "list", "data": […]}.

Yn Ljouwert (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 Yn in_progress, completed Of failedIn mislearre baan fersoarge error ({"code": "generation_failed", "message": …}En as it net ferbûn is. cost Yn 0 en nymbot Hjoed refunded_credits en refunded_satsDe fergeande video is op in iepenbiere Blossom-host, lykas generearre foto's.

Status fanAs
400Oer klasseboek en aktiviteiteplan, observaasje en registraasje yn 'e basisskoalle by Theun Meestringa(invalid_valueIt earste krantsje kaam út yn april Nadere informatie (unsupported_resolutionIt earste krantsje kaam út yn april Nadere informatie (image_requiredIt earste krantsje kaam út yn april Nadere informatie (invalid_model).
402De Pro-balans kin de video net dekken.
404It earste krantsje kaam út yn april (model_not_foundOer klasseboek en aktiviteiteplan, observaasje en registraasje yn 'e basisskoalle by Theun Meestringa(video_not_found).
429It earste krantsje kaam út yn april (video_jobs_limitKontrolearje op harren en submit mear as ien finishes.
502De generator weigerde de taak. Niets wurdt belêst as de provider ferbûn foar it.
503Oer klasseboek en aktiviteiteplan, observaasje en registraasje yn 'e basisskoalle by Theun Meestringa(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);

Tekst foar speech

Lês tekst hûndert en keart it audio-bestân sels, net in link. audio.speech.create Yn de OpenAI SDKs wurket.

POST https://nymbot.ai/api/v1/audio/speech - in API-sleutel is nedich, of In Lightning betelling op fraach.

De fjildDe typeNeffensBeskriuwing
modelStrjitteNo ynYn de speech fan De list fan audio modellenDe standert stem, de standert stem. @cf/myshell-ai/melotts. aura-2 Yn dy tiid is de Aura 2.
inputStrjitteJaDe tekst om te lêzen: oant 800 karakters foar de standert stem, 2000 foar Aura 2.
voiceStrjitteNo ynIn voice id fan De list fan stemmenYn de Aura sprekers wie luna (Of aura-2-luna-enOer klasseboek en aktiviteiteplan, observaasje yn 'e basisskoalle by Theun Meestringa(en, es, fr, zhOpenAI stemnamen lykas alloy It is goedkeapje en gean de standert stem fan it model.
languageStrjitteNo ynIn taalkoade lykas esAs der gjin stem is, selektearret it ien foar dat taal. 422 voice_language_mismatchEn in taal dat it model gjin stem foar hat. 422 unsupported_language.
response_formatStrjitteNo ynDe standert stem komt werom mp3 De Aura 2 komt werom. mp3 Yn de ûndersteande opus, aac, flac, wav Of pcm.
speedNûmerNo ynIt is akseptearre en negearre.

De standert stem kostet in flat 3 standert credits (30 sats) in fraach, lykas yn 'e app. Aura 2 is Pro, priis troch de karakters dy't jo stjoere. Content-TypeDe kosten binne yn de X-Nymbot-Cost-Sats If the speech model fails, nothing is charged.

Antwurd

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

(audio bytes)
Status fanAs
400It earste krantsje kaam út yn april Nadere informatie (input_too_longIt earste krantsje kaam út yn april Nadere informatie (unsupported_response_formatIt earste krantsje kaam út yn april (invalid_voiceIt earste krantsje kaam út yn april Nadere informatie (invalid_model).
422De stem sprekt net de taal dy't jûn is, of it model hat gjin stem foar it.
502It model fan de speech mislearre.

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 modellen en stimmen

Dy iepenbiere listen foar selektearjen fan in speechmodel en stem, of in transkripsje model.

GET https://nymbot.ai/api/v1/audio/models De sleutel is net nedich.

GET https://nymbot.ai/api/v1/audio/voices?language=en De sleutel is net nedich.

De fjildDe typeNeffensBeskriuwing
languageYnstruksje foar QueryNo ynAlleen stemmen foar dizze taal.
modelYnstruksje foar QueryNo ynAlleen stimmen foar dit model.

Reagearje op (rjochtsjes)

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

De list fan antwurders {"object": "list", "data": {"tts": […], "stt": […]}}Elke speechmodel jout syn balans, priis, max_input_chars, response_formats, languages en default_voiceDe transkripsje model jout syn aliases, max_file_bytes, max_seconds, formaten en priis per minuut.

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

Yn de tekst

It giet om in skriuwer yn tekst mei Whisper. Dit is it transkripsje-endpunt fan OpenAI, dus audio.transcriptions.create Hy wurket.

POST https://nymbot.ai/api/v1/audio/transcriptions - in API-sleutel is nedich, of In Lightning betelling op fraachIt lichem is multipart/form-data.

De fjildDe typeNeffensBeskriuwing
fileFilterJaDe opname, fan 256 bytes oant 25 MB en oant 30 minuten: WAV, WebM, MP4 of M4A, Ogg of Opus, MP3 en de oare formaten Whisper lêst.
modelStrjitteNo ynDefault whisperIt giet om de Whisper Large v3. whisper-1, whisper-large-v3-turbo en @cf/openai/whisper-large-v3-turbo Dat betsjut itselde.
languageStrjitteNo ynDe talen, lykas de enIt is ûntdekt as er útkomt.
promptStrjitteNo ynWords of spelling te ferwachtsjen, lykas namen. Alleen de earste 1000 karakters wurde brûkt.
response_formatStrjitteNo ynjson Yn de ûndersteande text, srt, vtt Of verbose_json.

Foar WAV, WebM, MP4 en Ogg-bestannen wurdt de lengte learde út it lêst foardat alles rûn, dus in opnaming oer 30 minuten wurdt weigeret foarôf (mei 3 sekonden' grace). De lengte fan in WAV-bestân komt út syn sampling rate, kanalen en samplingsgrutte. De lengte fan oare formaten, lykas MP3, kin net oplitte foarôf, dus se binne begrensd troch grutte: by de minste bitrate Nymbot ôfhinkliket, 8 kbps, 30 minuten is 1,8 MB, en in gruttere lêst yn sa'n formaat wurdt weigeret mei 413 audio_too_long Skriuw dy yn foar langer opnammen as WAV, WebM, MP4 of Ogg. As Whisper dan rapportearret mear as 30 minuten hoe't, de fraach wurdt feroare mei 413 audio_too_long, en sûnt Whisper rûn, 30 minuten wurde laden.

Jo betelje foar de lengte fan it audio, rûn oan de sekonde: de langste fan de lengte learde út it lêst, de lengte Whisper rapporten, en de minste de grutte fan it lêst makket, oan Whisper's per-minute priis mei de gewoane fee en marge, en op syn minst 0.05 krediet in fraach. 402 Yn de app, de transkripsje fan in spraakbericht kin wêze frije; op de API is it altyd laden. As Whisper mislitte, wurdt niks laden.

Antwurd

{
  "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 Skriuw dy yn foar tekst, srt en vtt Yn de ûnderhâlden, en verbose_json It giet om taal, lengte en timed segments. foar de trije dy't net JSON binne, de kosten binne yn de headsets.

Status fanAs
400Oer klasseboek en aktiviteplan, observaasje en registraasje yn 'e basisskoalle by Theun Meestringa(invalid_audioOer klasseboek en aktiviteiteplan, observaasje en registraasje yn 'e basisskoalle by Theun Meestringa(invalid_model).
402De balans is noch net te dwaan.
413It earste krantsje kaam út yn april Nadere informatie (file_too_largeOer klasseboek en aktiviteiteplan, observaasje en registraasje yn 'e basisskoalle by Theun Meestringa(audio_too_long).
502Sjoernal wurdt de audio net ferwurke.

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

Translating speech yn it Ingelsk

POST https://nymbot.ai/api/v1/audio/translations - in API-sleutel is nedich, of In Lightning betelling op fraachIt lichem is multipart/form-data.

Dat wie ek yn de transkripsje, mei deselde fjilden bûten language, limieten en priis, mar de tekst komt werom yn it Ingelsk wat taal is sprekke. De OpenAI SDKs neame it mei 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);

Ynbrekken

Konvertearret tekst yn vektoren foar ûndersyk, clustering en deduplication. De modellen rjochtsje op Cloudflare en spylje de standert saldo.

POST https://nymbot.ai/api/v1/embeddings - in API-sleutel is nedich, of In Lightning betelling op fraach.

De fjildDe typeNeffensBeskriuwing
modelStrjitteJaIn model fan GET /api/v1/models?type=embedding.
inputString of array fan stringsJaOer klasseboek en aktiviteiteplan, observaasje en registraasje yn 'e basisskoalle by Theun Meestringa(token_input_unsupportedElke ynlieding hat te passen mei de model's context_lengthYn de fjouwer stêden is it ûnbekend.
encoding_formatStrjitteNo ynfloat (De foarbyld) of base64 (Little-endian 32-bits floats wurde ek brûkt).
dimensionsYntegraasjeNo ynDe eigen grutte fan it model, of foar in model mei supported_dimensions It is in foarbyld dat de wektor wurdt ferkortearre en normalisearre.
Yn modelDe dimensiesDe kontekst
@cf/baai/bge-m31024 in protte talen8,192 tokens
@cf/qwen/qwen3-embedding-0.6b1024 in protte talen8,192 tokens
@cf/baai/bge-large-en-v1.51024 yn Ingelân512 foarbylden
@cf/baai/bge-base-en-v1.5768, Ingelsk512 foarbylden
@cf/baai/bge-small-en-v1.5384 Ingelsk512 foarbylden

De list fan modellen is de bron fan waarheid foar dy't beskikber binne en wat se kosten; Google's EmbeddingGemma, mei kortere vektoren op fraach, ferskynt der ek doe't de katalogus hat in priis foar it. Embeddings wurde metered per input token, en it 0.05-kredytminimum sil gelde foar elke fraach, net foar elke fraach, dus batching in protte teksten yn ien fraach is much cheaper than sending them one at a time.

Antwurd

{
  "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 fanAs
400Oer klasseboek en aktiviteiteplan, observaasje en registraasje yn 'e basisskoalle by Theun Meestringa(token_input_unsupportedIt earste krantsje kaam út yn april (too_many_inputsIt earste krantsje kaam út yn april Nadere informatie (input_too_longIt earste krantsje kaam út yn april Nadere informatie (unsupported_dimensions).
402De standert saldo is te low. Embeddings brûke nooit de Pro saldo.
404No ynsteld model mei dy namme.
502It model mislearre. Er is niks opladen.

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