Pro API: saldo, rajat ja koulutetut hahmot
Kaksi lukureittiä, jotka ovat aina sallittuja avaimen käyttöoikeuksista riippumatta, sekä sovelluksessa säilytettävä aktiviteettiloki.
Saldo ja rajat
GET /credits
{ "balance": 1830, "licenseId": "lic_...", "key": "k_1a2b3c4d",
"limits": { "concurrent": 2, "perMinute": 60, "perDay": 0 }, "running": 1,
"buy_url": "https://tendre.ai/credits?license=lic_..." }| Kenttä | Merkitys |
|---|---|
balance | Jäljellä olevat krediitit. null kun saldo on tuntematon (testiympäristö). |
licenseId | Lisenssi, johon tämä avain kuuluu. |
key | Avaimen julkinen tunniste, turvallinen lokiin kirjoitettavaksi. Ei koskaan salaisuus. |
limits.concurrent | Samanaikaisesti käynnissä olevien renderöintien määrä, oletuksena 2. |
limits.perMinute | Lähetysten määrä minuutissa, oletuksena 60. |
limits.perDay | Avaimelle asettamasi päivittäinen krediittiraja. 0 tarkoittaa ei rajaa. |
running | Tämän avaimen renderöinnit, joita odotetaan vielä noudettavaksi. |
buy_url | Lisenssisi krediittien ostosivu, kortilla tai kryptovaluutalla. |
Tämä on API:n halvin kutsu ja oikea tapa tarkistaa, että avain toimii.
Krediittien ostaminen tallennetulla kortilla
POST /credits/purchase
{ "pack": "m" }pack on paketin tunnus (s, m, l, xl, xxl tai xxxl) tai "c25000" vapaalle määrälle suurimman paketin yli. Maksu veloitetaan kortilta, joka on tallennettu tilisivusi automaattiseen täydennykseen, vain jos olet sallinut siellä agenttisi ostaa, siellä asettamasi kuukausirajan puitteissa (automaattiset täydennykset mukaan lukien). Sähköposti vahvistaa jokaisen oston. Yksi osto kerrallaan.
Vastaus on 200 { credits, eur, balance }. Jokaisessa hylkäyksessä on buy_url, tavallinen ostolinkki, jota käytät sen sijaan: 402 confirmation_required (pankkisi pyytää vahvistustasi) tai payment_declined; 409 agent_not_allowed, no_saved_card, monthly_cap_reached, topup_in_progress tai purchase_in_progress; 400 unknown_pack. Kun vastaus on 503 payment_unavailable, emme tiedä, menikö veloitus läpi: älä yritä heti uudelleen, läpi mennyt veloitus hyvitetään.
Koulutetut hahmot
Nämä ovat hahmot, jotka on koulutettu LoRA:na kuviin ja tavallisiin videoihin. Multi-Ref Video -hahmot, joissa seitsemän näkymää luodaan yhdestä valokuvasta, ovat eri asia: katso Characters.
GET /loras
{ "image": [ { "name": "megan_krea2", "trigger": "megan", "base": "krea2", "size": 0 } ],
"video": [ { "name": "megan_ltx", "trigger": "megan", "size": 0 } ] }Välitä name arvona lora-parametrille, ottaen se image-listasta kuville ja video-listasta videoille, ja lisää sen trigger promptiin, muuten hahmo ei ilmesty. Hahmo, joka ei kuulu tilille, palauttaa 403 unknown_lora.
Lataa oma LoRA
POST /loras/upload
.safetensors-tiedosto, jonka sinulla jo on, joko muualla koulutettu tai omalla palvelimellasi sijaitseva, siirtyy tilin tallennustilaan ja on käytettävissä lora-parametrin kautta aivan kuten sovelluksessa koulutettu hahmo. Lataaminen onnistuu kahdella tavalla: yhdellä kertaa enintään 90 MB, tai osissa sen ylittäessä. LoRA painaa yleensä 200-500 MB, joten jälkimmäinen on tavallisin tapaus. Yläraja on 800 MB molemmilla tavoilla.
Yhdellä kertaa: raaka runko (application/octet-stream, Content-Length vaaditaan), parametrit URL:ssa.
Yli 100 MB:n pyyntö ei koskaan tavoita API:a. Infrastruktuuri edessä hylkää sen, joten vastauksena tulee pelkkä 413 ilman JSON-runkoa: asiakas, joka jäsentää jokaisen virheen JSON:na, kaatuu siihen eikä raportoi siitä. Tuo koko kuuluu osiin.
| Parametri | Rooli |
|---|---|
name | Tiedostonimi, .safetensors, kirjaimet, numerot, . _ -, enintään 80 merkkiä. Jo käytetty nimi korvataan. |
kind | image (oletus) tai video. Vaatii vastaavasti images- tai videos-käyttöoikeuden. |
trigger | Promptiin lisättävä trigger-sana, enintään 60 merkkiä. |
curl -s -X POST "$B/loras/upload?name=my_character.safetensors&kind=image&trigger=ohwx" -H "Authorization: Bearer $KEY" -H "Content-Type: application/octet-stream" --data-binary @my_character.safetensorsVastaus on { "ok": true, "name": "my_character.safetensors", "kind": "image", "size": 314572800, "trigger": "ohwx", "architecture": "krea2", "storage": { ... } }.
Yhteensopivuus tarkistetaan latauksen yhteydessä. Kuvat renderöidään Krea 2:lla, jolla on oma arkkitehtuurinsa: vain Krea 2 LoRA soveltuu, oli se sitten koulutettu tendre.AI:ssa tai Krea 2:lle muualla. Huomaa, että FLUX.1 LoRA hylätään, mikä ei ole kaikkien ensimmäinen arvaus. Videot renderöidään LTX 2.5:llä, joten tarvitaan LTX 2.5 tai 2.3 LoRA.
API lukee tiedoston otsikon ennen tallentamista. SDXL:ksi, SD 1.5:ksi, SD3:ksi, FLUX.1:ksi, Waniksi tai HunyuanVideoksi tunnistettu LoRA hylätään vastauksella 415 incompatible_lora, joka nimeää löydetyn architecture-arvon, ja tiedosto, joka ei ole safetensors, hylätään vastauksella 415 invalid_safetensors. Mitään ei tallenneta eikä kvootista vähennetä kummallakaan tapauksessa.
Yksi tapaus läpäisee tarkistuksen: arkkitehtuuri, jota otsikko ei tunnista, hyväksytään arvolla architecture: "inconnue", ja se arvioidaan vasta renderöinnin yhteydessä. Se on ainoa virhe, jonka selvittäminen maksaa sinulle yhden renderöinnin.
Lähetä suuri LoRA osissa
Kolme kutsua, plus yksi keskeyttämistä varten.
1. Avaa istunto. POST /loras/upload/start parametreilla { "name", "kind", "size", "trigger" }, jossa size on koko tiedosto tavuina. Se tarkistaa nimen, koon ja kvotin, ja vastaa:
{ "uploadId": "...", "part_size": 20971520, "max_part_size": 104857600, "parts_expected": 15 }2. Lähetä kukin osa. POST /loras/upload/part?uploadId=...&part=N, raaka runko, osat numeroituna ykkösestä alkaen, kukin part_size tavua paitsi viimeinen, ei koskaan enemmän kuin max_part_size. Kukin vastaus sisältää etag-arvon, ja tarvitset ne kaikki seuraavaa vaihetta varten, joten tallenna ne sitä mukaa.
Osa 1 on erityinen: se sisältää tiedoston otsikon, joten arkkitehtuuri arvioidaan siellä. Yhteensopimaton LoRA havaitaan siellä vastauksella 415 ja istunto perutaan. Saat tietää 20 MB:n jälkeen eikä vasta 400 MB:n jälkeen.
3. Sulje se. POST /loras/upload/finish parametreilla { "uploadId", "parts": [ { "part": 1, "etag": "..." }, ... ] }. Se kokoaa tiedoston ja rekisteröi sen, vastaten täsmälleen kuten yhdellä kertaa tapahtuva lataus.
Keskeyttääksesi, lähetä POST /loras/upload/abort parametrilla { "uploadId" }. Istunto, johon ei tule finish-kutsua, poistetaan kuuden tunnin kuluttua. GET /loras-listauksessa ei näy mitään eikä kvootista vähennetä mitään ennen kuin finish onnistuu, joten keskeytynyt lataus ei kuluta tallennustilaa.
import os, requests
B, H = "https://api.tendre.ai/pro/v1", {"Authorization": "Bearer " + KEY}
path = name = "my_character.safetensors"
s = requests.post(f"{B}/loras/upload/start", headers=H,
json={"name": name, "kind": "image", "size": os.path.getsize(path), "trigger": "ohwx"}).json()
parts = []
with open(path, "rb") as f:
n = 1
while chunk := f.read(s["part_size"]):
r = requests.post(f"{B}/loras/upload/part",
headers={**H, "Content-Type": "application/octet-stream"},
params={"uploadId": s["uploadId"], "part": n}, data=chunk)
r.raise_for_status()
parts.append({"part": n, "etag": r.json()["etag"]})
n += 1
done = requests.post(f"{B}/loras/upload/finish", headers=H,
json={"uploadId": s["uploadId"], "parts": parts}).json()
print(done["name"], done["architecture"], done["storage"])Valmis PowerShell-skripti toimitetaan sovelluksen mukana osoitteessa scripts/api-pro-lora.ps1.
Poista LoRA
DELETE /loras/{name}?kind=image|video poistaa tiedoston ja vapauttaa kvotin. Se vastaa { "ok": true, "name": ..., "storage": { ... } }, tai 404 unknown_lora kun nimeä ei ole olemassa tilillä.
Tallennuskvootti
Jokainen lisenssi saa enintään 20 tiedostoa ja 10 GB tilaa, kuvat ja videot yhteensä, ja sovelluksessa koulutetut hahmot lasketaan mukaan. GET /loras raportoi tilan storage-kentässä:
{ "count": 3, "max_count": 20, "bytes": 943718400, "max_bytes": 10737418240 }Kumman tahansa rajan ylittyessä lataus vastaa 413 lora_quota ja kertoo mitä on jäljellä. Poista tiedosto tehdäksesi tilaa.
Hahmon kouluttaminen ei ole vielä API:n kautta saatavilla. Se tapahtuu sovelluksessa, ja tulos näkyy tässä listassa.
Aktiviteetti
Sovellus pitää lokia kaikista avaimillasi tehdyistä renderöinneistä (päivämäärä, avain, tyyppi, hinta, tila) sekä avainkohtaisesta kulutuksesta kohdassa Settings > API > Activity.
Sieltä voit myös peruuttaa vuotaneen avaimen koskematta muihin.