Correios Automático

API REST

As rotas do namespace infixs-correios-automatico/v1 atendem o painel do plugin e integrações de fora do WordPress. Base: https://sua-loja.com.br/wp-json/infixs-correios-automatico/v1. Em sites com /wp-json/ desativado, use https://sua-loja.com.br/index.php?rest_route=/infixs-correios-automatico/v1/….

Correios Automático 1.14.0PRO 1.6.4REST infixs-correios-automatico/v1WP 6.0+ · PHP 7.4+ · HPOSGuia de instalaçãoPlugin no WordPress.orgCorreios Automático PRO
API REST

Selos usados na referência: ação filtro GET POST DELETE · Grátis PRO. Tudo o que não traz o selo PRO funciona no plugin grátis. Abaixo de cada gancho e de cada rota está o arquivo e a linha onde ele aparece no código da versão indicada, para você ler o docblock completo no código.

Autenticação

As rotas pedem um usuário com a capacidade manage_woocommerce, que no WooCommerce vem com os papéis Administrador e Gerente de loja. As exceções públicas são POST /customer-returns (protegida pela chave do pedido), os retornos de autorização (GET /prepaid/callback e, no PRO, GET /bling/oauth/callback), o webhook do Bling e as rotas do agente de impressão, que usam o token do agente. Há três jeitos de chamar:

No wp-admin: cookie e nonce

O cookie de login vale na REST junto com o nonce wp_rest no cabeçalho X-WP-Nonce. Gere o nonce no seu plugin, na tela onde o JavaScript roda:

// No seu plugin, na tela onde o JavaScript vai chamar a REST:
wp_enqueue_script( 'meu-plugin-admin', plugins_url( 'admin.js', __FILE__ ), [ 'wp-api-fetch' ], '1.0.0', true );
wp_localize_script( 'meu-plugin-admin', 'meuPlugin', [
	'restUrl' => rest_url( 'infixs-correios-automatico/v1' ),
	'nonce'   => wp_create_nonce( 'wp_rest' ),
] );
// admin.js
const resposta = await fetch( `${ meuPlugin.restUrl }/orders/1234`, {
	credentials: 'same-origin',
	headers: { 'X-WP-Nonce': meuPlugin.nonce },
} );
const { order } = await resposta.json();

// Ou, com o wp-api-fetch (o nonce do WordPress já vai junto):
const dados = await wp.apiFetch( { path: '/infixs-correios-automatico/v1/orders/1234' } );

De fora do WordPress: senha de aplicação

Crie uma senha de aplicação (WordPress 5.6+, com HTTPS) em Usuários → Perfil para um usuário dedicado com o papel Gerente de loja, e envie em Authorization: Basic. Guarde a senha no cofre do ERP, fora do código.

curl -u 'integracao-erp:SENHA-DE-APLICACAO' \
  -H 'Content-Type: application/json' \
  -X POST 'https://sua-loja.com.br/wp-json/infixs-correios-automatico/v1/preposts' \
  -d '{"order_id":1234,"shipping_item_id":77,"invoice_number":"1234","invoice_key":"35261112345678000195550010000012341123456781"}'

Dentro do PHP: rest_do_request()

A chamada interna passa pelas mesmas permissões da rota. Em WP-Cron, Action Scheduler, webhook ou WP-CLI, defina antes um usuário com manage_woocommerce (wp_set_current_user()). Para código no mesmo site, as ações e os filtros costumam ser o caminho mais direto; a REST interna é útil quando você quer exatamente o comportamento da rota, como o rastreio que POST /preposts grava.

$request = new WP_REST_Request( 'POST', '/infixs-correios-automatico/v1/preposts' );
$request->set_body_params( [
	'order_id'       => 1234,
	'invoice_number' => '1234',
	'invoice_key'    => '35261112345678000195550010000012341123456781',
] );

$response = rest_do_request( $request ); // Precisa de um usuário atual com manage_woocommerce.

if ( $response->is_error() ) {
	$erro = $response->as_error(); // WP_Error com o code e o status da rota.
} else {
	$prepost = $response->get_data(); // [ 'id' => 87, 'object_code' => 'AB123456789BR', ... ]
}

// Rotas que leem só JSON (marcadas "corpo JSON" nas tabelas):
// $request->set_header( 'Content-Type', 'application/json' );
// $request->set_body( wp_json_encode( [ 'printed' => true ] ) );

Respostas de erro

Os erros seguem o formato do WordPress, { "code", "message", "data": { "status" } }. Trate pelo campo code. Erros vindos dos Correios chegam como http_error, com o status deles em data.status (e o código dos Correios em data.error_code, quando há). Erros do Contrato pré-pago começam com prepaid_ (ex.: prepaid_insufficient_balance 402, com data.balance_cents, data.price_cents e data.topup_url).

