Für Entwickler

Deine Inhalte. Jedes Frontend. Jede Sprache.

REST-API, JavaScript SDK, PHP SDK, Web Components — drei Wege, Publino-Inhalte in jede Plattform zu integrieren.

schnellstart.ts
// 1. SDK installieren
npm install @publino/sdk

// 2. Client initialisieren (Secret Key nur serverseitig)
import { PublinoClient } from "@publino/sdk";
const client = new PublinoClient({
  siteId: "mein-blog",
  apiKey: process.env.PUBLINO_API_KEY,
});

// 3. Artikel abrufen → ArticleSummary[]
const articles = await client.articles.list({ locale: "de" });
Authentifizierung

Zwei Schlüsseltypen. Sicher & flexibel.

Publino unterscheidet zwischen server- und browserseitigem Zugriff. Beide verwenden Bearer Authentication — aber mit unterschiedlichen Berechtigungen.

SECRET KEY pub_del_…

Serverseitig. Voller Lesezugriff. Niemals im Browser oder Client-Code verwenden.

Nur serverseitig · Node, PHP, Backend
PUBLISHABLE KEY pub_pk_…

Browserseitig. Nur veröffentlichte Inhalte. Mit Origin-Allowlist gesichert.

Browser-safe · embed.js · Next.js Client
Bearer Authentication
// HTTP Request mit Bearer Auth
GET /v1/sites/{siteId}/articles
Authorization: Bearer pub_del_xxxxxxxxxxxx

// Rate Limiting & Caching Headers
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 994
ETag: "abc123def"

// 304 Not Modified bei unverändertem Inhalt
If-None-Match: "abc123def"304
REST API

Saubere Endpunkte. Stabile IDs.

Alle Inhalte sind über stabile Public-IDs abrufbar. Slugs ändern sich nie rückwirkend — URLs bleiben dauerhaft gültig. Basis-URL: https://api.publino.de/v1

Methode
Endpunkt
Beschreibung
GET
/v1/sites/{siteId}/articles
Alle veröffentlichten Artikel einer Site, optional gefiltert nach Sprache, Kategorie oder Tag
GET
/v1/sites/{siteId}/articles/{slug}-{publicId}
Einzelnen Artikel per Slug-PublicId abrufen. Antwort enthält readingMinutes.
GET
/v1/sites/{siteId}/categories
Alle Kategorien der Site — mit Slug, Beschreibung und Artikel-Zähler
GET
/v1/sites/{siteId}/tags
Alle Tags der Site mit Artikel-Zähler
GET
/v1/sites/{siteId}/articles/{ref}/og
Generiertes Open-Graph-Bild (PNG) für den Artikel
GET
/v1/sites/{siteId}/sitemap.xml
Auto-generierte XML-Sitemap aller Artikel (mit lastmod & hreflang) — öffentlich, ohne Key. Zum Einreichen bei Google über die eigene Domain ausliefern (Proxy).
Query-Parameter für /articles
locale=de
Sprache filtern. ISO 639-1 Code. Standard: Primärsprache der Site.
category={id}
Nach Kategorie-Public-ID filtern.
tag={id}
Nach Tag-Public-ID filtern.
SDKs

Für jeden Stack das passende Tool

Vollständig typisiert, ohne Abhängigkeiten von Drittanbietern.

app/blog/page.tsx
// app/blog/page.tsx
import { PublinoClient } from "@publino/sdk";

const client = new PublinoClient({
  siteId: "mein-blog",
  apiKey: process.env.PUBLINO_API_KEY!,
});

export default async function Page() {
  const articles = await client.articles.list({ locale: "de" });
  return <ArticleList items={articles} />;
}
JavaScript / TypeScript SDK
npm

Für Next.js, Nuxt, Remix, Astro oder pures Node.js. Vollständig typisiert, tree-shakeable, zero dependencies.

npm install @publino/sdk
Komplette Anleitung: Blog mit Next.js bauen →
blog.php
<?php
require_once 'vendor/autoload.php';
use Publino\Sdk\PublinoClient;

$client = new PublinoClient(
    baseUrl: 'https://api.publino.de',
    siteId:  'mein-blog',
    apiKey:  getenv('PUBLINO_API_KEY'),
);

$articles = $client->articles('de'); // ArticleSummary[]
PHP SDK
composer

Zero runtime dependencies, PHP 8.2+. Für WordPress, TYPO3, Laravel oder Custom-PHP. Eigener Transport über das Transport-Interface einsetzbar.

composer require publino/sdk
Komplette Anleitung: Blog in WordPress & Laravel →
embed.js

Kein Backend. Ein Tag. Fertig.

