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 scripts this morning
Example- Stock syncDidn’t run
- Price file importFailed
- Report exportRunning
- 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.
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).
-
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.
-
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.
-
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.
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/
The endpoint both SDKs call, and the one to use from any other language.
Headers
Content-TypeRequired-
application/jsonThe body is JSON. A charset parameter is fine.
X-Robovue-Delivery-IdRequired-
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-TimestampRequired-
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-SignatureRequired-
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-RunOptional-
trueChecks 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.
botIdstring, 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 platformstring, 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 statusstring 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
SuccessFailureRunningFor example
Success startedAttimestamp 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 completedAttimestamp 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 failureCategorystring 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
UncategorizedBusinessExceptionApplicationExceptionTimeoutAuthenticationErrorCancelledFor example
ApplicationException payloadobject 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.