> ## Documentation Index
> Fetch the complete documentation index at: https://www.ayrshare.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Automatisierungs-Activity abrufen

> Cursor-paginiertes Audit-Log für eine Automatisierung

export const PlansAvailable = ({plans = [], maxPackRequired}) => {
  let displayPlans = plans;
  if (plans && plans.length === 1) {
    const lowerCasePlan = plans[0].toLowerCase();
    if (lowerCasePlan === "business") {
      displayPlans = ["Launch", "Business", "Enterprise"];
    } else if (lowerCasePlan === "premium") {
      displayPlans = ["Premium", "Launch", "Business", "Enterprise"];
    }
  }
  return <Note>
Available on {displayPlans.length === 1 ? "the " : ""}
{displayPlans.join(", ").replace(/\b\w/g, l => l.toUpperCase())}{" "}
{displayPlans.length > 1 ? "plans" : "plan"}.

{maxPackRequired && <span onClick={() => window.open('https://www.ayrshare.com/docs/additional/maxpack', '_self')} className="flex items-center mt-2 cursor-pointer">
 <span className="px-1.5 py-0.5 rounded text-sm" style={{
    backgroundColor: '#C264B6',
    color: 'white',
    fontSize: '12px'
  }}>
   Max Pack required
 </span>
</span>}
</Note>;
};

export const HeaderAPI = ({noProfileKey, profileKeyRequired}) => <>
    <ParamField header="Authorization" type="string" required>
      <a href="/apis/overview#authorization">API Key</a> of the Primary Profile.
      <br />
      <br />
      Format: <code>Authorization: Bearer API_KEY</code>
    </ParamField>
    {!noProfileKey && (profileKeyRequired ? <ParamField header="Profile-Key" type="string" required>
          <a href="/apis/overview#profile-key-format">Profile Key</a> of a User Profile.
          <br />
          <br />
          Format: <code>Profile-Key: PROFILE_KEY</code>
        </ParamField> : <ParamField header="Profile-Key" type="string">
          <a href="/apis/overview#profile-key-format">Profile Key</a> of a User Profile.
          <br />
          <br />
          Format: <code>Profile-Key: PROFILE_KEY</code>
        </ParamField>)}
  </>;

<PlansAvailable plans={["business", "enterprise"]} maxPackRequired={false} />

<Note>
  **Beta.** Die vollständige Funktionsbeschreibung finden Sie in der [Automations-Übersicht](/apis/automations/overview).
</Note>

Gibt jeden Versendungsversuch einer Automatisierung zurück, neueste zuerst. Jede Zeile enthält den Empfänger, den passenden Trigger, das Ergebnis jeder Aktion und etwaige Fehler.

Es werden Zeilen der letzten **30 Tage** zurückgegeben. Ältere Zeilen existieren in Firestore (die Aufbewahrung ist für Analytics unbegrenzt), werden aus Performance-Gründen von diesem Endpunkt aber ausgeschlossen.

## Status der Activity-Zeile

Jede Zeile hat einen `status` auf oberster Ebene sowie einen `status` pro Aktion innerhalb von `actionResults[]`.

| Status         | Wann er erfasst wird                                                                                                                   |
| -------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| `pending`      | Zeile wurde gerade geschrieben; der Worker hat sie noch nicht aufgenommen                                                              |
| `in_flight`    | Der Worker versendet gerade                                                                                                            |
| `sent`         | Jede Aktion war erfolgreich                                                                                                            |
| `failed`       | Mindestens eine Aktion ist fehlgeschlagen (und keine hat einen Auth-Fehler ausgelöst)                                                  |
| `auth_error`   | Das Instagram-Access-Token war ungültig; die DM wurde nicht erneut versucht                                                            |
| `rate_limited` | Das tägliche DM-Limit (Tarif oder pro Profil) wurde erreicht. Es wurde keine DM gesendet                                               |
| `deduplicated` | Diese Aktion wurde für diesen Empfänger bereits innerhalb ihres Dedup-Fensters ausgeführt (Standard 7 Tage, pro Aktion konfigurierbar) |
| `skipped`      | Die Automatisierung wurde zwischen Fan-out und Versand inaktiv oder gelöscht                                                           |

`pending` und `in_flight` sind temporär; alles andere ist terminal.

