API Live · v2.4.0

Developer
Sandbox

Build on top of Splurjj. Access editorial content, Goals data, user stats, and media assets through a clean RESTful API. Build integrations, apps, and experiments on the Splurjj ecosystem.

312
Endpoints
99.9%
Uptime SLA
14ms
P50 Latency
3
SDKs

Base URL

https://api.splurjj.com/v2

All requests must use HTTPS. HTTP requests will be redirected. All responses are application/json.

Authentication

Your API Key (Sandbox)
sk_sandbox_••••••••••••••••••••••••••••••••
Bearer Token
Pass your API key in the Authorization header as a Bearer token. Never expose your key in client-side JavaScript.
Key Types
sk_sandbox_ keys are for testing. sk_live_ keys access production data. Generate keys in your Admin Dashboard.

Authorization Header

Authorization: Bearer sk_live_4e8f2a1b9c3d7e5f0a2b4c6d8e1f3a5b

Example Request (cURL)

curl -X GET "https://api.splurjj.com/v2/articles?limit=5" \
  -H "Authorization: Bearer sk_live_••••••••••••" \
  -H "Content-Type: application/json"

Rate Limits

Rate limits are applied per API key per rolling 60-second window. Exceeding limits returns a 429 Too Many Requests response with a Retry-After header.

Sandbox
100
requests / minute
Growth
1,000
requests / minute
Enterprise
Custom
contact us

Rate Limit Headers

X-RateLimit-Limit:     1000      # Your tier limit
X-RateLimit-Remaining: 987       # Calls left this window
X-RateLimit-Reset:     1714053600 # Unix timestamp of reset
Retry-After:           34        # Seconds until retry (429 only)

Articles API

GET /articles List all articles

Returns a paginated list of published articles. Supports filtering by category, author, date range, and full-text search.

Query Parameters

ParameterTypeRequiredDescription
pageintegeroptionalPage number (default: 1)
limitintegeroptionalResults per page, max 100 (default: 20)
categorystringoptionalFilter by category slug: gear, style, autos, tech, wellness, travel
author_idstringoptionalFilter by author UUID
searchstringoptionalFull-text search across title and body
sortstringoptionalSort field: published_at, views, likes, mimics (default: published_at)

Example Request

GET /articles?category=autos&limit=10&sort=views
Authorization: Bearer sk_live_••••••••••••

Response

{
  "data": [
    {
      "id": "art_01HXZ9B4V2QK7P3M",
      "title": "Inside the Lamborghini Urus S",
      "slug": "inside-lamborghini-urus-s",
      "category": "autos",
      "author": { "id": "usr_abc", "name": "Jay Mensah" },
      "views": 98000,
      "likes": 6900,
      "mimics": 2210,
      "cover_url": "https://cdn.splurjj.com/...",
      "published_at": "2026-04-19T09:00:00Z"
    }
  ],
  "total": 312,
  "page": 1,
  "limit": 10
}
GET /articles/:id Get single article

Returns the full article object including body markdown, media attachments, goal templates, and engagement stats.

Path Parameters

ParameterTypeRequiredDescription
idstringrequiredArticle UUID (art_...)

Example Request

GET /articles/art_01HXZ9B4V2QK7P3M
Authorization: Bearer sk_live_••••••••••••

Response

{
  "id": "art_01HXZ9B4V2QK7P3M",
  "title": "Inside the Lamborghini Urus S",
  "body": "# Introduction\n\nThe Urus S...",
  "category": "autos",
  "tags": ["lamborghini", "suv", "performance"],
  "goal_templates": [{ "id": "gol_01...", "title": "Own a Urus S" }],
  "views": 98000,
  "likes": 6900,
  "mimics": 2210,
  "read_time_min": 6,
  "published_at": "2026-04-19T09:00:00Z"
}
POST /articles Create article draft Writer+

Creates a new article draft. Requires Writer or Admin role. Returns the created article with status: "draft".

Request Body

{
  "title":             "string"    // required
  "body":              "markdown"  // required
  "category":          "autos"     // required
  "tags":              ["string"]  // optional
  "cover_image_url":   "string"    // optional
  "goal_template_id":  "gol_..."   // optional
  "seo_title":         "string"    // optional
  "seo_description":   "string"    // optional
}
PUT /articles/:id Update article Writer+

Replaces the entire article object. Use PATCH /articles/:id for partial updates. Triggers editor review queue if previously published.

Status Values

draft submitted review published archived
PUT /articles/art_01HXZ9B4V2QK7P3M
{
  "status": "submitted"
}
DEL /articles/:id Delete article Admin

Soft-deletes the article. The article is flagged as deleted: true and removed from all public feeds. Returns 204 No Content.

DELETE /articles/art_01HXZ9B4V2QK7P3M
// Returns: 204 No Content

Goals API

GET /goals List published goals

Returns published goal templates. Filter by article, category, or creator. Includes mimic counts and adoption statistics.

