modelos

gemini-3-pro-preview

Markdown · JSON

gemini-3-pro-preview

Gemini 3 Pro Preview é o modelo de raciocínio multimodal da Google para texto, imagens, áudio, vídeo e PDF, com resultados em texto. A sua elevada capacidade de entrada, as funcionalidades de programação e os fluxos de trabalho com ferramentas suportados adequam-se à análise detalhada, à comparação de documentos e à execução de tarefas fundamentadas em evidências.

Sobre o modelo

Esta descrição apresenta as capacidades do modelo. As entradas, saídas e opções disponíveis no Ailoot para o método selecionado estão indicadas abaixo.

Gemini 3 Pro Preview é o perfil de pré-visualização Gemini 3 Pro da Google para raciocínio multimodal e geração de texto. Pode trabalhar com texto, imagens, áudio, vídeo e documentos PDF e devolver um resultado escrito. Os usos previstos incluem análise complexa, programação avançada, desenvolvimento de algoritmos e tarefas que combinam um conjunto substancial de fontes com uma pergunta específica.

Modelo e estrutura da entrada

Gemini 3 Pro é um modelo de mistura esparsa de especialistas baseado em transformers, com suporte nativo de entradas multimodais. A sua arquitetura encaminha cada token através de um subconjunto selecionado de especialistas. Trata-se de uma distinção no desenho do modelo, em vez de um controlo do utilizador para selecionar um especialista específico ou fixar uma configuração de disponibilização.

Prepare as entradas em função das informações necessárias para a tarefa. Um documento, uma captura de ecrã e uma gravação de áudio podem fornecer evidências diferentes. Identifique o conteúdo de cada recurso e o seu contributo para a resposta. A saída continua a ser texto; compreender material visual ou falado não torna esta pré-visualização num gerador de imagens, voz ou vídeo.

Análise multimodal

Utilize imagens para perguntas sobre conteúdo visível, áudio para informações faladas ou acústicas e vídeo para uma sequência cujas alterações ao longo do tempo sejam relevantes. Mantenha o recurso efetivo junto da pergunta, em vez de o descrever apenas de memória. Ao comparar vários recursos, identifique-os claramente para que a resposta possa referir-se à fonte correta.

Por exemplo, um pedido de análise de produto pode combinar uma especificação escrita, uma captura de ecrã da interface e uma demonstração gravada. Peça uma comparação que distinga o que a especificação promete do que é visível ou audível no material fornecido. Defina o resultado pretendido em termos de conclusões, observações que as sustentam e perguntas por resolver.

Para uma tarefa com PDF, forneça o documento e identifique as secções ou afirmações a examinar. Uma pergunta útil pede uma comparação, extração ou explicação ligada à fonte, em vez de solicitar apenas um resumo geral de um ficheiro extenso.

Contexto longo e limite de saída

A especificação exata da pré-visualização indica um limite de entrada de 1 048 576 tokens e um limite de saída de 65 536 tokens. O fabricante indica janeiro de 2025 como data-limite do conhecimento; forneça evidências mais recentes quando a pergunta depender de acontecimentos ou informações posteriores. Estes limites têm funções diferentes. É possível ler um conjunto extenso de fontes para produzir uma resposta focada sem exigir que o modelo reproduza todas as partes da entrada.

Organize o material extenso para tornar clara a sua estrutura: títulos dos documentos, limites das secções, caminhos do código e a pergunta a que a saída deve responder. Mantenha as exceções e definições relevantes próximas do conteúdo a que se aplicam. Se a tarefa exigir um relatório longo, indique as suas secções e as evidências esperadas em cada uma.

Uma janela de contexto ampla não garante que todos os pormenores recebam a mesma atenção ou que todas as conclusões sejam corretas. A Google identifica também uma possível degradação ao longo de conversas com vários turnos; reveja os factos importantes das fontes e o contexto reutilizado à medida que a troca avança. Confira a resposta com as passagens ou os recursos concretos que sustentam as suas afirmações importantes.

Programação e desenvolvimento de algoritmos