{
  "code": "invalid_recipient_neighborhood",
  "message": "O campo Bairro do destinatário é obrigatório quando o CEP termina com 000.",
  "data": { "status": 400, "prepost_error_recorded": true }
}

Pedidos

RotaO que fazPermissão
GET /orderssrc/Routes/RestRoutes.php:649Lista do painel. Parâmetros: page, per_page, search, status, carrier e pending (tracking, prepost, invoice e as pendências próprias). Sem um filtro, vale a preferência salva do operador; mande o parâmetro vazio (ex.: status=) para “todos”.manage_woocommerce
GET /orders/{id}src/Routes/RestRoutes.php:554Um pedido no formato do painel, com invoice, waiting_invoice, invoice_status, meta_data, shipping_items[], preposts[], prepost_errors[] e tracking_codes[].manage_woocommerce
POST · PUT · PATCH /orders/{id}src/Routes/RestRoutes.php:561Corpo JSON { "printed": true } marca a etiqueta como impressa; outro valor desmarca. Confira o pedido antes: a resposta é success para qualquer id.manage_woocommerce
POST · PUT · PATCH /orders/batchsrc/Routes/RestRoutes.php:569O mesmo para vários pedidos: { "orders": [1234, 1235], "printed": true } (corpo JSON).manage_woocommerce
POST /orders/preferencessrc/Routes/RestRoutes.php:585Salva os filtros padrão da lista (status, carrier, pending) (corpo JSON).manage_woocommerce
POST /orders/{id}/shipping/calculatesrc/Routes/RestRoutes.php:593Cota os serviços para o pedido: instance_id (obrigatório) e shipping_item_id (corpo JSON).manage_woocommerce
POST /orders/{id}/shipping/updatesrc/Routes/RestRoutes.php:601Troca o serviço e as medidas de uma linha de frete: instance_id, shipping_item_id, length, width, height, weight, delivery_time, cost (corpo JSON).manage_woocommerce
DELETE /orders/{id}/prepost-errorssrc/Routes/RestRoutes.php:625Limpa os erros de pré-postagem do pedido.manage_woocommerce
DELETE /orders/{id}/prepost-errors/{error_id}src/Routes/RestRoutes.php:633Dispensa um erro de pré-postagem (error_id = id do item em prepost_errors[]).manage_woocommerce
POST /orders/{id}/attach-rangesrc/Routes/RestRoutes.php:609Reserva o próximo código livre de uma faixa de etiquetas (service_code, shipping_item_id) e o grava como rastreio (corpo JSON).manage_woocommerce
POST /orders/{id}/send-tracking-whatsappsrc/Routes/RestRoutes.php:641Envia os códigos de rastreio por WhatsApp pelo Pingo Notify: connection (corpo JSON).manage_woocommerce

Pré-postagem

RotaO que fazPermissão
POST /prepostssrc/Routes/RestRoutes.php:349Cria a pré-postagem de um pedido, com a NF-e informada ou a do pedido. É a rota central para nota fiscal (parâmetros).manage_woocommerce
GET /prepostssrc/Routes/RestRoutes.php:341As 10 pré-postagens mais recentes da loja; search filtra pelo código do objeto. Para as de um pedido, use GET /orders/{id}.manage_woocommerce
POST /preposts/{id}/syncsrc/Routes/RestRoutes.php:379Relê a pré-postagem nos Correios: status, chave da DC-e, dados da DC-e e motivo de cancelamento.manage_woocommerce
POST · PUT · PATCH /preposts/{id}/cancel PROsrc/Routes/RestRoutes.php:371Cancela a pré-postagem nos Correios (no Contrato pré-pago, com estorno). {id} é o id local. Só com o grátis, responde 400 cancel_prepost_pro_feature.manage_woocommerce
DELETE /orders/{id}/preposts/{prepost_id} PROsrc/Routes/RestRoutes.php:617Cancela nos Correios e desvincula a pré-postagem do pedido e da linha de frete.manage_woocommerce
POST /preposts/{id}/print-dcesrc/Routes/RestRoutes.php:387PDF da DACE de uma pré-postagem com DC-e, em base64 no campo dados. dace_type: C (completa, padrão) ou R (resumida).manage_woocommerce
POST /preposts/dce/refreshsrc/Routes/RestRoutes.php:400Completa os dados da DC-e de 1 a 5 pré-postagens (prepost_ids). Devolve preposts[] e failed[] com reason (not_found, no_dce, dce_unavailable, not_authorized, temporary).manage_woocommerce
DELETE /preposts/{id}src/Routes/RestRoutes.php:363Obsoleta: apaga o registro local da pré-postagem e também o código de rastreio desse objeto no pedido, sem cancelar nos Correios. Para cancelar nos Correios, use /preposts/{id}/cancel.manage_woocommerce

