GET
/
v1
/
teams
/
{teamId}
/
posts
TypeScript client
import { OctosparkClient } from '@octospark/sdk'

const client = new OctosparkClient({
  token: process.env.OCTOSPARK_TOKEN
})

const response = await client.social.listPosts({
  teamId: process.env.OCTOSPARK_TEAM_ID ?? "teamId",
  query: {},
})
import os
from octospark_sdk import OctosparkClient

client = OctosparkClient(token=os.environ["OCTOSPARK_TOKEN"])

response = client.social.list_posts(
teamId=os.environ.get("OCTOSPARK_TEAM_ID", "teamId")
)
octospark posts list \
--request '{"path":{"teamId":"teamId"}}'
use reqwest::Client;
use std::env;

#[tokio::main]
async fn main() -> Result<(), reqwest::Error> {
let client = Client::new();
let base_url = env::var("OCTOSPARK_API_URL").unwrap_or_else(|_| "https://api.octospark.ai".to_string());
let team_id = env::var("OCTOSPARK_TEAM_ID").unwrap_or_else(|_| "teamId".to_string());
let url = format!("{}/v1/teams/{}/posts", base_url.trim_end_matches('/'), team_id);
let token = env::var("OCTOSPARK_TOKEN").expect("OCTOSPARK_TOKEN");
let mut request = client.get(url).bearer_auth(token);
let response = request.send().await?;
println!("{}", response.text().await?);
Ok(())
}
import 'dart:convert';
import 'dart:io';
import 'package:http/http.dart' as http;

Future<void> main() async {
final baseUrl = Platform.environment['OCTOSPARK_API_URL'] ?? 'https://api.octospark.ai';
final token = Platform.environment['OCTOSPARK_TOKEN'];
final teamId = Platform.environment['OCTOSPARK_TEAM_ID'] ?? 'teamId';
final url = '${baseUrl.replaceFirst(RegExp(r'/$'), '')}/v1/teams/$teamId/posts';
final uri = Uri.parse(url);
final headers = {
'Authorization': 'Bearer $token',
};
final response = await http.get(
uri,
headers: headers,
);
print(response.body);
}
curl --request GET \
--url https://api.octospark.ai/v1/teams/{teamId}/posts \
--header 'Authorization: Bearer <token>'
<?php

$curl = curl_init();

curl_setopt_array($curl, [
CURLOPT_URL => "https://api.octospark.ai/v1/teams/{teamId}/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://api.octospark.ai/v1/teams/{teamId}/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://api.octospark.ai/v1/teams/{teamId}/posts")
.header("Authorization", "Bearer <token>")
.asString();
require 'uri'
require 'net/http'

url = URI("https://api.octospark.ai/v1/teams/{teamId}/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
$headers=@{}
$headers.Add("Authorization", "Bearer <token>")
$response = Invoke-WebRequest -Uri 'https://api.octospark.ai/v1/teams/{teamId}/posts' -Method GET -Headers $headers
import Foundation

let url = URL(string: "https://api.octospark.ai/v1/teams/{teamId}/posts")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.timeoutInterval = 10
request.allHTTPHeaderFields = ["Authorization": "Bearer <token>"]

let (data, _) = try await URLSession.shared.data(for: request)
print(String(decoding: data, as: UTF8.self))
using RestSharp;


var options = new RestClientOptions("https://api.octospark.ai/v1/teams/{teamId}/posts");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("Authorization", "Bearer <token>");
var response = await client.GetAsync(request);

Console.WriteLine("{0}", response.Content);
using RestSharp;


var options = new RestClientOptions("https://api.octospark.ai/v1/teams/{teamId}/posts");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("Authorization", "Bearer <token>");
var response = await client.GetAsync(request);

Console.WriteLine("{0}", response.Content);
CURL *hnd = curl_easy_init();

curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "GET");
curl_easy_setopt(hnd, CURLOPT_WRITEDATA, stdout);
curl_easy_setopt(hnd, CURLOPT_URL, "https://api.octospark.ai/v1/teams/{teamId}/posts");

struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Authorization: Bearer <token>");
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);

CURLcode ret = curl_easy_perform(hnd);
CURL *hnd = curl_easy_init();

curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "GET");
curl_easy_setopt(hnd, CURLOPT_WRITEDATA, stdout);
curl_easy_setopt(hnd, CURLOPT_URL, "https://api.octospark.ai/v1/teams/{teamId}/posts");

struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Authorization: Bearer <token>");
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);

CURLcode ret = curl_easy_perform(hnd);
val client = OkHttpClient()

val request = Request.Builder()
.url("https://api.octospark.ai/v1/teams/{teamId}/posts")
.get()
.addHeader("Authorization", "Bearer <token>")
.build()

