Developers
API keys, REST API, and webhooks

REST API

Coming soon - the endpoints below describe the planned shape of the API and are not live yet. You can generate an API key today from Account → API & Webhooks ready for when they ship. If you only need to react to things happening on your account right now, see Webhooks - those are live.
Authentication

Every request will be authenticated with your personal API key, sent as a Bearer token in the Authorization header:

Authorization: Bearer treads_4a7f9b2c1e8d3f6a0b5c7d9e2f4a6b8c1d3e5f7a9b0c2d4e6f8a0b1c3d5e7f9a

Get a key from Account → API & Webhooks - see Getting started if you haven't generated one yet.

Planned endpoints
Method Endpoint Description
GET /api/v1/photos List your uploaded photos
POST /api/v1/photos Upload a new photo
GET /api/v1/status List your recent status posts
POST /api/v1/status Create a new status post

This list will grow as endpoints are built - check back here for updates.

Example: a PHP client, once this ships

A rough idea of what calling the (not-yet-live) API will look like from PHP, using only cURL - no SDK required:

<?php

$api_key = 'treads_4a7f9b2c1e8d3f6a0b5c7d9e2f4a6b8c1d3e5f7a9b0c2d4e6f8a0b1c3d5e7f9a';

$ch = curl_init('https://treads.nz/api/v1/status');

curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        'Authorization: Bearer ' . $api_key,
        'Accept: application/json',
    ],
]);

$response = curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if ($http_code === 200) {
    $status_posts = json_decode($response, true);
    // ...
}
Expected response shape
{
  "data": [
    {
      "id": 771234,
      "body": "Just laced up a new pair.",
      "created_at": "2026-09-16T04:12:01+00:00"
    }
  ],
  "meta": {
    "page": 1,
    "per_page": 20,
    "total": 1
  }
}

Want to be notified the moment something happens instead of polling an endpoint like this? See Webhooks - those work today.