Parâmetros de POST /preposts

Aceita JSON, formulário ou query string.

ParâmetroTipoObrigatórioEfeito
order_idintsimPedido. Sem ele, 400 missing_order_id.
invoice_keystringnãoChave da NF-e. Fica só com letras e dígitos e precisa ter 44 caracteres (senão 400 invalid_invoice_key).
invoice_numberstringnãoNúmero da NF-e; se enviado, não pode ser vazio (400 invalid_invoice_number).
withDceboolnãoEscolha explícita: true pede a DC-e, false não pede.
shipping_item_idintnãoPré-posta só aquela linha de frete (volume).
vendor_idintnãoMarketplace: pré-posta a parte do vendedor.
dangerousProductboolnãoServiço adicional de artigo perigoso; sem o campo, vem dos produtos.
receiptNotice / receiptNoticeElectronicboolnãoAviso de recebimento (físico ou digital); sem o campo, vem do método.
ownHandsboolnãoMão própria. Sem o campo, vai sem mão própria, mesmo com a opção ligada no método (ao contrário de receiptNotice e receiptNoticeElectronic).
  • Com invoice_key e invoice_number (sem withDce), a pré-postagem vai com a NF-e e sem DC-e.
  • Com withDce, a escolha vale como veio.
  • Sem nenhum documento, o plugin procura a NF-e do pedido (filtro infixs_correios_automatico_order_invoice e metas): NF-e se houver, senão DC-e.
  • A nota informada fica gravada nos metas do pedido, e o código do objeto entra como código de rastreio.
  • Ordem das conferências: order_id, documento fiscal, contrato, pedido (método, endereço), remetente e, por fim, os Correios. Todo erro de pré-postagem também fica registrado no pedido (prepost_errors) e na central de notificações.
ErroQuando
missing_order_id, invalid_invoice_key, invalid_invoice_numberParâmetros da requisição (400).
auth_not_active, prepaid_not_connected, prepaid_reconnectA loja ainda não pode pré-postar: Contrato Próprio desligado ou conta do Contrato pré-pago a conectar (400/401).
invalid_order, invalid_shipping_method, invalid_recipient_neighborhoodPedido inexistente, sem método do Correios Automático ou sem bairro com CEP terminado em 000 (400).
invalid_sender_data, invalid_store_neighborhood, missing_store_documentDados do remetente da loja a completar (400).
http_errorRecusa dos Correios, com o status deles.
prepaid_insufficient_balance, prepaid_prepost_in_progress, prepaid_account_blocked, prepaid_unreachableContrato pré-pago (402, 409, 403, 502).

Logística reversa

RotaO que fazPermissão
GET /preposts/reverse/documentsrc/Routes/RestRoutes.php:448Mostra o documento fiscal que a devolução vai levar (source, emite_dce, invoice_number, invoice_key) sem criar nada. Query: order_id, shipping_item_id, vendor_id.manage_woocommerce
POST /preposts/reversesrc/Routes/RestRoutes.php:440Cria a pré-postagem reversa (Contrato Próprio): order_id, shipping_item_id, vendor_id, invoice_key, invoice_number, withDce, service, weight, length, width, height. O código da reversa também entra como rastreio do pedido.manage_woocommerce
POST /customer-returnssrc/Routes/RestRoutes.php:192O cliente pede a devolução: order_id e order_key (a chave do pedido). Com a devolução automática ligada, cria uma reversa por remessa.pública protegida pela order_key
GET /settings/returnsrc/Routes/RestRoutes.php:182Configurações de devolução.manage_woocommerce
POST /settings/returnsrc/Routes/RestRoutes.php:173Salva as configurações de devolução (corpo JSON com o objeto completo).manage_woocommerce

Etiquetas e impressão

