Dezvoltatori · API REST
API-ul pentru capete MetaHuman, făcut pentru loturi.
Trimiteți fotografii ale unei persoane, aflați când capul este gata, preluați formatul de care aveți nevoie. Același apel creează un cap sau cinci sute. Fiecare cap este finalizat: piele 4K, recomandări de groom (păr MetaHuman), un gât adaptat și 52 de forme ARKit. Un cap durează aproximativ 4 minute, așa că API-ul este asincron prin design.
- REST + JSON
- Chei Bearer
- Webhook-uri semnate
- Chei de idempotență
- OpenAPI 3.1
- llms.txt
A nu se confunda cu API-urile Python și C++ MetaHuman de la Epic, care rulează în interiorul Unreal Engine. FaceNinja este un API web care creează capul pe care îl aduceți în ele.
POST /v1/headsfotografii ale unei persoane- ID-ul capului
head.completedwebhook semnat când este gataPOST /v1/heads/{id}/filesformat- link semnat, cu durată scurtă de viață
Trimiteți. Primiți răspuns. Preluați.
Trimiteți.
POST /v1/headscu 1 până la 15 fotografii ale unei persoane, ca fișiere multipart sau ca ID-uri ale fișierelor încărcate mai întâi. Adăugați unIdempotency-Key, iar o reîncercare nu creează și nu facturează niciodată un al doilea cap.Primiți răspuns.
Alegeți cum: un webhook semnat către server, un canal de evenimente trimise de server sau un long poll
?wait=60pentru scripturi.Preluați.
Cereți
glb,fbx,obj,stl,plysaumetahuman_zip, cu sau fără forme ARKit. Primiți un link semnat care nu necesită cheie. Păstrați ID-ul capului, nu linkul. Ce conține fiecare format
Creditele unui cap eșuat se întorc automat, iar error.code spune de ce.
Backendul are nevoie doar de un webhook.
Creați capul, păstrați-i ID-ul și acționați când vă apelăm. Aceasta este întreaga integrare, în Python.
# when the user confirms their photos
head = api.post("/v1/heads", files=photos,
data={"webhook_url": "https://you.example/hooks/faceninja"},
headers={"Idempotency-Key": str(uuid4())}).json()
save(user, head["id"])
# later, FaceNinja calls you
@app.post("/hooks/faceninja")
def on_head(event = verified(request)): # check FaceNinja-Signature first
if event["type"] == "head.completed":
link = api.post(f"/v1/heads/{event['data']['id']}/files",
json={"format": "glb", "arkit": True}).json()
store_on_your_cdn(link["url"])// when the user confirms their photos
const form = new FormData();
for (const p of photos) form.append("photos", p);
form.append("webhook_url", "https://you.example/hooks/faceninja");
const head = await api.post("/v1/heads", form,
{ headers: { "Idempotency-Key": crypto.randomUUID() } });
await save(user, head.id);
// later, FaceNinja calls you
app.post("/hooks/faceninja", async (req, res) => {
const event = verified(req); // check FaceNinja-Signature first
if (event.type === "head.completed") {
const link = await api.post(`/v1/heads/${event.data.id}/files`,
{ format: "glb", arkit: true });
await storeOnYourCdn(link.url);
}
res.sendStatus(204);
});Prescurtat pentru lectură. Referința EN conține cererea completă, verificarea semnăturii și toate erorile.
O distribuție dintr-un folder, sigur de rulat de două ori.
Un lot înseamnă mai multe creări individuale. Dați fiecăreia o cheie de idempotență derivată din propriile date, de exemplu numele folderului, și puteți rula din nou întregul script după o cădere, fără să creați sau să plătiți un cap de două ori. Apoi lăsați webhook-urile să vă spună care capete sunt gata.
for person in sorted(Path("cast").iterdir()): # one folder per person
photos = [("photos", open(p, "rb")) for p in sorted(person.glob("*.jpg"))]
api.post("/v1/heads", files=photos,
data={"name": person.name, "webhook_url": HOOK},
headers={"Idempotency-Key": f"cast-2026-10/{person.name}"})- Ritm: până la 30 de creări de capete pe minut pentru fiecare cont. La
429, așteptațiRetry-Aftersecunde și trimiteți din nou aceeași cheie. - Verificați mai întâi:
?dry_runverifică o creare și returnează o ofertă de preț, fără să creeze un cap.GET /v1/accountarată soldul. - Urmăriți:
GET /v1/headslistează capetele, pagină cu pagină, cu starea lor. - Eșuează unul, nu toate: un cap care eșuează raportează propriul
error.code, iar creditele lui se întorc. Restul lotului continuă.
Sau lăsați agentul să scrie integrarea.
Referința API, fișierul OpenAPI și llms.txt sunt scrise pentru oameni și pentru modele de limbaj. Dați agentului skill-ul și vă poate crea direct capete sau poate scrie și testa scriptul de pipeline pentru stack-ul pe care îl folosiți.
Read https://faceninja.net/llms.txt and https://faceninja.net/skill/SKILL.md. Write a Python script for our pipeline: for each new folder in ./incoming, create one FaceNinja head from its photos with an Idempotency-Key derived from the folder name and a webhook_url I give you. Add a small web handler that checks the FaceNinja-Signature header, and on head.completed downloads the FBX to ./heads/<folder name>; on head.failed it logs error.code. Read the API key from FACENINJA_API_KEY. Don't run anything against my account until I say so.Lăsați acest prompt în engleză: agentul are nevoie de adresa web exact așa cum este scrisă. Apoi îi puteți vorbi în limba dumneavoastră.
Făcut pentru reîncercări, cozi și fotografii slabe.
Creări idempotente
Același Idempotency-Key în decurs de 24 de ore returnează același cap, niciodată o a doua taxare.
Webhook-uri semnate
head.completed și head.failed, cu o semnătură HMAC în FaceNinja-Signature.
Coadă transparentă
Cât timp așteaptă, un cap raportează locul în coadă și o estimare.
Erori după care puteți ramifica codul
Valori error.code stabile (no_face, not_same_person, content_rejected, …) și un hint.
Rambursări fără tichete
Creditele sunt rezervate la creare, taxate la finalizare și eliberate în caz de eșec sau de ștergere.
Ștergere la cerere
Ștergeți un cap și fotografiile lui oricând doriți. Fișierele expiră la 30 de zile după ce se termină capul.
Cifrele de care trebuie să țineți cont.
| Fotografii per cap | De la 1 la 15, o singură persoană; JPEG, PNG, WebP, HEIC/HEIF sau AVIF, până la 25 MiB fiecare |
|---|---|
| Durată per cap | Aproximativ 4 minute, plus coada, dacă există |
| Long poll | ?wait până la 60 s per apel |
| Linkuri de descărcare | Pornire în 60 s; o descărcare pornită se termină |
| Limite de rată | 600 de cereri pe minut pentru fiecare cont; 30 de creări de capete pe minut |
| Păstrare | Fotografiile și fișierele, 30 de zile după ce se termină capul |
| Preț | 1.500 de credite (15 USD) per cap, toate formatele incluse |
Referința este sursa de adevăr. Dacă un număr de aici diferă, are prioritate referința.
Fața jucătorului, din prima zi a fișierului de salvare.
Lăsați jucătorii să-și aducă propria față sau construiți o distribuție de NPC-uri din actori care și-au dat acordul. Fiecare cap este același mesh cu altă față, așa că un singur rig, un singur material și un singur set de animații se potrivesc tuturor. Cele 52 de forme ARKit primesc lip sync sau camera jucătorului.
Planificați așteptarea. Un cap durează aproximativ 4 minute, nu milisecunde. Porniți-l din timp, în timpul onboardingului sau al unui tutorial, afișați un înlocuitor și schimbați capul când sosește webhook-ul.
GLB pentru Unity, Godot și web; FBX și MetaHuman ZIP pentru Unreal. Automatizarea Unreal este în acces timpuriu: solicitați-o.
Termenii noștri cer permisiunea persoanei din fotografie și interzic fotografiile cu copii. Integrați aceeași regulă în aplicația dumneavoastră.




