Sviluppatori · API REST
L'API per teste MetaHuman, pensata per i batch.
Invia le foto di una persona, ricevi risposta quando la testa è pronta, scarica il formato che ti serve. La stessa chiamata crea una testa o cinquecento. Ogni testa è finita: pelle 4K, consigli sui groom (capelli MetaHuman), un collo adattato e 52 forme ARKit. Una testa richiede circa 4 minuti, quindi l'API è asincrona per scelta.
- REST + JSON
- Chiavi Bearer
- Webhook firmati
- Chiavi di idempotenza
- OpenAPI 3.1
- llms.txt
Da non confondere con le API Python e C++ di MetaHuman di Epic, che girano dentro Unreal Engine. FaceNinja è un'API web che crea la testa che porti al loro interno.
POST /v1/headsfoto di una persona- id della testa
head.completedwebhook firmato al terminePOST /v1/heads/{id}/filesformato- link firmato di breve durata
Invia. Ricevi risposta. Scarica.
Invia.
POST /v1/headscon da 1 a 15 foto di una persona, come file multipart o come id che hai caricato prima. Aggiungi unIdempotency-Key, e un nuovo tentativo non crea né addebita mai una seconda testa.Ricevi risposta.
Scegli come: un webhook firmato verso il tuo server, un flusso di server-sent event, o un long poll
?wait=60per gli script.Scarica.
Richiedi
glb,fbx,obj,stl,plyometahuman_zip, con o senza forme ARKit. Ricevi un link firmato che non richiede chiave. Salva l'id della testa, non il link. Cosa contiene ogni formato
I crediti di una testa fallita tornano automaticamente, e error.code dice perché.
A un backend basta un webhook.
Crea la testa, salva il suo id e agisci quando ti chiamiamo. Questa è l'intera integrazione, in 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);
});Accorciato per la lettura. Il riferimento EN contiene la richiesta completa, il controllo della firma e ogni errore.
Un cast da una cartella, sicuro da eseguire due volte.
Un batch è fatto di tante creazioni singole. Dai a ognuna una chiave di idempotenza che ricavi dai tuoi dati, per esempio il nome della cartella, e puoi rieseguire l'intero script dopo un crash senza creare né pagare due volte una testa. Poi lascia che siano i webhook a dirti quali teste sono pronte.
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}"})- Ritmo: fino a 30 creazioni di teste al minuto per account. Su
429, attendiRetry-Aftersecondi e invia di nuovo la stessa chiave. - Prima controlla:
?dry_runverifica una creazione e restituisce un preventivo senza creare una testa.GET /v1/accountmostra il saldo. - Monitora:
GET /v1/headselenca le tue teste, pagina per pagina, con il loro stato. - Ne fallisce una, non tutte: una testa che fallisce riporta il proprio
error.code, e i suoi crediti tornano. Il resto del batch prosegue.
Oppure lascia che sia il tuo agente a scrivere l'integrazione.
Il riferimento API, il file OpenAPI e llms.txt sono scritti per le persone e per i modelli linguistici. Dai al tuo agente la skill e potrà creare teste direttamente per te, oppure scrivere e testare lo script di pipeline per il tuo stack.
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.Lascia questo prompt in inglese: il tuo agente ha bisogno dell'indirizzo web esattamente come è scritto. Dopo puoi parlargli nella tua lingua.
Pensata per retry, code e foto sbagliate.
Creazioni idempotenti
Lo stesso Idempotency-Key entro 24 ore restituisce la stessa testa, mai un secondo addebito.
Webhook firmati
head.completed e head.failed, con una firma HMAC in FaceNinja-Signature.
Coda onesta
Mentre aspetta, una testa indica la sua posizione in coda e una stima.
Errori che il codice sa distinguere
Valori error.code stabili (no_face, not_same_person, content_rejected, …) e un hint.
Rimborsi senza ticket
I crediti vengono trattenuti alla creazione, addebitati al completamento e rilasciati in caso di errore o eliminazione.
Eliminazione su richiesta
Elimina una testa e le sue foto quando vuoi. I file scadono 30 giorni dopo il completamento della testa.
I numeri attorno a cui progettare.
| Foto per testa | Da 1 a 15, una persona; JPEG, PNG, WebP, HEIC/HEIF o AVIF, fino a 25 MiB ciascuna |
|---|---|
| Tempo per testa | Circa 4 minuti, più l'eventuale coda |
| Long poll | ?wait fino a 60 s per chiamata |
| Link di download | Vanno avviati entro 60 s; un download avviato viene completato |
| Limiti di frequenza | 600 richieste al minuto per account; 30 creazioni di teste al minuto |
| Conservazione | Foto e file per 30 giorni dopo il completamento della testa |
| Prezzo | 1500 crediti (15 USD) per testa, ogni formato incluso |
Il riferimento è la fonte di verità. Se un numero qui è diverso, vale il riferimento.
Il volto di un giocatore dal primo giorno del salvataggio.
Lascia che i giocatori portino il proprio volto, oppure crea un cast di NPC con attori che hanno dato il consenso. Ogni testa è la stessa mesh con un volto diverso, quindi un solo rig, un solo materiale e un solo set di animazioni vanno bene per tutte. Le 52 forme ARKit gestiscono il lip sync o la camera del giocatore.
Pianifica l'attesa. Una testa richiede circa 4 minuti, non millisecondi. Avviala presto, durante l'onboarding o un tutorial, mostra un segnaposto e sostituisci la testa quando arriva il webhook.
GLB per Unity, Godot e il web; FBX e MetaHuman ZIP per Unreal. L'automazione per Unreal è in accesso anticipato: richiedila.
I nostri termini richiedono il permesso della persona nella foto e vietano le foto di bambini. Costruisci la stessa regola nel tuo flusso.




Usi già un'altra API da foto a MetaHuman?
Se la tua integrazione già crea una testa, la aspetta e scarica un file, qui mantiene la stessa struttura. Percorsi, nomi dei campi e il passaggio del file cambiano, e la guida alla migrazione li mappa chiamata per chiamata.
Domande degli sviluppatori.
- 01C'è una sandbox?
- Aggiungi
?dry_runa una chiamata di creazione. Verifica la richiesta e restituisce un preventivo senza creare una testa né addebitarti nulla. - 02Posso chiamarla da un browser o da un'app mobile?
- No. Tieni la chiave sul tuo server. I link firmati di caricamento e download non richiedono chiave, quindi un client può caricare o scaricare direttamente.
- 03Quali SDK ci sono?
- HTTP semplice e un file OpenAPI 3.1 da cui puoi generare un client. Il riferimento ha esempi in curl, Node e Python. Anche la CLI della skill per agenti è un unico file Python che puoi leggere e chiamare dagli script.
- 04Quante teste posso creare insieme?
- Fino a 30 creazioni di teste al minuto per account, e ciascuna passa dalla coda. Per più di 1000 teste, scrivici per fatturazione e capacità.
- 05È l'API MetaHuman di Epic?
- No. Le API MetaHuman di Epic gestiscono con script MetaHuman Creator dentro Unreal Engine. FaceNinja crea la testa dalle foto, come servizio web, e ti consegna i file e il MetaHuman ZIP da portare in Unreal.
- 06Può creare una testa da un set di foto?
- Sì, in Beta: la ricostruzione da più foto di una stessa sessione restituisce anche la posizione della camera e la lunghezza focale di ogni foto. Scrivici se vuoi provarla con il tuo set di scatti.