API B2B do Muitto
Acesse o catálogo de modelos, preços por provedor, rankings externos, conectores e ferramentas disponíveis no Muitto usando uma chave emitida para o seu parceiro.
Consulte também a Responses API para tokens pessoais.Envie sua chave em todas as requisições usando Bearer Token ou o cabeçalho X-API-Key. Chaves começam com b2b_ e nunca devem ser expostas no navegador ou versionadas.
curl -H "Authorization: Bearer b2b_SUA_CHAVE" \
https://muitto.app/api/public/b2b?resource=modelsEndpoints
GET https://muitto.app/api/public/b2b?resource=allGET https://muitto.app/api/public/b2b?resource=modelsUse &task=code, &task=image_generate ou outra tarefa compatível com a modalidade para calcular ratings.taskQuality; o padrão é text. Use &locale=pt, &locale=en ou &locale=es para receber o model card localizado; o padrão é inglês. A nota é comparável dentro da modalidade do modelo.
GET https://muitto.app/api/public/b2b?resource=leaderboardsGET https://muitto.app/api/public/b2b?resource=connectorsGET https://muitto.app/api/public/b2b?resource=toolsExemplo de resposta
A resposta é JSON e contém apenas dados de catálogo públicos voltados ao parceiro. Cada modelo lista os preços registrados de todas as rotas de provedor, inclusive desativadas. Muitto aparece como um provedor adicional: seu preço usa o menor valor positivo vigente por unidade e moeda, com o multiplicador de preço do modelo.
Na versão 2, user_prices foi substituído por providers; o contrato não mantém o campo antigo. Modelos desativados, indisponíveis e arquivados também são retornados. Os campos enabled, is_available e archived_at descrevem o estado do modelo; status e enabled em providers descrevem o provedor e a rota. Esses estados não removem registros do catálogo. Rotas sem preço conhecido retornam prices: [].
Em cada item de prices, amount é o valor na moeda decurrency por unidade de unit. As unidadestokens_in_1k e tokens_out_1k representam 1.000 tokens de entrada e saída; para exibir por milhão, multiplique o valor por 1.000. Os demais provedores mantêm seus preços originais, inclusive zero. A entrada Muitto mantém o cálculo atual sobre valores positivos; sem preço válido, retorna prices: [].effective_at indica a vigência do registro de origem. Preços futuros não são incluídos.
Linhas de cobrança como Input, Output, Cached Input e Cache Writes não aparecem como modelos independentes. O campo context_window informa a janela de contexto em tokens, quando fornecida pelas fontes do catálogo; null significa que não há dado disponível. Esse campo também acompanha o model_card, quando existente. A janela de contexto não é o limite de tokens de saída nem uma nota de qualidade.
Para percorrer o catálogo de modelos, use limit (1–250) e offset (iniciando em 0). A paginação é aplicada depois da remoção das linhas de cobrança, portanto total, returned e next_offset referem-se somente ao catálogo público. A resposta inclui pagination com limit, offset, returned, total, has_more e next_offset (ou null na última página). Sem esses parâmetros,resource=models continua retornando o catálogo completo.
{
"api_version": "2",
"generated_at": "2026-09-01T15:00:00.000Z",
"locale": "pt",
"rating_task": "text",
"pagination": {
"limit": 100,
"offset": 0,
"returned": 100,
"total": 237,
"has_more": true,
"next_offset": 100
},
"models": [{
"id": "uuid",
"slug": "modelo-exemplo",
"display_name": "Modelo Exemplo",
"modality": "text",
"context_window": 128000,
"quality_tier": "balanced",
"capabilities": { "vision": true },
"is_available": true,
"enabled": true,
"archived_at": null,
"speed_score": 82,
"reasoning_score": 76,
"ratings": {
"aaIntelligence": 79.2,
"muittoIntelligence": 86.4,
"taskQuality": 88.1,
"positions": {
"aaIntelligence": { "rank": 8, "total": 210, "percentile": 96.7 },
"muittoIntelligence": { "rank": 5, "total": 210, "percentile": 98.1 },
"taskQuality": { "rank": 4, "total": 210, "percentile": 98.6 }
},
"coverage": 75,
"confidence": 70.3
},
"external_metrics": {
"swen": {
"source": "swen",
"attribution_url": "https://swen.ia.br",
"tokens_per_second": 120,
"time_to_first_token_ms": 300,
"is_open_source": false
}
},
"providers": [{
"id": "provider-uuid",
"slug": "openrouter",
"name": "OpenRouter",
"status": "active",
"enabled": true,
"model_provider_id": "model-provider-uuid",
"provider_model_id": "vendor/model-exemplo",
"pricing_url": "https://openrouter.ai/models/vendor/model-exemplo",
"prices": [{
"unit": "tokens_in_1k",
"amount": 0.0003,
"currency": "USD",
"effective_at": "2026-09-01T00:00:00Z"
}]
}, {
"id": "muitto",
"slug": "muitto",
"name": "Muitto",
"status": "active",
"enabled": true,
"model_provider_id": null,
"provider_model_id": "modelo-exemplo",
"pricing_url": null,
"prices": [{
"unit": "tokens_in_1k",
"amount": 0.0012,
"currency": "USD",
"effective_at": "2026-09-01T00:00:00Z"
}]
}],
"model_card": {
"context_window": 128000,
"tagline": "Resumo do modelo",
"description": "Descrição pública",
"best_use_cases": ["Análise", "Redação"]
}
}],
"leaderboards": [{
"source": "lmarena",
"leaderboard_key": "text-style-control",
"category": "overall",
"source_published_on": "2026-09-01",
"source_url": "https://huggingface.co/datasets/lmarena-ai/leaderboard-dataset",
"license_url": "https://creativecommons.org/licenses/by/4.0/",
"entries": [{
"display_name": "claude-fable-5",
"rank": 1,
"total_models": 210,
"percentile": 100,
"score": 1507.4,
"model_id": "uuid"
}]
}],
"connectors": [{
"source": "native",
"id": "connector-uuid",
"slug": "connector-example",
"name": "Connector Example",
"logo_url": "https://example.com/logo.svg",
"description": "Descrição pública",
"categories": ["Produtividade"],
"featured": true,
"kind": "api",
"auth_kind": "header",
"enabled": true,
"credential_fields": [{
"key": "api_key",
"label": "Chave de API",
"description": "Gere no painel do provedor",
"required": true,
"secret": true
}],
"endpoints": [{
"key": "list_items",
"name": "List items",
"description": "Lista itens",
"method": "GET",
"path": "/items",
"read_only": true,
"field_descriptions": { "limit": "Número máximo de itens" }
}],
"created_at": "2026-08-01T00:00:00Z",
"updated_at": "2026-09-01T00:00:00Z"
}, {
"source": "composio",
"id": "composio:googlesheets",
"slug": "googlesheets",
"name": "Google Sheets",
"logo_url": "https://example.com/google-sheets.svg",
"description": "Planilhas Google",
"categories": ["Produtividade"],
"featured": false,
"enabled": null,
"kind": "toolkit",
"auth_kind": "managed",
"no_auth": false,
"credential_fields": [],
"endpoints": []
}],
"tools": [{
"source": "native",
"connector_id": "connector-uuid",
"connector_slug": "connector-example",
"key": "list_items",
"description": "Lista itens",
"method": "GET",
"path": "/items",
"read_only": true,
"field_descriptions": { "limit": "Número máximo de itens" }
}, {
"source": "composio",
"connector_id": "composio:googlesheets",
"connector_slug": "googlesheets",
"name": "List rows",
"slug": "GOOGLESHEETS_LIST_ROWS",
"description": "Lista linhas",
"read_only": true,
"input_schema": { "type": "object" }
}]
}Catálogo de conectores
connectors reúne todos os registros nativos do Muitto, inclusive os que estão desativados (consulte enabled), e todos os toolkits disponíveis no Composio. Em conectores Composio, auth_kind: "managed" indica que a autenticação é gerenciada pela integração; no_auth identifica toolkits que não exigem autenticação. Os endpoints nativos usam key, método, caminho e descrições de campos. As ferramentas Composio usam slug einput_schema.
A API consulta o catálogo persistido no banco, sem chamar provedores externos durante a requisição. Não há cursor externo no contrato v2. A sincronização administrativa atualiza o catálogo Composio separadamente e preserva os últimos dados salvos em caso de falha.
Estado do catálogo salvo
Nas consultas de conectores, ferramentas e catálogo completo, catalog_syncinforma a cobertura dos dados salvos. Em composio.status, readysignifica que existe uma cópia da lista e de cada toolkit; não garante dados recentes.partial indica ferramentas ainda pendentes, pending indica que a lista nunca foi sincronizada e unavailable indica falha ao ler o armazenamento. fetched_at e tools_fetched_at registram as datas de sincronização; missing_toolkits lista slugs sem ferramentas salvas. orphan_toolkits indica ferramentas salvas cujo conector não tem descrição no índice; elas são preservadas e o estado é parcial. invalid_toolkits identifica cópias de ferramentas inválidas que precisam de nova sincronização.
As cópias não expiram nem são apagadas por falhas ou pela remoção de itens no provedor. A sincronização fica em Administração → API B2B → Sincronizar catálogo. Antes da primeira sincronização, os dados externos ainda não existem no banco; a API sinaliza essa condição e continua retornando modelos, preços, rankings e conectores nativos. Falhas de leitura de uma fonte também preservam as demais fontes na resposta.
"catalog_sync": {
"native": { "status": "ready" },
"composio": {
"status": "partial",
"fetched_at": "2026-09-05T12:00:00Z",
"tools_fetched_at": { "googlesheets": "2026-09-05T12:01:00Z" },
"missing_toolkits": ["gmail"],
"orphan_toolkits": [],
"invalid_toolkits": []
}
}Erros
Credenciais ausentes ou inválidas retornam 401. Parâmetros de recurso, locale ou tarefa inválidos retornam 400. Falhas ou limites de provedores externos não retornam 502 nem descartam os outros recursos. Os dados salvos continuam disponíveis; os metadados de sincronização indicam dados pendentes ou antigos.
A API consulta o catálogo e não executa gerações nem ações em conectores.
Cada modelo expõe providers com a rota, o identificador do modelo no provedor e o preço vigente por unidade. Muitto também aparece nessa lista.
Conectores nativos e toolkits Composio incluem seus metadados, endpoints públicos, ferramentas e definições de credenciais. Segredos e credenciais de usuários nunca são retornados.