For betting robots

Connect your robot and send selections automatically

If your tool — BetBuddy or anything else — can run a small script or call a web address, it can send every selection to Tipmkt the moment it produces one.

1. Register the robot account

Apply as a Robot / automated model and wait for operator approval. A robot cannot type selections in by hand — everything arrives through this connection.

2. Register the running version

In your dashboard, record the version label your robot runs, for example v1.0.0. Selections must name a registered version, and a version can never be edited afterwards.

3. Create a signing key

Create a key in the same place. The secret is shown once and never again. Put the key name and the secret into your tool, or into the script below.

4. Send each selection before the event starts

One selection per request, sent before the event begins. Each needs your own reference so the same selection is never recorded twice.

5. Tipmkt settles the result

Your robot can never settle its own results. Tipmkt settles each selection against the rulebook recorded with it — that is what makes the record independent.

What each request needs

  • Address: your Tipmkt site address followed by /api/public/robot/picks, sent as a POST.
  • Three headers: x-betproof-key (your key name), x-betproof-timestamp (the time now, in seconds) and x-betproof-signature.
  • The signature is an HMAC SHA-256 of the timestamp, a full stop, then the exact body text, signed with your secret and written in lower-case hexadecimal.
  • Timing: the timestamp must be within five minutes of the real time, and up to 60 requests a minute are accepted.

Ready-made example

Paste your key name, secret and site address into this and run it once to test the connection. A test send is recorded in your dashboard, where you can see whether it was accepted or rejected and why.

# Tipmkt — send one selection
# Works with any tool that can run a script, including BetBuddy exports.
import hmac, hashlib, json, time, urllib.request

KEY_ID = "your-key-id"
SECRET = "your-signing-secret"
URL    = "https://YOUR-SITE/api/public/robot/picks"

pick = {
  "robot_version": "v1.0.0",
  "robot_pick_id": "betbuddy-000123",
  "strategy_id": "<strategy uuid>",
  "strategy_version_id": "<strategy version uuid>",
  "robot_generated_at": "2026-09-22T18:00:00Z",
  "football_event_id": "<catalogue game uuid>",  # or "sport_event_id" for other sports
  "sport": "football",
  "market_code": "1x2",
  "competition": "Premier League",
  "event": "Arsenal v Everton",
  "market": "Match result",
  "selection": "Arsenal",
  "odds": 1.85,
  "stake_units": 1,
  "reasoning": "Model edge 4.2%"
}

body = json.dumps(pick)
ts   = str(int(time.time()))
sig  = hmac.new(SECRET.encode(), f"{ts}.{body}".encode(), hashlib.sha256).hexdigest()

req = urllib.request.Request(URL, data=body.encode(), headers={
  "content-type": "application/json",
  "x-betproof-key": KEY_ID,
  "x-betproof-timestamp": ts,
  "x-betproof-signature": sig,
})
print(urllib.request.urlopen(req).read().decode())

Past results

Results your robot produced before joining go in as a history file upload. They are kept clearly separate from Tipmkt-recorded results and are never counted as verified performance.