v2.0REST API

Taciturn Studios API

The TSPASS (Taciturn Studios Publishing API for Sister Sites) enables all sister sites in the Taciturn network to sync books, query the catalog, and receive webhook callbacks. Base URL: https://taciturnstudios.com

Authentication

All write and admin endpoints require a Bearer token in the Authorization header. Contact the Taciturn Studios admin to receive your TSPASS_API_KEY.

Authorization: Bearer YOUR_TSPASS_API_KEY
Per-Site Convenience Endpoints

Every sister site has its own dedicated endpoint aliases. Replace :siteName with the site name (without .com):

arborsagecovercrushingmyauthorvoicepublishingtimeshighfeardecorpalmhomevibedluxbrooklifestyleattractweirdburrialstories
POST/api/sync/:siteName/products
GET/api/products/:siteName

Health & Discovery

Public endpoints — no authentication required.

GET/api/pingPublic

Health check. Returns server status, API version, full network manifest (all 10 sister sites), and all available endpoint paths.

Response

{ "status": "ok", "site": "taciturnstudios.com", "apiVersion": "2.0", "network": { "arborsage.com": { ... }, ... }, "endpoints": { ... } }
GET/api/tspass/sourceSitesPublic

Lists all source sites that have synced books to taciturnstudios.com, with book counts per site.

Response

{ "success": true, "count": 3, "sites": [{ "site": "arborsage.com", "displayName": "ArborSage", "bookCount": 14 }] }

Product Sync (Write)

Upsert and delete products. All endpoints require Bearer token auth.

POST/api/sync/productsAuth required

Bulk upsert up to 200 books in a single request. Books are matched by slug — existing books are updated, new ones are created.

Request body / params

{ "books": [{ "slug": "my-book", "title": "My Book", "sourceSite": "arborsage.com", "price": "9.99", "coverImageUrl": "https://...", "description": "..." }] }

Response

{ "success": true, "total": 5, "created": 3, "updated": 2, "failed": 0, "results": [...] }

POST /api/sync/arborsage/products ← per-site alias

POST/api/sync/productAuth required

Upsert a single book. Returns 201 on create, 200 on update.

Request body / params

{ "slug": "my-book", "title": "My Book", "sourceSite": "arborsage.com", "price": "9.99", "category": "gardening", "tags": ["organic", "raised-beds"] }

Response

{ "success": true, "action": "created", "slug": "my-book", "id": 42 }
DELETE/api/products/:slugAuth required

Delete a book by its slug. Returns 404 if not found.

Response

{ "success": true, "slug": "my-book", "id": 42, "message": "Book "My Book" deleted." }

Product Retrieval

Read products. Auth required.

GET/api/productsAuth required

List all books. Filter by source site, featured status, with pagination.

Request body / params

Query params: ?sourceSite=arborsage.com&featured=true&limit=50&offset=0

Response

{ "success": true, "count": 14, "sourceSite": "arborsage.com", "books": [...] }

GET /api/products/arborsage ← per-site alias (no query param needed)

Network Management

Admin-only endpoints for monitoring and configuring the sister site network.

GET/api/network/statusAuth required

Live-pings all 10 sister sites and returns their HTTP status, response time, and last known webhook config. Takes ~6s to complete.

Response

{ "success": true, "checkedAt": "...", "sites": [{ "domain": "arborsage.com", "status": "ok", "ms": 312, "httpStatus": 200 }] }
GET/api/network/syncEventsAuth required

Returns the most recent sync events (default 50, max 200). Filter by site with ?sourceSite=arborsage.com.

Response

{ "success": true, "count": 50, "events": [{ "sourceSite": "arborsage.com", "eventType": "batch_sync", "itemCount": 5, "status": "success", "createdAt": "..." }] }
GET/api/network/webhookConfigsAuth required

Returns webhook configuration for all sister sites — URL, active status, ping history.

Response

{ "success": true, "count": 10, "configs": [...] }
PUT/api/network/webhookConfigs/:siteDomainAuth required

Update the webhook callback URL and/or secret for a specific sister site.

Request body / params

{ "webhookUrl": "https://arborsage.com/api/tspass/webhook", "webhookSecret": "optional-secret", "isActive": true }

Response

{ "success": true, "siteDomain": "arborsage.com", "updated": { "webhookUrl": "..." } }

Book Object Fields

All fields accepted by the upsert endpoints. Only slug and title are required.