RotaO que fazPermissão
GET /labelssrc/Routes/RestRoutes.php:331Dados de etiqueta, uma por remessa (volume ou vendedor), com preposts[], itens com NCM, invoice, danfe e danfe_status. Use order_id como lista: ?order_id[]=1234&order_id[]=1235.manage_woocommerce
GET /print/datasrc/Routes/RestRoutes.php:681Remetente da sessão de impressão.manage_woocommerce
GET /settings/label/profilessrc/Routes/RestRoutes.php:123Perfil de impressão (?id=default), com danfe.enabled e danfe.mode (separate ou embedded).manage_woocommerce
POST /settings/label/profilessrc/Routes/RestRoutes.php:115Salva um perfil de impressão (id obrigatório; corpo JSON).manage_woocommerce
POST /settings/label/rangessrc/Routes/RestRoutes.php:131Cadastra uma faixa de códigos de etiqueta: service_code, range_start, range_end (corpo JSON).manage_woocommerce
GET /settings/label/rangessrc/Routes/RestRoutes.php:139Lista as faixas (service_code opcional).manage_woocommerce
GET /settings/label/ranges/{id}src/Routes/RestRoutes.php:155Códigos de uma faixa, paginados (page, per_page).manage_woocommerce
DELETE /settings/label/ranges/{id}src/Routes/RestRoutes.php:147Apaga uma faixa.manage_woocommerce
GET /settings/label/ranges-availablesrc/Routes/RestRoutes.php:163Quantos códigos livres restam para um service_code.manage_woocommerce
POST /label/pdf PROPRO · src/Routes/RestRoutes.php:63PDF de etiquetas, declarações ou só das DANFEs (view: label, declaration, danfe) a partir do estado da tela de impressão do painel.manage_woocommerce (filtrável)

Rastreio

RotaO que fazPermissão
POST /trackingssrc/Routes/RestRoutes.php:206Adiciona um código de rastreio: order_id, code, sendmail (true envia o e-mail), shipping_item_id, vendor_id.manage_woocommerce
GET /trackingssrc/Routes/RestRoutes.php:263Responde sempre { "status": "success", "data": [] }, sem códigos. Para os códigos de um pedido, use GET /orders/{id}.manage_woocommerce
GET /trackings/{id}src/Routes/RestRoutes.php:231Histórico do objeto (force_sync=1 relê agora). {id} é o id da linha de rastreio em tracking_codes[].manage_woocommerce
DELETE /trackings/{id}src/Routes/RestRoutes.php:215Remove o código do pedido (e devolve à faixa, se veio de uma).manage_woocommerce
POST /trackings/{id}/suspendsrc/Routes/RestRoutes.php:247Pede a suspensão da entrega aos Correios (Contrato Próprio).manage_woocommerce
POST /trackings/notification/{order_id}src/Routes/RestRoutes.php:271Reenvia ao cliente o e-mail com os códigos; change_status muda o status do pedido.manage_woocommerce

Para todos os códigos de um pedido, use GET /orders/{id} (tracking_codes[]) ou a REST do WooCommerce (tracking_codes).

Outros recursos

Notificações, Contrato pré-pago, frete e configurações. As rotas de credenciais do contrato e de aceite dos termos são exclusivas do painel e ficam fora desta referência.

RotaO que fazPermissão
GET /notificationssrc/Routes/RestRoutes.php:691Central de notificações do painel (page, per_page), com unread_count.manage_woocommerce
POST /notifications/readsrc/Routes/RestRoutes.php:709Marca todas como lidas.manage_woocommerce
POST /notifications/{id}/readsrc/Routes/RestRoutes.php:717Marca uma como lida.manage_woocommerce
DELETE /notifications/{id}src/Routes/RestRoutes.php:725Apaga uma notificação.manage_woocommerce
DELETE /notificationssrc/Routes/RestRoutes.php:733Apaga todas.manage_woocommerce
POST /prepaid/connectsrc/Prepaid/Rest/PrepaidController.php:67Contrato pré-pago: inicia a conexão e devolve authorize_url para o lojista abrir.manage_woocommerce
GET /prepaid/statussrc/Prepaid/Rest/PrepaidController.php:73Contrato pré-pago: mode, connected, status, account (name, status; null com a conta desconectada), balance_cents, connected_at e urls (app, signup, topup, statement). refresh=1 relê a conta.manage_woocommerce
POST /prepaid/disconnectsrc/Prepaid/Rest/PrepaidController.php:79Contrato pré-pago: desconecta a conta.manage_woocommerce
GET /prepaid/callbacksrc/Prepaid/Rest/PrepaidController.php:85Retorno da autorização do Contrato pré-pago; responde uma página HTML.pública state de uso único
GET /shipping/methodssrc/Routes/RestRoutes.php:289Métodos de entrega de todas as zonas (is_enabled, method_id).manage_woocommerce
POST /shipping/methodssrc/Routes/RestRoutes.php:297Cria um método do Correios Automático em zonas de entrega.manage_woocommerce
POST /shipping/methods/batchsrc/Routes/RestRoutes.php:305Cria vários métodos de uma vez.manage_woocommerce
POST /shipping/methods/importsrc/Routes/RestRoutes.php:313Importa métodos de outros plugins de Correios (corpo JSON).manage_woocommerce
POST /shipping/methods/availablesrc/Routes/RestRoutes.php:321Métodos habilitados para um endereço (corpo JSON).manage_woocommerce
GET /settings/generalsrc/Routes/RestRoutes.php:71Configurações gerais.manage_woocommerce
POST /settings/generalsrc/Routes/RestRoutes.php:63Salva as configurações enviadas (corpo JSON, atualização parcial).manage_woocommerce
POST /settings/general/reset-cronsrc/Routes/RestRoutes.php:87Reinicia as tarefas agendadas de rastreio e status.manage_woocommerce
GET /settings/sendersrc/Routes/RestRoutes.php:105Dados do remetente da loja.manage_woocommerce
POST /settings/sendersrc/Routes/RestRoutes.php:97Salva o remetente (corpo JSON, com validação de CPF/CNPJ, telefone e CEP).manage_woocommerce

