List posts
curl --request GET \
--url https://app.trypost.it/api/posts \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.trypost.it/api/posts"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.trypost.it/api/posts', 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://app.trypost.it/api/posts",
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;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://app.trypost.it/api/posts"
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))
}HttpResponse<String> response = Unirest.get("https://app.trypost.it/api/posts")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.trypost.it/api/posts")
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{
"data": [
{
"id": "9d3c1f2a-6b4e-4c8a-9f1e-2a7b5c8d0e41",
"post_group_id": "9d3c1f29-e0a1-4b7c-8d2e-5f6a7b8c9d03",
"author": {
"id": "9b1e2d3c-4f5a-4b6c-8d7e-9f0a1b2c3d4e",
"name": "Ana Souza"
},
"content": "We just shipped scheduled threads. Here is how they work.",
"media": [
{
"id": "9d3c1f30-8a9b-4c0d-9e1f-2a3b4c5d6e7f",
"path": "medias/9d3c1f30-8a9b-4c0d-9e1f-2a3b4c5d6e7f.jpg",
"url": "https://media.trypost.it/medias/9d3c1f30-8a9b-4c0d-9e1f-2a3b4c5d6e7f.jpg",
"type": "image",
"mime_type": "image/jpeg",
"original_filename": "launch.jpg",
"size": 482113,
"meta": {
"width": 1080,
"height": 1350,
"alt_text": "Product launch banner"
}
}
],
"status": "scheduled",
"schedule_mode": "custom",
"scheduled_at": "2026-10-12 14:00:00",
"published_at": null,
"approval_requested_by": null,
"approval_requested_at": null,
"approved_by": null,
"approved_at": null,
"recurrence": null,
"origin": "trypost",
"platforms": [
{
"id": "9d3c1f2b-1a2b-4c3d-8e4f-5a6b7c8d9e10",
"platform": "x",
"content_type": "x_post",
"meta": [],
"status": "pending",
"enabled": true,
"platform_url": null,
"published_at": null,
"error_message": null,
"display_name": "TryPost",
"display_username": "trypostit",
"display_avatar": "https://pbs.twimg.com/profile_images/1790000000000000000/avatar_400x400.jpg",
"social_account": {
"id": "9c8b7a65-4d3e-4f2a-8b1c-0d9e8f7a6b54",
"platform": "x",
"display_name": "TryPost",
"username": "trypostit",
"status": "connected",
"has_posting_schedule": true,
"timezone": "America/Sao_Paulo",
"posting_goal": 5,
"max_content_length": 280,
"long_posts": false,
"verified_badge": null
}
}
],
"labels": [
{
"id": "9c0d1e2f-3a4b-4c5d-8e6f-7a8b9c0d1e2f",
"name": "Launch",
"color": "#2563EB",
"created_at": "2026-09-01 10:00:00",
"updated_at": "2026-09-01 10:00:00"
}
],
"created_at": "2026-10-08 13:20:11",
"updated_at": "2026-10-08 13:20:11"
}
],
"links": {
"first": "https://app.trypost.it/api/posts?page=1",
"last": "https://app.trypost.it/api/posts?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 1,
"links": [
{
"url": null,
"label": "« Previous",
"page": null,
"active": false
},
{
"url": "https://app.trypost.it/api/posts?page=1",
"label": "1",
"page": 1,
"active": true
},
{
"url": null,
"label": "Next »",
"page": null,
"active": false
}
],
"path": "https://app.trypost.it/api/posts",
"per_page": 25,
"to": 1,
"total": 1
}
}{
"message": "Unauthenticated."
}{
"message": "Active subscription required."
}{
"message": "<string>"
}{
"message": "<string>",
"errors": {}
}{
"name": "rate_limit_exceeded",
"message": "Rate limit exceeded. Please retry after 30 seconds."
}Posts
List posts
Lists the workspace’s posts: posts without a time first, then by scheduled time, latest first, with their destinations and labels. Pending approval requests of other members are included (API keys belong to admins, who can approve). Page size is set by the server: read meta.per_page.
GET
/
posts
List posts
curl --request GET \
--url https://app.trypost.it/api/posts \
--header 'Authorization: Bearer <token>'import requests
url = "https://app.trypost.it/api/posts"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://app.trypost.it/api/posts', 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://app.trypost.it/api/posts",
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;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://app.trypost.it/api/posts"
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))
}HttpResponse<String> response = Unirest.get("https://app.trypost.it/api/posts")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.trypost.it/api/posts")
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{
"data": [
{
"id": "9d3c1f2a-6b4e-4c8a-9f1e-2a7b5c8d0e41",
"post_group_id": "9d3c1f29-e0a1-4b7c-8d2e-5f6a7b8c9d03",
"author": {
"id": "9b1e2d3c-4f5a-4b6c-8d7e-9f0a1b2c3d4e",
"name": "Ana Souza"
},
"content": "We just shipped scheduled threads. Here is how they work.",
"media": [
{
"id": "9d3c1f30-8a9b-4c0d-9e1f-2a3b4c5d6e7f",
"path": "medias/9d3c1f30-8a9b-4c0d-9e1f-2a3b4c5d6e7f.jpg",
"url": "https://media.trypost.it/medias/9d3c1f30-8a9b-4c0d-9e1f-2a3b4c5d6e7f.jpg",
"type": "image",
"mime_type": "image/jpeg",
"original_filename": "launch.jpg",
"size": 482113,
"meta": {
"width": 1080,
"height": 1350,
"alt_text": "Product launch banner"
}
}
],
"status": "scheduled",
"schedule_mode": "custom",
"scheduled_at": "2026-10-12 14:00:00",
"published_at": null,
"approval_requested_by": null,
"approval_requested_at": null,
"approved_by": null,
"approved_at": null,
"recurrence": null,
"origin": "trypost",
"platforms": [
{
"id": "9d3c1f2b-1a2b-4c3d-8e4f-5a6b7c8d9e10",
"platform": "x",
"content_type": "x_post",
"meta": [],
"status": "pending",
"enabled": true,
"platform_url": null,
"published_at": null,
"error_message": null,
"display_name": "TryPost",
"display_username": "trypostit",
"display_avatar": "https://pbs.twimg.com/profile_images/1790000000000000000/avatar_400x400.jpg",
"social_account": {
"id": "9c8b7a65-4d3e-4f2a-8b1c-0d9e8f7a6b54",
"platform": "x",
"display_name": "TryPost",
"username": "trypostit",
"status": "connected",
"has_posting_schedule": true,
"timezone": "America/Sao_Paulo",
"posting_goal": 5,
"max_content_length": 280,
"long_posts": false,
"verified_badge": null
}
}
],
"labels": [
{
"id": "9c0d1e2f-3a4b-4c5d-8e6f-7a8b9c0d1e2f",
"name": "Launch",
"color": "#2563EB",
"created_at": "2026-09-01 10:00:00",
"updated_at": "2026-09-01 10:00:00"
}
],
"created_at": "2026-10-08 13:20:11",
"updated_at": "2026-10-08 13:20:11"
}
],
"links": {
"first": "https://app.trypost.it/api/posts?page=1",
"last": "https://app.trypost.it/api/posts?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 1,
"links": [
{
"url": null,
"label": "« Previous",
"page": null,
"active": false
},
{
"url": "https://app.trypost.it/api/posts?page=1",
"label": "1",
"page": 1,
"active": true
},
{
"url": null,
"label": "Next »",
"page": null,
"active": false
}
],
"path": "https://app.trypost.it/api/posts",
"per_page": 25,
"to": 1,
"total": 1
}
}{
"message": "Unauthenticated."
}{
"message": "Active subscription required."
}{
"message": "<string>"
}{
"message": "<string>",
"errors": {}
}{
"name": "rate_limit_exceeded",
"message": "Rate limit exceeded. Please retry after 30 seconds."
}Authorizations
Workspace API key from Settings → API Keys.
Query Parameters
Only posts on these social accounts. Values that are not UUIDs are ignored. When no value is a UUID, the filter is not applied.
Only posts with any of these labels. Values that are not UUIDs are ignored. When no value is a UUID, the filter is not applied.
Only posts without labels (combined with labels[], posts matching either).
Required range:
x >= 1
