01Integrações

Conecte o BitBlack Parking ao seu sistema.

Uma API simples para ler vagas, eventos, câmeras e faturas, e webhooks para receber mudanças no seu servidor. Tudo em JSON, com chave de API.

Autenticação

Toda chamada usa a chave da sua empresa no cabeçalho x-api-key. A chave fica em Painel → API de dados. A resposta sempre volta em JSON, com o status HTTP indicando o resultado (200 ok, 401 chave inválida, 429 limite excedido).

Exemplo

curl https://bitblack.com.br/api/v1/overview \
  -H "x-api-key: bb_live_SUACHAVE"
02Endpoints

Leitura da operação.

GET/api/v1/overview

Resumo da operação

Vagas totais, ocupadas e livres por estacionamento, com a taxa de ocupação.

Requisição

curl https://bitblack.com.br/api/v1/overview \
  -H "x-api-key: bb_live_SUACHAVE" \
  -H "Accept: application/json"

Resposta

{
  "totals": {
    "total": 20,
    "occupied": 12,
    "free": 8,
    "occupancyRate": 60
  },
  "parkings": [
    {
      "name": "Unidade 1",
      "spots": { "total": 20, "occupied": 12, "free": 8 },
      "occupancyRate": 60
    }
  ]
}
GET/api/v1/spots

Vagas e estados

Lista vaga por vaga. Filtre por estacionamento ou status (LIVRE, OCUPADA, INDISPONIVEL).

Requisição

curl "https://bitblack.com.br/api/v1/spots?status=OCUPADA" \
  -H "x-api-key: bb_live_SUACHAVE"

Resposta

{
  "count": 12,
  "spots": [
    {
      "number": 4,
      "status": "OCUPADA",
      "lastChangedAt": "2026-10-02T12:00:00.000Z",
      "parkingName": "Unidade 1"
    }
  ]
}
GET/api/v1/events

Eventos de ocupação

Últimas mudanças de estado das vagas, com a hora exata. O limite padrão é 50 (máximo 200).

Requisição

curl "https://bitblack.com.br/api/v1/events?limit=50" \
  -H "x-api-key: bb_live_SUACHAVE"

Resposta

{
  "count": 50,
  "events": [
    {
      "type": "OCUPADA",
      "spotNumber": 4,
      "occurredAt": "2026-10-02T12:00:00.000Z",
      "parkingName": "Unidade 1"
    }
  ]
}
GET/api/v1/cameras

Câmeras monitoradas

Quais câmeras estão online, sem imagem recente ou desconectadas.

Requisição

curl https://bitblack.com.br/api/v1/cameras \
  -H "x-api-key: bb_live_SUACHAVE"

Resposta

{
  "count": 2,
  "cameras": [
    {
      "name": "Câmera 01",
      "status": "ONLINE",
      "lastFrameAt": "2026-10-02T12:00:00.000Z"
    }
  ]
}
GET/api/v1/invoices

Faturamento

Faturas da sua conta, com status, vencimento e valor.

Requisição

curl https://bitblack.com.br/api/v1/invoices \
  -H "x-api-key: bb_live_SUACHAVE"

Resposta

{
  "count": 2,
  "invoices": [
    {
      "number": "FAT-2026-001",
      "total": 990,
      "status": "PAGA",
      "dueDate": "2026-09-10T00:00:00.000Z"
    }
  ]
}
03Webhooks

Receba mudanças no seu servidor.

Cadastre uma URL e receba um POST quando algo mudar. Eventos disponíveis: spots.changed (vagas alteradas) e camera.status (status das câmeras).

POST/api/v1/webhooks

Cria um webhook. Informe a URL e o evento (ou * para receber todos). A resposta devolve o secret para você verificar as assinaturas.

Requisição

curl -X POST https://bitblack.com.br/api/v1/webhooks \
  -H "x-api-key: bb_live_SUACHAVE" \
  -H "Content-Type: application/json" \
  -d '{ "url": "https://seusite.com.br/webhook", "event": "spots.changed" }'

Resposta

{
  "webhook": {
    "id": "...",
    "url": "https://seusite.com.br/webhook",
    "event": "spots.changed",
    "secret": "whsec_abc123..."
  }
}
DELETE/api/v1/webhooks?id=...

Remove um webhook cadastrado.

