API da Omie
Tudo o que a tela do Omie faz, a sua integração também pode fazer: cadastros, vendas, notas fiscais, finanças, serviços, estoque e CRM.
Escolha seu caminho
Pergunte e opere o Omie conversando.
login do OmieLoja, BI, planilha ou outro ERP lendo e gravando no Omie.
token da integraçãoO Omie avisa o seu servidor quando algo muda.
reentrega por até 5 diasTodas as operações num arquivo OpenAPI.
downloadA jornada de uma integração
- 1Autenticar
Crie uma integração em Meus aplicativos e guarde o token.
Authorization: Bearer <token da integração>
- 2Carregar uma vez
Traga o que já existe pelas listagens, página a página.
POST /api/v1/geral/clientes/ {"call": "ListarClientes", "param": [{"pagina": 1}]} - 3Receber as mudanças
O webhook avisa cada mudança. Responda
2xxem até 7 s.POST https://seu-servidor/omie → 200 OK, e processe depois
- 4Chamar quando precisar
Use a API para gravar e para buscar o detalhe que o evento apontou.
POST /api/v1/geral/clientes/ {"call": "ConsultarCliente", ...}
425). Use o webhook.Antes de começar
Cada empresa no Omie é um aplicativo, e cada integração vale para um aplicativo.
Autenticação
refresh-tokenAuthorization: Bearer- Crie uma integração em Meus aplicativos: nome e grupo de acesso. Ela ganha usuário próprio, e o token e o
refresh_tokenaparecem uma vez. - Chame com
Authorization: Bearer <token>. - Renove antes de 24 h:
POST https://app.omie.com.br/api/portal/apps/{app_hash}/refresh-token/com{"token": …, "refresh_token": …}, semAuthorization. Aceita o token já vencido. Volta um par novo: use o novo, descarte o antigo.
Os endereços do portal terminam com barra: sem ela, o POST perde o corpo no redirecionamento.
Token e refresh_token ficam só no servidor da integração: nada de log, URL ou navegador. Revogar a integração corta a renovação na hora (403).
A primeira chamada
POSTcom JSON no endereço do serviço.call: a operação.param: lista com um objeto de parâmetros.- Cabeçalhos:
Authorization: BearereContent-Type: application/json.
curl -s https://app.omie.com.br/api/v1/geral/clientes/ \
-H "Authorization: Bearer $TOKEN_DO_APLICATIVO" \
-H 'Content-Type: application/json' \
-d '{"call": "ListarClientes", "param": [{"pagina": 1, "registros_por_pagina": 50, "apenas_importado_api": "N"}]}'import os
import requests
corpo = {'call': 'ListarClientes',
'param': [{'pagina': 1, 'registros_por_pagina': 50, 'apenas_importado_api': 'N'}]}
resp = requests.post(
"https://app.omie.com.br/api/v1/geral/clientes/",
headers={"Authorization": f"Bearer {os.environ['TOKEN_DO_APLICATIVO']}"},
json=corpo,
timeout=60,
)
print(resp.json())const resp = await fetch("https://app.omie.com.br/api/v1/geral/clientes/", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.TOKEN_DO_APLICATIVO}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"call": "ListarClientes",
"param": [
{
"pagina": 1,
"registros_por_pagina": 50,
"apenas_importado_api": "N"
}
]
}),
});
console.log(await resp.json());<?php
$ch = curl_init("https://app.omie.com.br/api/v1/geral/clientes/");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer " . getenv("TOKEN_DO_APLICATIVO"),
"Content-Type: application/json",
],
CURLOPT_POSTFIELDS => <<<'JSON'
{
"call": "ListarClientes",
"param": [
{
"pagina": 1,
"registros_por_pagina": 50,
"apenas_importado_api": "N"
}
]
}
JSON,
]);
echo curl_exec($ch);require "net/http"
uri = URI("https://app.omie.com.br/api/v1/geral/clientes/")
corpo = <<~'JSON'
{
"call": "ListarClientes",
"param": [
{
"pagina": 1,
"registros_por_pagina": 50,
"apenas_importado_api": "N"
}
]
}
JSON
resp = Net::HTTP.post(uri, corpo,
"Authorization" => "Bearer #{ENV.fetch('TOKEN_DO_APLICATIVO')}",
"Content-Type" => "application/json")
puts resp.bodyimport java.net.URI;
import java.net.http.*;
var corpo = """
{
"call": "ListarClientes",
"param": [
{
"pagina": 1,
"registros_por_pagina": 50,
"apenas_importado_api": "N"
}
]
}
""";
var pedido = HttpRequest.newBuilder()
.uri(URI.create("https://app.omie.com.br/api/v1/geral/clientes/"))
.header("Authorization", "Bearer " + System.getenv("TOKEN_DO_APLICATIVO"))
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(corpo))
.build();
var resp = HttpClient.newHttpClient().send(pedido, HttpResponse.BodyHandlers.ofString());
System.out.println(resp.body());// TokenDoAplicativo: parâmetro do Power BI (Página Inicial > Gerenciar parâmetros)
let
Resposta = Web.Contents(
"https://app.omie.com.br/api/v1/geral/clientes/",
[
Headers = [Authorization = "Bearer " & TokenDoAplicativo, #"Content-Type" = "application/json"],
Content = Text.ToBinary("{""call"": ""ListarClientes"", ""param"": [{""pagina"": 1, ""registros_por_pagina"": 50, ""apenas_importado_api"": ""N""}]}")
]
),
Dados = Json.Document(Resposta)
in
DadosResposta em JSON. Também atende SOAP 1.1 no mesmo endereço (WSDL em ?WSDL).
Erros e limites
| Código | O que quer dizer |
|---|---|
| 403 | Sem permissão para a operação, ou aplicativo sem o pacote de APIs. |
| 406 | Acesso do aplicativo bloqueado (IP, horário ou MFA). |
| 425 | A mesma chamada repetida demais em pouco tempo. |
| 429 | Limite de chamadas simultâneas atingido. |
| 500 | Erro de negócio ou de validação de parâmetro. A mensagem diz qual. |
| 503 | Omie ocupado no momento. Tente de novo em instantes, esperando mais a cada tentativa. |
Os limites de chamadas estão em Limites de consumo da API do Omie.
Webhooks
O Omie faz um POST no seu servidor a cada evento (pedido incluído, produto alterado). Carga inicial pelas listagens, mudanças pelo webhook, detalhe pela API.