Biklo for developersTESTsandbox-api.biklo.comchange

List buyer conversations

GET/v1/threads

scope messages.read

Conversations on your listings, newest activity first. Buyers are a display name and an id — never an email or a phone number. Use unread_only=true for the ones actually waiting on you.

Query parameters#

NameExample
limit50Max 100
cursor—next_cursor from the previous page
unread_onlytrueOnly conversations you have not read
product_id237233Only conversations about one listing
updated_since2026-09-01T00:00:00ZIncremental sync

Response#

FieldTypeDescription
countintegerHow many conversations in this page.
next_cursorstring|nullPass back as ?cursor=; null on the last page.
dataarrayConversations about YOUR listings. Buyers start them — you cannot open one.
data[].idintegerThe conversation id, for the message endpoints.
data[].subjectstring|nullWhat the conversation is about, usually the listing title.
data[].productobject|nullThe listing being discussed.
data[].product.idintegerOur product id.
data[].product.titlestringIts title.
data[].product.slugstringIts URL segment.
data[].buyerobject|nullWho you are talking to. null on a conversation whose counterpart could not be resolved.
data[].buyer.idintegerThe buyer's user id.
data[].buyer.namestringTheir display name, shortened the way buyers appear elsewhere on the marketplace.
data[].last_messageobject|nullThe most recent message, so a list can be rendered without a call per row. null on an empty conversation.
data[].last_message.idintegerThat message's id.
data[].last_message.fromstringWho wrote it.

Accepts buyer · seller

data[].last_message.previewstringA truncated body — the full text is on GET /v1/threads/{id}/messages.
data[].last_message.created_atstringISO-8601 UTC.
data[].is_unreadbooleanWhether the buyer has written since you last read it. POST /v1/threads/{id}/read clears it.
data[].created_atstringISO-8601 UTC, when the conversation started.
data[].updated_atstringISO-8601 UTC, when it last moved. Sort on this, and use it with ?updated_since=.

Example

{
    "count": 1,
    "next_cursor": null,
    "data": [
        {
            "id": 107373,
            "subject": "Trek Marlin 7",
            "product": {
                "id": 237233,
                "title": "Trek Marlin 7",
                "slug": "trek-marlin-7"
            },
            "buyer": {
                "id": 9000002,
                "name": "Jane Doe"
            },
            "last_message": {
                "id": 174420,
                "from": "buyer",
                "preview": "Is this still available?",
                "created_at": "2026-09-10T06:15:18Z"
            },
            "is_unread": true,
            "created_at": "2026-09-10T06:15:18Z",
            "updated_at": "2026-09-10T06:15:18Z"
        }
    ]
}

Failures use the shared error envelope — a machine-readable code and a request_id to quote to support. Error handling.

curl -X GET "https://sandbox-api.biklo.com/v1/threads?limit=50" \
  -H "Authorization: Bearer bk_test_YOUR_KEY"
<?php

$ch = curl_init('https://sandbox-api.biklo.com/v1/threads?limit=50');

curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'GET',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer bk_test_YOUR_KEY',
    ],
]);

$response = json_decode(curl_exec($ch), true);
curl_close($ch);
using System.Net.Http;
using System.Net.Http.Headers;

var client = new HttpClient();
client.DefaultRequestHeaders.Authorization =
    new AuthenticationHeaderValue("Bearer", "bk_test_YOUR_KEY");

var request = new HttpRequestMessage(
    new HttpMethod("GET"),
    "https://sandbox-api.biklo.com/v1/threads?limit=50");

var response = await client.SendAsync(request);
var json = await response.Content.ReadAsStringAsync();
import requests

response = requests.get(
    "https://sandbox-api.biklo.com/v1/threads?limit=50",
    headers={"Authorization": "Bearer bk_test_YOUR_KEY"},
)

data = response.json()
const response = await fetch("https://sandbox-api.biklo.com/v1/threads?limit=50", {
  method: "GET",
  headers: {
    Authorization: "Bearer bk_test_YOUR_KEY"
  }
});

const data = await response.json();
import java.net.http.*;
import java.net.URI;

var client = HttpClient.newHttpClient();

var request = HttpRequest.newBuilder()
    .uri(URI.create("https://sandbox-api.biklo.com/v1/threads?limit=50"))
    .header("Authorization", "Bearer bk_test_YOUR_KEY")
    .method("GET", HttpRequest.BodyPublishers.noBody())
    .build();

var response = client.send(request, HttpResponse.BodyHandlers.ofString());