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

# Request log

> Every API call of the last 30 days, with its request and our reply.

Every call to the API is kept for **30 days**: the address, the status, how long it took, the key (`key_deleted` is `true` once that key is deleted), and — when it failed — the error's `code`, `field` and `reason` (the message we answered). A message send also keeps `to` and your `reference`; a call that made a message or a campaign keeps its id.

You can read it two ways:

* **In the app:** Developer → Request log. Filter by date, status, address and key, or search by To or Reference; open a call to see its request, our reply and the live status of the message it made. Download the rows as CSV or JSON.
* **From your own software:** `GET /v1/requests` and `GET /v1/requests/{id}`, with a **Full** key. Any other key answers `forbidden_scope`.

## What is kept

* The request body as you sent it and our reply, each cut at **10 KB**. `request_cut` and `reply_cut` are `true` when a body was cut.
* **Never** the `Authorization` header, an API key or a webhook signing secret. For a file upload (`POST /v1/media`), each file's name, type and size only — never the file.
* Calls to `/v1/requests` are listed too, without our reply.

## Listing calls

```bash cURL theme={null}
curl "https://api.getreply.in/v1/requests?status=failed&per_page=20" \
  -H "Authorization: Bearer gr_live_…"
```

```javascript Node.js theme={null}
const res = await fetch("https://api.getreply.in/v1/requests?status=failed&per_page=20", {
  method: "GET",
  headers: {
    "Authorization": "Bearer gr_live_…",
  },
});
console.log(await res.json());
```

```php PHP theme={null}
<?php
$ch = curl_init("https://api.getreply.in/v1/requests?status=failed&per_page=20");
curl_setopt_array($ch, [
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer gr_live_…",
  ],
]);
echo curl_exec($ch);
```

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

res = requests.get(
    "https://api.getreply.in/v1/requests?status=failed&per_page=20",
    headers={
        "Authorization": "Bearer gr_live_…",
    },
)
print(res.json())
```

Filters: `since` and `until` (ISO 8601), `status` (`succeeded` or `failed`), `path` (an address as called, or its route such as `/v1/contacts/{phone}`), `key` (a key's id), `to` and `reference`. Newest first, 50 a page (`per_page`, at most 100). Send `next_cursor` back as `?cursor=` for the next page; it is `null` on the last page.

## One call

```bash cURL theme={null}
curl https://api.getreply.in/v1/requests/REQUEST_ID \
  -H "Authorization: Bearer gr_live_…"
```

```javascript Node.js theme={null}
const res = await fetch("https://api.getreply.in/v1/requests/REQUEST_ID", {
  method: "GET",
  headers: {
    "Authorization": "Bearer gr_live_…",
  },
});
console.log(await res.json());
```

```php PHP theme={null}
<?php
$ch = curl_init("https://api.getreply.in/v1/requests/REQUEST_ID");
curl_setopt_array($ch, [
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer gr_live_…",
  ],
]);
echo curl_exec($ch);
```

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

res = requests.get(
    "https://api.getreply.in/v1/requests/REQUEST_ID",
    headers={
        "Authorization": "Bearer gr_live_…",
    },
)
print(res.json())
```

The answer adds `request`, `reply` and `message`: the message the call made, with its status now (`accepted`, `sent`, `delivered`, `read` or `failed`, and why it failed).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.