Monitor any bot that can send an HTTP request.

.NET, Python, Blue Prism or a script on a timer: if it can sign and send one JSON request, Robovue watches it next to your UiPath, Automation Anywhere and Power Automate bots.

Your own botsOne signed request per run

Your scripts this morning

Example
  • Stock syncPython · expected 06:00Didn’t run
  • Price file import.NET · failed at 07:20Failed
  • Report exportPython · started 08:36Running
  • Email to your team · 06:05Stock sync didn’t run at 06:00.
  • Slack on the Team plan, #rpa-alerts · 06:05Stock sync (Python) didn’t run.
An example morning: each script reports its own runs, and the 06:00 job that never started reaches your team.

What Robovue watches

Each request reports one run. Send it when the run ends, or as it starts and again when it finishes.

  • Runs as they happen. Report a run as Running when it starts, then send the same delivery id with Success or Failure when it ends. Retries are safe: a report sent twice is recorded once.
  • Bots that don’t run. Give the bot a schedule and Robovue says “Didn’t run” when its time passes with no report.
  • Why it failed. Send a failure category and any detail you like in the payload, and an error message becomes the summary in the alert.
  • Screenshots and logs. On the Team plan and above, attach one file to a failed run.

The SDKs

Open source under the MIT licence. Each signs every request, retries when the network or Robovue has a problem, checks a report before sending it, and can send dry runs while you set up.

  • .NET. dotnet add package Robovue.Sdk, for .NET Framework 4.6.2 or later and .NET 6 or later. Robovue.Sdk on NuGet
  • Python. pip install robovue-sdk, for Python 3.9 or later. robovue-sdk on PyPI
  • Anything else. Send the request below yourself. The app gives it in C#, Python and shell, and every example there is MIT-0, free to copy.

Connect it in three steps

Install the .NET or Python SDK, or send the request yourself from any language: the app gives it in C#, Python and shell (curl).

  1. Open the HTTP API in Connections

    Start free and your address and webhook secret are waiting there. Keep the secret out of your source code.

  2. Install the SDK, or sign the request yourself

    The SDK signs, retries and checks every report. Without it, sign the exact bytes you send with HMAC-SHA256 and your secret: the app has examples in C#, Python and shell, and a checker to compare your signature against.

  3. Send one run and check it

    The page shows it arrive, or says exactly why it was turned away. Add the dry-run header to check everything without recording a run.

ExampleWhat step 3 shows in the app

After a dry run

A dry run passed every check in the last 24 hours.

Nothing was stored. Send a run without the dry-run header to record one.

Once a run has reported

Connected. The last run was recorded at 07:20.

The request

Every response code, the limits and the signature scheme in full are in the app’s reference once you’ve signed up.

POST https://app.robovue.co.uk/ingest/{tenantId}/runs

The endpoint both SDKs call, and the one to use from any other language.

Headers

Content-Type Required

application/json

The body is JSON. A charset parameter is fine.

X-Robovue-Delivery-Id Required

1–200 printable ASCII characters, no spaces

Unique to this run. Sending it again — a retry, or the Success/Failure that ends a Running run — updates or confirms the same run instead of creating a second one. A GUID, or your bot’s own run id, both work.

X-Robovue-Timestamp Required

Unix time in whole seconds

When you signed the request. It must be within 5 minutes of Robovue’s clock either way, so a captured request stops working within minutes. Sign each attempt, retries included, just before sending it.

X-Robovue-Signature Required

v1=<lowercase hex>

HMAC-SHA256, keyed with your webhook secret, of the timestamp, the word run, the delivery id — each followed by a line break — then the exact request body; hex-encoded in lowercase and prefixed with v1=. Sign the exact bytes you send: re-serialising the JSON after signing changes them. Several comma-separated v1= values are accepted, and any one matching is enough.

X-Robovue-Dry-Run Optional

true

Checks the request exactly as a real one — authentication, every field, the delivery id, your plan’s bot limit — and stores nothing. The response says what would have happened. Use it to test an integration without creating runs. Any other value, or no header, is an ordinary request.

Body

A JSON object with the fields below.

botId string, up to 200 characters Required

Your name for the bot. Every run with the same botId is the same bot on your dashboard. Spaces and punctuation are fine; not / or \, no spaces at either end, and no tabs or line breaks. The same id registers and manages the bot through the Management API.

For example invoice-bot-01

platform string, up to 50 characters Required

What runs the bot, shown beside it on the dashboard — any short label, such as dotnet, python, go or blue-prism. Same whitespace rules as botId.

For example python

status string Required

How the run went. Running reports a run that has started and not finished yet; send the same delivery id again with Success or Failure when it ends. Values are case-sensitive.

One of Success Failure Running

For example Success

startedAt timestamp Required

When the run started, as an RFC 3339 timestamp with a time zone offset — Z for UTC or ±hh:mm, e.g. 2026-07-17T09:00:00Z. Not before 2000, and not more than an hour ahead of Robovue’s clock. Unix times aren’t accepted.

For example 2026-07-17T09:00:00Z

completedAt timestamp Sometimes

Required when status is Success or Failure; leave it out when status is Running

When the run finished. Same format and limits as startedAt, and not before it.

For example 2026-07-17T09:01:30Z

failureCategory string Optional

Only with status Failure

Why the run failed, if your bot can tell. Leave it out if not — it becomes Uncategorized and can be changed later on the run’s page. Values are case-sensitive.

One of Uncategorized BusinessException ApplicationException Timeout AuthenticationError Cancelled

For example ApplicationException

payload object Optional

Anything that will help you debug the run later — an invoice number, the step that failed, a stack trace. Must be a JSON object; it’s stored as sent and shown on the run’s page. A top-level error, errorMessage or message string becomes the summary in the failure alert. Counts toward the 64 KB request limit.

For example { "invoiceId": "INV-2291", "error": "Timed out waiting for the vendor portal" }

One request, and your script is on the fleet.

No card and no sales call. Your address and secret are ready the moment you sign up.