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.
Base URL
https://api.splurjj.com/v2
All requests must use HTTPS. HTTP requests will be redirected. All responses are application/json.
Getting Started
Authentication
Authorization header as a Bearer token. Never expose your key in client-side JavaScript.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"
Getting Started
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.
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)
Reference
Articles API
Returns a paginated list of published articles. Supports filtering by category, author, date range, and full-text search.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| page | integer | optional | Page number (default: 1) |
| limit | integer | optional | Results per page, max 100 (default: 20) |
| category | string | optional | Filter by category slug: gear, style, autos, tech, wellness, travel |
| author_id | string | optional | Filter by author UUID |
| search | string | optional | Full-text search across title and body |
| sort | string | optional | Sort 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 }
Returns the full article object including body markdown, media attachments, goal templates, and engagement stats.
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| id | string | required | Article 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" }
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 }
Replaces the entire article object. Use PATCH /articles/:id for partial updates. Triggers editor review queue if previously published.
Status Values
PUT /articles/art_01HXZ9B4V2QK7P3M { "status": "submitted" }
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
Reference
Goals API
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..." } ] }
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 } ] }
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" }
Reference
Users API
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" }
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/..." }
Reference
Media API
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
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 }
Tools
Interactive API Tester
Tools
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.
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..." } }
Tools
SDKs & Libraries
Official SDKs abstract authentication, pagination, error handling, and retry logic. All SDKs are open-source on GitHub.
import Splurjj from '@splurjj/sdk'; const api = new Splurjj({ apiKey }); await api.articles.list();
from splurjj import Client client = Client(api_key="sk_live_...") articles = client.articles.list()
import SplurjjKit let api = SplurjjClient(apiKey: "sk_live_...") let articles = try await api.articles()