Requisição

curl -X DELETE "https://bitblack.com.br/api/v1/webhooks?id=wh_abc123" \
  -H "x-api-key: bb_live_SUACHAVE"
Exemplo de payload recebido
{
  "event": "spots.changed",
  "generatedAt": "2026-10-02T12:00:00.000Z",
  "data": {
    "parkingId": "...",
    "changed": 2,
    "contagem": { "LIVRE": 8, "OCUPADA": 12, "INDISPONIVEL": 0 }
  }
}
Verificando a assinatura

Cada envio traz o cabeçalho X-Signature (HMAC SHA-256 com o segredo do webhook). Confira no seu servidor para garantir que o payload veio da BitBlack.

04Widget pronto

Mostre as vagas livres no seu site.

Escolha um modelo, ajuste a cor e o título e copie o código. Cole no seu site e o widget busca os dados sozinho.

Modelo

Cor

Fundo

Tamanho

Cantos

Alinhamento

Textos

Elementos

Borda e sombra

Chave da API

Opcional. Se colar sua chave, o código já sai pronto.

Prévia

Vagas

ao vivo
8vagas livres
12 ocupadas de 20
60% ocupadoatualiza sozinho

Código para colar no seu site

<!-- BitBlack Parking · widget de vagas -->
<div id="bitblack-vagas" style="font-family:system-ui,-apple-system,sans-serif"></div>
<script>
(function () {
  var KEY = "bb_live_SUACHAVE";
  var COR = "#3b82f6";
  var PAD = 24, NUM = 40, RADIO = 16, ALINHA = "left";
  var TITULO = "Vagas", SUBTITULO = "";
  var bg = "#0a0b10", fg = "#f5f7fa", mut = "#8b93a1", borda = "rgba(255,255,255,0.08)", track = "rgba(255,255,255,0.06)";
  fetch("https://bitblack.com.br/api/v1/overview", {
    headers: { "x-api-key": KEY }
  }).then(function (r) { return r.json(); }).then(function (d) {
  var t = d.totals;
  var pct = Math.round(t.occupied / t.total * 100);
  var header = "";
  if (true) {
    header = '<div style="display:flex;justify-content:space-between;align-items:center">' +
      '<span style="color:' + mut + ';font-size:11px;letter-spacing:.14em;text-transform:uppercase">' + TITULO + '</span>' +
      '<span style="color:#10b981;font-size:11px">ao vivo</span>' +
      '</div>' +
      (SUBTITULO ? '<div style="color:' + mut + ';font-size:11px;margin-top:2px">' + SUBTITULO + '</div>' : "");
  }
  var html = [
    '<div style="border-radius:' + RADIO + 'px;padding:' + PAD + 'px;background:' + bg + ';border:1px solid borda;box-shadow:0 20px 60px -30px rgba(0,0,0,.6);font-family:system-ui,sans-serif;text-align:' + ALINHA + '">',
    header,
    '<div style="display:flex;align-items:baseline;gap:8px;margin-top:' + PAD/2 + 'px;justify-content:' + ALINHA + '">',
    '<span style="color:' + fg + ';font-size:' + NUM + 'px;font-weight:700">' + t.free + '</span>',
    '<span style="color:' + mut + ';font-size:14px">vagas livres</span>',
    '</div>',
    '<div style="color:' + mut + ';font-size:13px;margin-top:4px;text-align:' + ALINHA + '">' + t.occupied + ' ocupadas de ' + t.total + '</div>',    '<div style="margin-top:' + PAD/2 + 'px;height:10px;border-radius:999px;background:' + track + '">',
    '<div style="height:100%;width:' + pct + '%;border-radius:999px;background:' + COR + '"></div>',
    '</div>',
    '<div style="display:flex;justify-content:space-between;color:' + mut + ';font-size:11px;margin-top:8px">',
    '<span>' + pct + '% ocupado</span><span>atualiza sozinho</span>',
    '</div>',    '</div>'
  ].join("");
  document.getElementById("bitblack-vagas").innerHTML = html;
}).catch(function () {
  document.getElementById("bitblack-vagas").innerHTML =
    "Indisponível no momento.";
});
})();
</script>

Cole o bloco no HTML do seu site e troque bb_live_SUACHAVE pela chave da sua conta. O widget busca os dados sozinho.