No Contrato pré-pago não há logística reversa, Packet internacional nem suspensão de entrega: essas rotas respondem 422 (prepaid_reverse_not_supported, prepaid_packet_not_supported, prepaid_not_supported).

Packet internacional

Unitização e fatura CN-38 do Packet internacional (Contrato Próprio). Apesar do nome, invoice-units não tem relação com NF-e.

RotaO que fazPermissão
GET /unitssrc/Routes/RestRoutes.php:458Unidades (malas) do Packet internacional.manage_woocommerce
GET /units/settingssrc/Routes/RestRoutes.php:474Número de despacho atual.manage_woocommerce
PATCH /units/settingssrc/Routes/RestRoutes.php:466Atualiza o número de despacho.manage_woocommerce
POST /orders/unitssrc/Routes/RestRoutes.php:577Une pedidos numa unidade (orders, ceint_id; corpo JSON).manage_woocommerce
POST · PUT · PATCH /units/{id}src/Routes/RestRoutes.php:490Atualiza uma unidade.manage_woocommerce
GET /units/{id}/trackingssrc/Routes/RestRoutes.php:498Objetos de uma unidade.manage_woocommerce
POST /units/{id}/registersrc/Routes/RestRoutes.php:506Registra a unidade nos Correios.manage_woocommerce
POST /units/{id}/cancelsrc/Routes/RestRoutes.php:514Cancela a unidade.manage_woocommerce
DELETE /units/{id}/trackings/{tracking_id}src/Routes/RestRoutes.php:522Tira um objeto da unidade.manage_woocommerce
POST /units/invoice-unitssrc/Routes/RestRoutes.php:482Agrupa unidades numa fatura CN-38 (unit_ids).manage_woocommerce
GET /invoice-unitssrc/Routes/RestRoutes.php:533Faturas CN-38 (ids).manage_woocommerce
POST /invoice-units/{id}/registersrc/Routes/RestRoutes.php:541Registra a fatura CN-38 nos Correios.manage_woocommerce

Rotas do PRO

PRO As rotas do PRO entram no namespace do grátis, infixs-correios-automatico/v1, pelo gancho infixs_correios_automatico_register_routes. Para integrações, as mais úteis são as do pedido no Correios LOG+; as demais atendem o painel, a integração nativa com o Bling e o agente de impressão da Infixs. As rotas do Bling, do Correios LOG+ e das embalagens existem quando o recurso é suportado pela combinação de versões. O namespace próprio do PRO, infixs-correios-automatico-pro/v1, guarda só a consulta interna da licença e fica fora desta referência.