val response = client.newCall(request).execute()
{
  "data": [
    {
      "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
      "teamId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
      "title": "<string>",
      "text": "<string>",
      "assetIds": [
        "3c90c3cc-0d44-4b50-8888-8dd25736052a"
      ],
      "assetTags": [
        "<string>"
      ],
      "userTags": [
        {
          "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
          "name": "<string>",
          "colour": "<string>"
        }
      ],
      "contentPayloadId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
      "latestScheduledPost": {
        "id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
        "teamId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
        "contentItemId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
        "socialAccountId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
        "scheduledAt": "<string>",
        "timezone": "Europe/London",
        "platformPostId": "<string>",
        "platformSettings": {},
        "publishResults": {},
        "providerPublishState": {
          "requiresPolling": true,
          "publishId": "<string>",
          "platformPostId": "<string>",
          "providerStatus": "<string>",
          "pollingReason": "<string>",
          "uploadProgress": {
            "nextByteStart": 123,
            "uploadSize": 123
          },
          "failureCode": "<string>"
        },
        "errorCode": "<string>",
        "errorMessage": "<string>",
        "workflowId": "<string>",
        "workflowRunId": "<string>",
        "createdAt": "<string>",
        "updatedAt": "<string>"
      },
      "scheduledDestinationAccountIds": [
        "3c90c3cc-0d44-4b50-8888-8dd25736052a"
      ],
      "createdAt": "<string>",
      "updatedAt": "<string>",
      "postInput": {
        "kind": "atomic",
        "text": "<string>",
        "attachments": [
          {
            "kind": "media",
            "asset": {
              "assetId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
              "mimeType": "<string>",
              "byteSize": 123,
              "width": 123,
              "height": 123,
              "durationSeconds": 123,
              "thumbnailUrl": "<string>",
              "altText": "<string>"
            },
            "altText": "<string>"
          }
        ]
      },
      "postPublishActions": {
        "firstComment": {
          "text": "<string>",
          "mediaIds": [
            "3c90c3cc-0d44-4b50-8888-8dd25736052a"
          ]
        },
        "engagementCommentTrigger": {
          "likeThreshold": 2,
          "windowHours": 360,
          "comment": {
            "text": "<string>",
            "mediaIds": [
              "3c90c3cc-0d44-4b50-8888-8dd25736052a"
            ]
          }
        },
        "repostAfter": {
          "offsetDays": 15,
          "text": "<string>"
        },
        "recurrenceIntervalDays": 183,
        "recurrenceEndsAt": "<string>"
      }
    }
  ],
  "total": 123,
  "nextCursor": "<string>",
  "prevCursor": "<string>"
}
{
"issues": [
{
"path": [
"<string>"
],
"message": "<string>"
}
],
"message": "<string>",
"_tag": "HttpApiDecodeError"
}
{
"message": "<string>",
"_tag": "Unauthorized"
}
{
"message": "<string>",
"_tag": "PaymentRequired"
}
{
"message": "<string>",
"_tag": "Forbidden"
}
{
"message": "<string>",
"_tag": "NotFound"
}
{
"message": "<string>",
"_tag": "Conflict"
}
{
"message": "<string>",
"_tag": "TooManyRequests"
}
{
"message": "<string>",
"_tag": "InternalError"
}

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Path Parameters

teamId
string
required

Team (workspace) id (UUID). Discover ids via the list teams endpoint or the agent context.

Query Parameters

cursor
string

Opaque pagination cursor from the previous page response (nextCursor/prevCursor); omit to start at the first page.

limit
string
default:25

Page size as a positive integer string; defaults to 25, capped at 100.

Examples:

"25"

"100"

sortBy
string

Field to sort by; each endpoint accepts its own allowlist and defaults to createdAt.

Example:

"createdAt"

sortOrder
enum<string>
default:desc

Sort direction: asc or desc; defaults to desc.

Available options:
asc,
desc
status
enum<string>

Filter to posts with this editorial status.

Available options:
idea,
proposed_render,
draft,
approved,
rejected,
archived,
deleted
Example:

"draft"

provider
enum<string>

Filter to posts whose latest scheduled post targets this provider.

Available options:
x,
tiktok,
instagram,
facebook,
youtube,
linkedin,
threads
Example:

"x"

scheduledFrom
string

Only include posts scheduled at or after this ISO 8601 timestamp.

Example:

"2026-06-01T00:00:00Z"

scheduledTo
string

Only include posts scheduled at or before this ISO 8601 timestamp.

Example:

"2026-06-30T23:59:59Z"

filter[q]
string

Case-insensitive free-text search over the post title and latest payload text.

Example:

"product launch"

filter[postType]
enum<string>

Filter to posts of this content format.

Available options:
text_post,
text_image,
text_video,
carousel
Example:

"text_image"

filter[tab]
enum<string>

Queue/Drafts/Sent tab over the derived latest-scheduled-post status: queue = scheduled/publishing/failed, sent = published, drafts = never scheduled or a draft/cancelled latest scheduled post.

Available options:
queue,
drafts,
sent
Example:

"queue"

filter[tagIds]
string

CSV of user-tag UUIDs from the post_tags registry; matches posts assigned ANY of these tags. Unknown or foreign ids are ignored.

Example:

"4a1f4e93-0d8b-4a6c-9a44-1e8b1f2c3d4e,7b2c5f81-3e9d-4b7a-8c55-2f9c2a3b4c5d"

filter[tags]
string

Comma-separated AI tags; matches posts whose assets carry any of the listed tags (OR).

Example:

"launch,product"

filter[category]
string

Comma-separated AI content categories; matches posts in any of the listed categories (OR).

Example:

"education"

filter[purpose]
string

Comma-separated AI purposes; matches posts whose assets carry any of the listed purposes (OR).

Example:

"promotion"

filter[emotion]
string

Comma-separated AI emotions; matches posts tagged with any of the listed emotions (OR).

Example:

"joy"

filter[mediaType]
string

Comma-separated media types; each value one of: image, video, audio, gif, document.

Example:

"image,video"

filter[enrichmentStatus]
string

Comma-separated AI enrichment statuses; each value one of: pending, processing, completed, failed.

Example:

"completed"

Response

Success

data
object[]
required
total
number
required
nextCursor
string | null
required
prevCursor
string | null
required