Os usos previstos pelo produtor incluem programação avançada e trabalho com algoritmos. Forneça o código relevante, os pressupostos sobre o ambiente, a falha observada e o comportamento esperado. Para uma tarefa de algoritmos, defina a entrada, a saída pretendida e condições como ordenação, duplicados ou dados inválidos.

Um pedido de depuração útil associa a entrada que falha e o erro à menor região relevante do código. Peça um diagnóstico e uma alteração focada e verifique depois se a alteração proposta resolve o comportamento relatado. Código gerado e a afirmação de que deverá funcionar são diferentes de uma implementação executada e verificada.

Para uma pergunta sobre um repositório maior, utilize a capacidade de entrada para fornecer os ficheiros necessários com os caminhos claramente identificados. Indique se o resultado pretendido é uma explicação, uma proposta de alteração ou uma análise de alternativas, para lhe dar uma finalidade concreta.

Ferramentas, fontes e resultados estruturados

A especificação do produtor para esta pré-visualização suporta chamadas de funções, execução de código, pesquisa em ficheiros, fundamentação em pesquisa e contexto de URL. Estas funcionalidades têm papéis distintos. Uma chamada de função descreve uma operação a executar por uma aplicação; o resultado da ferramenta fornece depois evidências para a etapa seguinte do modelo. A execução de código é um fluxo de trabalho com ferramentas, em vez de uma garantia de que qualquer código de aplicação gerado já foi testado.

A fundamentação em pesquisa e o contexto de URL proporcionam fluxos de trabalho orientados para fontes, enquanto a pesquisa em ficheiros utiliza uma coleção de ficheiros preparada. Mantenha os resultados das ferramentas e as associações às fontes junto da resposta, para permitir examinar uma conclusão. Segundo a sua especificação, este perfil não suporta utilização do computador nem fundamentação em Maps.

O suporte de saída estruturada permite exprimir um resultado segundo um esquema definido. Especifique os campos e o seu significado antes da geração e reveja tanto o conteúdo como o formato. Mesmo um objeto estruturado válido exige verificação factual e específica da tarefa.

Raciocínio, reutilização e limites entre edições

Esta pré-visualização suporta o modo de raciocínio. Utilize uma tarefa clara, evidências relevantes e restrições explícitas para trabalho que exija vários passos de raciocínio. O resultado deve explicar os pressupostos e a conclusão útil; raciocínio oculto ou a existência de um modo de raciocínio não constituem, por si só, verificação.

O produtor indica também suporte de cache e processamento em lote. Estas são funcionalidades de processamento distintas das capacidades de conteúdo do modelo, e a sua presença não demonstra que um pedido concreto tenha usado cache nem que um resultado em lote seja correto.

Mantenha Gemini 3 Pro Preview distinto de Gemini 3.1 Pro Preview, Gemini 3 Pro Image e dos perfis de áudio ou Live. A saída desta pré-visualização é texto e a sua especificação não inclui geração de imagens, geração de áudio nem funcionamento Live. Avalie a resposta, o código ou o resultado estruturado devolvido em relação ao conjunto de fontes fornecido e à tarefa pretendida.

Ailoot Ultra · OpenAI Chat POST /v1/chat/completions gemini-3-pro-preview

gemini-3-pro-preview

Outro /gemini-3-pro-preview

Introdução

Gemini 3 Pro Preview é o modelo de raciocínio multimodal da Google para texto, imagens, áudio, vídeo e PDF, com resultados em texto. A sua elevada capacidade de entrada, as funcionalidades de programação e os fluxos de trabalho com ferramentas suportados adequam-se à análise detalhada, à comparação de documentos e à execução de tarefas fundamentadas em evidências.

Entradas aceites
Texto
Resultados
Texto

Disponível no Ailoot · entradas e métodos

Ailoot Ultra · OpenAI Chat POST /v1/chat/completions
Entrada
text
Saída
text
Formato de saída
json ou SSE
CampoTipoRequisitoValores e limitesPredefinição
CampomodelTipostringRequisitoObrigatórioValores e limites
gemini-3-pro-preview
Predefinição—
CampomessagesTipomessage[]RequisitoObrigatórioValores e limites
Número mínimo de elementos: 1
Predefinição—
Campomessages[].roleTipostringRequisitoObrigatórioValores e limites
Depende do modelo
Predefinição—
Campomessages[].contentTipostringRequisitoOpcionalValores e limites
Aplica-se quando: Conversação textual
Predefinição—
CampostreamTipobooleanRequisitoOpcionalValores e limitesPredefiniçãofalse
Combinações de materiais de entrada