RotaO que fazPermissão
GET /logplus/order/{order_id} PROPRO · src/Routes/RestRoutes.php:318Estado do pedido no Correios LOG+: id (o xPed), status, xml_status (waiting, sent, failed), xml_attempts, xml_error, xml_retrying (o XML segue indo sozinho depois de uma recusa do armazém, desde PRO 1.6.4), tracking.manage_woocommerce
POST /logplus/order/{order_id}/xml PROPRO · src/Routes/RestRoutes.php:321Entrega o XML da NF-e agora: { "xml": "…" }. Confere o xPed e grava como XML enviado pelo lojista.manage_woocommerce
POST /logplus/order/{order_id}/send PROPRO · src/Routes/RestRoutes.php:319Envia o pedido ao armazém.manage_woocommerce
POST /logplus/order/{order_id}/sync PROPRO · src/Routes/RestRoutes.php:320Envia antes o XML que o pedido espera entregar (desde PRO 1.6.4) e relê o pedido no armazém.manage_woocommerce
GET /logplus/orders PROPRO · src/Routes/RestRoutes.php:317Pedidos do armazém num período (from, to, até 10 dias).manage_woocommerce
GET /logplus/settings PROPRO · src/Routes/RestRoutes.php:312Configurações do Correios LOG+, contrato, armazéns e serviços.manage_woocommerce
POST /logplus/settings PROPRO · src/Routes/RestRoutes.php:312Salva as configurações do Correios LOG+.manage_woocommerce
POST /logplus/test PROPRO · src/Routes/RestRoutes.php:314Testa a conexão com o armazém.manage_woocommerce
GET /logplus/stock PROPRO · src/Routes/RestRoutes.php:315Estoque do armazém comparado à loja.manage_woocommerce
POST /logplus/stock/sync PROPRO · src/Routes/RestRoutes.php:316Copia o estoque do armazém para a loja.manage_woocommerce
GET /settings/packaging PROPRO · src/Routes/RestRoutes.php:158Caixas cadastradas da loja e serviços de cada uma.manage_woocommerce
POST /settings/packaging PROPRO · src/Routes/RestRoutes.php:158Substitui as caixas da loja.manage_woocommerce
GET /settings/bling PROPRO · src/Routes/RestRoutes.php:228Configurações da integração nativa com o Bling.manage_woocommerce
POST /settings/bling PROPRO · src/Routes/RestRoutes.php:228Salva as configurações do Bling.manage_woocommerce
POST /bling/connect PROPRO · src/Routes/RestRoutes.php:240Inicia a conexão com o Bling.manage_woocommerce
GET /bling/status PROPRO · src/Routes/RestRoutes.php:246Estado da conexão com o Bling.manage_woocommerce
POST /bling/disconnect PROPRO · src/Routes/RestRoutes.php:252Desconecta o Bling.manage_woocommerce
GET /bling/channels PROPRO · src/Routes/RestRoutes.php:258Canais de venda do Bling.manage_woocommerce
GET /bling/oauth/callback PROPRO · src/Routes/RestRoutes.php:264Retorno da autorização do Bling (HTML).pública state de uso único
POST /bling/webhook PROPRO · src/Routes/RestRoutes.php:270Webhook do Bling.pública assinatura do Bling
POST /print-agent/pair-code PROPRO · src/Routes/RestRoutes.php:120Gera o código de pareamento do agente de impressão.manage_woocommerce
GET /print-agent/agents PROPRO · src/Routes/RestRoutes.php:126Agentes de impressão pareados.manage_woocommerce
DELETE /print-agent/agents/{id} PROPRO · src/Routes/RestRoutes.php:132Revoga um agente.manage_woocommerce
POST /print-agent/test PROPRO · src/Routes/RestRoutes.php:138Impressão de teste.manage_woocommerce
POST /print-agent/pair PROPRO · src/Routes/RestRoutes.php:90O agente troca o código de pareamento por um token.pública código de pareamento
GET /print-agent/jobs PROPRO · src/Routes/RestRoutes.php:96O agente busca trabalhos de impressão.token do agente (X-Infixs-Agent-Token)
POST /print-agent/jobs/{id}/claim PROPRO · src/Routes/RestRoutes.php:102O agente reserva um trabalho.token do agente
POST /print-agent/jobs/{id}/status PROPRO · src/Routes/RestRoutes.php:108O agente informa o resultado.token do agente
POST /print-agent/printers PROPRO · src/Routes/RestRoutes.php:114O agente informa as impressoras.token do agente

Erros do Correios LOG+: logplus_order_not_found 404, logplus_not_created 409 (XML antes de o pedido existir no armazém), logplus_license_inactive 403, logplus_not_configured 409, logplus_invalid_xml 422 (vazio, maior que 1 MB, ilegível ou sem xPed, com reason = xped), logplus_order_closed 409, logplus_busy 409, logplus_invalid_order 422 (no envio, quando o pedido não pode ir ao armazém como está; o motivo vem na mensagem), logplus_invalid_period 400 e logplus_period_too_long 422 (em GET /logplus/orders: datas AAAA-MM-DD, a final igual ou depois da inicial, período de até 10 dias) e logplus_http_error 502 (com correios_status).

REST do WooCommerce

