Ir para o conteúdo

API UN Comtrade

Comércio bilateral de mercadorias por HS e espelho entre exportações e importações inversas. A fonte usa contrato 2.1, o espelho 2.0 e o dataset 3.0; o parser é 2.

Consulta bilateral

from agrobr import comtrade

df, meta = await comtrade.comercio(
    "1201,1005,0901,1701,2304",
    reporter="BR",
    partner="all",
    fluxo="X",
    periodo=2023,
    freq="A",
    require_complete=True,
    return_meta=True,
)
print(meta.source_details["coverage"])
Argumento Padrão Semântica
produto: str obrigatório Alias de produtos(), HS ASCII de 2/4/6 dígitos ou lista textual desses códigos
reporter: str "BR" Alias conhecido ou código numérico textual positivo
partner: str \| None None None, world, mundo, "0": agregado World explícito; all/todos: todos os parceiros publicados
fluxo: str "X" Exportação X ou importação M
periodo: str \| int \| None ano anterior em Brasília Ano/mês, lista homogênea ou intervalo inclusivo
freq: str "A" Anual A ou mensal M
api_key: str \| None None Chave textual não vazia; None consulta AGROBR_COMTRADE_API_KEY
require_complete: bool False True rejeita cobertura partial/unknown; False preserva registros e emite aviso
as_polars: bool False Converte a saída validada para Polars, com o extra instalado
return_meta: bool False Retorna (DataFrame, MetaInfo)

Seleções repetidas são normalizadas; registros retornados não são deduplicados. Não some World com os demais parceiros, nem HS agregado com seus descendentes. Argumentos desconhecidos, booleanos usados como período, HS ímpar, fluxo inválido e intervalos invertidos falham antes de rede.

Aliases de produto

Cada alias soma os códigos HS da tabela. O mesmo alias tem o mesmo significado na ComexStat: onde a HS de um período não separa o produto, entra o menor código que o contém. Descrições pelas referências oficiais H0 a H6 da Comtrade.

Alias HS Não entra
soja 120190 (desde a HS 2012) e 120100 (até 2011) semente 120110; até 2011 a HS não separa a semente (0,01 % do valor em 2025)
complexo_soja soja + farelo_soja + oleo_soja —
farelo_soja 2304 —
oleo_soja 1507 —
milho 1005 —
arroz 1006 —
trigo 1001 (trigo e mistura de trigo com centeio) —
cafe 090111, 090112, 090121, 090122 cascas, películas e sucedâneos (090190; 090130/090140 na HS 1992)
acucar 1701 —
etanol 2207 —
algodao 5201 e 5203 (em pluma, cardado ou penteado) desperdícios 5202; fios e tecidos
carne_bovina 0201 e 0202 —
carne_frango 020711 a 020714 (galinha, Gallus domesticus) peru, pato, ganso e galinha-d'angola (US$ 212 mi em 2025); períodos antes de 1996 levantam InvalidParameterError, e 1996 também quando o reporter é o Brasil, que reportou na HS 1992
carne_suina 0203 —
celulose 4703 (pasta química à soda ou ao sulfato) pasta para dissolução 4702 (US$ 1,08 bi em 2025, 10,5 % das pastas), mecânica 4701, ao bissulfito 4704, semiquímica 4705 e de outras fibras 4706
tabaco 2401 (não manufaturado e desperdícios) charutos e cigarros 2402, manufaturados 2403 e produtos para inalação 2404
suco_laranja 200911, 200912, 200919 sucos de outras frutas e hortaliças (US$ 357 mi em 2025)

Antes de 1996 (HS 1992), a Comtrade não separa a carne de galinha fresca das outras aves, e o código dos cortes de galinha congelados (020741) passou a ser pato na HS 2012. Para esses anos, peça os códigos explicitamente ("020721,020741").

A guarda segue a classificação que o país reportou no ano, não o calendário. O Brasil reportou 1996 na HS 1992 (H0), onde nenhum dos quatro códigos existe: comercio("carne_frango", periodo=1996) levanta InvalidParameterError com a dica acima, em vez de voltar vazio com cobertura completa. A classificação do Brasil vem da disponibilidade oficial da Comtrade (H0 em 1996, H1 de 1997 a 2001, H2 de 2002 a 2006, H3 de 2007 a 2011, H4 de 2012 a 2016, H5 de 2017 a 2021 e H6 de 2022 a 2024). Para outros países, a classificação de cada ano não é conhecida antes da consulta, e a guarda vale só para antes de 1996. Os outros aliases têm ao menos um código em toda classificação que o Brasil reportou: soja e complexo_soja até 2011 só com 120100 e suco_laranja até 2001 sem 200912 são cobertura parcial.

Períodos

Frequência Exemplos aceitos
A 2023, "2022,2023", "2021-2023"
M 202301, "202301,202303", "202211-202302"
M, ano completo 2023, "2022-2023" expandem todos os meses

A validação de calendário não garante disponibilidade na fonte. O ano anterior é um padrão de seleção, sem promessa de publicação completa. O preview consulta um período por requisição; não reconstrói totais anuais somando meses.

