Brill Bidding Service

Version 0.1.0+20261016.0922.g1b1a2e5-dirty · Built 2026-10-16 09:22:37 UTC

API for bridge bidding and card play analysis. Interactive API docs (Swagger)

Play & analysis

EndpointDescription
/bidGet next bid
/bidsGet all possible bids with scores
/leadOpening lead recommendation
/playCard play recommendation (NN/Brill/ACE). When the declaring side is on lead and the engine's best line wins every remaining trick in every sampled world (re-verified by demote+DD), the response also carries claim=tricks so the client can offer a claim.
/autoplayAuto-play full hand
/autobidBid a full deal — the bidding half of /autoplay: same deal/board/dealer/vul/nsSystem/ewSystem params, returns the auction (with per-call explanations), contract and declarer without playing a card
/autobidpbnBid a whole PBN FILE (POST): the body is the PBN text (or JSON with it in a pbn property) and the response is the same file with every board's [Auction], [Contract] and [Declarer] filled in, per-call meanings as [Note] annotations. Every posted board comes back — one the engine cannot bid is returned as it arrived with a { Brill: not bid -- ... } comment saying why — so X-Brill-Boards-In and -Out always match; -Bid / -Kept / -Skipped break down what happened. notes=false leaves the notes out, keepauction=true skips boards that already have an auction. Max 500 boards; nothing is saved server-side.
/claimClaim end-of-board: same params as /play + tricks=extra claimed by seat's side → saves PBN with Result = (tricks declarer already won from played) + extra, returns {claim, result, tricksTotal, board, saved}. seat=declarer → validated (demotion + DD); any other seat → accepted unvalidated. Add claimside=defenders when the DEFENCE is claiming extra: Result then adds (remaining − extra) and no DD check runs. Optional south (player name) + robot (name for the other 3 seats), or per-seat north/east/west (override robot; used when the seats hold different players), stamp seat names and a [Room] tag.
/pbn/finalizeEnd-of-board hook (GET query or POST JSON): client sends {board, dealer, vul, ctx, played, deal?, passedout?} to save final PBN. Optional south/robot (or per-seat north/east/west, which override robot) add seat names + a room/table tag so /pbn/all.pbn downloads as a match: [Room] Open, or Closed for a "_robot"/"_closed" pbn_label — but [Table "N"] and no [Room] when the label ends "_t<N>" (a field event, where every entrant plays the same deals at their own table).
/ddDouble-dummy analysis
/explainExplain bidding sequence
/getresponsesPossible responses to auction
/evaluateEvaluate hand in auction context (POST JSON)
/suitcSuit combination analysis (POST JSON)

Status

EndpointDescription
/versionSystem version info
/readyReadiness check (startup time)
/healthHealth check

Saved boards, logs and diagnostics are not public. Sign in with the operator secret to see them.