Completes a callback
curl --request POST \
--url https://api.hubapi.com/automation/actions/callbacks/2026-03/{callbackId}/complete \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"outputFields": {},
"typedOutputs": {},
"failureReasonType": "<string>",
"requestContext": {
"source": "WORKFLOWS",
"workflowId": 123,
"actionId": 123
}
}
'import requests
url = "https://api.hubapi.com/automation/actions/callbacks/2026-03/{callbackId}/complete"
payload = {
"outputFields": {},
"typedOutputs": {},
"failureReasonType": "<string>",
"requestContext": {
"source": "WORKFLOWS",
"workflowId": 123,
"actionId": 123
}
}
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({
outputFields: {},
typedOutputs: {},
failureReasonType: '<string>',
requestContext: {source: 'WORKFLOWS', workflowId: 123, actionId: 123}
})
};
fetch('https://api.hubapi.com/automation/actions/callbacks/2026-03/{callbackId}/complete', 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://api.hubapi.com/automation/actions/callbacks/2026-03/{callbackId}/complete",
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([
'outputFields' => [
],
'typedOutputs' => [
],
'failureReasonType' => '<string>',
'requestContext' => [
'source' => 'WORKFLOWS',
'workflowId' => 123,
'actionId' => 123
]
]),
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://api.hubapi.com/automation/actions/callbacks/2026-03/{callbackId}/complete"
payload := strings.NewReader("{\n \"outputFields\": {},\n \"typedOutputs\": {},\n \"failureReasonType\": \"<string>\",\n \"requestContext\": {\n \"source\": \"WORKFLOWS\",\n \"workflowId\": 123,\n \"actionId\": 123\n }\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://api.hubapi.com/automation/actions/callbacks/2026-03/{callbackId}/complete")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"outputFields\": {},\n \"typedOutputs\": {},\n \"failureReasonType\": \"<string>\",\n \"requestContext\": {\n \"source\": \"WORKFLOWS\",\n \"workflowId\": 123,\n \"actionId\": 123\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hubapi.com/automation/actions/callbacks/2026-03/{callbackId}/complete")
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 \"outputFields\": {},\n \"typedOutputs\": {},\n \"failureReasonType\": \"<string>\",\n \"requestContext\": {\n \"source\": \"WORKFLOWS\",\n \"workflowId\": 123,\n \"actionId\": 123\n }\n}"
response = http.request(request)
puts response.read_bodyThis response has no body data.{
"message": "Invalid input (details will vary based on the error)",
"correlationId": "aeb5f871-7f07-4993-9211-075dc63e7cbf",
"category": "VALIDATION_ERROR",
"links": {
"knowledge-base": "https://www.hubspot.com/products/service/knowledge-base"
}
}Callbacks
Complete a callback
Complete a specific blocked action execution by ID.
POST
/
automation
/
actions
/
callbacks
/
2026-03
/
{callbackId}
/
complete
Completes a callback
curl --request POST \
--url https://api.hubapi.com/automation/actions/callbacks/2026-03/{callbackId}/complete \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"outputFields": {},
"typedOutputs": {},
"failureReasonType": "<string>",
"requestContext": {
"source": "WORKFLOWS",
"workflowId": 123,
"actionId": 123
}
}
'import requests
url = "https://api.hubapi.com/automation/actions/callbacks/2026-03/{callbackId}/complete"
payload = {
"outputFields": {},
"typedOutputs": {},
"failureReasonType": "<string>",
"requestContext": {
"source": "WORKFLOWS",
"workflowId": 123,
"actionId": 123
}
}
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({
outputFields: {},
typedOutputs: {},
failureReasonType: '<string>',
requestContext: {source: 'WORKFLOWS', workflowId: 123, actionId: 123}
})
};
fetch('https://api.hubapi.com/automation/actions/callbacks/2026-03/{callbackId}/complete', 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://api.hubapi.com/automation/actions/callbacks/2026-03/{callbackId}/complete",
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([
'outputFields' => [
],
'typedOutputs' => [
],
'failureReasonType' => '<string>',
'requestContext' => [
'source' => 'WORKFLOWS',
'workflowId' => 123,
'actionId' => 123
]
]),
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://api.hubapi.com/automation/actions/callbacks/2026-03/{callbackId}/complete"
payload := strings.NewReader("{\n \"outputFields\": {},\n \"typedOutputs\": {},\n \"failureReasonType\": \"<string>\",\n \"requestContext\": {\n \"source\": \"WORKFLOWS\",\n \"workflowId\": 123,\n \"actionId\": 123\n }\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://api.hubapi.com/automation/actions/callbacks/2026-03/{callbackId}/complete")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"outputFields\": {},\n \"typedOutputs\": {},\n \"failureReasonType\": \"<string>\",\n \"requestContext\": {\n \"source\": \"WORKFLOWS\",\n \"workflowId\": 123,\n \"actionId\": 123\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.hubapi.com/automation/actions/callbacks/2026-03/{callbackId}/complete")
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 \"outputFields\": {},\n \"typedOutputs\": {},\n \"failureReasonType\": \"<string>\",\n \"requestContext\": {\n \"source\": \"WORKFLOWS\",\n \"workflowId\": 123,\n \"actionId\": 123\n }\n}"
response = http.request(request)
puts response.read_bodyThis response has no body data.{
"message": "Invalid input (details will vary based on the error)",
"correlationId": "aeb5f871-7f07-4993-9211-075dc63e7cbf",
"category": "VALIDATION_ERROR",
"links": {
"knowledge-base": "https://www.hubspot.com/products/service/knowledge-base"
}
}Supported products
Supported products
Required Scopes
Required Scopes
Authorizations
The access token received from the authorization server in the OAuth 2.0 flow.
Path Parameters
The unique identifier for the specific callback to complete.
Body
application/json
Contains the output fields associated with the callback, with each field represented as a key-value pair.
Show child attributes
Show child attributes
Holds the typed outputs related to the callback, structured as an object.
Indicates the reason for the failure of a callback completion.
Specifies the context in which the request is made, which can be one of several predefined contexts.
- WORKFLOWS
- AGENTS
- COPILOT
- STANDALONE
- TEST
Show child attributes
Show child attributes
Response
Last modified on March 31, 2026
Was this page helpful?
⌘I