Conversations
Get a conversation
Read one customer’s conversation. A customer with no conversation gets an empty thread: since is null and messages is []. On Node, call conversations.list.
GET
/
api
/
v1
/
assistants
/
{id}
/
conversations
Get a conversation
curl --request GET \
--url https://app.concatflow.com/api/v1/assistants/{id}/conversations \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.concatflow.com/api/v1/assistants/{id}/conversations"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.concatflow.com/api/v1/assistants/{id}/conversations', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://app.concatflow.com/api/v1/assistants/{id}/conversations"
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(string(body))
}require 'uri'
require 'net/http'
url = URI("https://app.concatflow.com/api/v1/assistants/{id}/conversations")
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<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.concatflow.com/api/v1/assistants/{id}/conversations",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}{
"partition": {
"customer_id": "4712"
},
"since": "2026-10-02T09:14:03.112000+00:00",
"launcher": "bar",
"questions": 1,
"credits_cents": 12,
"messages": [
{
"id": "…:q",
"role": "user",
"text": "Which invoices are still unpaid?",
"at": "2026-10-02T09:14:03.112000+00:00",
"credits_cents": null,
"blocks": []
},
{
"id": "…:a",
"role": "assistant",
"text": "You have two unpaid invoices.",
"at": "2026-10-02T09:14:03.112000+00:00",
"credits_cents": 12,
"blocks": []
}
]
}{
"error": "invalid_body"
}{
"error": "invalid_api_key"
}{
"detail": "<unknown>"
}{
"detail": {
"code": "bad_partition"
}
}{
"error": "backend_unreachable"
}Authorizations
Your secret API key, lyra_sk_…, from Settings → Developers → API keys.
Path Parameters
The assistant's ID.
Query Parameters
The customer's partition: customer_id=4712, several pairs joined with ,. URL-encode the whole value. Keys and values must not contain , or =.
Maximum string length:
500Example:
"customer_id=4712"
Response
The customer's thread.
The customer's partition, as sent.
Show child attributes
Show child attributes
When the first message was written. null when there is none.
The launcher the conversation was held in.
Available options:
bubble, bar, null Required range:
x >= 0Total cost, in hundredths of a credit. Can be fractional.
Required range:
x >= 0Show child attributes
Show child attributes
⌘I
Get a conversation
curl --request GET \
--url https://app.concatflow.com/api/v1/assistants/{id}/conversations \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.concatflow.com/api/v1/assistants/{id}/conversations"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.concatflow.com/api/v1/assistants/{id}/conversations', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://app.concatflow.com/api/v1/assistants/{id}/conversations"
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(string(body))
}require 'uri'
require 'net/http'
url = URI("https://app.concatflow.com/api/v1/assistants/{id}/conversations")
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<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.concatflow.com/api/v1/assistants/{id}/conversations",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}{
"partition": {
"customer_id": "4712"
},
"since": "2026-10-02T09:14:03.112000+00:00",
"launcher": "bar",
"questions": 1,
"credits_cents": 12,
"messages": [
{
"id": "…:q",
"role": "user",
"text": "Which invoices are still unpaid?",
"at": "2026-10-02T09:14:03.112000+00:00",
"credits_cents": null,
"blocks": []
},
{
"id": "…:a",
"role": "assistant",
"text": "You have two unpaid invoices.",
"at": "2026-10-02T09:14:03.112000+00:00",
"credits_cents": 12,
"blocks": []
}
]
}{
"error": "invalid_body"
}{
"error": "invalid_api_key"
}{
"detail": "<unknown>"
}{
"detail": {
"code": "bad_partition"
}
}{
"error": "backend_unreachable"
}