API B2B
Integre escrow Web3 com pagamento Pix diretamente na sua plataforma. REST API com autenticação via API Key, respostas em JSON e webhooks em tempo real.
Todos os endpoints retornam JSON. As requisições com body devem usar Content-Type: application/json. Timestamps são retornados em ISO 8601 (UTC). Valores monetários em centavos (BRL).
Autenticação
Todas as requisições exigem uma API Key no header Authorization. Gere
sua chave no painel em Configurações → API Keys.
migi_live_ para produção ·
migi_test_ para sandboxNunca exponha sua API Key no frontend. Use sempre pelo backend. Em caso de comprometimento, revogue imediatamente no painel e gere uma nova chave.
// cURL curl -X GET https://api.migitrust.io/v1/acordos \ -H "Authorization: Bearer migi_live_sk_..." \ -H "Content-Type: application/json"
Rate Limits
Os limites são por API Key, por minuto. O header X-RateLimit-Remaining
informa o saldo atual.
X-RateLimit-Limit: 600 X-RateLimit-Remaining: 598 X-RateLimit-Reset: 1709500800
Erros
Erros seguem um formato padrão com código HTTP e payload JSON descritivo.
{
"erro": {
"codigo": "SALDO_INSUFICIENTE",
"mensagem": "Saldo insuficiente na wallet do pagador",
"status": 422,
"timestamp": "2026-03-01T14:22:00Z",
"request_id": "req_9f3kXp2mW"
}
}
Acordos / Escrow
| Campo | Tipo | Obr. | Descrição |
|---|---|---|---|
| titulo | string | sim | Nome do acordo (max 120 chars) |
| valor_centavos | integer | sim | Valor em centavos BRL. Ex: R$150,00 = 15000 |
| wallet_beneficiario | string | sim | Endereço Solana do beneficiário (base58, 44 chars) |
| descricao | string | não | Descrição livre do escopo (max 2000 chars) |
| prazo_dias | integer | não | Dias para expiração automática (padrão: 30) |
| milestones | array | não | Lista de etapas com valor e descrição |
| metadata | object | não | Dados livres (até 4kb) para uso interno |
{
"titulo": "Desenvolvimento Landing Page",
"valor_centavos": 350000,
"wallet_beneficiario": "7xKXtg2CW...",
"descricao": "Entrega do design e código em 15 dias",
"prazo_dias": 15,
"milestones": [
{ "descricao": "Design aprovado", "valor_centavos": 150000 },
{ "descricao": "Código entregue", "valor_centavos": 200000 }
],
"metadata": { "pedido_id": "PED-2026-001" }
}
{
"id": "agr_8fXp3mKj9W",
"status": "aguardando_pagamento",
"titulo": "Desenvolvimento Landing Page",
"valor_centavos": 350000,
"taxa_centavos": 5215,
"wallet_pagador": "3hRz9Kp1...",
"wallet_beneficiario": "7xKXtg2CW...",
"wallet_escrow": "EsCroW11111...",
"tx_hash": null,
"pix_link": "https://api.migitrust.io/v1/pix/agr_8fXp3mKj9W",
"expires_at": "2026-03-16T00:00:00Z",
"criado_em": "2026-03-01T10:00:00Z"
}
| Param | Tipo | Obr. | Descrição |
|---|---|---|---|
| status | string | não | aguardando_pagamento · ativo ·
concluido · cancelado · disputa |
| page | integer | não | Página (padrão: 1) |
| limit | integer | não | Itens por página, máx 100 (padrão: 20) |
| de | date | não | Data inicial (ISO 8601, ex: 2026-01-01) |
| ate | date | não | Data final (ISO 8601) |
{
"dados": [
{
"id": "agr_8fXp3mKj9W",
"titulo": "Desenvolvimento Landing Page",
"valor_centavos": 350000,
"status": "ativo",
"criado_em": "2026-03-01T10:00:00Z"
}
],
"paginacao": {
"total": 47,
"pagina": 1,
"limite": 20,
"proxima": "https://api.migitrust.io/v1/acordos?page=2"
}
}
| Param | Tipo | Obr. | Descrição |
|---|---|---|---|
| id | string | sim | ID do acordo (prefixo agr_) |
{
"id": "agr_8fXp3mKj9W",
"status": "ativo",
"titulo": "Desenvolvimento Landing Page",
"descricao": "Entrega do design e código em 15 dias",
"valor_centavos": 350000,
"taxa_centavos": 5215,
"wallet_escrow": "EsCroW11111...",
"tx_hash": "5Kj8mW3xP...",
"milestones": [
{ "id": 1, "descricao": "Design aprovado", "valor_centavos": 150000, "status": "concluido" },
{ "id": 2, "descricao": "Código entregue", "valor_centavos": 200000, "status": "pendente" }
],
"fairscore_beneficiario": 94,
"expires_at": "2026-03-16T00:00:00Z",
"criado_em": "2026-03-01T10:00:00Z",
"atualizado_em": "2026-03-05T09:22:00Z",
"metadata": { "pedido_id": "PED-2026-001" }
}
| Campo | Tipo | Obr. | Descrição |
|---|---|---|---|
| milestone_id | integer | não | Se informado, aprova apenas esta etapa |
| avaliacao | integer | não | Nota 1–5 que compõe o FairScore do beneficiário |
| comentario | string | não | Feedback registrado on-chain (max 500 chars) |
{
"id": "agr_8fXp3mKj9W",
"status": "concluido",
"tx_liberacao": "9mPq4jX2L...",
"valor_liberado_centavos": 350000,
"concluido_em": "2026-03-10T14:30:00Z"
}
| Campo | Tipo | Obr. | Descrição |
|---|---|---|---|
| motivo | string | sim | Descrição do motivo da disputa (max 2000 chars) |
| evidencias | array | não | URLs de arquivos/prints como evidência |
A outra parte tem 48 horas para contra-argumentar. Após isso, o árbitro MIGI analisa e decide em até 5 dias úteis.
Acordos com status ativo (já pagos) não podem ser cancelados via API — abra uma disputa.
{
"id": "agr_8fXp3mKj9W",
"status": "cancelado",
"cancelado_em": "2026-03-02T08:00:00Z"
}
Pagamentos
| Campo | Tipo | Obr. | Descrição |
|---|---|---|---|
| acordo_id | string | sim | ID do acordo a financiar |
| expiracao_minutos | integer | não | Validade do QR (padrão: 30, máx: 1440) |
{ "acordo_id": "agr_8fXp3mKj9W", "expiracao_minutos": 60 }
{
"pix_id": "pix_3hRzKp1mW",
"acordo_id": "agr_8fXp3mKj9W",
"valor_centavos": 350000,
"qr_code": "00020126580014br.gov.bcb.pix...",
"qr_code_url": "https://api.migitrust.io/v1/pix/pix_3hRzKp1mW/qr.png",
"copia_cola": "00020126580014br.gov.bcb.pix0136...",
"status": "pendente",
"expira_em": "2026-03-01T11:00:00Z"
}
{
"pix_id": "pix_3hRzKp1mW",
"status": "pago",
"valor_centavos": 350000,
"pago_em": "2026-03-01T10:47:33Z",
"tx_on_chain": "5Kj8mW3xP..."
}
{
"wallet": "3hRz9Kp1...",
"saldo_disponivel_centavos": 84520,
"saldo_em_escrow_centavos": 350000,
"migi_tokens": 1250.00,
"atualizado_em": "2026-03-01T10:00:00Z"
}
Reputação · FairScale
{
"wallet": "7xKXtg2CW...",
"fairscore": 94,
"nivel": "Diamante",
"acordos_concluidos": 38,
"acordos_disputados": 1,
"taxa_sucesso": 97.4,
"volume_total_centavos": 12450000,
"avaliacao_media": 4.8,
"membro_desde": "2025-06-01"
}
{
"wallet": "7xKXtg2CW...",
"dados": [
{
"acordo_id": "agr_8fXp3mKj9W",
"titulo": "Desenvolvimento Landing Page",
"valor_centavos": 350000,
"status": "concluido",
"avaliacao": 5,
"tx_hash": "5Kj8mW3xP...",
"concluido_em": "2026-03-10T14:30:00Z"
}
],
"paginacao": { "total": 38, "pagina": 1, "limite": 20 }
}
Webhooks
Configure uma URL para receber notificações em tempo real sobre eventos dos seus
acordos. O MIGI enviará um POST com payload JSON e header X-Migi-Signature para
verificação.
{
"url": "https://seuapp.com/webhooks/migi",
"eventos": [
"acordo.pago",
"acordo.concluido",
"acordo.disputa_aberta"
],
"ativo": true
}
Eventos disponíveis
Verificar assinatura
Cada webhook inclui o header X-Migi-Signature com
HMAC-SHA256 do payload usando seu webhook secret. Valide sempre antes de processar.
// Seu webhook secret está no painel → Configurações → Webhooks const crypto = require('crypto'); function verificarAssinatura(payload, signature, secret) { const hmac = crypto .createHmac('sha256', secret) .update(payload) .digest('hex'); return crypto.timingSafeEqual( Buffer.from(hmac), Buffer.from(signature.replace('sha256=', '')) ); }
{
"evento": "acordo.concluido",
"timestamp": "2026-03-10T14:30:00Z",
"webhook_id": "wh_5mNpKj2X",
"dados": {
"acordo_id": "agr_8fXp3mKj9W",
"status": "concluido",
"valor_liberado_centavos": 350000,
"tx_liberacao": "9mPq4jX2L..."
}
}