View Markdown

Documentation

REST API & SDK

Pull your published blog content into any app - a headless frontend, a WordPress or Shopify integration, a static-site build, or your own server. Read access to articles, categories, tags, authors, search and site metadata, over a simple JSON API and a typed TypeScript SDK.

API-key auth

One key per workspace. Send it as a Bearer token.

JSON REST

Predictable envelopes, pagination and errors.

Typed SDK

@verbinge/sdk - zero-dependency, works in Node & edge.

Authentication

Every request needs a workspace API key. Create one in Settings → API keys. You’ll see the secret once - copy it somewhere safe. Send it in the Authorization header:

Terminal
curl https://verbinge.com/api/v1/articles?limit=10 \
  -H "Authorization: Bearer nvy_your_key_here"

Keys are secrets - use them from a server, never from browser code. To render your blog on a page without a key, use the one-line embed instead.

Base URL

https://verbinge.com/api/v1

Endpoints

All endpoints return published content scoped to your workspace.

MethodPathDescription
GET/articlesList published articles. Query: page, limit, category (slug), tag (slug).
GET/articles/{slug}A single published article - full HTML/Markdown, SEO and author.
GET/categoriesCategories defined in your workspace.
GET/tagsTags defined in your workspace.
GET/authorsAuthors with at least one published article.
GET/authors/{id}A single author profile (byline + bio + links).
GET/search?q=Full-text search across published articles.
GET/siteBlog metadata: title, description, canonical URL, logo.
GET/openapi.jsonMachine-readable OpenAPI 3.1 spec (no auth) for client codegen.

Response shape

Successful responses wrap the payload in data; list endpoints add pagination.

GET /articles?limit=10
{
  "data": [
    {
      "id": "…",
      "title": "How onboarding drives retention",
      "slug": "onboarding-retention",
      "url": "https://acme.verbinge.com/onboarding-retention",
      "excerpt": "…",
      "coverImage": { "url": "…", "alt": "…", "width": 1200, "height": 630 },
      "category": "Growth",
      "tags": ["retention", "activation"],
      "readingTime": 6,
      "author": { "id": "…", "name": "Jane Doe", "jobTitle": "Head of Growth", "avatarUrl": "…" },
      "publishedAt": "2026-07-01T09:00:00.000Z",
      "updatedAt": "2026-07-01T09:00:00.000Z"
    }
  ],
  "pagination": { "page": 1, "limit": 10, "total": 24, "totalPages": 3, "hasMore": true }
}

TypeScript SDK

@verbinge/sdk is a thin, fully-typed wrapper over the REST API. No dependencies; runs anywhere fetch exists.

Install
npm i @verbinge/sdk
Usage
import { VerbingeClient } from '@verbinge/sdk';

// Server-side only - never expose your key in a browser bundle.
const verbinge = new VerbingeClient({ apiKey: process.env.VERBINGE_API_KEY! });

// List published articles (newest first), with pagination
const { data, pagination } = await verbinge.articles.list({ limit: 10 });

// Filter by category or tag slug
const guides = await verbinge.articles.list({ category: 'guides', page: 2 });

// A single post - full content, SEO and author
const post = await verbinge.articles.get('onboarding-retention');

// Search, taxonomy, authors and site metadata
const { data: hits } = await verbinge.search({ q: 'retention' });
const categories = await verbinge.categories.list();
const site = await verbinge.site.get();

Errors

Non-2xx responses use a consistent shape. The SDK throws a typed VerbingeError carrying status and code.

{ "error": { "code": "invalid_key", "message": "Unknown or revoked API key." } }

Common codes: missing_key / invalid_key (401), not_found (404), missing_query (400).

Building a WordPress, Shopify or headless integration? Email deshik@nuvylabs.com - we’d love to help.