## Header-Parameter

<HeaderAPI noProfileKey={false} />

## Pfad-Parameter

<ParamField path="id" type="string" required>
  Die Automatisierungs-ID, die von `POST /automations` zurückgegeben wurde.
</ParamField>

## Query-Parameter

<ParamField query="limit" type="number" default={25}>
  Seitengröße. Standard `25`, Maximum `100`. Werte außerhalb von `[1, 100]` werden gekappt; Nicht-Ganzzahlen oder `≤0` liefern HTTP 400.
</ParamField>

<ParamField query="next" type="string">
  Opaker Cursor aus dem `meta.pagination.next` einer vorhergehenden Antwort. Bei der ersten Anfrage weglassen.

  Nur vorwärts – die Übergabe von `?previous=` liefert HTTP 400.
</ParamField>

## Antwortformat

Die Antwort verpackt die Ergebnisliste in `activity[]` und die Cursor-Informationen in `meta.pagination`:

```json theme={"system"}
{
  "status": "success",
  "automationId": "auto_9xKp2Lm4nQ",
  "activity": [ /* …rows, newest first… */ ],
  "meta": {
    "pagination": {
      "hasMore": true,
      "limit": 25,
      "next": "eyJ0aW1lIjoiMjAyNi0wNS0xMlQwOTowMDoxMS4wMDBaIiwiaWQiOiJhdXRvXzl4S3AyTG00blE6dHJnX2ExYjJjMzpjb21tZW50X3JlY2VpdmVkOjE4MDEyMzQ1Njc4OTAwMDAwIn0="
    }
  }
}
```

`meta.pagination.next` ist ein base64-kodierter, opaker Blob – behandeln Sie ihn als Black Box und übergeben Sie ihn in der nächsten Anfrage unverändert im `?next=`. `meta.pagination.hasMore` ist `true`, wenn mindestens eine weitere Seite existiert.

<RequestExample>
  ```bash cURL — first page theme={"system"}
  curl \
  -H "Authorization: Bearer API_KEY" \
  -X GET "https://api.ayrshare.com/api/automations/auto_9xKp2Lm4nQ/activity?limit=25"
  ```

  ```bash cURL — next page theme={"system"}
  curl \
  -H "Authorization: Bearer API_KEY" \
  -X GET "https://api.ayrshare.com/api/automations/auto_9xKp2Lm4nQ/activity?limit=25&next=eyJ0aW1lIjoiMjAyNi0wNS0xMlQw..."
  ```

  ```javascript JavaScript theme={"system"}
  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);
  ```

  ```python Python theme={"system"}
  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"]
  ```

  ```php PHP theme={"system"}
  $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;
  ```
</RequestExample>

<ResponseExample>
  ```json 200: Success theme={"system"}
  {
    "status": "success",
    "automationId": "auto_9xKp2Lm4nQ",
    "activity": [
      {
        "id": "auto_9xKp2Lm4nQ:trg_a1b2c3:18012345678901234",
        "automationId": "auto_9xKp2Lm4nQ",
        "triggerId": "trg_a1b2c3",
        "triggerType": "comment_keyword",
        "recipientId": "17841401234567890",
        "recipientUsername": "jane_doe",
        "eventId": "18012345678901234",
        "platform": "instagram",
        "status": "sent",
        "actionResults": [
          {
            "actionId": "act_d4e5f6",
            "type": "send_dm",
            "status": "sent",
            "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:18012345678900000",
        "automationId": "auto_9xKp2Lm4nQ",
        "triggerId": "trg_a1b2c3",
        "triggerType": "comment_keyword",
        "recipientId": "17841409876543210",
        "recipientUsername": "repeat_user",
        "eventId": "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"
      }
    }
  }
  ```

  ```json 400: Bad limit theme={"system"}
  {
    "status": "error",
    "message": "limit must be a positive integer"
  }
  ```

  ```json 400: Backward pagination not supported theme={"system"}
  {
    "status": "error",
    "message": "'previous' pagination is not supported by this endpoint"
  }
  ```

  ```json 404: Not found theme={"system"}
  {
    "action": "automation",
    "status": "error",
    "code": 469,
    "message": "Automation not found"
  }
  ```
</ResponseExample>
