Vollständige Referenz aller öffentlichen Endpoints. Erstelle und verwalte digitale Produkte programmatisch — direkt aus eigenen Skripten, Servern oder dem Monemee MCP-Server für Claude.
Jeder Request braucht einen API-Key im Authorization-Header. Keys erstellst du unter Settings → API & Integrationen. Sie beginnen mit monemee_, werden auf unserer Seite nur als SHA-256-Hash gespeichert und können jederzeit widerrufen werden.
Authorization: Bearer monemee_xxxxxxxxxxxxxxxxxxxxxxxxWenn du einen MCP-Client wie claude.ai integrierst, kannst du statt eines statischen API-Keys den OAuth-2.1-Flow nutzen — inkl. Dynamic Client Registration nach RFC 7591. Das passiert in claude.ai automatisch beim Hinzufügen des Custom Connectors. Discovery-Doc:
GET https://monemee.com/.well-known/oauth-authorization-server/api/oauth/register, /oauth/authorize, /api/oauth/tokenmonemee:writePOST /mcp/v1 ausgeführt (Streamable-HTTP-Transport)https://monemee.com/api/v1429 und der Meldung „Rate limit exceeded for this API key."POST/PATCH-Requests erwarten application/json (außer uploads/sign beim tatsächlichen Datei-PUT — dort der MIME-Type der Datei)./public/meIdentitäts-Probe. Prüft, dass dein Key gültig ist, und gibt den zugehörigen User zurück. Ideal zum Testen der Verbindung.
{
"success": true,
"data": {
"user_id": 123,
"email": "creator@example.com",
"api_key": { "id": 5, "name": "Claude Desktop", "prefix": "monemee_abcdef" }
}
}/public/productsListet alle Produkte des authentifizierten Users (drafts + active + archived) inklusive Module.
{
"success": true,
"data": [
{
"id": 42,
"title": "LinkedIn Hook Generator",
"frontend_type": "ki_prompts",
"price": "14.90",
"status": "active",
"modules": [...],
...
}
]
}/public/productsLegt ein neues Produkt an. Pflichtfeld: frontend_type. Erlaubte Werte: ebook, template, course, link, newsletter, coaching, software, ki_prompts.
Bei frontend_type: "ki_prompts" rendert Monemee ausprompt_content automatisch eine .md-Datei und liefert sie als File-Modul aus.
{
"frontend_type": "ki_prompts",
"title": "LinkedIn Hook Generator",
"description": "10 Hooks für eine eingegebene Zielgruppe.",
"price": 14.90,
"prompt_content": "Du bist ein erfahrener LinkedIn-Stratege...",
"affiliate_commission": 20,
"status": "draft"
}Lade die Datei zuerst über POST /public/uploads/sign + PUT + POST /public/uploads/finalize hoch und übergib das resultierende file_url als Modul.
{
"frontend_type": "template",
"title": "Notion Productivity Bundle",
"description": "<p>5 verknüpfte Notion-Datenbanken.</p>",
"price": 19.90,
"status": "draft",
"modules": [
{
"type": "file",
"title": "notion-bundle.zip",
"sort_order": 0,
"file_url": "https://storage.googleapis.com/.../notion-bundle.zip",
"file_name": "notion-bundle.zip",
"file_size": 248320
}
]
}Bei frontend_type: "software" verbindet Monemee dein privates GitHub-Repo. Beim Veröffentlichen (status: "active") wird der Branch als ZIP oder das Release-Asset heruntergeladen und als File-Modul gespeichert. Der PAT wird AES-256-verschlüsselt.
{
"frontend_type": "software",
"title": "DATEV-MCP-Server",
"description": "MCP-Server für DATEV-Buchhaltung.",
"price": 199,
"status": "draft",
"github_repo_url": "https://github.com/dein-name/datev-mcp",
"github_pat": "github_pat_xxx",
"github_branch": "main",
"github_delivery_mode": "zip"
}/public/products/:idEinzelnes Produkt mit allen Modulen. Muss dem Key-Inhaber gehören.
/public/products/:idPartielles Update. Nur die mitgesendeten Felder ändern sich. PUT wird als Alias akzeptiert (für SDKs, die kein PATCH sprechen). Bei status: "active" auf einem KI-Prompt-Produkt mit geändertem prompt_content wird die .md neu generiert. Bei software-Produkten zieht der Server das GitHub-Artifact neu.
{
"price": 24.90,
"status": "active"
}/public/uploads/signErster Schritt des zwei-Schritt-Uploads. Gibt eine signierte Firebase-Storage-URL zurück, an die du die Datei direkt perPUT sendest. Die signierte URL ist 15 Minuten gültig. Erlaubte Inhaltstypen: PDF, ZIP, EPUB, MP4, WebM, MP3, JPG/PNG/WebP/GIF. HTML, JS und SVG sind aus Sicherheitsgründen blockiert.
{
"fileName": "guide.pdf",
"contentType": "application/pdf"
}{
"success": true,
"data": {
"uploadUrl": "https://storage.googleapis.com/...&X-Goog-Signature=...",
"fileUrl": "https://storage.googleapis.com/<bucket>/products/api/123/1730500000_guide.pdf",
"objectPath": "products/api/123/1730500000_guide.pdf",
"fileName": "guide.pdf",
"contentType": "application/pdf",
"expiresAt": "2026-05-02T12:15:00.000Z"
}
}/public/uploads/finalizeZweiter Schritt: nachdem du per PUT hochgeladen hast, ruft finalize auf, um das Objekt öffentlich lesbar zu machen. Erst danach ist file_url aus der Sign-Response tatsächlich abrufbar. Idempotent. Funktioniert nur für Objekte unter products/api/<deine-user-id>/.
{
"objectPath": "products/api/123/1730500000_guide.pdf"
}Alle Fehler folgen demselben JSON-Schema. HTTP-Status zeigt die Kategorie: 400 = ungültiges Payload, 401 = Auth fehlt/ungültig, 403 = Zugriff verweigert (z.B. fremdes Objekt), 404 = Ressource nicht gefunden, 429 = Rate-Limit, 5xx = Server.
{
"success": false,
"message": "Invalid or revoked API key."
}# 1) Signed URL holen
curl -X POST https://monemee.com/api/v1/public/uploads/sign \
-H "Authorization: Bearer monemee_…" \
-H "Content-Type: application/json" \
-d '{"fileName":"guide.pdf","contentType":"application/pdf"}'
# Response liefert uploadUrl + objectPath + fileUrl
# 2) Datei hochladen (direkt zu Firebase Storage, KEIN Authorization-Header!)
curl -X PUT "<uploadUrl-aus-Schritt-1>" \
-H "Content-Type: application/pdf" \
--data-binary @./guide.pdf
# 3) Objekt veröffentlichen (Public-Read freischalten)
curl -X POST https://monemee.com/api/v1/public/uploads/finalize \
-H "Authorization: Bearer monemee_…" \
-H "Content-Type: application/json" \
-d '{"objectPath":"<objectPath-aus-Schritt-1>"}'
# Jetzt fileUrl in einem Produkt-Modul verwendenimport fetch from 'node-fetch';
const API_KEY = process.env.MONEMEE_API_KEY;
async function createPromptProduct(title, prompt, price) {
const res = await fetch('https://monemee.com/api/v1/public/products', {
method: 'POST',
headers: {
Authorization: `Bearer ${API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
frontend_type: 'ki_prompts',
title,
price,
prompt_content: prompt,
status: 'draft'
})
});
if (!res.ok) throw new Error(`HTTP ${res.status}: ${await res.text()}`);
return res.json();
}API-Key erstellen, Endpoint aufrufen, Produkt veröffentlichen.