Skip to di tin dɛn we de insay
Go bak to Nymbot

Di tin dɛn we pɔsin fɔ no bɔt Dɛvɛlɔpɔs

Imis, osio, ɛn imbedins

Di generators di de na di app, ɛn di building blocks fɔ search: pika, video, spik, transkripson ɛn embeddings, ɛbiri bɛl ɛ bɛl fɔ di ɛnd-yus de kɔnt fɔm yu bɛlans.

Mekin imaj de de

E mek wan to for pikcha frɔm wan prompt ɛn gi dem bak wen dem don. Na di sɛm set ɔf jeneretɔ ɔ bɔt ?image in di ap.

POST https://nymbot.ai/api/v1/images/generations — nid an API key, ɔ Wan Lightning paymen fɔ evri rikwest.

Ids de kam frɔm GET /api/v1/models?type=imageDi stannad jeneretɔ, @cf/black-forest-labs/flux-1-schnell, i kos fɔt 5 stanadad kridit (50 sats) fɔ wan pikcha. Evri oda jeneretɔ de spɛnd Pro kridit na in wan prais, wit di usɔəl fi ɛn majin, de fɔ mɛn de in di ap. n piktchur de kos aw di moni boku? n bim kais di enen. Wan fild we wan jenereta nɔ tek, de dro de instead pan de se dem nɔ wan tɛk am; di stanad jenereta de yus di prɔmpt ɔnli.

FildTupDi wan we nyu nidDɛskripsin
modelstrinYɛsWan generator id, defo as nano-banana.
promptstrinYɛsWetin fɔ drɔ. Na di fɔst 2,000 kɛktas de yuz.
nintegerNo1 to 4. Di difɔlt na 1. I de kɔntɛl as num_images.
sizestrinNoWan shak di im bɛ dɛn de "16:9", ɔɔ an OpenAI saiz de boku ɔl osɔn as "1792x1024", wey de kam di wan we de klose pass 1:1, 16:9, 9:16, 4:3, 3:4, 3:2, 2:3, 21:9, 5:4 an 4:5. "auto" e luv am go to di jinereita.
aspect_ratiostrinNoDi sem as size, an in win if bɔt den sen dem.
qualitystrinNoWetin de spesifik fo di generator, sɔtɔs as "low", "medium" ɔ "high".
negative_promptstrinNoWetin yu de leef out.
output_formatstrinNo"png", "jpeg" ɔ "webp".
response_formatstrinNo"url" (di default) ɔ "b64_json".
image_urlstrinNoWan pikchur fɔ stawt fɔm: an https:// link wey no big pass 4,096 characters wey nɔ get any user name o password inna am, o a data:image/…;base64 URL (PNG, JPEG, WebP ɔ GIF; no SVG). Oni fɔ di jenereta we de wit edit; di wan we di pipul we get nid am requires_image_url.

resolution e nɔ de yuz: ɛch jeneretɔ mek in ɔn sɔz. Wit url, ol pičap de uploat wan publɪk Blossom host an yu go get in link (fɛ bi jinarɛtɔ di kɔm di in in link, di wan we de pas ɔn). Eni wan we get di link kin ɔpɛn in an in nɔ kin tek am ɔf ɛn ɛn ɛn; si Wetin di API go de go sabiWit b64_json di piksa de kam bak na di risponz an e nɔ de go up lod at ɔl. Wan piksa wey de send as a data: URL inna image_url dem de check am de di sef we de an elidit and de upload am to Blossom fɔs so di generator kin fɛt am; ɔ de ɛlɪt am ɛgi if di rɪkwɛst fɛl nɔ bɪld.

If sam di n Piktcha fèl, yu go get di wan we bin wok, dem go charge yu only fɔ di wan we bin wok (plus di wan we di provayda bin charge yu den we no bin wok), and nymbot.failed dem se ɔm ti di pɔsin dɛn we no de. If ɔl dɛn feyl, di rikwes i go rɛtɔn 502.

Ansa

{
  "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 }
}
StetɔsWɛn
400No komand; n autsayd 1 to 4 (invalid_value); wan bɛd saiz (invalid_size) ɔ pikutcha (invalid_image, invalid_image_url); wan model wey de exist bɔt i nɔt am im fɔ mek imij (invalid_model); wan pikcha fɔ wan jinereitɔ di wan we nɔ kin edit (edit_unsupported); no pikcha fɔ wan we nid am (image_required).
402Di balance nɔ go ɛna fɔ kɔvɛ ɛvri piksa dɛn aski fɔ.
404No model de wit dat nem (model_not_found).
502Di jeneretɔ fɛl 🫥upstream_error). Nɔtin de de charge ɔnes de de poyde de bil fɔ di atɛm; den de ɛra de ɛrɔ 📧 charged_sats.
503Pikchur nɔ de fɔ gi yu kɔntɛl rait naw (media_hosting_unavailable). b64_json I de wok stil.

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