Texto · Texto UTF8

messages[].content

Parâmetros e ciclo de vida do método
ParâmetroContrato
Parâmetrocontent_typeContratoapplication/json
ParâmetrorequiredContratomodel, messages
Parâmetromaterial_typesContratotext
ParâmetromessagesContratoLista de mensagens com estrutura role/content
Parâmetrofile_materialContratoDocumento UTF-8 real inserido como texto literal; nenhum ID de ficheiro inferido
Parâmetrooptional_controlsContratostream
Parâmetrocontrol_scopeContratoConversação textual; stream é um booleano e tem false como predefinição.
Parâmetrooutput_modalitiesContratotext
Parâmetrohosted_operationsContratofalse
Parâmetromultimodal_input_bindingContratonull

Aliases do método: /chat/completions

Ciclo de vida: synchronous_or_streamed

Envie o ID exato do modelo com messages.

O comprimento do contexto não é um limite de saída.

Um ficheiro de texto pode fornecer texto literal; as entradas de imagem/áudio/objeto de ficheiro exigem uma associação exata.

Tarifários

As referências tarifárias não acrescentam opções ao pedido. Os parâmetros suportados constam do método selecionado.

Modo rápido
Não especificado Quando o modo rápido está selecionado
Modo flex
Não especificado Quando o modo flex está selecionado
Esforço máximo de raciocínio
Não especificado Quando o esforço máximo de raciocínio usa o ajuste predefinido (default)
Preços da cache explícita
Não ativado Quando é pedida cache explícita

Tarifas Ailoot

Preços por configuração

ConfiguraçãoTabela de tarifasCusto
ConfiguraçãoTarifas base dos tokensTabela de tarifasTarifa baseCusto
Entrada · Tokens de entrada $0.004 / 1K tokens
Saída · Tokens de saída $0.024 / 1K tokens
Entrada · Leitura da cache $0 / 1K tokens
Entrada · Escrita na cache $0 / 1K tokens
Entrada · Escrita na cache, 1 hora — / 1K tokens

O Ailoot reserva um montante estimado antes de um pedido. Após o resultado, liquida o custo final com base na utilização medida. No streaming, a liquidação usa o registo final de utilização. Como funcionam a reserva e a liquidação →

Exemplos de pedidos

Ailoot Ultra · OpenAI Chat

curlPython SDK
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
python3 - <<'PY_REQUEST'
import json,os
from pathlib import Path
p=json.loads('{"model":"gemini-3-pro-preview","messages":[{"role":"user","content":"hello"}],"stream":false}')

Path("request.json").write_text(json.dumps(p,ensure_ascii=False))
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/chat/completions \
  -H "Authorization: Bearer $AILOOT_API_KEY" -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path
r=json.loads(Path("result.json").read_text())
for x in r.get("choices",[]):
    if x.get("message",{}).get("content"): print(x["message"]["content"])
PY_RESULT
from openai import OpenAI
import os

if not os.environ.get("AILOOT_API_KEY", "").strip(): raise SystemExit("Set AILOOT_API_KEY before making a request")
client=OpenAI(base_url="https://api.ailoot.ai/v1",api_key=os.environ["AILOOT_API_KEY"],max_retries=0)
result=client.chat.completions.create(model="gemini-3-pro-preview", messages=[{"role":"user","content":"hello"}], stream=False)
import base64, json
from pathlib import Path

