Run a run again
This page needs your own installation with an Embed license.
POST/
Runs a run again, as Run again on the Runs page does.
Needs a partner key: Authorization: Bearer gre_…, from Platform › Partner keys. Call it from your server only.
Parameters
Path
accountIdRequired · stringYour ID for the customer’s account: 1 to 255 bytes of UTF-8, case-sensitive. URL-encode it: it may contain
/.runIdRequired · UUIDThe run’s ID.
Headers
Idempotency-KeyOptional · stringUp to 255 characters. The same request with the same key within 24 hours answers the first result again, with
Idempotency-Replayed: true.
What runs
A new production run of the workflow’s published version, with the trigger data the run started with (headers, query and body as they arrived), marked as its retry (retryOf). Over a runs-at-once limit it waits in line. The account’s audit log gets an embed.run.rerun row.
Responses
- 201Created
The new run.
The account ID isn’t allowed as written.
details.fieldnames it.- 404
NOT_FOUNDNo such account or run, or its workflow was deleted.
The workflow isn’t on, so it has nothing published to run.
The account is suspended. Resume it first.
The account is deleted. Restore it first, within 30 days.
- 409
CONFLICTA request with this
Idempotency-Keyis still running. Retry shortly. The published version has a step the account may not use. Nothing started.
The published version can’t run. Nothing started.
Too many runs are already waiting, for the account or this workflow. Try again later.
The workflow is at its runs-at-once limit and is set to Refuse.
Something failed on the installation’s side. Try again.
The apps the account may use couldn’t be read. Nothing started. Try again.
Any call can also answer: 401 UNAUTHORIZED · 403 EMBED_NOT_LICENSED · 403 IP_NOT_ALLOWED · 413 PAYLOAD_TOO_LARGE · 415 INVALID_CONTENT_TYPE · 429 RATE_LIMITED · 503 BUSY. See Errors.
Request
GORUNNER="https://automations.example.com"
GORUNNER_EMBED_KEY="YOUR_PARTNER_KEY" # gre_…
ACCOUNT_ID="acct-bakery"
RUN_ID="your-run-id"
URL="$GORUNNER/api/embed/v1/accounts/$ACCOUNT_ID/"
URL="${URL}runs/$RUN_ID/rerun"
curl -X POST "$URL" \
-H "Authorization: Bearer $GORUNNER_EMBED_KEY" \
-H "Idempotency-Key: $(uuidgen)"const GORUNNER = "https://automations.example.com";
const KEY = process.env.GORUNNER_EMBED_KEY; // gre_…
const ACCOUNT_ID = encodeURIComponent("acct-bakery");
const RUN_ID = encodeURIComponent("your-run-id");
const res = await fetch(
`${GORUNNER}/api/embed/v1/accounts/` +
`${ACCOUNT_ID}/runs/${RUN_ID}/rerun`,
{
method: "POST",
headers: {
Authorization: `Bearer ${KEY}`,
"Idempotency-Key": crypto.randomUUID(),
},
},
);
const { data } = await res.json();import os, uuid, requests
from urllib.parse import quote
GORUNNER = "https://automations.example.com"
KEY = os.environ["GORUNNER_EMBED_KEY"] # gre_…
ACCOUNT_ID = quote("acct-bakery", safe="")
RUN_ID = quote("your-run-id", safe="")
res = requests.post(
f"{GORUNNER}/api/embed/v1/accounts/"
f"{ACCOUNT_ID}/runs/{RUN_ID}/rerun",
headers={
"Authorization": f"Bearer {KEY}",
"Idempotency-Key": str(uuid.uuid4()),
},
)
data = res.json()["data"]Response · 201 Created
{
"data": {
"run": {
"id": "1d7f3b9e-2c4a-4e6b-8d0f-5a3c9e1b7d26",
"workflowId": "3b1e5c2a-7d4f-4e8b-a1c6-5f2d9b0e7a31",
"workspace": {
"id": null,
"default": true
},
"status": "queued",
"trigger": "webhook",
"startedAt": "2026-10-25T08:59:58Z",
"firstStartedAt": null,
"finishedAt": null,
"durationMs": null,
"error": null,
"failure": null,
"retryOf": "8f0c41d2-6b7e-4c1a-9d3f-2a5b7c9e1f04"
}
}
}Every field
It takes no body.
Response · 201 Created
dataobjectrunobjectidUUIDworkflowIdUUIDworkspaceobjectidstring or nullThe partner’s workspace id; null for the default workspace.
defaultbooleanstatusstringqueued: accepted, waiting for a worker or a free slot.running: a worker has it.held: waiting on a person or a timer.One of
queued,running,held,worked,failed,cancelled.triggerstringWhat started it: the trigger’s type (
webhook,cron,manual, …).startedAttimeWhen the run was accepted. It may then wait in line for a free slot before a worker starts it (
firstStartedAt).firstStartedAttime or nullWhen a worker first started the run.
durationMscounts from here, so the time fromstartedAtto this is the time the run waited in line. Null until a worker starts the run, and for a run started on v2026.10.5 or earlier or one that ran inline (an error handler’s), whosedurationMscounts fromstartedAt.finishedAttime or nulldurationMsinteger or nullHow long the run took, in milliseconds: from the first time a worker started the run (
firstStartedAt, elsestartedAt) to its finish. Waits inside the run (a Delay, an Approval) count; the time it waited in the line for a free slot does not. A run cancelled while it waited has none. Null until it finishes.errorstring or nullWhy it did not work, as a sentence: a failed run’s failure, or
Cancelled by useron a cancelled run (whoever cancelled it).failureobject or nullA failed run’s error in the shape the
run.failedevent carries: the message (aserror) and the first step that failed. Null for every other run.messagestringstepobject or nullThe first step that failed; null when the run failed around its steps.
namestringThe step’s name in the definition (
step_2).displayNamestringretryOfUUIDThe run this one runs again.