Example Request

GET /goals?article_id=art_01HXZ9B4V2QK7P3M&limit=10
Authorization: Bearer sk_live_••••••••••••

Response

{
  "data": [
    {
      "id": "gol_01JXZ9...",
      "title": "Own a Lamborghini Urus S before 35",
      "category": "autos",
      "mimic_count": 2210,
      "active_adopters": 1502,
      "source_article_id": "art_01HXZ9..."
    }
  ]
}
POST /goals Create goal template Writer+

Creates a new goal template linked to an article. Once published, readers can mimic the goal to their personal Goals dashboard.

POST /goals
{
  "title":             "Own a Lamborghini Urus S before 35",
  "description":      "string",
  "category":          "autos",
  "source_article_id": "art_01HXZ9...",
  "milestones": [
    { "title": "Research financing options", "order": 1 }
  ]
}
POST /goals/:id/mimic Mimic a goal

Creates a personal copy of the goal in the authenticated user's Goals dashboard at goalsapp.store. Increments mimic_count on the template. Returns the new personal goal object.

POST /goals/gol_01JXZ9.../mimic
// Empty body — user is inferred from Bearer token

// Response 201:
{
  "id":        "ug_03KZB...",
  "template": "gol_01JXZ9...",
  "user_id":  "usr_abc",
  "progress": 0,
  "created_at": "2026-04-25T14:22:18Z"
}

Users API

GET /users/:id Get user profile

Returns public profile data for a user. To get the currently authenticated user, use GET /users/me.

GET /users/usr_abc123
Authorization: Bearer sk_live_••••••••••••

// Response 200:
{
  "id":       "usr_abc123",
  "username": "@jaymensah",
  "name":     "Jay Mensah",
  "role":     "writer",
  "followers": 18400,
  "articles_count": 38,
  "goals_created": 12,
  "joined_at": "2022-08-01T00:00:00Z"
}
PATCH /users/me Update authenticated user

Partially updates the authenticated user's profile. All fields are optional — only include what you want to change.

PATCH /users/me
{
  "name":     "Jay Mensah",
  "bio":      "Automotive journalist. Dreamer.",
  "avatar_url": "https://cdn.splurjj.com/..."
}

Media API

POST /media/upload Upload media asset Writer+

Uploads an image, video, or audio file to the Splurjj CDN. Accepts multipart/form-data. Maximum file size: 50MB for images/audio, 500MB for video.

Supported Formats

JPG · PNG · WebP · GIF MP4 · MOV · WebM MP3 · WAV · M4A
POST /media/upload
Content-Type: multipart/form-data

// Form fields:
file:    <binary>        // required
alt:     "Hero image"  // optional
type:    "cover"       // optional: cover, inline, avatar, podcast

// Response 201:
{
  "id":    "med_0X...",
  "url":   "https://cdn.splurjj.com/media/...",
  "type":  "image",
  "size":  2456000
}

Interactive API Tester

API Request Sandbox — Responses are simulated

Webhooks

Splurjj delivers webhook events to your HTTPS endpoint via POST requests. Events are signed with a shared secret using HMAC-SHA256. Configure endpoints in your Admin Dashboard.

article.published
Fires when a new article goes live on the platform after editor approval.
article.updated
Fires when a published article is edited and re-approved by an editor.
goal.mimicked
Fires when a user mimics a goal template. Payload includes goal and user IDs.
goal.completed
Fires when a user marks a personal goal as 100% complete.
user.signed_up
Fires on new user registration. Payload includes role and referral source.
comment.flagged
Fires when a comment receives 3+ community flags and enters moderation queue.

Webhook Payload Example

POST https://yourapp.com/webhooks/splurjj
X-Splurjj-Signature: sha256=abc123...
X-Splurjj-Event: goal.mimicked
Content-Type: application/json

{
  "event":    "goal.mimicked",
  "timestamp": "2026-04-25T14:22:18Z",
  "data": {
    "goal_id": "gol_01JXZ9...",
    "user_id": "usr_xyz",
    "article_id": "art_01HXZ9..."
  }
}

SDKs & Libraries

Official SDKs abstract authentication, pagination, error handling, and retry logic. All SDKs are open-source on GitHub.

JavaScript / Node.js
npm install @splurjj/sdk
import Splurjj from '@splurjj/sdk';
const api = new Splurjj({ apiKey });
await api.articles.list();
Python
pip install splurjj
from splurjj import Client
client = Client(api_key="sk_live_...")
articles = client.articles.list()
Swift / iOS
SPM: SplurjjKit
import SplurjjKit
let api = SplurjjClient(apiKey: "sk_live_...")
let articles = try await api.articles()
Muse AI
● Developer Mode · Splurjj API
Mimic This Goal
Goal Title
From Splurjj
AI Milestone Generator Active
Category
Target Date
AI-Generated Milestones