def save_result(data, stem="result"):
    # Keep every field, including usage, IDs, reasoning and tool requests.
    Path(stem + ".json").write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(data, ensure_ascii=False, indent=2))
    def save_blob(encoded, suffix, label):
        raw = base64.b64decode(encoded, altchars=b"-_", validate=True)
        ext = "png" if raw.startswith(b"\x89PNG\r\n\x1a\n") else "jpg" if raw.startswith(b"\xff\xd8") else "webp" if raw[:4] == b"RIFF" and raw[8:12] == b"WEBP" else suffix
        file = Path(stem + "-" + label + "." + ext)
        file.write_bytes(raw)
        print("Saved", file)
    for index, block in enumerate(data.get("content") or []):
        print("Content", index, json.dumps(block, ensure_ascii=False))
    for choice in data.get("choices") or []:
        print("Choice", choice.get("index"), json.dumps(choice.get("message", choice.get("delta", {})), ensure_ascii=False))
    for index, item in enumerate(data.get("output") or []):
        print("Output", index, json.dumps(item, ensure_ascii=False))
        if item.get("type") == "image_generation_call" and item.get("result"):
            save_blob(item["result"], item.get("output_format") or "bin", "output-" + str(index))
    for ci, candidate in enumerate(data.get("candidates") or []):
        for pi, part in enumerate((candidate.get("content") or {}).get("parts") or []):
            print("Candidate/part", ci, pi, json.dumps(part, ensure_ascii=False))
            blob = part.get("inlineData") or part.get("inline_data")
            if blob and blob.get("data"):
                mime = blob.get("mimeType") or blob.get("mime_type")
                suffix = {"image/png":"png", "image/jpeg":"jpg", "image/webp":"webp", "audio/wav":"wav", "audio/mpeg":"mp3", "video/mp4":"mp4"}.get(mime, "bin")
                save_blob(blob["data"], suffix, "candidate-" + str(ci) + "-part-" + str(pi))

save_result(result.to_dict(mode="json"))

Receber e guardar os resultados

Ailoot Ultra · OpenAI Chat

json ou SSE

Guardar todos os resultados concluídos

Guarde cada resposta, ficheiro e parte de conteúdo devolvidos na íntegra.

Conserve cada opção com o conteúdo, as chamadas de ferramentas e o raciocínio. Em SSE, junte os deltas por índice de opção e ferramenta e mantenha o motivo final de conclusão e os dados de utilização.

Se for necessário verificar a resposta original

Conserve os ID e cabeçalhos de pedido/resposta. Não é fornecido um URL genérico para obter uma tarefa textual.

Campos da resposta
CampoTipo
Campochoices[].indexTipointeger
Campochoices[].message.contentTipostring|null
Campochoices[].message.tool_callsTipotool_call[]
Campochoices[].message.reasoning_contentTipostring
Campochoices[].message.reasoning_detailsTipoobject|array
Campochoices[].finish_reasonTipostring|null
CampousageTipoobject
Erros e passos seguintes
RespostaCondiçãoPasso seguinte
Resposta400 · invalid_request_errorCondiçãoCampos obrigatórios, representação do material ou valor do parâmetro inválidosPasso seguinteCorrija os campos indicados antes de um novo pedido de criação.

Aliases

Aliases do modelo

Ailoot Ultra gemini-3-pro-preview

Aliases dos caminhos dos métodos

/chat/completions

IDs de chamada relacionados

gemini-3-pro-preview

Ailoot Ultra · Anthropic Messages POST /v1/messages gemini-3-pro-preview

gemini-3-pro-preview

Outro /gemini-3-pro-preview

Introdução

Gemini 3 Pro Preview é o modelo de raciocínio multimodal da Google para texto, imagens, áudio, vídeo e PDF, com resultados em texto. A sua elevada capacidade de entrada, as funcionalidades de programação e os fluxos de trabalho com ferramentas suportados adequam-se à análise detalhada, à comparação de documentos e à execução de tarefas fundamentadas em evidências.

Entradas aceites
Texto
Resultados
json · sse

Disponível no Ailoot · entradas e métodos

