Docs durchsuchen

Guides und API-Endpunkte durchsuchen

Referenz

Bilder

Bilder für Newsletter: Das Portal lädt sie über NewsletterKit hoch und bekommt eine öffentliche, unveränderliche https-Adresse zurück — optimiert für Mail-Clients (höchstens 1360 px breit, JPEG oder PNG, unter 400 KB, ohne Metadaten). Zwei Schritte, weil ein Aufruf höchstens 4,5 MB annimmt: anmelden, Datei an die signierte Adresse schicken, abschließen.

Verfügbar
POST

/v1/assets

Legt ein Bild an und liefert eine signierte Upload-Adresse (zwei Stunden gültig). Die Datei geht per PUT mit ihrem Content-Type direkt an upload.url — ohne API-Key. Danach POST /v1/assets/{id}/complete. Erlaubt: PNG, JPEG, WebP, GIF, AVIF, SVG, bis 25 MB. Scope full.

Body-Parameter

NameTypPflichtBeschreibung
filenamestringerforderlichDateiname, nur zur Anzeige. z. B. buehne.jpg
content_typestringerforderlichMIME-Typ der Datei. z. B. image/jpeg

Request · Next.js

const res = await fetch(`https://api.newsletterkit.ventureon.io/v1/assets`, {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.NEWSLETTERKIT_API_KEY}`,
      "Content-Type": "application/json",
      "Idempotency-Key": crypto.randomUUID(),
    },
    body: JSON.stringify({
      filename: "buehne.jpg",
      content_type: "image/jpeg",
    }),
});
const data = await res.json();

Response 200

{
  "data": {
    "id": "b7f0b1a6-…",
    "status": "pending",
    "filename": "buehne.jpg",
    "url": null,
    "upload": { "url": "https://…/storage/v1/object/upload/sign/asset-uploads/…?token=…", "method": "PUT", "headers": { "Content-Type": "image/jpeg" } }
  },
  "request_id": "…"
}
POST

/v1/assets/{id}/complete

Optimiert die hochgeladene Datei (Breite, Format, Qualität, Metadaten weg) und legt sie unter einer Adresse mit Inhalts-Hash ab, die sich nie ändert — Mail-Clients dürfen ewig cachen. Gefahrlos wiederholbar. Scope full.

Path-Parameter

NameTypPflichtBeschreibung
idstring (UUID)erforderlichDie id aus POST /v1/assets. z. B. b7f0b1a6-95ad-4080-b5ab-f8721ce47aed

Request · Next.js

const id = "b7f0b1a6-95ad-4080-b5ab-f8721ce47aed";

const res = await fetch(`https://api.newsletterkit.ventureon.io/v1/assets/${id}/complete`, {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.NEWSLETTERKIT_API_KEY}`,
      "Idempotency-Key": crypto.randomUUID(),
    },
});
const data = await res.json();

Response 200

{
  "data": {
    "id": "b7f0b1a6-…",
    "status": "ready",
    "filename": "buehne.jpg",
    "content_type": "image/jpeg",
    "url": "https://…/storage/v1/object/public/mail-assets/<kunde>/d576d44f….jpg",
    "width": 1360,
    "height": 1020,
    "bytes": 27177,
    "created_at": "2026-09-03T17:10:00Z"
  },
  "request_id": "…"
}

422, wenn noch keine Datei hochgeladen ist oder sie kein lesbares Bild ist (HEIC wird abgelehnt). Die url gehört in Bild-Parameter wie bild.url.

GET

/v1/assets

Die fertigen Bilder, neueste zuerst (limit bis 200). Scope reporting.

Query-Parameter

NameTypPflichtBeschreibung
limitintegeroptionalmax. 200, Standard 50. z. B. 50

Request · Next.js

const res = await fetch(`https://api.newsletterkit.ventureon.io/v1/assets?limit=50`, {
    method: "GET",
    headers: {
      Authorization: `Bearer ${process.env.NEWSLETTERKIT_API_KEY}`,
    },
});
const data = await res.json();

Response 200

{ "data": [ { "id": "b7f0b1a6-…", "status": "ready", "url": "https://…", "width": 1360, "height": 1020, "bytes": 27177 } ], "request_id": "…" }
GET

/v1/assets/{id}

Ein Bild mit Adresse und Maßen. Scope reporting.

Path-Parameter

NameTypPflichtBeschreibung
idstring (UUID)erforderlichDie Bild-ID. z. B. b7f0b1a6-95ad-4080-b5ab-f8721ce47aed

Request · Next.js

const id = "b7f0b1a6-95ad-4080-b5ab-f8721ce47aed";

const res = await fetch(`https://api.newsletterkit.ventureon.io/v1/assets/${id}`, {
    method: "GET",
    headers: {
      Authorization: `Bearer ${process.env.NEWSLETTERKIT_API_KEY}`,
    },
});
const data = await res.json();

Response 200

{ "data": { "id": "b7f0b1a6-…", "status": "ready", "url": "https://…", "width": 1360, "height": 1020, "bytes": 27177 }, "request_id": "…" }
DELETE

/v1/assets/{id}

Löscht das Bild. Die Datei verschwindet erst, wenn kein anderes Bild des Kunden denselben Inhalt hat — zwei Uploads desselben Fotos teilen sich die Adresse. Verschickte Mails verweisen weiter auf die Adresse; löschen heißt, dass sie dort ins Leere zeigen. Scope full.

Path-Parameter

NameTypPflichtBeschreibung
idstring (UUID)erforderlichDie Bild-ID. z. B. b7f0b1a6-95ad-4080-b5ab-f8721ce47aed

Request · Next.js

const id = "b7f0b1a6-95ad-4080-b5ab-f8721ce47aed";

const res = await fetch(`https://api.newsletterkit.ventureon.io/v1/assets/${id}`, {
    method: "DELETE",
    headers: {
      Authorization: `Bearer ${process.env.NEWSLETTERKIT_API_KEY}`,
    },
});
const data = await res.json();

Response 200

{ "data": { "deleted": true }, "request_id": "…" }