curl --request GET \
--url https://api.reply.io/v3/prompt-actions/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.reply.io/v3/prompt-actions/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.reply.io/v3/prompt-actions/{id}', 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.reply.io/v3/prompt-actions/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.reply.io/v3/prompt-actions/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.reply.io/v3/prompt-actions/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.reply.io/v3/prompt-actions/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": 312,
"name": "Company focus summary",
"prompt": "Summarise in one sentence what {{Company}} sells, based on their website.",
"outputs": [
{
"id": 84,
"label": "Company focus",
"customFieldId": 1907,
"customFieldName": "Company focus",
"fieldType": "text"
}
],
"createdAt": "2026-09-02T11:24:31.120Z",
"lastRunAt": "2026-09-14T08:03:55.000Z"
}{
"title": "Validation failed",
"status": 400,
"detail": "One or more parameters did not match the expected format.",
"errors": [
{
"pointer": "id",
"detail": "The field id must be between 1 and 2147483647."
}
]
}{
"title": "Unauthorized",
"status": 401,
"detail": "Authentication credentials are missing or invalid."
}{
"title": "Forbidden",
"status": 403,
"detail": "Prompt Actions feature is not available for your team",
"code": "promptAction.featureDisabled"
}{
"title": "Not Found",
"status": 404,
"detail": "Prompt Action with ID 312 not found",
"code": "promptAction.notFound"
}{
"title": "Too Many Requests",
"status": 429,
"detail": "API calls quota exceeded! maximum admitted 100 per 1m."
}Get a Prompt Action
New. This endpoint shipped recently. If anything about it is unclear or could work better for you, tell us in the developer Slack.
contacts:read scope (or a broader one that includes it).
Read one Prompt Action, including its prompt text, its outputs and the custom fields they write into.
curl --request GET \
--url https://api.reply.io/v3/prompt-actions/{id} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.reply.io/v3/prompt-actions/{id}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.reply.io/v3/prompt-actions/{id}', 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.reply.io/v3/prompt-actions/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.reply.io/v3/prompt-actions/{id}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.reply.io/v3/prompt-actions/{id}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.reply.io/v3/prompt-actions/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": 312,
"name": "Company focus summary",
"prompt": "Summarise in one sentence what {{Company}} sells, based on their website.",
"outputs": [
{
"id": 84,
"label": "Company focus",
"customFieldId": 1907,
"customFieldName": "Company focus",
"fieldType": "text"
}
],
"createdAt": "2026-09-02T11:24:31.120Z",
"lastRunAt": "2026-09-14T08:03:55.000Z"
}{
"title": "Validation failed",
"status": 400,
"detail": "One or more parameters did not match the expected format.",
"errors": [
{
"pointer": "id",
"detail": "The field id must be between 1 and 2147483647."
}
]
}{
"title": "Unauthorized",
"status": 401,
"detail": "Authentication credentials are missing or invalid."
}{
"title": "Forbidden",
"status": 403,
"detail": "Prompt Actions feature is not available for your team",
"code": "promptAction.featureDisabled"
}{
"title": "Not Found",
"status": 404,
"detail": "Prompt Action with ID 312 not found",
"code": "promptAction.notFound"
}{
"title": "Too Many Requests",
"status": 429,
"detail": "API calls quota exceeded! maximum admitted 100 per 1m."
}Authorizations
Authenticate every request with a Bearer token. Pass your Reply API key in the
Authorization header:
Authorization: Bearer <your-api-key>
Get your API key from the Reply dashboard: Settings → API Key.
Path Parameters
Prompt Action ID
x >= 1Response
The Prompt Action
A reusable AI prompt that runs against contacts and writes its results into contact custom fields.
Unique identifier of the Prompt Action
Name of the Prompt Action
Prompt text sent to the model
Values the prompt produces, each mapped to a contact custom field
Show child attributes
Show child attributes
When the Prompt Action was created
When the Prompt Action was last run, or null if it has never run