Monitor any bot that can send an HTTPS request

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

Your codeA signed request for each run

Your code’s bots this morning

Example
  • Stock syncYour code · expected 06:00Missed
  • Price file import.NET · failed at 07:20Failed
  • Report exportPython · started 08:36Running
  • Email to your team · 06:05Stock sync missed a run. Its last run was yesterday at 06:00.
  • Slack on the Team plan, #rpa-alerts · 06:05Missed · Stock sync missed a run.
An example morning: each bot reports its own runs, and your team is alerted when the 06:00 job never starts.

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 do not run. Give the bot a schedule, and Robovue marks it Missed when its time passes with no report.
  • Why it failed. Send a failure category and any detail you like in the payload. An error, errorMessage or message field in it becomes the alert’s summary.
  • Screenshots and logs. On the Team plan and above, attach one PNG, JPEG or text file, up to 5 MB, 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. Robovue gives it in C#, Python, PowerShell 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. Robovue gives it in C#, Python, PowerShell and shell (curl).

  1. Open Connections → Your code

    Start free, and your address and webhook secret are waiting there. The address holds your workspace ID (tenantId in the request). 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. Robovue has examples in C#, Python, PowerShell 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 rejected. Add the dry-run header to check everything without recording a run. Then register the bot and say when it runs, so a missed run alerts you.

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 full signature scheme are in the reference in Robovue 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 updates or confirms the same run instead of creating a second one, as a retry does, or the Success or Failure that ends a Running run. A GUID or your bot’s own run ID both work. It cannot start with "uipath-job-" or "automation-anywhere-", because Robovue uses those for runs it receives from UiPath and Automation Anywhere.

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 just before sending it, retries included.

X-Robovue-Signature Required

v1=<lowercase hex>

An HMAC-SHA256 keyed with your webhook secret. Sign the timestamp, the word run and the delivery ID, each followed by a line break, then the exact request body. Encode it as lowercase hex and put v1= in front. Sign the exact bytes you send, because 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 would be checked, including authentication, every field, the delivery ID and 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 belongs to the same bot in Robovue. Spaces and punctuation are fine, but not / or \. It cannot start or end with a space, or contain 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 in Robovue. Any short label works, such as dotnet, python, go or blue-prism. The same space and line break rules as botId apply.

For example python

status string Required

How the run went. Running reports a run that has started and not finished yet. When it ends, send the same delivery ID again with Success or Failure. 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. For example, 2026-07-17T09:00:00Z. It cannot be before 2000, or more than an hour ahead of Robovue’s clock. Unix times are not 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. It has the same format and limits as startedAt, and cannot be 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. If it cannot, leave it out: the run is recorded as Uncategorized, and you can change that 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, such as an invoice number, the step that failed or a stack trace. It must be a JSON object, and 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. It counts toward the 64 KB request limit.

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

One request, and your code’s bots sit alongside your others

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