Integre seu sistema com a mais completa plataforma fiscal do Brasil.
Emita NFe, gerencie produtos e automatize processos fiscais via API REST.
Emita notas fiscais eletrônicas diretamente do seu sistema com validação automática e envio para SEFAZ.
Sincronize produtos, controle estoque e gerencie variações com total integração fiscal.
Gerencie clientes, fornecedores e vendedores com dados fiscais completos e atualizados.
A API Dr. DIM Sistema permite que você integre funcionalidades fiscais e de gestão diretamente ao seu sistema, automatizando processos e garantindo conformidade fiscal.
A API Dr. DIM usa um sistema de autenticação baseado em duas chaves para máxima segurança:
Identificador público da sua aplicação. Pode ser exposta no frontend.
Header:X-Public-Key
Chave secreta que autentica suas requisições. Nunca exponha no frontend!
Header:X-Secret-Key
curl -X GET "https://saas.drdim.com.br/api/v1/produtos" \
-H "X-Public-Key: pk_sua_chave_publica_aqui" \
-H "X-Secret-Key: sk_sua_chave_secreta_aqui" \
-H "Content-Type: application/json"
/api/v1/produtos
Listar Produtos
Lista todos os produtos cadastrados com suporte a filtros e paginação.
Parâmetros: page, per_page, search, categoria_id/api/v1/produtos
Criar Produto
Cria um novo produto com informações fiscais completas.
Requer: nome, preco, categoria_id, ncm, origem/api/v1/nfe
Emitir NFe
Emite uma Nota Fiscal Eletrônica com validação automática e envio para SEFAZ.
Requer: destinatario, itens, natureza_operacao/api/v1/clientes
Listar Clientes
Lista clientes cadastrados com dados fiscais e comerciais.
Parâmetros: page, search, tipo_pessoa, ativo<?php
// Configuração das chaves
$publicKey = 'pk_sua_chave_publica_aqui';
$secretKey = 'sk_sua_chave_secreta_aqui';
$baseUrl = 'https://saas.drdim.com.br/api/v1';
// Função para fazer requisições
function apiRequest($endpoint, $method = 'GET', $data = null) {
global $publicKey, $secretKey, $baseUrl;
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $baseUrl . $endpoint,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => $method,
CURLOPT_HTTPHEADER => [
'X-Public-Key: ' . $publicKey,
'X-Secret-Key: ' . $secretKey,
'Content-Type: application/json',
'Accept: application/json'
]
]);
if ($data && in_array($method, ['POST', 'PUT', 'PATCH'])) {
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
}
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
return [
'data' => json_decode($response, true),
'status' => $httpCode
];
}
// Exemplo: Listar produtos
$produtos = apiRequest('/produtos');
echo "Status: " . $produtos['status'] . "\n";
print_r($produtos['data']);
// Exemplo: Criar produto
$novoProduto = [
'nome' => 'Produto de Exemplo',
'descricao' => 'Descrição do produto',
'preco' => 29.99,
'categoria_id' => 1,
'ncm' => '12345678',
'origem' => 0,
'ativo' => true
];
$resultado = apiRequest('/produtos', 'POST', $novoProduto);
echo "Produto criado - Status: " . $resultado['status'] . "\n";
print_r($resultado['data']);
?>
import requests
import json
class DrDimAPI:
def __init__(self, public_key, secret_key):
self.public_key = public_key
self.secret_key = secret_key
self.base_url = 'https://saas.drdim.com.br/api/v1'
self.headers = {
'X-Public-Key': self.public_key,
'X-Secret-Key': self.secret_key,
'Content-Type': 'application/json',
'Accept': 'application/json'
}
def request(self, endpoint, method='GET', data=None):
url = f"{self.base_url}{endpoint}"
try:
if method.upper() == 'GET':
response = requests.get(url, headers=self.headers)
elif method.upper() == 'POST':
response = requests.post(url, headers=self.headers, json=data)
elif method.upper() == 'PUT':
response = requests.put(url, headers=self.headers, json=data)
elif method.upper() == 'DELETE':
response = requests.delete(url, headers=self.headers)
return {
'status_code': response.status_code,
'data': response.json() if response.content else None,
'success': response.status_code < 400
}
except requests.RequestException as e:
return {
'status_code': 0,
'data': {'error': str(e)},
'success': False
}
# Uso da classe
api = DrDimAPI(
public_key='pk_sua_chave_publica_aqui',
secret_key='sk_sua_chave_secreta_aqui'
)
# Listar produtos
produtos = api.request('/produtos')
print(f"Status: {produtos['status_code']}")
print(f"Produtos: {produtos['data']}")
# Criar produto
novo_produto = {
'nome': 'Produto Python',
'descricao': 'Criado via Python',
'preco': 49.99,
'categoria_id': 1,
'ncm': '87654321',
'origem': 0,
'ativo': True
}
resultado = api.request('/produtos', 'POST', novo_produto)
print(f"Produto criado - Status: {resultado['status_code']}")
print(f"Resposta: {resultado['data']}")
# Emitir NFe
nfe_data = {
'destinatario': {
'nome': 'Cliente Exemplo',
'documento': '12345678901',
'email': 'cliente@exemplo.com'
},
'itens': [
{
'produto_id': 1,
'quantidade': 2,
'valor_unitario': 25.00
}
],
'natureza_operacao': 'Venda de mercadoria'
}
nfe = api.request('/nfe', 'POST', nfe_data)
print(f"NFe - Status: {nfe['status_code']}")
print(f"NFe: {nfe['data']}")
class DrDimAPI {
constructor(publicKey, secretKey) {
this.publicKey = publicKey;
this.secretKey = secretKey;
this.baseUrl = 'https://saas.drdim.com.br/api/v1';
this.headers = {
'X-Public-Key': this.publicKey,
'X-Secret-Key': this.secretKey,
'Content-Type': 'application/json',
'Accept': 'application/json'
};
}
async request(endpoint, method = 'GET', data = null) {
const url = `${this.baseUrl}${endpoint}`;
const config = {
method: method.toUpperCase(),
headers: this.headers
};
if (data && ['POST', 'PUT', 'PATCH'].includes(method.toUpperCase())) {
config.body = JSON.stringify(data);
}
try {
const response = await fetch(url, config);
const responseData = await response.json();
return {
statusCode: response.status,
data: responseData,
success: response.ok
};
} catch (error) {
return {
statusCode: 0,
data: { error: error.message },
success: false
};
}
}
}
// Uso da classe
const api = new DrDimAPI(
'pk_sua_chave_publica_aqui',
'sk_sua_chave_secreta_aqui'
);
// Exemplo assíncrono
async function exemploUso() {
try {
// Listar produtos
const produtos = await api.request('/produtos');
console.log('Produtos:', produtos);
// Criar produto
const novoProduto = {
nome: 'Produto JavaScript',
descricao: 'Criado via JavaScript',
preco: 39.99,
categoria_id: 1,
ncm: '11223344',
origem: 0,
ativo: true
};
const resultado = await api.request('/produtos', 'POST', novoProduto);
console.log('Produto criado:', resultado);
// Buscar produto específico
if (resultado.success && resultado.data.id) {
const produto = await api.request(`/produtos/${resultado.data.id}`);
console.log('Produto encontrado:', produto);
}
} catch (error) {
console.error('Erro:', error);
}
}
// Executar exemplo
exemploUso();
// Exemplo usando Promises
api.request('/clientes')
.then(response => {
console.log('Status:', response.statusCode);
console.log('Clientes:', response.data);
})
.catch(error => {
console.error('Erro ao buscar clientes:', error);
});
# Definir variáveis
PUBLIC_KEY="pk_sua_chave_publica_aqui"
SECRET_KEY="sk_sua_chave_secreta_aqui"
BASE_URL="https://saas.drdim.com.br/api/v1"
# Headers comuns
HEADERS=(
-H "X-Public-Key: $PUBLIC_KEY"
-H "X-Secret-Key: $SECRET_KEY"
-H "Content-Type: application/json"
-H "Accept: application/json"
)
# 1. Listar produtos
echo "=== Listando produtos ==="
curl -X GET "$BASE_URL/produtos" "${HEADERS[@]}" | jq '.'
# 2. Buscar produto específico
echo -e "\n=== Buscando produto ID 1 ==="
curl -X GET "$BASE_URL/produtos/1" "${HEADERS[@]}" | jq '.'
# 3. Criar produto
echo -e "\n=== Criando produto ==="
curl -X POST "$BASE_URL/produtos" "${HEADERS[@]}" \
-d '{
"nome": "Produto cURL",
"descricao": "Produto criado via cURL",
"preco": 59.99,
"categoria_id": 1,
"ncm": "99887766",
"origem": 0,
"ativo": true
}' | jq '.'
# 4. Listar clientes
echo -e "\n=== Listando clientes ==="
curl -X GET "$BASE_URL/clientes?page=1&per_page=10" "${HEADERS[@]}" | jq '.'
# 5. Emitir NFe
echo -e "\n=== Emitindo NFe ==="
curl -X POST "$BASE_URL/nfe" "${HEADERS[@]}" \
-d '{
"destinatario": {
"nome": "Cliente Teste",
"documento": "12345678901",
"email": "teste@exemplo.com",
"endereco": {
"logradouro": "Rua Teste, 123",
"bairro": "Centro",
"cidade": "São Paulo",
"uf": "SP",
"cep": "01234567"
}
},
"itens": [
{
"produto_id": 1,
"quantidade": 2,
"valor_unitario": 25.50,
"descricao": "Produto de exemplo"
}
],
"natureza_operacao": "Venda de mercadoria",
"observacoes": "NFe emitida via API"
}' | jq '.'
# 6. Verificar status da NFe
echo -e "\n=== Status da NFe ==="
curl -X GET "$BASE_URL/nfe/1/status" "${HEADERS[@]}" | jq '.'
# 7. Download do XML da NFe
echo -e "\n=== Download XML NFe ==="
curl -X GET "$BASE_URL/nfe/1/xml" "${HEADERS[@]}" \
--output "nfe_1.xml" \
--silent --show-error
# 8. Download do PDF da NFe
echo -e "\n=== Download PDF NFe ==="
curl -X GET "$BASE_URL/nfe/1/pdf" "${HEADERS[@]}" \
--output "nfe_1.pdf" \
--silent --show-error
echo -e "\n=== Exemplos concluídos! ==="
| Código | Status | Descrição | Exemplo |
|---|---|---|---|
| 200 | OK | Requisição executada com sucesso | Lista de produtos retornada |
| 201 | Created | Recurso criado com sucesso | Produto criado, NFe emitida |
| 400 | Bad Request | Dados inválidos ou incompletos | Campo obrigatório ausente |
| 401 | Unauthorized | Chaves de API inválidas | Public/Secret key incorretas |
| 403 | Forbidden | Sem permissão para este recurso | Chave sem permissão de escrita |
| 404 | Not Found | Recurso não encontrado | Produto com ID inexistente |
| 429 | Too Many Requests | Limite de requisições excedido | Mais de 1000 req/hora |
| 500 | Internal Server Error | Erro interno do servidor | Falha no processamento |
X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
Nossa equipe está pronta para ajudar você a integrar com sucesso!