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

# List Delivery Logs

> Retrieves the delivery attempt history for a webhook, including response status and timestamps. Supports pagination.

<Note>
  This endpoint accepts a **project API key** (`AS_` prefix). Returns the delivery attempt history for a webhook, most recent first.
</Note>

<RequestExample>
  ```bash cURL theme={null}
  curl --request GET \
    --url 'https://api.autosend.com/v1/webhooks/60d5ec49f1b2c72d9c8b1234/logs?page=1&limit=50' \
    --header 'Authorization: Bearer AS_your-api-key'
  ```

  ```python Python theme={null}
  import requests

  webhook_id = "60d5ec49f1b2c72d9c8b1234"
  url = f"https://api.autosend.com/v1/webhooks/{webhook_id}/logs"

  headers = {
      "Authorization": "Bearer AS_your-api-key"
  }

  params = {"page": 1, "limit": 50}

  response = requests.get(url, headers=headers, params=params)
  print(response.json())
  ```

  ```javascript JavaScript theme={null}
  const webhookId = '60d5ec49f1b2c72d9c8b1234';

  fetch(`https://api.autosend.com/v1/webhooks/${webhookId}/logs?page=1&limit=50`, {
    method: 'GET',
    headers: {
      'Authorization': 'Bearer AS_your-api-key'
    }
  })
    .then(response => response.json())
    .then(data => console.log(data))
    .catch(error => console.error('Error:', error));
  ```

  ```php PHP theme={null}
  <?php

  $webhookId = '60d5ec49f1b2c72d9c8b1234';
  $url = "https://api.autosend.com/v1/webhooks/{$webhookId}/logs?page=1&limit=50";

  $ch = curl_init($url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_HTTPHEADER, [
      'Authorization: Bearer AS_your-api-key'
  ]);

  $response = curl_exec($ch);
  curl_close($ch);

  echo $response;
  ?>
  ```

  ```go Go theme={null}
  package main

  import (
      "fmt"
      "io"
      "net/http"
  )

  func main() {
      webhookID := "60d5ec49f1b2c72d9c8b1234"
      url := "https://api.autosend.com/v1/webhooks/" + webhookID + "/logs?page=1&limit=50"

      req, _ := http.NewRequest("GET", url, nil)
      req.Header.Set("Authorization", "Bearer AS_your-api-key")

      client := &http.Client{}
      resp, err := client.Do(req)
      if err != nil {
          fmt.Println("Error:", err)
          return
      }
      defer resp.Body.Close()

      body, _ := io.ReadAll(resp.Body)
      fmt.Println(string(body))
  }
  ```

  ```java Java theme={null}
  import java.io.BufferedReader;
  import java.io.InputStreamReader;
  import java.net.HttpURLConnection;
  import java.net.URL;

  public class ListDeliveryLogs {
      public static void main(String[] args) {
          try {
              String webhookId = "60d5ec49f1b2c72d9c8b1234";
              URL url = new URL("https://api.autosend.com/v1/webhooks/" + webhookId + "/logs?page=1&limit=50");
              HttpURLConnection con = (HttpURLConnection) url.openConnection();

              con.setRequestMethod("GET");
              con.setRequestProperty("Authorization", "Bearer AS_your-api-key");

              BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
              String inputLine;
              StringBuilder content = new StringBuilder();
              while ((inputLine = in.readLine()) != null) {
                  content.append(inputLine);
              }
              in.close();
              System.out.println(content.toString());

          } catch (Exception e) {
              e.printStackTrace();
          }
      }
  }
  ```

  ```ruby Ruby theme={null}
  require 'net/http'
  require 'uri'

  webhook_id = '60d5ec49f1b2c72d9c8b1234'
  uri = URI("https://api.autosend.com/v1/webhooks/#{webhook_id}/logs?page=1&limit=50")

  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = true

  request = Net::HTTP::Get.new(uri.request_uri)
  request['Authorization'] = 'Bearer AS_your-api-key'

  response = http.request(request)
  puts response.body
  ```
</RequestExample>

<ResponseExample>
  ```json 200 Response theme={null}
  {
    "success": true,
    "data": {
      "logs": [
        {
          "_id": "60d5ec49f1b2c72d9c8b9999",
          "webhookId": "60d5ec49f1b2c72d9c8b1234",
          "projectId": "60d5ec49f1b2c72d9c8b1111",
          "event": "email.delivered",
          "url": "https://example.com/webhooks/autosend",
          "statusCode": 200,
          "success": true,
          "attempts": 1,
          "duration": 142,
          "deliveredAt": "2026-06-12T10:15:00.000Z",
          "createdAt": "2026-06-12T10:15:00.000Z",
          "updatedAt": "2026-06-12T10:15:00.000Z"
        }
      ],
      "total": 1,
      "page": 1,
      "limit": 50,
      "totalPages": 1
    }
  }
  ```
</ResponseExample>

***

#### Authorizations

<ParamField path="Authorizations" type="string | header" required>
  Project API key header of the form Bearer `AS_<key>`.
</ParamField>

### Path Parameters

<ParamField path="id" type="string" required>
  The unique identifier of the webhook.

  Example: `"60d5ec49f1b2c72d9c8b1234"`
</ParamField>

### Query Parameters

<ParamField query="page" type="integer">
  Page number for pagination.

  Default: `1`
</ParamField>

<ParamField query="limit" type="integer">
  Number of logs to return per page.

  Default: `50`

  Range: `1`–`100`
</ParamField>

#### Response

<span className="text-sm">Delivery logs retrieved successfully (200)</span>

<ResponseField name="success" type="boolean">
  Indicates if the request was successful
</ResponseField>

<ResponseField name="data" type="object">
  Paginated delivery logs

  <Expandable title="child attributes">
    <ResponseField name="data.logs" type="object[]">
      Array of delivery attempt records

      <Expandable title="log attributes">
        <ResponseField name="event" type="string">
          The event type that was delivered
        </ResponseField>

        <ResponseField name="url" type="string">
          The destination URL the payload was POSTed to
        </ResponseField>

        <ResponseField name="statusCode" type="integer | null">
          HTTP status code returned by the destination
        </ResponseField>

        <ResponseField name="success" type="boolean">
          Whether the delivery was considered successful
        </ResponseField>

        <ResponseField name="attempts" type="integer">
          Number of delivery attempts made
        </ResponseField>

        <ResponseField name="duration" type="integer | null">
          Time taken to deliver, in milliseconds
        </ResponseField>

        <ResponseField name="errorMessage" type="string | null">
          Error detail if the delivery failed
        </ResponseField>

        <ResponseField name="deliveredAt" type="string | null">
          ISO 8601 timestamp of successful delivery
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="data.total" type="integer">
      Total number of log entries
    </ResponseField>

    <ResponseField name="data.totalPages" type="integer">
      Total number of pages
    </ResponseField>
  </Expandable>
</ResponseField>

#### Error Responses

<ResponseField name="404 - Webhook not found" type="object">
  Returned when no webhook with the given ID exists in the project.

  ```json theme={null}
  {
    "success": false,
    "error": {
      "message": "Webhook not found",
      "code": "WEBHOOK_NOT_FOUND",
    }
  }
  ```
</ResponseField>


## OpenAPI

````yaml GET /webhooks/{id}/logs
openapi: 3.1.0
info:
  title: AutoSend API
  description: >-
    AutoSend REST API for managing project webhooks. These endpoints accept a
    project API key (AS_ prefix) and let you subscribe to email and contact
    events, inspect delivery logs, and test deliveries.
  version: 1.0.0
servers:
  - url: https://api.autosend.com/v1
security:
  - bearerAuth: []
paths:
  /webhooks/{id}/logs:
    get:
      summary: List Delivery Logs
      description: >-
        Retrieves the delivery attempt history for a webhook, including response
        status and timestamps. Supports pagination.
components: {}

````