Editi pikiç

E de chanji wan pika we yu upload, de fofolo wan prompt. Dis na OpenAI edit endpoint, so di OpenAI SDKs' images.edit i wok de as i de. Onli Pro jinireta wit edit in di model list aksɛpt am.

POST https://nymbot.ai/api/v1/images/edits — nid an API key, ɔ Wan Lightning paymen fɔ evri rikwest. Di bodi de multipart/form-data, go ɔp 32 MB.

FildTupDi wan we nyu nidDɛskripsin
imagefaylYɛsDi pikcha fɔ edit: PNG, JPEG, WebP ɔ GIF, ɛpɔ de 20 MB. Wi de ɔse de ɔlsɔ image[]; di fes wan de yuz.
promptstrinYɛsWetin fɔ tɔm.
modelstrinYɛsWan generator wit edit.
nintegerNo1 to 4.
size
aspect_ratio
quality
negative_prompt
output_format
strinNoSɔ fɔ di nɔse.
response_formatstrinNo"b64_json" (di default hie) ɔ "url".

Di pika we yu upload de check to si se e na gud PNG, JPEG, WebP or GIF, we send am na wan we e real, and we put am na wan public Blossom host, bikos di generators de fɛt dia input na link. Trit am as wan we na public. If di edit no wok and no tin de charge, di copy we de host go delet ɛn ɛn. Di response de get di sɛm sɛp as di wan fɔ genyeyeɪt. Di prais na di generator prais, we fɔ sam generator de inklud wan ɔdin ɔdin fɔ di input pika.

Ansa