Cobertura e aquisição

O agrobr consulta countOnly=true com os mesmos filtros do bloco inicial e compara essa contagem à união dos dados. A contagem da resposta normal é apenas o número devolvido. O preview oficial limita a resposta a 500 registros. Quando faltam linhas, o client divide períodos e HS explicitamente solicitados em partições disjuntas, conserva a evidência do pai e utiliza somente as folhas.

Uma folha mínima ainda limitada pode devolver partial. Não há paginação por offset nem enumeração automática de todos os parceiros. Falhas HTTP, envelope inválido, dimensões incompatíveis ou conflito entre pai e filhos interrompem a aquisição. A cobertura é operacional: contagem e dados de uma coleta, sem snapshot atômico de revisões.

Sem chave configurada, usa preview público. O transporte autenticado solicita até 100.000 registros e planeja até 12 períodos por bloco; o limite efetivo com chave não é garantido. Recusa 401/403 reinicia todo o plano no preview, conservando as tentativas descartadas. Cotas da conta não são garantidas pelo agrobr.

Colunas e metadados

As 22 colunas anteriores permanecem, com classificacao e classificacao_original e, no contrato 2.1, as 3 marcas de estimativa da ONU (peso_liquido_estimado, peso_bruto_estimado e quantidade_estimada), total 27. Os códigos de país, ano/mês e nível usam Int64 (hs_code e fluxo_code são texto); medidas usam float64; flags usam boolean anulável. O código de revisão publicado, como H6, é preservado; HS na URL é um alias. ISO e nomes podem ser nulos. O contrato do dataset descreve as mesmas medidas com nomes de colunas em português; a fonte conserva reporter_code, reporter_iso, reporter, partner_code, partner_iso, partner, fluxo_code, hs_code e produto_desc.

MetaInfo informa schema/contrato 2.1 (2.0 no espelho), canal comtrade_guest ou comtrade_authenticated, aquisição UTC e avisos. source_details contém query, recursos, cobertura, fallback e diagnóstico de parsing/layout. Cada recurso tem URL, SHA256 e tamanho. raw_content_hash identifica o manifesto canônico JSON UTF-8 de query e resources; raw_content_size mede esse manifesto, e resource_bytes soma os corpos. A chave de acesso não integra os metadados.

Os recursos descrevem a resposta final de cada requisição lógica e as partições descartadas. Tentativas intermediárias de retry HTTP não têm histórico de corpos nos metadados da API.

Espelho comercial

df, meta = await comtrade.trade_mirror(
    "soja", reporter="BR", partner="CN", periodo=2023,
    require_complete=True, return_meta=True,
)

Aceita os argumentos bilaterais, exceto fluxo; partner tem padrão "CN" e deve ser um país positivo distinto do reporter. Faz junção externa 1:1 por período/HS entre exportação e importação inversa. As 18 colunas anteriores recebem classificação e flag original por perna, além de reporter_code e partner_code, total 24.

ratio_valor é FOB do reporter / CIF do parceiro; ratio_peso é peso do reporter / peso do parceiro. Não existe faixa de normalidade garantida. Ausência ou denominador zero produz nulo. Revisões HS diferentes na mesma célula geram erro: esta função não harmoniza classificações.

Quando uma perna volta vazia (a China ← Brasil na soja de abr/2025, no acesso convidado), as colunas do parceiro, os diff_* e os ratio_* saem nulos, não zero, sem aviso e com a cobertura complete. A contagem de cada perna fica em meta.source_details["coverage"]["legs"] (received_count e expected_count), e os nulos, em meta.source_details["parsing"]["null_counts"].

Os metadados preservam ambas as aquisições em source_details["legs"], e as células com peso líquido estimado pela ONU, por perna, em source_details["peso_estimado"]: o ratio_peso usa o peso publicado, estimado ou não. Cobertura conjunta completa exige as duas pernas completas; canais diferentes aparecem como comtrade_mixed.

Dataset, sync e catálogos

datasets.comercio_internacional(...) usa declarante, parceiro, frequencia e exigir_completo para os seletores bilaterais, com HS textual múltiplo, Polars e proveniência preservada. Seu contrato 3.0 tem colunas em português. Em contexto determinístico, snapshot preenche somente o ano omitido; não congela revisões da fonte.

from agrobr.sync import comtrade

df = comtrade.comercio("soja", partner="world", periodo=2023, require_complete=True)

paises() lista os aliases ISO do mapa local, sem declarar catálogo mundial dinâmico. produtos() devolve uma cópia dos aliases agrícolas e seus HS. A categoria interna de licença é restrito, com aviso na primeira chamada; veja os termos verificados. A classificação preserva as dispensas expressas de redistribuição da política da ONU.

Os anos pedidos devem estar entre 1962 e o ano corrente. Período inválido levanta InvalidParameterError antes da rede. A fonte mantém seletores e colunas técnicos; o contrato do dataset descreve os nomes em português. Texto usa o padrão do pandas instalado, inclusive no vazio.