Folosiți deja un alt API de la fotografie la MetaHuman?
Dacă integrarea creează deja un cap, îl așteaptă și descarcă un fișier, își păstrează forma și aici. Căile, numele câmpurilor și pasul cu fișierul diferă, iar ghidul de migrare le pune în corespondență apel cu apel.
Întrebări ale dezvoltatorilor.
- 01Există un sandbox?
- Adăugați
?dry_runla un apel de creare. Verifică cererea și returnează o ofertă de preț, fără să creeze un cap și fără să vă taxeze. - 02Îl pot apela dintr-un browser sau dintr-o aplicație mobilă?
- Nu. Păstrați cheia pe server. Linkurile semnate de încărcare și descărcare nu necesită cheie, așa că un client poate încărca sau descărca direct.
- 03Ce SDK-uri există?
- HTTP simplu și un fișier OpenAPI 3.1 din care puteți genera un client. Referința are exemple cu curl, Node și Python. CLI-ul skill-ului pentru agenți este, de asemenea, un singur fișier Python pe care îl puteți citi și apela din scripturi.
- 04Câte capete pot crea simultan?
- Până la 30 de creări de capete pe minut pentru fiecare cont, iar fiecare rulează în coadă. Pentru mai mult de 1.000 de capete, scrieți-ne despre facturare și capacitate.
- 05Este acesta API-ul MetaHuman al Epic?
- Nu. API-urile MetaHuman ale Epic controlează prin script MetaHuman Creator în interiorul Unreal Engine. FaceNinja creează capul din fotografii, ca serviciu web, și vă dă fișierele și arhiva MetaHuman ZIP pe care să le duceți în Unreal.
- 06Poate crea un cap dintr-un set de fotografii?
- Da, în beta: reconstrucția din mai multe fotografii ale unei sesiuni returnează și poziția camerei și distanța focală pentru fiecare fotografie. Scrieți-ne dacă doriți să o încercați cu propriul set de capturi.