curl --request POST \
--url https://app.base44.com/api/apps/{app_id}/workflows/{workflow_id}/run-now \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"replay_from_run_id": "0195f2a1-4c3e-7b21-9f0d-2a5c8e1b4d77"
}
'import requests
url = "https://app.base44.com/api/apps/{app_id}/workflows/{workflow_id}/run-now"
payload = { "replay_from_run_id": "0195f2a1-4c3e-7b21-9f0d-2a5c8e1b4d77" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({replay_from_run_id: '0195f2a1-4c3e-7b21-9f0d-2a5c8e1b4d77'})
};
fetch('https://app.base44.com/api/apps/{app_id}/workflows/{workflow_id}/run-now', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.base44.com/api/apps/{app_id}/workflows/{workflow_id}/run-now",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'replay_from_run_id' => '0195f2a1-4c3e-7b21-9f0d-2a5c8e1b4d77'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.base44.com/api/apps/{app_id}/workflows/{workflow_id}/run-now"
payload := strings.NewReader("{\n \"replay_from_run_id\": \"0195f2a1-4c3e-7b21-9f0d-2a5c8e1b4d77\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://app.base44.com/api/apps/{app_id}/workflows/{workflow_id}/run-now")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"replay_from_run_id\": \"0195f2a1-4c3e-7b21-9f0d-2a5c8e1b4d77\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.base44.com/api/apps/{app_id}/workflows/{workflow_id}/run-now")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"replay_from_run_id\": \"0195f2a1-4c3e-7b21-9f0d-2a5c8e1b4d77\"\n}"
response = http.request(request)
puts response.read_body{
"status": "started",
"message": "Run started",
"run_id": "0195f2a1-4c3e-7b21-9f0d-2a5c8e1b4d77"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Run a workflow now
Runs a workflow or evaluates a hook immediately, without waiting for its trigger.
Check Get workflow run-now options first. If that reports requires_previous_run, pass one of the run IDs it offers as replay_from_run_id and the workflow runs again with that run’s payload. Otherwise send an empty body.
This executes the workflow for real. It calls whatever the definition calls and consumes credits. Runs started this way are recorded with is_test_run set to true, which is what keeps them out of the replay list on later calls.
For workflows, the call returns as soon as the run is queued. Poll Get workflow run with the run_id to watch it finish. For hooks, the call waits for evaluation to complete before returning.
Archived workflows cannot be run. A replay_from_run_id whose payload no longer matches the workflow’s current trigger is rejected, because replaying it would run the steps against fields that have since moved.
curl --request POST \
--url https://app.base44.com/api/apps/{app_id}/workflows/{workflow_id}/run-now \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"replay_from_run_id": "0195f2a1-4c3e-7b21-9f0d-2a5c8e1b4d77"
}
'import requests
url = "https://app.base44.com/api/apps/{app_id}/workflows/{workflow_id}/run-now"
payload = { "replay_from_run_id": "0195f2a1-4c3e-7b21-9f0d-2a5c8e1b4d77" }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({replay_from_run_id: '0195f2a1-4c3e-7b21-9f0d-2a5c8e1b4d77'})
};
fetch('https://app.base44.com/api/apps/{app_id}/workflows/{workflow_id}/run-now', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.base44.com/api/apps/{app_id}/workflows/{workflow_id}/run-now",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'replay_from_run_id' => '0195f2a1-4c3e-7b21-9f0d-2a5c8e1b4d77'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.base44.com/api/apps/{app_id}/workflows/{workflow_id}/run-now"
payload := strings.NewReader("{\n \"replay_from_run_id\": \"0195f2a1-4c3e-7b21-9f0d-2a5c8e1b4d77\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://app.base44.com/api/apps/{app_id}/workflows/{workflow_id}/run-now")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"replay_from_run_id\": \"0195f2a1-4c3e-7b21-9f0d-2a5c8e1b4d77\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.base44.com/api/apps/{app_id}/workflows/{workflow_id}/run-now")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"replay_from_run_id\": \"0195f2a1-4c3e-7b21-9f0d-2a5c8e1b4d77\"\n}"
response = http.request(request)
puts response.read_body{
"status": "started",
"message": "Run started",
"run_id": "0195f2a1-4c3e-7b21-9f0d-2a5c8e1b4d77"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>"
}
]
}Authorizations
Personal access token, sent as Authorization: Bearer <token>. Each operation lists the permission it needs: read_only or full_access. A full-access token can call every operation. A read-only token can call only the operations that list read_only; anything else returns 403 read_only_credential_route_not_allowed.
Path Parameters
ID of the app whose workflows you want to work with.
ID of the workflow, as returned in id by List workflows.
Body
Run whose trigger payload to reuse for this run. Required when Get workflow run-now options reports requires_previous_run. Leave it out otherwise.
"0195f2a1-4c3e-7b21-9f0d-2a5c8e1b4d77"
Response
The workflow run is queued, or the hook evaluation has completed.
Confirmation of a queued workflow run or a completed hook evaluation.
Either started for a queued workflow or completed for a synchronously evaluated hook.
"started"
Confirmation text you can show someone.
"Run started"
ID of the run. Pass it to Get workflow run to read its details.
"0195f2a1-4c3e-7b21-9f0d-2a5c8e1b4d77"
Was this page helpful?