Ailoot Ultra · Anthropic Messages POST /v1/messages
Entrada
text
Saída
json, sse
Formato de saída
JSON ou SSE
CampoTipoRequisitoValores e limitesPredefinição
CampomodelTipostringRequisitoObrigatórioValores e limites
gemini-3-pro-preview
Predefinição—
CampomessagesTipomessage[]RequisitoObrigatórioValores e limitesPredefinição—
Campomessages[].roleTipostringRequisitoObrigatórioValores e limites
user, assistant
Predefinição—
Campomessages[].contentTipostringRequisitoObrigatórioValores e limitesPredefinição—
Campomax_tokensTipointegerRequisitoObrigatórioValores e limitesPredefinição—
CampostreamTipobooleanRequisitoOpcionalValores e limitesPredefiniçãofalse
Combinações de materiais de entrada

Texto · Texto UTF-8

Cadeia de caracteres messages[].content

Parâmetros e ciclo de vida do método
ParâmetroContrato
Parâmetrocontent_typeContratoapplication/json
ParâmetrorequiredContratomodel, messages, max_tokens
Parâmetrooptional_controlsContratostream
Parâmetromaterial_typesContratotext
Parâmetrotext_file_materialContratoLeia o documento UTF-8 real e coloque o texto na entrada indicada ou na cadeia de conteúdo da mensagem.

Ciclo de vida: synchronous_or_streamed

Tarifários

As referências tarifárias não acrescentam opções ao pedido. Os parâmetros suportados constam do método selecionado.

Modo rápido
Não especificado Quando o modo rápido está selecionado
Modo flex
Não especificado Quando o modo flex está selecionado
Esforço máximo de raciocínio
Não especificado Quando o esforço máximo de raciocínio usa o ajuste predefinido (default)
Preços da cache explícita
Não ativado Quando é pedida cache explícita

Tarifas Ailoot

Preços por configuração

ConfiguraçãoTabela de tarifasCusto
ConfiguraçãoTarifas base dos tokensTabela de tarifasTarifa baseCusto
Entrada · Tokens de entrada $0.004 / 1K tokens
Saída · Tokens de saída $0.024 / 1K tokens
Entrada · Leitura da cache $0 / 1K tokens
Entrada · Escrita na cache $0 / 1K tokens
Entrada · Escrita na cache, 1 hora — / 1K tokens

O Ailoot reserva um montante estimado antes de um pedido. Após o resultado, liquida o custo final com base na utilização medida. No streaming, a liquidação usa o registo final de utilização. Como funcionam a reserva e a liquidação →

Exemplos de pedidos

Ailoot Ultra · Anthropic Messages

Corpo JSON mínimo completocurl · use o seu documento UTF-8Python · guarde o resultado completo
{
  "model": "gemini-3-pro-preview",
  "max_tokens": 128,
  "messages": [
    {
      "role": "user",
      "content": "Summarize the incident report."
    }
  ],
  "stream": false
}
set -eu
: "${AILOOT_API_KEY:?Set your Ailoot API key}"
: "${AILOOT_TEXT_FILE:?Set your actual UTF-8 document}"
export AILOOT_TEXT_FILE
python3 - <<'PY_REQUEST'
import json, os
from pathlib import Path

source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
    raise SystemExit('Choose a document containing text')
payload = {'model': 'gemini-3-pro-preview', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
Path('request.json').write_text(json.dumps(payload, ensure_ascii=False), encoding='utf-8')
PY_REQUEST
curl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/messages \
  -H "x-api-key: $AILOOT_API_KEY" -H 'anthropic-version: 2023-06-01' -H 'Content-Type: application/json' \
  --data-binary @request.json -D response-headers.txt -o result.json
python3 - <<'PY_RESULT'
import json
from pathlib import Path

result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))
PY_RESULT
import json, os
from pathlib import Path

source_file = Path(os.environ['AILOOT_TEXT_FILE'])
if not source_file.is_file():
    raise SystemExit('Set AILOOT_TEXT_FILE to your actual UTF-8 document')
text = source_file.read_text(encoding='utf-8')
if not text.strip():
    raise SystemExit('Choose a document containing text')
payload = {'model': 'gemini-3-pro-preview', 'max_tokens': 128, 'messages': [{'role': 'user', 'content': 'Summarize the incident report.'}]}
payload['messages'][0]['content'] = 'Summarize this material and quote supporting source passages.\n\n' + text
from urllib.request import Request, urlopen
from urllib.error import HTTPError

