curl \
-H "Authorization: Bearer API_KEY" \
-X GET "https://api.ayrshare.com/api/automations/auto_9xKp2Lm4nQ/activity?limit=25"
curl \
-H "Authorization: Bearer API_KEY" \
-X GET "https://api.ayrshare.com/api/automations/auto_9xKp2Lm4nQ/activity?limit=25&next=eyJ0aW1lIjoiMjAyNi0wNS0xMlQw..."
const API_KEY = "API_KEY";
const id = "auto_9xKp2Lm4nQ";
// Paginate through every page
let next;
do {
const url = new URL(`https://api.ayrshare.com/api/automations/${id}/activity`);
url.searchParams.set("limit", "25");
if (next) url.searchParams.set("next", next);
const res = await fetch(url, {
headers: { "Authorization": `Bearer ${API_KEY}` },
});
const json = await res.json();
console.log(json.activity);
next = json.meta?.pagination?.hasMore ? json.meta.pagination.next : undefined;
} while (next);
import requests
headers = {"Authorization": "Bearer API_KEY"}
automation_id = "auto_9xKp2Lm4nQ"
params = {"limit": 25}
while True:
r = requests.get(
f"https://api.ayrshare.com/api/automations/{automation_id}/activity",
params=params,
headers=headers,
).json()
print(r["activity"])
pagination = r.get("meta", {}).get("pagination", {})
if not pagination.get("hasMore"):
break
params["next"] = pagination["next"]
$id = "auto_9xKp2Lm4nQ";
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.ayrshare.com/api/automations/" . $id . "/activity?limit=25",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => ["Authorization: Bearer API_KEY"],
]);
$response = curl_exec($curl);
curl_close($curl);
echo $response;
{
"status": "success",
"automationId": "auto_9xKp2Lm4nQ",
"activity": [
{
"id": "auto_9xKp2Lm4nQ:trg_a1b2c3:comment.received:18012345678901234",
"automationId": "auto_9xKp2Lm4nQ",
"triggerId": "trg_a1b2c3",
"triggerType": "comment_keyword",
"recipientId": "17841401234567890",
"recipientUsername": "jane_doe",
"eventId": "comment.received:18012345678901234",
"commentId": "18012345678901234",
"platform": "instagram",
"status": "sent",
"actionResults": [
{
"actionId": "act_d4e5f6",
"type": "send_dm",
"status": "sent",
"errorDetails": null,
"messageSource": "template",
"config": { "message": "Hi {{recipient_username}}, here's the link: https://example.com" },
"sent": { "message": "Hi jane_doe, here's the link: https://example.com" },
"completedAt": "2026-05-12T09:14:48.000Z"
}
],
"keyword": "LINK",
"commentText": "Send me the LINK please!",
"created": "2026-05-12T09:14:22.000Z",
"completedAt": "2026-05-12T09:14:48.000Z"
},
{
"id": "auto_9xKp2Lm4nQ:trg_a1b2c3:comment.received:18012345678905555",
"automationId": "auto_9xKp2Lm4nQ",
"triggerId": "trg_a1b2c3",
"triggerType": "comment_keyword",
"recipientId": "17841405555555555",
"recipientUsername": "late_commenter",
"eventId": "comment.received:18012345678905555",
"commentId": "18012345678905555",
"platform": "instagram",
"status": "failed",
"actionResults": [
{
"actionId": "act_d4e5f6",
"type": "send_dm",
"status": "failed",
"errorDetails": "Cannot send private reply: This comment is no longer eligible for a private reply.",
"completedAt": "2026-05-12T09:12:03.000Z"
}
],
"keyword": "LINK",
"commentText": "LINK please!",
"created": "2026-05-12T09:12:01.000Z",
"completedAt": "2026-05-12T09:12:03.000Z"
},
{
"id": "auto_9xKp2Lm4nQ:trg_a1b2c3:comment.received:18012345678900000",
"automationId": "auto_9xKp2Lm4nQ",
"triggerId": "trg_a1b2c3",
"triggerType": "comment_keyword",
"recipientId": "17841409876543210",
"recipientUsername": "repeat_user",
"eventId": "comment.received:18012345678900000",
"commentId": "18012345678900000",
"platform": "instagram",
"status": "deduplicated",
"actionResults": [],
"keyword": "LINK",
"commentText": "LINK again please",
"created": "2026-05-12T09:00:11.000Z",
"completedAt": "2026-05-12T09:00:34.000Z"
}
],
"meta": {
"pagination": {
"hasMore": true,
"limit": 25,
"next": "eyJ0aW1lIjoiMjAyNi0wNS0xMlQwOTowMDoxMS4wMDBaIiwiaWQiOiJhdXRvXzl4S3AyTG00blE6dHJnX2ExYjJjMzoxODAxMjM0NTY3ODkwMDAwMCJ9"
}
}
}
{
"status": "error",
"message": "limit must be a positive integer"
}
{
"status": "error",
"message": "'previous' pagination is not supported by this endpoint"
}
{
"action": "automation",
"status": "error",
"code": 469,
"message": "Automation not found"
}
Automations
ऑटोमेशन गतिविधि प्राप्त करें
एक ऑटोमेशन के लिए कर्सर-पेजिनेटेड ऑडिट लॉग
GET
/
automations
/
:id
/
activity
curl \
-H "Authorization: Bearer API_KEY" \
-X GET "https://api.ayrshare.com/api/automations/auto_9xKp2Lm4nQ/activity?limit=25"
curl \
-H "Authorization: Bearer API_KEY" \
-X GET "https://api.ayrshare.com/api/automations/auto_9xKp2Lm4nQ/activity?limit=25&next=eyJ0aW1lIjoiMjAyNi0wNS0xMlQw..."
const API_KEY = "API_KEY";
const id = "auto_9xKp2Lm4nQ";
// Paginate through every page
let next;
do {
const url = new URL(`https://api.ayrshare.com/api/automations/${id}/activity`);
url.searchParams.set("limit", "25");
if (next) url.searchParams.set("next", next);
const res = await fetch(url, {
headers: { "Authorization": `Bearer ${API_KEY}` },
});
const json = await res.json();
console.log(json.activity);
next = json.meta?.pagination?.hasMore ? json.meta.pagination.next : undefined;
} while (next);
import requests
headers = {"Authorization": "Bearer API_KEY"}
automation_id = "auto_9xKp2Lm4nQ"
params = {"limit": 25}
while True:
r = requests.get(
f"https://api.ayrshare.com/api/automations/{automation_id}/activity",
params=params,
headers=headers,
).json()
print(r["activity"])
pagination = r.get("meta", {}).get("pagination", {})
if not pagination.get("hasMore"):
break
params["next"] = pagination["next"]
$id = "auto_9xKp2Lm4nQ";
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.ayrshare.com/api/automations/" . $id . "/activity?limit=25",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => ["Authorization: Bearer API_KEY"],
]);
$response = curl_exec($curl);
curl_close($curl);
echo $response;
{
"status": "success",
"automationId": "auto_9xKp2Lm4nQ",
"activity": [
{
"id": "auto_9xKp2Lm4nQ:trg_a1b2c3:comment.received:18012345678901234",
"automationId": "auto_9xKp2Lm4nQ",
"triggerId": "trg_a1b2c3",
"triggerType": "comment_keyword",
"recipientId": "17841401234567890",
"recipientUsername": "jane_doe",
"eventId": "comment.received:18012345678901234",
"commentId": "18012345678901234",
"platform": "instagram",
"status": "sent",
"actionResults": [
{
"actionId": "act_d4e5f6",
"type": "send_dm",
"status": "sent",
"errorDetails": null,
"messageSource": "template",
"config": { "message": "Hi {{recipient_username}}, here's the link: https://example.com" },
"sent": { "message": "Hi jane_doe, here's the link: https://example.com" },
"completedAt": "2026-05-12T09:14:48.000Z"
}
],
"keyword": "LINK",
"commentText": "Send me the LINK please!",
"created": "2026-05-12T09:14:22.000Z",
"completedAt": "2026-05-12T09:14:48.000Z"
},
{
"id": "auto_9xKp2Lm4nQ:trg_a1b2c3:comment.received:18012345678905555",
"automationId": "auto_9xKp2Lm4nQ",
"triggerId": "trg_a1b2c3",
"triggerType": "comment_keyword",
"recipientId": "17841405555555555",
"recipientUsername": "late_commenter",
"eventId": "comment.received:18012345678905555",
"commentId": "18012345678905555",
"platform": "instagram",
"status": "failed",
"actionResults": [
{
"actionId": "act_d4e5f6",
"type": "send_dm",
"status": "failed",
"errorDetails": "Cannot send private reply: This comment is no longer eligible for a private reply.",
"completedAt": "2026-05-12T09:12:03.000Z"
}
],
"keyword": "LINK",
"commentText": "LINK please!",
"created": "2026-05-12T09:12:01.000Z",
"completedAt": "2026-05-12T09:12:03.000Z"
},
{
"id": "auto_9xKp2Lm4nQ:trg_a1b2c3:comment.received:18012345678900000",
"automationId": "auto_9xKp2Lm4nQ",
"triggerId": "trg_a1b2c3",
"triggerType": "comment_keyword",
"recipientId": "17841409876543210",
"recipientUsername": "repeat_user",
"eventId": "comment.received:18012345678900000",
"commentId": "18012345678900000",
"platform": "instagram",
"status": "deduplicated",
"actionResults": [],
"keyword": "LINK",
"commentText": "LINK again please",
"created": "2026-05-12T09:00:11.000Z",
"completedAt": "2026-05-12T09:00:34.000Z"
}
],
"meta": {
"pagination": {
"hasMore": true,
"limit": 25,
"next": "eyJ0aW1lIjoiMjAyNi0wNS0xMlQwOTowMDoxMS4wMDBaIiwiaWQiOiJhdXRvXzl4S3AyTG00blE6dHJnX2ExYjJjMzoxODAxMjM0NTY3ODkwMDAwMCJ9"
}
}
}
{
"status": "error",
"message": "limit must be a positive integer"
}
{
"status": "error",
"message": "'previous' pagination is not supported by this endpoint"
}
{
"action": "automation",
"status": "error",
"code": 469,
"message": "Automation not found"
}
बीटा। पूर्ण फ़ीचर विवरण के लिए Automations Overview देखें।
गतिविधि पंक्ति की स्थिति
प्रत्येक पंक्ति में शीर्ष-स्तरीयstatus के साथ-साथ actionResults[] के अंदर प्रति-क्रिया status होती है।
| स्थिति | कब रिकॉर्ड की जाती है |
|---|---|
pending | पंक्ति अभी लिखी गई थी; वर्कर ने अभी तक इसे नहीं उठाया है |
in_flight | वर्कर वर्तमान में डिस्पैच कर रहा है |
sent | कम से कम एक क्रिया प्लेटफ़ॉर्म द्वारा स्वीकार की गई, और किसी को प्रमाणीकरण त्रुटि नहीं मिली। send_dm के लिए इसका अर्थ है कि Meta ने संदेश स्वीकार किया — यह नहीं कि प्राप्तकर्ता को यह मिला (नीचे दिया गया नोट देखें) |
failed | कोई भी क्रिया स्वीकार नहीं की गई, और कम से कम एक प्लेटफ़ॉर्म द्वारा अस्वीकार कर दी गई या नहीं चल सकी (और किसी को प्रमाणीकरण त्रुटि नहीं मिली)। कारण actionResults[].errorDetails पर होता है |
auth_error | खाते के Instagram या Facebook Page क्रेडेंशियल या मैसेजिंग अनुमतियों का उपयोग नहीं किया जा सका — उदाहरण के लिए एक समाप्त या रद्द किया गया एक्सेस टोकन, गुम Facebook Page चयन, या प्रोफ़ाइल के लिए Messaging सक्रिय न होना। DM पुनः प्रयास नहीं किया गया। प्रति-प्राप्तकर्ता डिलीवरी विफलताएँ यहाँ नहीं, बल्कि failed के रूप में दर्ज की जाती हैं |
rate_limited | दैनिक DM सीमा (टियर या प्रति-प्रोफ़ाइल) पूरी हो गई। कोई DM नहीं भेजा गया |
deduplicated | यह क्रिया पहले ही इस प्राप्तकर्ता को इसकी डेडअप विंडो के भीतर भेजी जा चुकी थी (डिफ़ॉल्ट 7 दिन, प्रति-क्रिया कॉन्फ़िगर करने योग्य) |
skipped | ऑटोमेशन को डिस्पैच से पहले दबा दिया गया — यह फैन-आउट और डिस्पैच के बीच निष्क्रिय हो गया या हटा दिया गया, इसमें कोई क्रिया कॉन्फ़िगर नहीं है, या इसे ट्रिगर करने वाला एंगेजमेंट ऑटोमेशन के अपने ही खाते से आया — सबसे अधिक बार आपकी अपनी पोस्ट पर एक टिप्पणी। उस अंतिम मामले में कोई क्रिया नहीं चलती: कोई DM नहीं (एक खाता स्वयं को संदेश नहीं भेज सकता), और न ही कोई fire_webhook या send_email। जिस ऑटोमेशन ने automation.completed में ऑप्ट-इन किया है, उसे वह घटना अब भी मिलती है, इसी स्थिति के साथ |
pending और in_flight क्षणिक हैं; बाकी सब टर्मिनल हैं।
जब किसी ऑटोमेशन में एक से अधिक क्रियाएँ हों, तो शीर्ष-स्तरीय status प्रति-क्रिया परिणामों से इस क्रम में व्युत्पन्न होता है: auth_error यदि किसी क्रिया को प्रमाणीकरण त्रुटि मिली, फिर sent यदि कोई क्रिया स्वीकार की गई, फिर deduplicated यदि हर क्रिया डुप्लीकेटेड हुई, फिर skipped यदि हर क्रिया जानबूझकर दबाई गई (skipped या deduplicated), अन्यथा failed। प्रति-क्रिया विवरण के लिए actionResults[] पढ़ें।
sent इस बात की पुष्टि करता है कि Meta ने संदेश स्वीकार किया, यह नहीं कि प्राप्तकर्ता को यह मिला। यह Instagram DM और Facebook Page से भेजे गए Messenger DM, दोनों पर लागू होता है: ऑटोमेशन केवल स्वीकृति दर्ज करता है और डिलीवरी को ट्रैक नहीं करता। Instagram किसी भी API सतह पर डिलीवरी संकेत उजागर नहीं करता, और यदि प्राप्तकर्ता की Message requests सेटिंग अजनबियों को ब्लॉक करती है, तो Meta भेजने को स्वीकार करता है और उसे चुपचाप छोड़ देता है। देखें Automation DM Sent but Not Delivered।प्रति-क्रिया परिणाम फ़ील्ड्स
actionResults[] में प्रत्येक प्रविष्टि एक क्रिया के परिणाम का वर्णन करती है:
| फ़ील्ड | प्रकार | विवरण |
|---|---|---|
actionId | string | ऑटोमेशन के भीतर क्रिया की स्थिर ID |
type | string | क्रिया प्रकार (send_dm, fire_webhook, send_email) |
status | string | प्रति-क्रिया स्थिति, ऊपर दिए गए रो status जैसी ही शब्दावली का उपयोग करते हुए |
errorDetails | string | null | पठनीय विफलता कारण जब क्रिया सफल नहीं हुई; सफलता पर null (या अनुपस्थित)। अस्वीकृत send_dm के लिए यह मैप किया गया त्रुटि संदेश ले जाता है (उदाहरण के लिए private-reply विंडो बंद है, या टिप्पणी को पहले से ही एक उत्तर मिल चुका है)। सफलता पर null का एक अपवाद: messageSource: "fallback" वाला send_dm sent होता है और उसमें वह कारण होता है जिसकी वजह से उसके कॉलबैक का उपयोग नहीं किया गया। जो fallback बाद में भेजने में विफल रहा, उसमें भेजने की त्रुटि और उसके बाद वह कारण होता है |
messageSource | string | केवल send_dm। DM किस टेक्स्ट से बनाया गया था: template (स्थिर message), callback (आपके messageUrl ने उत्तर दिया और उसके टेक्स्ट का उपयोग किया गया) या fallback (messageUrl सेट था लेकिन उपयोग योग्य नहीं था, इसलिए इसके बजाय message का उपयोग किया गया, जिसका कारण errorDetails पर होता है)। यह नहीं बताता कि DM डिलीवर हुआ या नहीं; वह status बताता है। DM टेक्स्ट तय हो जाने के बाद मौजूद होता है, उन भेजने के प्रयासों सहित जो बाद में विफल हो गए। तब अनुपस्थित होता है जब क्रिया उससे पहले रुक गई (आपके अपने खाते को skipped DM, एक deduplicated क्रिया, या गुम comment id जैसी failed कॉन्फ़िगरेशन त्रुटि), और अन्य क्रिया प्रकारों के लिए |
config | object (वैकल्पिक) | क्रिया का कॉन्फ़िगरेशन जैसा वह इस fire के चलने के समय था, उदाहरण के लिए send_dm का message टेम्पलेट। यदि आप बाद में ऑटोमेशन संपादित करते हैं तो भी यह वैसा ही रहता है, इसलिए प्रत्येक रो दिखाता है कि उस समय क्या कॉन्फ़िगर किया गया था। इस फ़ील्ड के जोड़े जाने से पहले लिखी गई पंक्तियों पर अनुपस्थित होता है, और तब भी जब इसे आकार सीमा में फ़िट करने के लिए हटा दिया गया (तब truncated true होता है) |
sent | object (वैकल्पिक) | इस fire के लिए क्रिया ने क्या भेजा, या भेजने का प्रयास किया। क्रिया द्वारा अपना संदेश या payload बना लेने के बाद दर्ज किया जाता है, तब भी जब भेजना बाद में विफल हो गया: status बताता है कि वह गया या नहीं। तब अनुपस्थित होता है जब क्रिया भेजने से पहले रुक गई, उदाहरण के लिए आपके अपने खाते की टिप्पणी के लिए skipped परिणाम, और deduplicated परिणामों के लिए। देखें sent में क्या होता है |
truncated | boolean (वैकल्पिक) | true जब प्रविष्टि को उसकी आकार सीमा में फ़िट करने के लिए काटा गया: कोई लंबी टेक्स्ट वैल्यू छोटी की गई, या config और फिर sent को पूरी तरह छोड़ दिया गया। अन्यथा अनुपस्थित |
completedAt | string | ISO 8601 टाइमस्टैम्प जब क्रिया समाप्त हुई |
sent में क्या होता है
| क्रिया प्रकार | sent फ़ील्ड्स |
|---|---|
send_dm | message: वह टेक्स्ट जिसके साथ DM भेजा गया। यानी इस प्राप्तकर्ता के लिए प्लेसहोल्डर भरे हुए आपका message टेम्पलेट या, जब messageSource callback हो, तो वह टेक्स्ट जो आपके messageUrl ने लौटाया। fallbackMessage: केवल तब मौजूद होता है जब messageSource callback हो; आपका भरा हुआ टेम्पलेट, जैसा वह callback के बिना भेजा जाता |
send_email | to, subject और message: ईमेल जैसा वह कतार में डाला गया था, प्लेसहोल्डर भरे हुए |
fire_webhook | payload: आपके webhook को भेजे गए event फ़ील्ड्स। डिलीवर की गई body में मानक webhook फ़ील्ड्स भी होते हैं (action, created, hookId, refId, url, और webhook साइन होने पर timeStamp)। hookId: डिलीवरी की id, तब मौजूद जब webhook कतार में डाला गया था |
truncated सेट किया जाता है। क्रेडेंशियल जैसे दिखने वाले key नामों, जैसे token, secret, password या apiKey, के तहत संग्रहीत वैल्यू "[redacted]" के रूप में दर्ज की जाती हैं। किसी send_dm क्रिया का messageUrl भी हमेशा "[redacted]" के रूप में दर्ज किया जाता है, क्योंकि किसी URL के path या query string में कोई secret हो सकता है।
टिप्पणी-ट्रिगर्ड ऑटोमेशन (comment_keyword) के लिए, रो एक शीर्ष-स्तरीय commentId भी ले जाता है — कच्ची Instagram टिप्पणी ID जिस पर DM एंकर किया गया था। संदेश-चालित ट्रिगर (dm_keyword, story_reply, dm_reaction) के लिए यह null है।
पंक्तियाँ postId (वह पोस्ट जिस पर comment_keyword टिप्पणी छोड़ी गई थी) और storyId (story_reply और story_comment के लिए स्टोरी) भी ले जाती हैं। अन्य ट्रिगर्स के लिए प्रत्येक null है, और इन फ़ील्ड्स के जोड़े जाने से पहले लिखी गई पंक्तियों पर अनुपस्थित है।
हेडर पैरामीटर
पाथ पैरामीटर
string
आवश्यक
POST /automations से लौटाई गई ऑटोमेशन ID।क्वेरी पैरामीटर
number
डिफ़ॉल्ट:25
पेज साइज़। डिफ़ॉल्ट
25, अधिकतम 100। [1, 100] के बाहर के मान क्लैम्प किए जाते हैं; गैर-पूर्णांक या ≤0 HTTP 400 लौटाता है।string
पिछली प्रतिक्रिया के
meta.pagination.next से अपारदर्शी कर्सर। पहले अनुरोध पर छोड़ दें।केवल-आगे — ?previous= पास करने पर HTTP 400 लौटाता है।प्रतिक्रिया आकार
प्रतिक्रिया परिणाम सूची कोactivity[] में और कर्सर जानकारी को meta.pagination में लपेटती है:
{
"status": "success",
"automationId": "auto_9xKp2Lm4nQ",
"activity": [ /* …rows, newest first… */ ],
"meta": {
"pagination": {
"hasMore": true,
"limit": 25,
"next": "eyJ0aW1lIjoiMjAyNi0wNS0xMlQwOTowMDoxMS4wMDBaIiwiaWQiOiJhdXRvXzl4S3AyTG00blE6dHJnX2ExYjJjMzpjb21tZW50X3JlY2VpdmVkOjE4MDEyMzQ1Njc4OTAwMDAwIn0="
}
}
}
meta.pagination.next एक base64-एन्कोडेड अपारदर्शी ब्लॉब है — इसे एक ब्लैक बॉक्स के रूप में मानें और अगले अनुरोध के ?next= में अपरिवर्तित पास करें। जब कम से कम एक और पेज मौजूद हो तो meta.pagination.hasMore true होता है।
curl \
-H "Authorization: Bearer API_KEY" \
-X GET "https://api.ayrshare.com/api/automations/auto_9xKp2Lm4nQ/activity?limit=25"
curl \
-H "Authorization: Bearer API_KEY" \
-X GET "https://api.ayrshare.com/api/automations/auto_9xKp2Lm4nQ/activity?limit=25&next=eyJ0aW1lIjoiMjAyNi0wNS0xMlQw..."
const API_KEY = "API_KEY";
const id = "auto_9xKp2Lm4nQ";
// Paginate through every page
let next;
do {
const url = new URL(`https://api.ayrshare.com/api/automations/${id}/activity`);
url.searchParams.set("limit", "25");
if (next) url.searchParams.set("next", next);
const res = await fetch(url, {
headers: { "Authorization": `Bearer ${API_KEY}` },
});
const json = await res.json();
console.log(json.activity);
next = json.meta?.pagination?.hasMore ? json.meta.pagination.next : undefined;
} while (next);
import requests
headers = {"Authorization": "Bearer API_KEY"}
automation_id = "auto_9xKp2Lm4nQ"
params = {"limit": 25}
while True:
r = requests.get(
f"https://api.ayrshare.com/api/automations/{automation_id}/activity",
params=params,
headers=headers,
).json()
print(r["activity"])
pagination = r.get("meta", {}).get("pagination", {})
if not pagination.get("hasMore"):
break
params["next"] = pagination["next"]
$id = "auto_9xKp2Lm4nQ";
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.ayrshare.com/api/automations/" . $id . "/activity?limit=25",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => ["Authorization: Bearer API_KEY"],
]);
$response = curl_exec($curl);
curl_close($curl);
echo $response;
{
"status": "success",
"automationId": "auto_9xKp2Lm4nQ",
"activity": [
{
"id": "auto_9xKp2Lm4nQ:trg_a1b2c3:comment.received:18012345678901234",
"automationId": "auto_9xKp2Lm4nQ",
"triggerId": "trg_a1b2c3",
"triggerType": "comment_keyword",
"recipientId": "17841401234567890",
"recipientUsername": "jane_doe",
"eventId": "comment.received:18012345678901234",
"commentId": "18012345678901234",
"platform": "instagram",
"status": "sent",
"actionResults": [
{
"actionId": "act_d4e5f6",
"type": "send_dm",
"status": "sent",
"errorDetails": null,
"messageSource": "template",
"config": { "message": "Hi {{recipient_username}}, here's the link: https://example.com" },
"sent": { "message": "Hi jane_doe, here's the link: https://example.com" },
"completedAt": "2026-05-12T09:14:48.000Z"
}
],
"keyword": "LINK",
"commentText": "Send me the LINK please!",
"created": "2026-05-12T09:14:22.000Z",
"completedAt": "2026-05-12T09:14:48.000Z"
},
{
"id": "auto_9xKp2Lm4nQ:trg_a1b2c3:comment.received:18012345678905555",
"automationId": "auto_9xKp2Lm4nQ",
"triggerId": "trg_a1b2c3",
"triggerType": "comment_keyword",
"recipientId": "17841405555555555",
"recipientUsername": "late_commenter",
"eventId": "comment.received:18012345678905555",
"commentId": "18012345678905555",
"platform": "instagram",
"status": "failed",
"actionResults": [
{
"actionId": "act_d4e5f6",
"type": "send_dm",
"status": "failed",
"errorDetails": "Cannot send private reply: This comment is no longer eligible for a private reply.",
"completedAt": "2026-05-12T09:12:03.000Z"
}
],
"keyword": "LINK",
"commentText": "LINK please!",
"created": "2026-05-12T09:12:01.000Z",
"completedAt": "2026-05-12T09:12:03.000Z"
},
{
"id": "auto_9xKp2Lm4nQ:trg_a1b2c3:comment.received:18012345678900000",
"automationId": "auto_9xKp2Lm4nQ",
"triggerId": "trg_a1b2c3",
"triggerType": "comment_keyword",
"recipientId": "17841409876543210",
"recipientUsername": "repeat_user",
"eventId": "comment.received:18012345678900000",
"commentId": "18012345678900000",
"platform": "instagram",
"status": "deduplicated",
"actionResults": [],
"keyword": "LINK",
"commentText": "LINK again please",
"created": "2026-05-12T09:00:11.000Z",
"completedAt": "2026-05-12T09:00:34.000Z"
}
],
"meta": {
"pagination": {
"hasMore": true,
"limit": 25,
"next": "eyJ0aW1lIjoiMjAyNi0wNS0xMlQwOTowMDoxMS4wMDBaIiwiaWQiOiJhdXRvXzl4S3AyTG00blE6dHJnX2ExYjJjMzoxODAxMjM0NTY3ODkwMDAwMCJ9"
}
}
}
{
"status": "error",
"message": "limit must be a positive integer"
}
{
"status": "error",
"message": "'previous' pagination is not supported by this endpoint"
}
{
"action": "automation",
"status": "error",
"code": 469,
"message": "Automation not found"
}