BINA developer documentation
BINA is the private enforcement radar. It reads what the European Commission and the Autorité de la concurrence publish and tells competition lawyers which decisions could lead to damages claims, and who could sue.
These docs are for engineers who run, extend or integrate with BINA. They cover the HTTP API, the ingest pipeline, hosted extraction and the rules the code enforces. If you are a lawyer using the console, start with the ground rules — they explain what every label in a report means.
/v1/radar route, its input, and every status code it can return.
#What BINA produces
BINA turns two authorities' publication feeds into two outputs the legal team used to write by hand:
- A monthly bulletin. Every document published in a period, sorted by a level table the legal team fixed in advance. Level 1 and 2 documents get a card, level 3 gets one table row, routine documents are only counted. A document type the table does not know goes to a review queue — it is never given a level.
- A case report for each level 1 or 2 case: three figures (fine, since when, appeal status), a three-line summary where every line cites a recital, the parties that could bring damages claims, and similar decisions.
Parties come in two categories: named in the decision, with a quote that must appear word for word in the cited recital, and added by BINA, which are hypotheses and are always labelled as such.
#The one rule
BINA supports counsel; it does not decide. A signal is not proof of identity, harm or standing, and the model never assigns a level or a legal outcome. Read Ground rules for the full list and where each rule lives in the code.
#How these docs are organised
The site follows the Diátaxis framework. Each page has one job, shown in the label above its title:
| Section | Use it when you want to… | Example |
|---|---|---|
| Tutorials | learn by doing, start to finish | Propose a party and pass the quote gate |
| How-to guides | finish one specific task | Import a client watchlist |
| Explanation | understand why something works the way it does | The level table |
| Reference | look up an exact route, field or variable | Configuration |
Press ⌘K (or /) anywhere to search routes, concepts and environment variables.
#At a glance
| Sources | European Commission (DG COMP case portal) and Autorité de la concurrence (Licence Ouverte 2.0 via data.gouv.fr) |
| Runtime | One Node.js ESM process on node:http, bound to 127.0.0.1:8787 |
| Storage | Append-only events.jsonl + hash-addressed originals; SQLite is a rebuildable projection |
| Console | React 19 + Vite 6 on http://127.0.0.1:5173 |
| Extraction | Vercel AI SDK against any OpenAI-compatible provider, quote-verified before it is kept |
| Code | server/radar/ · tests in test/radar.test.mjs |