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"
}
نسخة تجريبية (Beta). انظر نظرة عامة على الأتمتة للاطلاع على وصف الميزة الكامل.
حالة صف النشاط
يحتوي كل صف علىstatus رئيسي بالإضافة إلى status لكل إجراء داخل actionResults[].
| Status | متى تُسجَّل |
|---|---|
pending | كُتب الصف للتو، ولم يلتقطه العامل بعد |
in_flight | العامل يقوم حاليًا بالإرسال |
sent | تم قبول إجراء واحد على الأقل من قِبل المنصة، ولم يواجه أي منها خطأ مصادقة. بالنسبة إلى send_dm يعني ذلك أن Meta قبلت الرسالة — وليس أن المستلم قد استلمها (انظر الملاحظة أدناه) |
failed | لم يُقبل أي إجراء، وتم رفض إجراء واحد على الأقل من قِبل المنصة أو تعذّر تنفيذه (ولم يواجه أي منها خطأ مصادقة). السبب مذكور في actionResults[].errorDetails |
auth_error | تعذّر استخدام بيانات اعتماد Instagram أو صفحة Facebook الخاصة بالحساب أو أذونات المراسلة — على سبيل المثال رمز وصول منتهي الصلاحية أو مُلغى، أو عدم اختيار Facebook Page، أو عدم تفعيل Messaging للملف الشخصي. لم تُعَد محاولة إرسال الرسالة المباشرة. تُسجَّل إخفاقات التسليم لكل مستلم بوصفها failed، وليس هنا |
rate_limited | تم بلوغ الحد اليومي للرسائل المباشرة (على مستوى الفئة أو الملف الشخصي). لم تُرسل أي رسالة |
deduplicated | تم تنفيذ هذا الإجراء بالفعل مع هذا المستلم داخل نافذة عدم التكرار (الافتراضي 7 أيام، قابل للتخصيص لكل إجراء) |
skipped | تم كبح الأتمتة قبل الإرسال — إما أصبحت غير نشطة أو حُذفت بين مرحلة التوزيع والإرسال، أو لا توجد إجراءات مُهيَّأة لها، أو أن التفاعل الذي أطلقها جاء من حساب الأتمتة نفسه — وأكثر الحالات شيوعًا تعليق على منشورك الخاص. في تلك الحالة الأخيرة لا يُنفَّذ أي إجراء: لا رسالة مباشرة (لا يمكن لحساب أن يراسل نفسه)، ولا fire_webhook أو send_email أيضًا. الأتمتة التي فعّلت automation.completed لا تزال تتلقى ذلك الحدث، بهذه الحالة |
pending وin_flight حالات مؤقتة؛ وسواها حالات نهائية.
عندما تحتوي الأتمتة على أكثر من إجراء، تُشتق حالة status على المستوى الأعلى من نتائج كل إجراء بهذا الترتيب: auth_error إذا واجه أي إجراء خطأ مصادقة، ثم sent إذا قُبل أي إجراء، ثم deduplicated إذا كانت كل الإجراءات مُزالة التكرار، ثم skipped إذا كانت كل الإجراءات مكبوحة عمدًا (skipped أو deduplicated)، وإلا فـ failed. راجع actionResults[] للاطلاع على تفاصيل كل إجراء.
تُؤكّد
sent أن Meta قبلت الرسالة، وليس أن المستلم قد استلمها. ينطبق هذا على الرسائل الخاصة على Instagram وعلى رسائل Messenger الخاصة من صفحة Facebook: تسجّل الأتمتة القبول فقط ولا تتتبّع التسليم. لا يكشف Instagram أي إشارة تسليم على أي واجهة برمجية، وإذا كان إعداد Message requests لدى المستلم يمنع الغرباء، فإن Meta تقبل الإرسال وتُسقطه بصمت. راجع رسالة أتمتة أُرسلت لكنها لم تُسلَّم.حقول نتيجة كل إجراء
يصف كل إدخال فيactionResults[] نتيجة إجراء واحد:
| الحقل | النوع | الوصف |
|---|---|---|
actionId | string | المعرّف الثابت للإجراء داخل الأتمتة |
type | string | نوع الإجراء (send_dm، fire_webhook، send_email) |
status | string | حالة كل إجراء، باستخدام نفس المفردات المستخدمة في حالة الصف status أعلاه |
errorDetails | string | null | سبب الفشل بصيغة يمكن قراءتها عندما لا ينجح الإجراء؛ يكون null (أو غائبًا) عند النجاح. بالنسبة إلى send_dm المرفوض يحمل رسالة الخطأ المُطابقة (مثل إغلاق نافذة الرد الخاص، أو أن التعليق تلقّى ردًا بالفعل). استثناء واحد من null عند النجاح: يكون send_dm ذو messageSource: "fallback" بحالة sent ويحمل سبب عدم استخدام الاستدعاء الخاص به. أما fallback الذي فشل إرساله بعد ذلك فيحمل خطأ الإرسال متبوعًا بذلك السبب |
messageSource | string | لـ send_dm فقط. النص الذي بُنيت منه الرسالة الخاصة: template (قيمة message الثابتة)، أو callback (أجاب messageUrl الخاص بك واستُخدم نصه)، أو fallback (عُيّن messageUrl لكنه كان غير قابل للاستخدام، فاستُخدمت message بدلًا منه، مع السبب في errorDetails). لا يوضّح ما إذا كانت الرسالة الخاصة قد سُلّمت؛ فذلك ما يوضّحه status. يوجد بمجرد تحديد نص الرسالة الخاصة، بما في ذلك عمليات الإرسال التي فشلت بعد ذلك. ويغيب عندما يتوقف الإجراء قبل ذلك (رسالة خاصة skipped إلى حسابك الخاص، أو إجراء deduplicated، أو خطأ تهيئة failed مثل معرّف تعليق مفقود)، وكذلك لأنواع الإجراءات الأخرى |
config | object (اختياري) | تهيئة الإجراء كما كانت عند تنفيذ هذا الإطلاق، مثل قالب message الخاص بـ send_dm. تبقى كما هي إذا عدّلت الأتمتة لاحقًا، بحيث يعرض كل صف ما كان مُهيّأً في ذلك الوقت. تغيب عن الصفوف المكتوبة قبل إضافة هذا الحقل، وعندما تُزال لتتوافق مع حدّ الحجم (وتكون truncated حينها true) |
sent | object (اختياري) | ما أرسله الإجراء، أو حاول إرساله، في هذا الإطلاق. يُسجَّل بمجرد أن يبني الإجراء رسالته أو حمولته، بما في ذلك عندما يفشل الإرسال بعد ذلك: يوضّح status ما إذا كان قد أُرسل. يغيب عندما يتوقف الإجراء قبل الإرسال، مثل نتيجة skipped لتعليق من حسابك الخاص، وكذلك لنتائج deduplicated. راجع ما يحتويه sent |
truncated | boolean (اختياري) | تكون true عندما يُقتطع الإدخال ليتوافق مع حدّ حجمه: إذ اختُصرت قيمة نصية طويلة، أو استُبعد config ثم sent بالكامل. تغيب في غير ذلك |
completedAt | string | ختم زمني بتنسيق ISO 8601 لوقت انتهاء الإجراء |
ما يحتويه sent
| نوع الإجراء | حقول sent |
|---|---|
send_dm | message: النص الذي أُرسلت به الرسالة الخاصة. وهو قالب message الخاص بك بعد ملء العلامات النائبة لهذا المستلم، أو، عندما تكون قيمة messageSource هي callback، النص الذي أعاده messageUrl الخاص بك. fallbackMessage: يظهر فقط عندما تكون قيمة messageSource هي callback؛ وهو قالبك بعد ملئه، كما كان سيُرسل لولا الـ callback |
send_email | to وsubject وmessage: البريد الإلكتروني كما وُضع في قائمة الانتظار، بعد ملء العلامات النائبة |
fire_webhook | payload: حقول الحدث المُرسلة إلى الـ webhook الخاص بك. ويحمل المحتوى المُسلَّم أيضًا حقول webhook القياسية (action وcreated وhookId وrefId وurl، وtimeStamp عندما يكون الـ webhook موقّعًا). hookId: معرّف عملية التسليم، ويوجد عندما يكون الـ webhook قد وُضع في قائمة الانتظار |
truncated عند حدوث ذلك. أما القيم المخزّنة تحت أسماء مفاتيح تبدو كبيانات اعتماد، مثل token أو secret أو password أو apiKey، فتُسجَّل على أنها "[redacted]". كما يُسجَّل messageUrl الخاص بإجراء send_dm دائمًا على أنه "[redacted]"، لأن عنوان URL قد يحمل سرًّا في مساره أو في سلسلة الاستعلام.
بالنسبة إلى الأتمتة المُشغَّلة بالتعليقات (comment_keyword)، يحمل الصف أيضًا commentId على المستوى الأعلى — وهو معرّف تعليق Instagram الأصلي الذي تم ربط الرسالة الخاصة به. تكون قيمته null بالنسبة إلى المشغّلات المدفوعة بالرسائل (dm_keyword، story_reply، dm_reaction).
تحمل الصفوف أيضًا postId (المنشور الذي تُرك عليه تعليق comment_keyword) وstoryId (الستوري الخاص بـ story_reply وstory_comment). تكون قيمة كل منهما null للمشغّلات الأخرى، وتغيب عن الصفوف المكتوبة قبل إضافة هذين الحقلين.
معاملات الترويسة
معاملات المسار
string
مطلوب
معرّف الأتمتة الذي يُعاد من
POST /automations.معاملات الاستعلام
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"
}