api_key = os.environ['AILOOT_API_KEY']
if not api_key.strip():
    raise SystemExit('Set AILOOT_API_KEY before making a request')
headers = {'x-api-key': 'PLACEHOLDER_KEY', 'anthropic-version': '2023-06-01', 'Content-Type': 'application/json'}
headers['x-api-key'] = api_key
request = Request('https://api.ailoot.ai/v1/messages', data=json.dumps(payload, ensure_ascii=False).encode('utf-8'), headers=headers, method='POST')
try:
    with urlopen(request, timeout=120) as response:
        raw = response.read()
        Path('response-headers.txt').write_text(str(response.headers), encoding='utf-8')
except HTTPError as error:
    Path('result.json').write_bytes(error.read())
    Path('response-headers.txt').write_text(str(error.headers), encoding='utf-8')
    raise
Path('result.json').write_bytes(raw)
import json
from pathlib import Path

result = json.loads(Path('result.json').read_text(encoding='utf-8'))
print(json.dumps(result, ensure_ascii=False, indent=2))

Receber e guardar os resultados

Ailoot Ultra · Anthropic Messages

JSON ou SSE

Guardar todos os resultados concluídos

Guarde cada resposta, ficheiro e parte de conteúdo devolvidos na íntegra.

Conserve todos os blocos de conteúdo, as assinaturas de raciocínio e os ID reais de utilização de ferramentas. Junte todos os deltas de blocos SSE; o primeiro bloco de texto não é a saída completa.

Se for necessário verificar a resposta original

Conserve os ID e cabeçalhos de pedido/resposta. Não é fornecido um URL genérico para obter uma tarefa textual.

Campos da resposta
CampoTipo
CampoidTipostring
CampomodelTipostring
Campocontent[]Tipotext|thinking|tool_use|other content block
Campostop_reasonTipostring|null
CampousageTipoobject
Erros e passos seguintes
RespostaCondiçãoPasso seguinte
Resposta400 · invalid_request_errorCondiçãoCampos obrigatórios, representação do material ou valor do parâmetro inválidosPasso seguinteCorrija os campos indicados antes de um novo pedido de criação.

Aliases

Aliases do modelo

Ailoot Ultra gemini-3-pro-preview

Aliases dos caminhos dos métodos

/chat/completions

IDs de chamada relacionados

gemini-3-pro-preview

FAQ · gemini-3-pro-preview
Que entradas e resultados estão disponíveis?

POST /v1/chat/completions · gemini-3-pro-preview: text → text

POST /v1/messages · gemini-3-pro-preview: text → json, sse

Que campos utiliza o pedido?

POST /v1/chat/completions · gemini-3-pro-preview: model, messages, stream

POST /v1/messages · gemini-3-pro-preview: model, messages, max_tokens, stream

Que limites se aplicam?

POST /v1/chat/completions · gemini-3-pro-preview: messages.min_items: 1

Mais detalhes

Ligue o Ailoot ao Claude Code, OpenCode, Hermes ou à sua aplicação.

A empresa e a sua carteira de projetos

A empresa e a sua carteira de projetos: milhões de clientes; vendas mensais na ordem dos milhares de milhões.

Compre tokens com desconto.

Desconto por subscrição para trabalho regular. Códigos promocionais — até 50% na compra de tokens.

Subscrição
Escolha um plano com desconto para os pedidos regulares.
Código promocional até 50%
Introduza o código na compra. O preço é recalculado conforme a campanha em vigor.
Custos no histórico
O modelo, os tokens e o montante são guardados para cada pedido.

Escolher subscrição · Ver preços dos modelos

Ligue a API ao produto que vende.

SaaS, aplicações e bots — ao abrigo da oferta e do contrato de licença Ailoot. Para revenda, peça uma licença de revendedor.

Aplicação comercial
Integre geração de texto, imagens, vídeo e som nas funcionalidades pagas do seu serviço.
Licença de revendedor
Envie uma descrição do projeto e do modelo de acesso. Peça condições escritas de utilização e revenda.
Documentos no site
A oferta, o contrato de licença e a política de tratamento de dados estão disponíveis antes da ligação.

Pedir licença de revendedor · Oferta e contrato de licença