Rota do WooCommerceO que o Correios Automático acrescentaPlano
GET /wp-json/wc/v3/orders/{id}src/Core/Admin/WooCommerce/Rest.php:54Os campos tracking_codes (id, code, carrier, description, category, date_created_gmt) e correios_tracking_code (códigos separados por vírgula).Grátis
PUT /wp-json/wc/v3/orders/{id}PRO · src/Core/Admin/Integration/Rest.php:162Com os dois metas da NF-e em meta_data, pré-posta na hora cada volume ainda não pré-postado, com a NF-e (emiteDCe N) e o código de rastreio.PRO
PUT /wp-json/wc/v3/orders/{id}PRO · src/Core/Admin/Integration/Rest.php:143O campo correios_tracking_code (ou o meta _correios_tracking_code em meta_data) grava um código de rastreio.PRO
POST /wp-json/wc/v3/ordersPRO · src/Core/Admin/Integration/Rest.php:100Prepara o pedido criado por outro sistema para os Correios: vincula a linha de frete a um método do Correios Automático e divide em volumes.PRO
POST /wp-json/wc/v3/orders/{id}/notesPRO · src/Core/Admin/Integration/Rest.php:505Numa nota nova do pedido, o primeiro código no formato AA123456789BR (maiúsculas ou minúsculas, espaços ignorados) vira código de rastreio, conforme a opção “Quando enviar o código de rastreio via API” (Configurações → Integrações): update_code (padrão) grava o código; update_code_and_status grava e também muda o pedido para Em transporte (in-transit), mesmo numa nota sem código; none não faz nada.PRO

Na pré-postagem pelos metas da REST do WooCommerce

  • Ela roda na atualização do pedido (não na criação), com os dois metas na mesma requisição.
  • A chave vai como enviada: mande 44 dígitos, sem espaços.
  • O PRO confere se a loja tem contrato para pré-postar e se o volume já foi pré-postado. As demais escolhas (a pré-postagem automática do método, o pagamento, o Correios LOG+) ficam com o ERP.
  • Falhas ficam no log de depuração do Correios Automático.

Exemplos completos

Criar a pré-postagem com a NF-e

POST /wp-json/infixs-correios-automatico/v1/preposts
Content-Type: application/json

{
  "order_id": 1234,
  "shipping_item_id": 77,
  "invoice_number": "1234",
  "invoice_key": "35261112345678000195550010000012341123456781"
}

Resposta (o modelo de pré-postagem, o mesmo das outras rotas desta seção):

{
  "id": 87,
  "order_id": 1234,
  "vendor_id": null,
  "shipping_item_id": 77,
  "expire_at": "2026-12-04 00:00:00",
  "created_at": "2026-11-04 10:15:02",
  "object_code": "AB123456789BR",
  "service": "SEDEX",
  "status": "Pré-postado",
  "status_code": 2,
  "payment_type": "A faturar",
  "dce": false,
  "cancel_reason": null,
  "dce_icms_blocked": false
}

status_code: 1 Preatendido, 2 Pré-postado, 3 Postado, 4 Expirado, 5 Cancelado, 6 Estornado, 7 Pendente. dce_icms_blocked indica que a DC-e foi recusada porque a loja é contribuinte de ICMS (rejeição 812), sinal de que o envio precisa da NF-e. Para forçar a DC-e mesmo com NF-e no pedido: { "order_id": 1234, "withDce": true }.

Consultar o pedido, a nota e as pré-postagens

GET /wp-json/infixs-correios-automatico/v1/orders/1234

{
  "status": "success",
  "order": {
    "id": 1234,
    "status": "processing",
    "status_label": "Processando",
    "total_amount": 17580,
    "customer": {
      "id": 12,
      "name": "Cliente Exemplo",
      "email": "[email protected]",
      "phone_number": "11900000000",
      "document": "000.000.000-00",
      "address": { "postal_code": "01001-000", "street": "Rua Exemplo", "number": "100", "complement": "", "neighborhood": "Centro", "city": "São Paulo", "state": "SP", "country": "BR" }
    },
    "shipping_items": [
      { "item_id": 77, "instance_id": 5, "method_title": "SEDEX", "cost": 1590, "volume_index": 0, "volume_total": 0, "vendor_id": null, "is_correios": true, "carrier": "correios", "shipping_product_code": "03220" }
    ],
    "invoice": { "invoice_number": "1234", "invoice_key": "35261112345678000195550010000012341123456781", "model": "55", "source": "meu-plugin-nfe", "source_label": "Meu Plugin de NF-e" },
    "waiting_invoice": false,
    "invoice_status": { "state": "authorized", "tone": "success", "label": "NF-e nº 1234", "detail": "", "source": "meu-plugin-nfe", "source_label": "Meu Plugin de NF-e", "danfe": "ready", "actions": [] },
    "meta_data": [
      { "key": "_infixs_correios_automatico_invoice_number", "value": "1234" },
      { "key": "_infixs_correios_automatico_invoice_key", "value": "35261112345678000195550010000012341123456781" }
    ],
    "preposts": [
      { "id": 87, "order_id": 1234, "vendor_id": null, "shipping_item_id": 77, "object_code": "AB123456789BR", "service": "SEDEX", "status": "Pré-postado", "status_code": 2, "payment_type": "A faturar", "dce": false, "cancel_reason": null, "dce_icms_blocked": false, "expire_at": "2026-12-04 00:00:00", "created_at": "2026-11-04 10:15:02" }
    ],
    "prepost_errors": [],
    "tracking_codes": [
      { "id": 301, "code": "AB123456789BR", "vendor_id": null, "shipping_item_id": 77, "carrier": "correios" }
    ]
  }
}

