curl --request GET \
--url https://collectwiseapi.com/text/messages \
--header 'collectwise_key: <api-key>'import requests
url = "https://collectwiseapi.com/text/messages"
headers = {"collectwise_key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {collectwise_key: '<api-key>'}};
fetch('https://collectwiseapi.com/text/messages', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://collectwiseapi.com/text/messages",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"collectwise_key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://collectwiseapi.com/text/messages"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("collectwise_key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://collectwiseapi.com/text/messages")
.header("collectwise_key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://collectwiseapi.com/text/messages")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["collectwise_key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"count": 2,
"messages": [
{
"messageId": "4d1a0b7c-9e2f-4c31-8a77-2b6f0d1e5c44",
"direction": "inbound",
"status": "Delivered",
"message": "when is my payment due",
"debtorId": "your-reference-number",
"destination": "+13313048434",
"conversationId": "conv_087b83bb525d4fceaaa01a4234b6b012",
"templateId": null,
"messageType": "sms",
"mediaUrls": null,
"createdAt": "2026-08-17T12:00:00.000Z",
"updatedAt": null
},
{
"messageId": "1b1f0a9e-6f4e-4f4b-9a2e-1f2d3c4b5a69",
"direction": "outbound",
"status": "Delivered",
"message": "Jane, this is Acme Recovery Group, a debt collector. Your balance is $430.10. Reply STOP to opt out.",
"debtorId": "your-reference-number",
"destination": "+13313048434",
"conversationId": "conv_087b83bb525d4fceaaa01a4234b6b012",
"templateId": 100,
"messageType": "sms",
"mediaUrls": null,
"createdAt": "2026-08-17T11:58:02.000Z",
"updatedAt": "2026-08-17T11:58:07.000Z"
}
]
}{
"error": "Provide messageId, debtorId, destination or since"
}{
"error": "Texting is not enabled for this organization"
}{
"error": "Message not found"
}{
"error": "Too many requests"
}{
"error": "Internal server error"
}List Text Messages
Returns the message thread for one of your recipients: your outbound sends and the consumer’s inbound replies, newest first. Use this to poll for replies if you do not want to run a webhook endpoint, or to backfill replies after a webhook outage. Results are always scoped to your organization. Provide at least one of messageId, debtorId, destination, or since.
curl --request GET \
--url https://collectwiseapi.com/text/messages \
--header 'collectwise_key: <api-key>'import requests
url = "https://collectwiseapi.com/text/messages"
headers = {"collectwise_key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {collectwise_key: '<api-key>'}};
fetch('https://collectwiseapi.com/text/messages', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://collectwiseapi.com/text/messages",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"collectwise_key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://collectwiseapi.com/text/messages"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("collectwise_key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://collectwiseapi.com/text/messages")
.header("collectwise_key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://collectwiseapi.com/text/messages")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["collectwise_key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"count": 2,
"messages": [
{
"messageId": "4d1a0b7c-9e2f-4c31-8a77-2b6f0d1e5c44",
"direction": "inbound",
"status": "Delivered",
"message": "when is my payment due",
"debtorId": "your-reference-number",
"destination": "+13313048434",
"conversationId": "conv_087b83bb525d4fceaaa01a4234b6b012",
"templateId": null,
"messageType": "sms",
"mediaUrls": null,
"createdAt": "2026-08-17T12:00:00.000Z",
"updatedAt": null
},
{
"messageId": "1b1f0a9e-6f4e-4f4b-9a2e-1f2d3c4b5a69",
"direction": "outbound",
"status": "Delivered",
"message": "Jane, this is Acme Recovery Group, a debt collector. Your balance is $430.10. Reply STOP to opt out.",
"debtorId": "your-reference-number",
"destination": "+13313048434",
"conversationId": "conv_087b83bb525d4fceaaa01a4234b6b012",
"templateId": 100,
"messageType": "sms",
"mediaUrls": null,
"createdAt": "2026-08-17T11:58:02.000Z",
"updatedAt": "2026-08-17T11:58:07.000Z"
}
]
}{
"error": "Provide messageId, debtorId, destination or since"
}{
"error": "Texting is not enabled for this organization"
}{
"error": "Message not found"
}{
"error": "Too many requests"
}{
"error": "Internal server error"
}Authorizations
Query Parameters
A messageId returned by the send endpoint. Returns that message's whole thread, in both directions. 404 if the id does not belong to your organization.
Your reference for the recipient, as sent on debtorId.
Recipient phone number, in any of the formats the send endpoint accepts.
Maximum number of messages to return.
1 <= x <= 200ISO 8601 timestamp. Returns only messages created at or after it. Valid on its own, so you can use it to backfill everything your organization received after a webhook outage.