Das embed.js Web Component lädt Publino-Inhalte direkt im Browser — gesichert über den Publishable Key und Origin-Allowlist. Ideal für statische Sites, Shopify, Webflow oder jeden HTML-Kontext.

  • Nur veröffentlichte Artikel sichtbar (Publishable Key)
  • Zugriff auf gelistete Origins beschränkbar
  • Kein Build-Tool, kein Node.js, kein Backend nötig
  • Styling via CSS Custom Properties oder Slot-basiertem Template
Komplette Anleitung: Blog ohne Backend einbetten →
index.html
<!-- 1. Script einbinden -->
<script src="https://cdn.publino.de/embed.js" async></script>

<!-- 2. Artikel-Liste einbetten -->
<publino-article-list
  site="mein-blog"
  locale="de"
  pk="pub_pk_…"
  api="https://api.publino.de"
  link-pattern="/blog/{slug}-{id}">
</publino-article-list>

<!-- 3. Einzelartikel -->
<publino-article
  site="mein-blog"
  article-id="ab12cd34"
  locale="de"
  pk="pub_pk_…"
  api="https://api.publino.de">
</publino-article>
Webhook Payload — article.published
POST https://ihr-system.de/webhook
Content-Type: application/json

{
  "event": "article.published",
  "timestamp": 1737021600,
  "siteId": "mein-blog",
  "articleId": "art_dX72kLm",
  "locale": "de",
  "slug": "ki-in-der-redaktion",
  "title": "KI in der Redaktion"
}

// Erwartete Antwort: 200 OK
HTTP/1.1 200 OK
Outbound Webhooks

Ihr System reagiert in Echtzeit

Konfigurieren Sie beliebig viele Endpunkte — Publino sendet einen HTTP-POST, sobald sich der Content-Status ändert. Kein Polling, keine Verzögerung.

article.published Artikel wird veröffentlicht
article.updated Veröffentlichter Artikel geändert
article.unpublished Artikel depubliziert / archiviert
Retry-Logik: Bei Timeout oder Fehler-Statuscode (non-2xx) wird bis zu 3× nachversucht — mit exponential Backoff.
MCP · KI-Anbindung

Artikel direkt aus deiner KI verfassen

Über den Model-Context-Protocol-Server kann deine KI (Claude, Cursor, Windsurf, VS Code …) Artikel in einem Workspace lesen, schreiben, übersetzen und veröffentlichen — kein API-Key im Code, die KI ist das Modell selbst. Den MCP-Token erstellst du im Dashboard unter API & MCP.

Windows (Claude Desktop / Cursor / Windsurf / VS Code)
claude_desktop_config.json
{
  "mcpServers": {
    "publino": {
      "command": "cmd",
      "args": ["/c", "npx", "-y", "mcp-remote", "https://app.publino.de/mcp",
               "--header", "Authorization:${PUBLINO_AUTH}"],
      "env": { "PUBLINO_AUTH": "Bearer pub_mcp_…" }
    }
  }
}
macOS / Linux
claude_desktop_config.json
{
  "mcpServers": {
    "publino": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://app.publino.de/mcp",
               "--header", "Authorization:${PUBLINO_AUTH}"],
      "env": { "PUBLINO_AUTH": "Bearer pub_mcp_…" }
    }
  }
}
Windows-Hinweis: Der Umweg über cmd /c npx und der Header via Env-Variable (Authorization:${PUBLINO_AUTH}) sind nötig, weil sonst die Leerzeichen im Node-Pfad bzw. im Bearer-Wert die Startzeile zerlegen. Gleiche JSON-Struktur für alle Tools — nur der Speicherort der Datei unterscheidet sich (Cursor .cursor/mcp.json, Windsurf mcp_config.json). Benötigt Node.js.
OpenAPI

Vollständige Spec. Try it live.

Die komplette Publino API ist als OpenAPI 3.1 Spec verfügbar. Öffnen Sie die interaktive Doku und testen Sie Endpunkte direkt im Browser — mit Ihrem eigenen API-Key.

  • OpenAPI 3.1 — maschinenlesbar, tools-kompatibel
  • Try-it-out direkt im Browser mit Bearer Auth
  • Code-Snippets in curl, JS, Python, PHP auto-generiert
  • Download als JSON für Postman, Insomnia, Bruno
Publino Delivery API · v1 OAS 3.1
GET /v1/sites/{siteId}/articles List articles
GET /v1/sites/{siteId}/articles/{slug} Get article
PARAMETERS
siteId *required string
slug *required string
locale string · ISO 639-1
format "html" | "md"
GET /v1/sites/{siteId}/categories List categories
GET /v1/sites/{siteId}/tags List tags