> For complete lifecycle-event payload schemas and examples, use the canonical overview: Session /api/sessions; Room lifecycle, members, and room playback /api/rooms; Session playback /api/playback; Recording /api/recording; DTMF /api/keypad-input; Messages /api/messages; WebSocket Session /api/web-socket. Use /api/event-delivery for transport behavior. Endpoint pages name relevant events, but these overviews are the canonical references.

# List messages

GET https://api.telekesher.dev/v1/messages

List messages owned by the authenticated application, newest first. The response includes messages retained by the platform and never includes another application's messages. Use message webhooks to receive status updates.

See [Message lifecycle events](/api/messages#lifecycle-events) for complete payload schemas and examples.

Reference: https://docs.vorbal.dev/api/messages/list-messages

## Authentication

- `Authorization` header (bearer token, required) — Application auth. Send `Authorization: Bearer <app_uuid>:<api_key>` using any active key in the app's collection. See [Authentication](https://voice-platform.docs.buildwithfern.com/api/authentication) for details.

## Response

### 200

Messages owned by the authenticated application.

- `messages` (list of object, required)
  - `channel` (enum, required)
    - Allowed values: `sms`
  - `content` (object, required)
    - `text` (string, required)
    - `type` (enum, required)
      - Allowed values: `text`
  - `created_at` (datetime, required)
  - `delivery_status` (enum, required) — Platform knowledge of recipient delivery. `unknown` means monitoring ended without a conclusive outcome; it does not mean delivery failed.
    - Allowed values: `pending`, `delivered`, `failed`, `unknown`
  - `direction` (enum, required)
    - Allowed values: `outbound`
  - `from` (string, required)
  - `message_uuid` (string, required)
  - `sending_status` (enum, required) — Latest confirmed outbound sending milestone. This field is independent of recipient delivery.
    - Allowed values: `queued`, `sent`
  - `to` (string, required)
  - `updated_at` (datetime, required)

## Examples

**Response**

```json
{
  "messages": [
    {
      "channel": "sms",
      "content": {
        "text": "Your appointment starts in one hour.",
        "type": "text"
      },
      "created_at": "2026-08-28T12:00:00.000Z",
      "delivery_status": "delivered",
      "direction": "outbound",
      "from": "Example",
      "message_uuid": "msg_550e8400-e29b-41d4-a716-446655440000",
      "sending_status": "sent",
      "to": "+972500000000",
      "updated_at": "2026-08-28T12:00:03.000Z"
    }
  ]
}
```

**SDK Code**

```python Messages_listMessages_example
import requests

url = "https://api.telekesher.dev/v1/messages"

headers = {"Authorization": "Bearer <token>"}

response = requests.get(url, headers=headers)

print(response.json())
```

```javascript Messages_listMessages_example
const url = 'https://api.telekesher.dev/v1/messages';
const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Messages_listMessages_example
package main

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

func main() {

	url := "https://api.telekesher.dev/v1/messages"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("Authorization", "Bearer <token>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Messages_listMessages_example
require 'uri'
require 'net/http'

url = URI("https://api.telekesher.dev/v1/messages")

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

request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'

response = http.request(request)
puts response.read_body
```

```java Messages_listMessages_example
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://api.telekesher.dev/v1/messages")
  .header("Authorization", "Bearer <token>")
  .asString();
```

```php Messages_listMessages_example
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://api.telekesher.dev/v1/messages', [
  'headers' => [
    'Authorization' => 'Bearer <token>',
  ],
]);

echo $response->getBody();
```

```csharp Messages_listMessages_example
using RestSharp;

var client = new RestClient("https://api.telekesher.dev/v1/messages");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer <token>");
IRestResponse response = client.Execute(request);
```

```swift Messages_listMessages_example
import Foundation

let headers = ["Authorization": "Bearer <token>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://api.telekesher.dev/v1/messages")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```