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"
Leitura da operação.
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
}
]
}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"
}
]
}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"
}
]
}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"
}
]
}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"
}
]
}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).
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..."
}
}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"
{
"event": "spots.changed",
"generatedAt": "2026-10-02T12:00:00.000Z",
"data": {
"parkingId": "...",
"changed": 2,
"contagem": { "LIVRE": 8, "OCUPADA": 12, "INDISPONIVEL": 0 }
}
}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.
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
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.