{
  "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 }
}
StetɔsWɛn
400No imaj ɔ prompt, wan fayl we nɔ píkcha (invalid_image), ɔ jenریت we nɔ kin edit (edit_unsupported).
413Di piki-cha big pas di 20 MB (file_too_large), ɔ de hol rɪkwes ova 32 MB.
503Di pikcha no de pos na de tɛm (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"));

Vidiyo

Wan vidio de tek tin am, so e de run na bakgraon. Yu submet am, yu get wan ID kwin-kwin, den yu de ask pan di ID go on till e don. Evri vidio jeneretɔ de spɛn di Pro balans.

POST https://nymbot.ai/api/v1/videos — nid an API key, ɔ Wan Lightning paymen fɔ evri rikwest. I de kam bak 202.

FildTupDi wan we nyu nidDɛskripsin
modelstrinYɛsWan vidio jenereitod ID froom GET /api/v1/models?type=video, boku boku we de, ɔ kɛm as veo.
promptstrinYɛsWetin ded fayn du.
durationnamba o strinNoLɛŋf in sɛkɔnd, pas 0 go ɔp to 60. Dem jus de yuz am fɔ di jinirotas we de let yu ɛlɛkt di lɛŋf; di ɔda dem de mek de fɔ de lɛŋf we dem de mek, we na wetin dat bi seconds na di ripons ɛn di prais de fɔlō.
aspect_ratiostrinNoBi mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn lɛn mi lɛn mi kɛ sɔlɔ mɛsɔ mɛsɔ dɛn "16:9" ɔ "9:16"; wan size we bi sɔm "1280x720" e de kam de niaset reashio.
resolution
quality
strinNoWan inna di generator dem di resolutions na di model lẹst, de kin as "720p" ɔ "1080p". I de set di prais. Anin tin di fɔ nɔ de aksepted wit unsupported_resolution.
image_urlstrinNoWan pikchur fɔ stawt fɔm: an https:// link o a data:image/… URL, wey de upload na wan pablis Blossom host fɔst. Di generators de nid am wit requires_image_url.

Di pris de set wen yu kɔmpit am, frɔm di jeneyeta, rezolushon, ɛn lenf, so de kɔch ij frɔm yu Pro balans as sɔn ɛs di provayda ɔksɛpt di wok, ɛn de ɔsho lɛk as cost, estimated_cost ɛn nymbot. If di provider rifyuz di wok, nɔtin dem go ɔp. If di render fɛl lator, ɔ di finisht klip nɔ de kɔm ɔ kɔm stɔ di pɔsin fɔ de bil am, dem go rinfɔnd di ɔp wan tɛm, ɔtomatikali. Wan render we de go afta wan ɔa de fɔ giv am ɔp, in ɔp de na di fɔ, bikɔs di provayda de bil fɔ wan render ɔ wan ɔkɛpt am. Wan rinfɔnd de rɛtɔn di kredɪt bɔt ɛt nɔ de lɔw di kɪ kɔnt fɔ spɛnd.

Ansa (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 bi de as in_progress, ɔ de completed wit di vidio wey de in alredi data ben di generator kam bak stret.

Mi de check wan vidio

GET https://nymbot.ai/api/v1/videos/{id} — nidi wan ki wey belong to di nym wey bin kam sent am. Wan ki wey don reach im limit kin stil check.

E ansa am 202 wɛl de mek di vidio an 200 Wen i don finis o i don fail. Ask evri 5 to 10 sekon. Evri check ask di provider wan taim and i ans at wan taim; i nɔ de wait fɔ di video. Dɛn de kip di job fɔ 24 aawas afta i don kɔm in. GET /api/v1/videos lis di las 50 wok we di ki bin du as {"object": "list", "data": […]}.

Ansa (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 na in_progress, completed ɔ failed. Wan job wey feyl kariya error ({"code": "generation_failed", "message": …}); if de gi di moni bak, cost na 0 an nymbot pan dɛn addz refunded_credits ɛn refunded_satsDi finisht vidio de pan wan public Blossom host, de la se de mek im de sɔm de piktɔ

StetɔsWɛn
400No prompt; ɛ dɛreɪshon we de na ɛksid 0 to 60 (invalid_value); wan resolution di generator nɔ de gi (unsupported_resolution); no pika fɔ wan jini-retat we nid wan (image_required); wan model wey no bi video generator (invalid_model).
402Di Pro balance nɔ go ɛn fɔ kɔv di vidio.
404No generator de (model_not_found), ɔ no job de wit dat id fɔ yu nym, ɔ ɛt de mɔ ɛn den 24 aur ɔl (video_not_found).
429Yu nym don get 10 video wey de render (video_jobs_limit). Luk pan dem den, ɛn sen di oda den wen wan am don.
502Di generator no bin wan tek di wok. Nɔting nɔ go bil una unles di provider bil for am.
503Videous no fit de sen o de kip na naw (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);

Tɛks to spich

I ridi teks awl-aut ɛn gi yu di odio fayl de, ɛn ɛn, ɛn nɔ jus wan link. Na OpenAI spich ɛnd-pɔint ɛn, so audio.speech.create insay de OpenAI SDKs i wok

POST https://nymbot.ai/api/v1/audio/speech — nid an API key, ɔ Wan Lightning paymen fɔ evri rikwest.

FildTupDi wan we nyu nidDɛskripsin
modelstrinNoWan spich modul fɔm di lista fɔ di audio models. Default: di stándad vɔis, @cf/myshell-ai/melotts. aura-2 na Deepgram Aura 2.
inputstrinYɛsDi tɛks fɔ rit: ap to 800 kɛktas fɔ di stɛndad voys, 2,000 fɔ Aura 2.
voicestrinNoWan voys ID frɔm di lis di voys: wan Aura spika sɔs as luna (o aura-2-luna-en), ɔ ɔ MeloTTS langwej (en, es, fr, zh). OpenAI vokis nem de se as alloy dem de apriwet an dem gi di model di defo-de voys.
languagestrinNoWan langwij kod lɛk as esWout aw bɔis, e piki wan fɔ dat langwej. Wan bɔis we de spik anɔda langwej de kam bak 422 voice_language_mismatch, an langwej di model nɔ get vokis fɔ 422 unsupported_language.
response_formatstrinNoDi stándad voys de kam bak mp3 onli. Aura 2 kɔm bak mp3 (di default), opus, aac, flac, wav ɔ pcm.
speednambaNoAksɛpt am an de lɔn am.

Di stanad voys kɔst 3 stanad kredɪt (30 sats) fɔ ɛvri rikwɛst, de kɔm de na di ap. Aura 2 na Pro, ɛn de prays am bɔs di kɛrɛktɛ de wi sɛn. Di rispons bɔdi na di ɔdio, wit wan we de matʃ Content-Type; di kos de in di X-Nymbot-Cost-Sats header. If di spich model feyl, nɔtin nɔ go de kach.

Ansa

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

(audio bytes)
StetɔsWɛn
400No input; de input pas de limit we de model de roun (input_too_long); wan fɔmat di modèl nɔ go di ɛbil tu (unsupported_response_format); wan voys we nɔ sabi we (invalid_voice); wan model wey no bi spiːch model (invalid_model).
422Di vɔis nɔ de spik di langwej we i gi, ɔ di modèl nɔ get vɔis fɔ am.
502Di spich model feyl. Nɔtin nɔ de kach.

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

Odiu modèl en voys

Twi pabliki lɔst fɔ pik wan spich model an wan voys, ɔ wan transkripshen model. I de 41 Aura 2 Ingrish spikah an fɔ MeloTTS langwej di fɔ.

GET https://nymbot.ai/api/v1/audio/models — no ki nid.

GET https://nymbot.ai/api/v1/audio/voices?language=en — no ki nid.

FildTupDi wan we nyu nidDɛskripsin
languagestiring (kwestin)NoOna voys fɔ dis langwej.
modelstiring (kwestin)NoOly voys fɔ dis modèl.

Ansa (vɔys)

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

Di model list di ansa lɛn {"object": "list", "data": {"tts": […], "stt": […]}}. I di gi im balance, prays, fɔ i ɛpich spich modèl, max_input_chars, response_formats, languages ɛn default_voice; di transcription model de gi in alias, max_file_bytes, max_seconds, fomats ɛn pris per minit.

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

Spich di tin we yu de tok de to tɛks ✍️

E de tɔn wan rekɔding kam tɛks wit Whisper. Dis na OpenAI transcription ɛnd-pɔint, so audio.transcriptions.create e de wok.

POST https://nymbot.ai/api/v1/audio/transcriptions — nid an API key, ɔ Wan Lightning paymen fɔ evri rikwest. Di bodi de multipart/form-data.

FildTupDi wan we nyu nidDɛskripsin
filefaylYɛsDi rekoding, frɔm 256 bytes go 25 MB ɛn up to 30 minit: WAV, WebM, MP4 ɔ M4A, Ogg ɔ Opus, MP3 ɛn di oda format we Whisper de rit. MP3 ɛn oda format we di lenk nɔ de rit fɔst fɔst de limid to 1.8 MB.
modelstrinNoDi wan we de na fɔst whisper, wey na Whisper Large v3 Turbo. whisper-1, whisper-large-v3-turbo ɛn @cf/openai/whisper-large-v3-turbo mɛn di sām.
languagestrinNoDi langwej we de spik, seki enWoy de katch am if dem de leav am out.
promptstrinNoWod o speling we yu de mek ekspekt, di parad nem. Na de fɔst 1,000 karkat de yus.
response_formatstrinNojson (di default), text, srt, vtt ɔ verbose_json.

Fɔ WAV, WebM, MP4, and Ogg fial, dem de ridi di lenk fɔm di fial bifo eni tɔk de rɔn, so if di rɛkɔdnin de mor di 30 minit, dem de rɛfjuː am de fɔst (wit 3 sekɔn grays). Di lenk fɔ WAV fial de kam fɔm i sample rēt, i chanɛl, and i sample saiz. Di lenk fɔ ɔda fɔmat, di sɛm MP3, nɔ de kɛn bi rid de fɔst, so dem de kɛm bɔi wit saiz: at di lɔl bita-rēt Nymbot de asium, 8 kbps, 30 minit na 1.8 MB, and if fial biggɔn pan dat fɔmat, dem de rɛfjuː am wit 413 audio_too_long fɔ eniting run. Sen lonɡa rekọdin ɛz WAV, WebM, MP4 ɔ Ogg. If Whisper den rɔpɔt mɔ dɛn mɔ nɔ pas 30 minɪt ɔlwe, dɛn no gi di rɪkwest wit 413 audio_too_long, and biko Whisper run, dɛn de ɔt 30 minit.

Yu de pay for di lɛŋf di awdiio, we de roun ap go to di sɛkɔn: di lɛngf dɛn rɛd fɔm di fayl, di lɛngf we Whisper de rīpọt, ɛn di lɛs di fayl saiz de alou, na Whisper pɛ-mɪnɪt prait wit di ɔjuːfɔːl fī, ɛn mɑːdʒin, ɛn at līst 0.05 krɛdit fɔ ɔ de rɪkwɛst. Dɛn de pay am fɔm di stændad bælens wen dat de ɛnaf fɔ kʌvər di kɔst, ɛn fɔm Pro ɔdawe; a 402 it se we di balans go nid. Na di app, transcribing wan voice mesij kin bi firi; na di API, dem de chaj yu awle-yus. If Whisper no wok, dem no go chaj yu nating.

Ansa

{
  "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 it gi plain tekst, srt ɛn vtt bring di subtaytul, and verbose_json di langwej, di deyer, ɛn di taim segmɛnt dem. Fɔ di tri we nɔ JSON, di kɔst de na di hedɛ.

StetɔsWɛn
400No fayl, wan fayl we no get any odio we di uza de uza (invalid_audio), wan format we nɔ sabi, ɔ wan model we nɔ bi transcription model (invalid_model).
402Neda di balance de go fɔ kɔvɛ am.
413Di fayl de pan mɔː na 25 MB (file_too_large) o di rekordin de o boku pan 30 minit, o, na wan fɔmat we yu nɔ de sabi di lenk fɔst, de o boku pan 1.8 MB (audio_too_long).
502Whisper no bin de kaba di audio. Nɔ ɛtin nɔ de kach ɛnɛni mɔni.

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

Translet spi tok di Englis

POST https://nymbot.ai/api/v1/audio/translations — nid an API key, ɔ Wan Lightning paymen fɔ evri rikwest. Di bodi de multipart/form-data.

Di sem bizn wetin transcription, wit di sem fild pan, pɔt fɔ language, limits ɛn praɪs, bɔt di tɛks kɔm bɛk in Inglɛn wɔtɛv lɛngwɪʤ ɛ bɛ spɔk. Di OpenAI SDKs kɔl ɪt wit 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);

Di wey yu put tɛng ɛsin

E tɔn wan tekst tɔn wan vektɔ, fɔ mek yu fɛnd am, klan am tɔn, ɛn fɛnd di wan we de kɔnt in dɛn. Di modɛl de ran na Cloudflare ɛn ɛ de spɛn di stɛndat bɛlɛns.

POST https://nymbot.ai/api/v1/embeddings — nid an API key, ɔ Wan Lightning paymen fɔ evri rikwest.

FildTupDi wan we nyu nidDɛskripsin
modelstrinYɛsAn embedding model fɔm GET /api/v1/models?type=embedding.
inputstiring ɔ ɛray ɔ stiring 🇸🇱YɛsDi tɛks we yu go put in, up to 100 non-empty stɛng. Token aray de mek dem refius (token_input_unsupported). Ebri inpɔt mas fit di model de context_length, de kount am pas bɔt fɔ bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt bɛt
encoding_formatstrinNofloat (di default) ɔ base64 (liti-endiyan 32-bit flot)
dimensionsintegerNoMoudel di sɔn sɔiz, ɔ fɔ wan moudel wit supported_dimensions wan di dem; de vektɔ de fen kɔnt tɛn an normalais am. Wen eni oda tin kam, dem de rifius am.
ModulSaj laen dɛnBakgraon
@cf/baai/bge-m31024, di pɔpɔ lɛngwij ɛf8,192 tokns
@cf/qwen/qwen3-embedding-0.6b1024, di pɔpɔ lɛngwij ɛf8,192 tokns
@cf/baai/bge-large-en-v1.51024, Ingglish512 tokn
@cf/baai/bge-base-en-v1.5768, Inglich512 tokn
@cf/baai/bge-small-en-v1.5384, Inglis512 tokn

Di models list na di wan we tru se which one de available an wetin dem kos; Google's EmbeddingGemma, wit wan wey get short vectors if yu ask fɔ am, de show de na de too wen di catalog get wan pris fɔ am. Embeddings de bils fɔ di input token, an di 0.05-credit minimum de aply fɔ ɛch request, nɔ fɔ ɛch input, so mekkin many texts dɛn de wan request na wan de mek am much tior fɔ sen dem wan at a tɛm.

Ansa

{
  "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 }
}
StetɔsWɛn
400No input ɔ bɔk de fɔ rɛd; tokɛn aray ɔ (token_input_unsupported); pass 100 in-put dɛn (too_many_inputs); an input wey lonɡa pan wey di model de tek (input_too_long); wan size we de model no de kaba (unsupported_dimensions).
402Di standard balance de too low. Embeddings nɔ de yus di Pro balance.
404No embedding model de wit dat nem.
502Di model feyl. Nɔtin nɔ de kach.

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