Pedidos aguardando a NF-e

PRO Recortado; cada item de orders tem o formato completo de GET /orders/{id}.

GET /wp-json/infixs-correios-automatico/v1/orders?pending=invoice&status=&per_page=50

{
  "status": "success",
  "page": 1,
  "per_page": 50,
  "total_results": 2,
  "total": 2,
  "total_pages": 1,
  "orders": [ { "id": 1240, "waiting_invoice": true, "invoice_status": { "state": "pending", "label": "Pré-postagem automática aguardando a NF-e" } } ]
}

Reler a pré-postagem nos Correios

POST /wp-json/infixs-correios-automatico/v1/preposts/87/sync

{ "id": 87, "object_code": "AB123456789BR", "status": "Postado", "status_code": 3, "dce": false, "cancel_reason": null, "dce_icms_blocked": false }

Cancelar a pré-postagem

PRO Com o PRO ativo:

POST /wp-json/infixs-correios-automatico/v1/preposts/87/cancel

{ "success": true }

Só com o grátis, a rota responde 400:

{
  "code": "cancel_prepost_pro_feature",
  "message": "...",
  "data": { "status": 400, "buy_pro_url": "https://..." }
}

Dados da etiqueta com a DANFE

Recortado; cada etiqueta traz também os demais dados do destinatário, os totais e o contrato.

GET /wp-json/infixs-correios-automatico/v1/labels?order_id[]=1234

{
  "status": "success",
  "labels": [
    {
      "order_id": 1234,
      "shipping_item_id": 77,
      "name": "Cliente Exemplo",
      "document": "000.000.000-00",
      "address_postalcode": "01001-000",
      "address_city": "São Paulo",
      "address_state": "SP",
      "carrier": "correios",
      "shipping_product_code": "03220",
      "tracking_code": "AB123456789BR",
      "total_amount": 17580,
      "volume_index": 1,
      "volume_total": 1,
      "items": [ { "name": "Camiseta", "sku": "CAM-01", "quantity": 1, "ncm": "61091000", "amount": 15990 } ],
      "preposts": [ { "id": 87, "object_code": "AB123456789BR", "invoice_number": "1234", "invoice_key": "35261112345678000195550010000012341123456781", "dce": false, "contract_source": "own" } ],
      "invoice": { "invoice_number": "1234", "invoice_key": "35261112345678000195550010000012341123456781", "model": "55", "source": "meu-plugin-nfe", "source_label": "Meu Plugin de NF-e" },
      "danfe_status": "ready",
      "danfe": { "schema": 1, "source": "meu-plugin-nfe", "environment": "production", "key": "35261112345678000195550010000012341123456781", "number": "1234", "series": "1", "operation": "out", "total": 15990 },
      "sender": null
    }
  ]
}

Documento da devolução e reversa

GET /wp-json/infixs-correios-automatico/v1/preposts/reverse/document?order_id=1234&shipping_item_id=77

{ "source": "outbound_invoice", "emite_dce": false, "invoice_number": "1234", "invoice_key": "35261112345678000195550010000012341123456781" }
POST /wp-json/infixs-correios-automatico/v1/preposts/reverse
Content-Type: application/json

{ "order_id": 1234, "shipping_item_id": 77 }

NF-e pela REST do WooCommerce

PRO Com as chaves da REST do WooCommerce ou uma senha de aplicação de um usuário que edita pedidos:

PUT /wp-json/wc/v3/orders/1234
Content-Type: application/json

{
  "meta_data": [
    { "key": "_infixs_correios_automatico_invoice_number", "value": "1234" },
    { "key": "_infixs_correios_automatico_invoice_key", "value": "35261112345678000195550010000012341123456781" }
  ]
}

XML da NF-e para o Correios LOG+

PRO Requisição e resposta (recortada):

POST /wp-json/infixs-correios-automatico/v1/logplus/order/1234/xml
Content-Type: application/json

{ "xml": "<?xml version=\"1.0\" encoding=\"UTF-8\"?><nfeProc ...>...<compra><xPed>987654</xPed></compra>...</nfeProc>" }
{
  "order_id": 1234,
  "enabled": true,
  "logplus_order": true,
  "id": "987654",
  "number": "1234",
  "service": "39888",
  "service_label": "SEDEX LOG+",
  "status": "created",
  "xml_status": "sent",
  "xml_attempts": 1,
  "has_xml": true,
  "xml_error": null,
  "xml_retrying": false,
  "error": null
}