Primeiros Passos
📚 Índice
- Introdução
- Conceitos Fundamentais
- Estrutura Hierárquica
- Instalação e Configuração
- Criando seu Primeiro Cliente
- Criando seu Primeiro Documento
- Próximos Passos
Introdução
Bem-vindo ao Document Hub! Este guia vai ajudá-lo a começar a usar a API rapidamente.
O que é o Document Hub?
O Document Hub é uma API REST para armazenamento e gerenciamento de documentos JSON. Ele oferece:
- 🗂️ Organização hierárquica: Cliente → Ambiente → Contexto → Tipo → Documento
- 📝 Versionamento automático: Histórico completo de todas as alterações
- ✅ Validação de dados: Usando JSON Schema
- 🔔 Notificações em tempo real: Via webhooks
- 🔐 Controle de acesso granular: Sistema de tokens com permissões específicas
- 🔍 Busca avançada: Filtros poderosos para encontrar documentos
Para quem é o Document Hub?
- Desenvolvedores que precisam armazenar dados JSON de forma estruturada
- Equipes que necessitam de multi-tenancy (isolamento por cliente)
- Aplicações que requerem versionamento e histórico de alterações
- Sistemas que precisam de notificações em tempo real via webhooks
Conceitos Fundamentais
1. Cliente (Client)
Um cliente representa uma organização ou tenant no sistema. Cada cliente é completamente isolado dos demais.
- Identificador: UUID (ex:
9fc42fe9-a4fd-443c-8d49-b85ece2151b9) - Uso: Segregar dados entre diferentes empresas/projetos
2. Ambiente (Environment)
Ambientes permitem separar dados por contexto de execução.
Exemplos comuns:
production- Dados de produçãostaging- Dados de homologaçãodevelopment- Dados de desenvolvimentotesting- Dados de testes
3. Contexto (Context)
O contexto representa o domínio de negócio ou módulo da aplicação.
Exemplos:
orders- Pedidoscustomers- Clientesinvoices- Faturasproducts- Produtosusers- Usuários
4. Tipo (Type)
O tipo especifica a categoria do documento dentro de um contexto.
Exemplos no contexto orders:
invoice- Faturareceipt- Reciboquote- Orçamento
5. Chave (Key)
A chave é o identificador único do documento dentro de seu escopo (cliente/ambiente/contexto/tipo).
Exemplos:
INV-001,INV-002- Faturasuser-123,user-456- Usuáriosorder-2024-001- Pedidos
6. Documento (Document)
O documento é o objeto JSON que contém os dados reais.
Estrutura:
{
"id": "uuid-do-documento",
"client_id": "uuid-do-cliente",
"environment": "production",
"context": "orders",
"type": "invoice",
"key": "INV-001",
"data": {
"customer": "Empresa XYZ",
"amount": 1500.00,
"items": [...]
},
"version": 1,
"created_at": "2024-01-15 10:30:00",
"updated_at": "2024-01-15 10:30:00",
"expires_at": null
}Estrutura Hierárquica
A API organiza documentos em uma estrutura hierárquica para facilitar organização e busca:
┌─────────────────────────────────────────────────────────┐
│ Cliente: 9fc42fe9-a4fd-443c-8d49-b85ece2151b9 │
└─────────────────────────────────────────────────────────┘
│
┌───────────────────┼───────────────────┐
│ │ │
┌─────▼──────┐ ┌───────▼────────┐ ┌──────▼───────┐
│ production │ │ staging │ │ development │
└─────┬──────┘ └────────────────┘ └──────────────┘
│
├─── orders
│ ├─── invoice
│ │ ├─── INV-001
│ │ ├─── INV-002
│ │ └─── INV-003
│ └─── quote
│ ├─── QUO-001
│ └─── QUO-002
│
└─── customers
└─── client
├─── CUST-001
└─── CUST-002
Padrão de URL
Todos os endpoints de documentos seguem este padrão:
/api/v1/client/{client}/{environment}/context/{context}/type/{type}/{key?}
Exemplo completo:
https://document-hub-api-xp.wake.tech/api/v1/client/9fc42fe9-a4fd-443c-8d49-b85ece2151b9/production/context/orders/type/invoice/INV-001
Criando seu Primeiro Documento
Agora que você tem um cliente e um token, vamos criar seu primeiro documento!
1. Defina a Estrutura
Vamos criar uma fatura no contexto de pedidos:
- Cliente:
{CLIENT_ID}(o UUID que você recebeu) - Ambiente:
production - Contexto:
orders - Tipo:
invoice - Chave:
INV-001
2. Faça a Requisição
curl -X POST "https://document-hub-api-xp.wake.tech/api/v1/client/{CLIENT_ID}/production/context/orders/type/invoice/INV-001" \
-H "Authorization: Bearer {SEU_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"environment": "production",
"context": "orders",
"type": "invoice",
"key": "INV-001",
"data": {
"customer_name": "Empresa XYZ Ltda",
"customer_document": "12.345.678/0001-90",
"issue_date": "2024-01-15",
"due_date": "2024-02-15",
"amount": 1500.00,
"currency": "BRL",
"status": "pending",
"items": [
{
"description": "Serviço de Consultoria",
"quantity": 10,
"unit_price": 150.00,
"total": 1500.00
}
],
"notes": "Pagamento via transferência bancária"
}
}'3. Resposta Esperada (201 Created)
{
"id": "9fc43d2a-8e4f-4a3b-9d2e-1a2b3c4d5e6f",
"client_id": "9fc42fe9-a4fd-443c-8d49-b85ece2151b9",
"environment": "production",
"context": "orders",
"type": "invoice",
"key": "INV-001",
"data": {
"customer_name": "Empresa XYZ Ltda",
"customer_document": "12.345.678/0001-90",
"issue_date": "2024-01-15",
"due_date": "2024-02-15",
"amount": 1500.00,
"currency": "BRL",
"status": "pending",
"items": [
{
"description": "Serviço de Consultoria",
"quantity": 10,
"unit_price": 150.00,
"total": 1500.00
}
],
"notes": "Pagamento via transferência bancária"
},
"version": 1,
"created_at": "2024-01-15T10:30:00.000000Z",
"updated_at": "2024-01-15T10:30:00.000000Z",
"expires_at": null
}4. Recupere o Documento
Agora vamos buscar o documento que acabamos de criar:
curl -X GET "https://document-hub-api-xp.wake.tech/api/v1/client/{CLIENT_ID}/production/context/orders/type/invoice/INV-001" \
-H "Authorization: Bearer {SEU_TOKEN}"5. Atualize o Documento
Vamos atualizar o status da fatura para "pago":
curl -X PUT "https://document-hub-api-xp.wake.tech/api/v1/client/{CLIENT_ID}/production/context/orders/type/invoice/INV-001" \
-H "Authorization: Bearer {SEU_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"environment": "production",
"context": "orders",
"type": "invoice",
"key": "INV-001",
"data": {
"customer_name": "Empresa XYZ Ltda",
"customer_document": "12.345.678/0001-90",
"issue_date": "2024-01-15",
"due_date": "2024-02-15",
"amount": 1500.00,
"currency": "BRL",
"status": "paid",
"payment_date": "2024-01-20",
"items": [
{
"description": "Serviço de Consultoria",
"quantity": 10,
"unit_price": 150.00,
"total": 1500.00
}
],
"notes": "Pagamento via transferência bancária"
}
}'Observação: A versão do documento será automaticamente incrementada para 2.
6. Liste os Documentos
Para listar todas as faturas:
curl -X GET "https://document-hub-api-xp.wake.tech/api/v1/client/{CLIENT_ID}/production/context/orders/type/invoice" \
-H "Authorization: Bearer {SEU_TOKEN}"7. Veja o Histórico
Para ver todas as versões do documento:
curl -X GET "https://document-hub-api-xp.wake.tech/api/v1/client/{CLIENT_ID}/production/context/orders/type/invoice/INV-001/history" \
-H "Authorization: Bearer {SEU_TOKEN}"Exemplos Práticos Adicionais
Criar Documento com TTL (Expiração)
Útil para dados temporários como sessões ou cache:
curl -X POST "https://document-hub-api-xp.wake.tech/api/v1/client/{CLIENT_ID}/production/context/cache/type/session/user-123" \
-H "Authorization: Bearer {SEU_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"environment": "production",
"context": "cache",
"type": "session",
"key": "user-123",
"data": {
"user_id": 123,
"session_token": "xyz789abc",
"ip_address": "192.168.1.1",
"last_activity": "2024-01-15T10:30:00Z"
},
"ttl": 3600
}'O documento expirará em 3600 segundos (1 hora).
Criar Documento com Data de Expiração Específica
curl -X POST "https://document-hub-api-xp.wake.tech/api/v1/client/{CLIENT_ID}/production/context/promotions/type/coupon/SUMMER2024" \
-H "Authorization: Bearer {SEU_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"environment": "production",
"context": "promotions",
"type": "coupon",
"key": "SUMMER2024",
"data": {
"code": "SUMMER2024",
"discount_percentage": 20,
"min_purchase": 100.00,
"max_discount": 50.00
},
"expires_at": "2024-03-31T23:59:59Z"
}'Buscar com Filtros
Buscar faturas pagas com valor maior que R$ 1.000:
curl -G "https://document-hub-api-xp.wake.tech/api/v1/client/{CLIENT_ID}/production/context/orders/type/invoice" \
-H "Authorization: Bearer {SEU_TOKEN}" \
--data-urlencode "filter[status]=paid" \
--data-urlencode "filter[amount_gt]=1000"Testando com a Interface Swagger
A API possui uma interface Swagger para testar endpoints interativamente:
- Acesse:
<Anchor label=" https://document-hub-api-xp.wake.tech/api/docs" target="_blank" href="https://document-hub-api-xp.wake.tech/api/docs"> https://document-hub-api-xp.wake.tech/api/docs</Anchor> - Clique em "Authorize" no topo
- Digite seu token no formato:
{TOKEN_ID}|{PLAIN_TEXT_TOKEN} - Explore e teste os endpoints
Troubleshooting
Erro 401 - Unauthorized
Causa: Token inválido ou expirado
Solução:
- Verifique se o token está correto
- Verifique se não expirou
- Certifique-se de usar o formato:
Authorization: Bearer {TOKEN}
Erro 403 - Forbidden
Causa: Token válido mas sem permissão para a operação
Solução:
- Verifique os escopos do token
- Crie um novo token com as permissões necessárias
Erro 404 - Not Found
Causa: Documento ou recurso não encontrado
Solução:
- Verifique se os parâmetros da URL estão corretos
- Verifique se o documento realmente existe
Erro 409 - Conflict
Causa: Tentativa de criar documento que já existe
Solução:
- Use PUT para atualizar ao invés de POST para criar
- Ou use uma chave diferente
Erro 422 - Validation Failed
Causa: Dados não passaram na validação (geralmente schema)
Solução:
- Verifique a mensagem de erro para detalhes
- Corrija os dados conforme o schema definido
Updated 3 days ago