FieldTypeRequiredNotes
slugstringrequiredUnique identifier. Used for upsert matching.
titlestringrequired
sourceSitestringoptionale.g. arborsage.com. Used for filtering.
authorNamestringoptionalDefaults to Taciturn Studios.
descriptionstringoptionalFull description.
shortDescriptionstringoptionalUsed in cards/previews.
pricestring|numberoptionale.g. 9.99 or "9.99"
salePricestring|numberoptional
coverImageUrlstringoptionalCDN URL for cover image.
downloadUrlstringoptionalDirect download link.
amazonUrlstringoptionalAmazon product page URL.
categoryenumoptionalfiction | non-fiction | children | series | gardening | wellness | author-tools | puzzle | other
tagsstring[]optionalArray or comma-separated string.
isFeaturedbooleanoptional
isFreebooleanoptional
isPublishedbooleanoptionalDefaults to true.
Receiving Webhooks from taciturnstudios.com

When a book is updated, featured, or deleted on taciturnstudios.com, it will POST a callback to your site's registered webhook URL. Implement this receiver to stay in sync automatically.

1. Register your webhook URL

Contact the Taciturn Studios admin or use the Admin → Network tab to register your callback URL. Expected format:

https://yoursite.com/api/tspass/webhook

2. Webhook payload format

{
  "event": "book.updated" | "book.featured" | "book.deleted" | "sync.complete",
  "sourceSite": "taciturnstudios.com",
  "timestamp": 1710000000000,
  "data": {
    "slug": "the-indie-authors-guide",
    "title": "The Indie Author's Guide",
    "coverImageUrl": "https://cdn.../cover.jpg",
    "isFeatured": true
  }
}

3. Express.js receiver (copy-paste ready)

// server/tspassWebhookReceiver.ts
import { Request, Response } from "express";

const TSPASS_API_KEY = process.env.TSPASS_API_KEY ?? "";

export async function handleTspassWebhook(req: Request, res: Response) {
  // 1. Verify the API key
  const token = (req.headers["authorization"] ?? "").replace("Bearer ", "").trim();
  if (!token || token !== TSPASS_API_KEY) {
    return res.status(401).json({ error: "Unauthorized" });
  }

  const { event, sourceSite, timestamp, data } = req.body;

  switch (event) {
    case "book.updated":
    case "book.featured":
      // await db.upsertBook({ ...data, sourceSite });
      console.log("[TSPASS] Book updated:", data.slug);
      break;
    case "book.deleted":
      // await db.deleteBookBySlug(data.slug);
      console.log("[TSPASS] Book deleted:", data.slug);
      break;
    case "sync.complete":
      console.log("[TSPASS] Full sync complete from", sourceSite);
      break;
  }

  return res.json({ received: true, event, timestamp });
}

// Register in Express:
// app.post("/api/tspass/webhook", express.json(), handleTspassWebhook);

Security note

Always verify the Authorization: Bearer TSPASS_API_KEY header before processing any payload. Never trust the sourceSite field alone.

tskit — Universal Sister Site Onboarding Kit

Drop tskit into any Manus sister site to instantly configure TSPASS, tacblock, auto-blog, newsletter, AdSense, and lmtxt. One installer script handles everything.

🔗

TSPASS Sender

Push products to hub

📡

Webhook Receiver

Receive push events

📝

Auto-Blog

Weekly AI articles

📧

Newsletter

Welcome + teaser emails

🤖

lmtxt Routes

Dynamic llms.txt + sitemap

🌴

tacblock

Network banner + sister sites

Quick install

node tskit/scripts/install.mjs --site yourdomain.com --niche "your niche"
Download tskit v1.1.0
ZIP · 23 KB · 10 files

What's included

  • server/tspassSender.ts — push products to taciturnstudios.com
  • server/tspassWebhookReceiver.ts — receive hub push events
  • server/tskitAutoBlog.ts — weekly AI article generator with topic queue
  • server/tskitNewsletter.ts — welcome email + newsletter teaser via Resend
  • server/tskitLmtxt.ts — dynamic /llms.txt, /llms-full.txt, /sitemap.xml
  • client/src/components/NetworkBanner.tsx — scrolling network carousel
  • client/src/components/SisterSites.tsx — editorial sister sites section
  • client/src/components/AdSenseBlock.tsx — AdSense block (pub-1051825252184436)
  • client/src/components/NewsletterWidget.tsx — newsletter signup widget
  • scripts/install.mjs — universal installer with auto-patching

Taciturn Studios TSPASS API v2.0 · Questions? Contact us