POST/api/v1/generate/influencer

Criar influencer

Bearer tokenImplementadoescopo generate:image

Contrato OpenAPI

operationId: generateInfluencer · Implementada

Baixar o contrato OpenAPI 3.1.

Parâmetros

NomeLocalObrigatórioTipo
Idempotency-Keyheadernãostring

Schema do request

JSON
{
  "additionalProperties": true,
  "properties": {
    "bracos": {
      "enum": [
        "bracos_normais",
        "sem_bracos"
      ],
      "type": "string"
    },
    "cabelo": {
      "enum": [
        "cabelo_muito_curto",
        "cabelo_liso_longo",
        "cabelo_afro_black",
        "cabelo_afro_curto",
        "cabelo_espetado",
        "cabelo_punk",
        "cabelo_careca",
        "cabelo_tentaculos"
      ],
      "type": "string"
    },
    "callbackUrl": {
      "$ref": "#/components/schemas/HttpsMediaUrl"
    },
    "corpo": {
      "enum": [
        "corpo_normal",
        "corpo_atletico",
        "corpo_magro",
        "corpo_magro_definido",
        "corpo_musculoso",
        "corpo_curvas",
        "corpo_gordo"
      ],
      "type": "string"
    },
    "estilo": {
      "enum": [
        "estilo_hiper",
        "estilo_cartoon",
        "estilo_anime",
        "estilo_2d"
      ],
      "type": "string"
    },
    "etnia": {
      "enum": [
        "africana",
        "arabe",
        "asiatica",
        "europeia",
        "indiana",
        "mestico"
      ],
      "type": "string"
    },
    "genero": {
      "enum": [
        "feminino",
        "masculino"
      ],
      "type": "string"
    },
    "idade": {
      "maximum": 60,
      "minimum": 18,
      "type": "integer"
    },
    "name": {
      "maxLength": 100,
      "type": "string"
    },
    "olhos": {
      "enum": [
        "olhos_ambar",
        "olhos_azul",
        "olhos_azul_claro",
        "olhos_branco",
        "olhos_castanho_claro",
        "olhos_castanho_escuro",
        "olhos_preto",
        "olhos_roxo",
        "olhos_todo_branco",
        "olhos_todo_preto",
        "olhos_verde",
        "olhos_vermelho"
      ],
      "type": "string"
    },
    "pele": {
      "enum": [
        "pele_normal",
        "pele_sardas",
        "pele_cicatrizes",
        "pele_pintas",
        "pele_queimaduras",
        "pele_velha",
        "pele_descascando",
        "pele_albina",
        "pele_vitiligo",
        "pele_marcas"
      ],
      "type": "string"
    },
    "pernas": {
      "enum": [
        "pernas_normais",
        "sem_pernas"
      ],
      "type": "string"
    },
    "referenceFileIds": {
      "items": {
        "minLength": 1,
        "type": "string"
      },
      "maxItems": 4,
      "type": "array",
      "uniqueItems": true
    },
    "referenceImages": {
      "items": {
        "$ref": "#/components/schemas/HttpsMediaUrl"
      },
      "maxItems": 4,
      "type": "array"
    },
    "tipo": {
      "enum": [
        "humano",
        "elfo"
      ],
      "type": "string"
    }
  },
  "required": [
    "tipo",
    "genero",
    "idade",
    "etnia",
    "olhos",
    "pele",
    "corpo",
    "bracos",
    "pernas",
    "cabelo",
    "estilo"
  ],
  "type": "object"
}

Respostas

HTTPSignificado
202Geração aceita para processamento assíncrono
defaultErro padronizado

Cria um influencer virtual com aparência parametrizada, usando o modelo nano-banana-pro (aspect ratio 9:16, quality 1K). Responde 202 Accepted com um taskId; acompanhe o resultado por polling em GET /api/v1/tasks/:id ou via webhook.

Escopo necessário: generate:image.

Body

CampoTipoObrigatórioValores aceitosPadrão
tipostringsimhumano, elfo—
generostringsimfeminino, masculino—
idadeinteirosim18–60—
etniastringsimafricana, arabe, asiatica, europeia, indiana, mestico—
olhosstringsimolhos_ambar, olhos_azul, olhos_azul_claro, olhos_branco, olhos_castanho_claro, olhos_castanho_escuro, olhos_preto, olhos_roxo, olhos_todo_branco, olhos_todo_preto, olhos_verde, olhos_vermelho—
pelestringsimpele_normal, pele_sardas, pele_cicatrizes, pele_pintas, pele_queimaduras, pele_velha, pele_descascando, pele_albina, pele_vitiligo, pele_marcas—
corpostringsimcorpo_normal, corpo_atletico, corpo_magro, corpo_magro_definido, corpo_musculoso, corpo_curvas, corpo_gordo—
bracosstringsimbracos_normais, sem_bracos—
pernasstringsimpernas_normais, sem_pernas—
cabelostringsimcabelo_muito_curto, cabelo_liso_longo, cabelo_afro_black, cabelo_afro_curto, cabelo_espetado, cabelo_punk, cabelo_careca, cabelo_tentaculos—
estilostringsimestilo_hiper, estilo_cartoon, estilo_anime, estilo_2d—
namestringnãoNome do personagem (max 100 chars)"Influencer"
referenceImagesstring[]nãoURLs de referência (max 4); se omitido, geradas automaticamente a partir dos atributos—
callbackUrlstringnãoHTTPS, host não-privado—

O prompt é gerado automaticamente a partir dos atributos informados.

Exemplo de request

cURL
curl -X POST https://avatrix.io/api/v1/generate/influencer \
  -H "Authorization: Bearer av_xxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: 9f1c-inf-001" \
  -d '{
    "tipo": "humano",
    "genero": "feminino",
    "idade": 27,
    "etnia": "europeia",
    "olhos": "olhos_verde",
    "pele": "pele_normal",
    "corpo": "corpo_atletico",
    "bracos": "bracos_normais",
    "pernas": "pernas_normais",
    "cabelo": "cabelo_liso_longo",
    "estilo": "estilo_hiper",
    "name": "Aurora"
  }'

Resposta — 202

JSON
{
  "success": true,
  "data": { "taskId": "...", "status": "queued" }
}

O status: "queued" é só o rótulo de criação. No polling (GET /api/v1/tasks/:id) a task evolui por pending → processing → completed (com resultUrl) ou failed. Ver Ciclo de vida da task.

Exemplo de erro

JSON
{
  "success": false,
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Valor 'foo' inválido para 'etnia'. Valores aceitos: africana, arabe, asiatica, europeia, indiana, mestico."
  }
}

Idempotência

Envie o header Idempotency-Key (opcional, ≤128 chars, TTL 24h). Repetir a mesma chave retorna a resposta original sem novo débito. A concorrência é limitada a 20 tasks simultâneas por usuário. Ver Idempotência.

Custo

Valor fixo por geração.

Erros relevantes

CódigoHTTPQuando
VALIDATION_ERROR400campos obrigatórios ausentes ou com valor fora da lista aceita, idade fora de 18–60, name > 100 chars, mais de 4 referenceImages
INSUFFICIENT_CREDITS402saldo insuficiente
FORBIDDEN403token sem generate:image
RATE_LIMITED / MAX_CONCURRENT_TASKS429rate limit ou 20 tasks simultâneas
INTERNAL_ERROR500erro interno ao processar a cobrança
GENERATION_FAILED502falha do provider
PROVIDER_UNAVAILABLE503provider indisponível