Su, 11. Oct 🇩🇪 DE 🌐 EN EN Pricing
AD-HOC Latest ad-hoc announcements: 09:14 How Agencies Benefit from a White-Label CSS. 12:07 Shanda Consult Launches Structural Guide on Defending Italy-Cyprus Cor.... 14:07 Shanda Consult Publishes Blueprint Guide to the Cyprus Startup Visa fo.... 07:42 New Guide Demystifies Cyprus Relocation for Non-EU Entrepreneurs Witho.... 08:03 Shanda Consult: Full Financial Case Study of the Cyprus Non-Dom Tax St.... 10:59 Setting the Benchmark: Shanda Consult’s Strategic Response to the 2026.... 11:24 Cyprus Immigration and Residence Permit for non-EU Nationals. 09:55 k3 mapa assess industrial goods factories in China and Korea.
presseecho API
Developers

API documentation

Create press releases programmatically, add images and submit them for review — via the versioned REST API of the publisher hub.


Basics

API v1 is a RESTful web service with JSON responses. Base URL: https://pressekonto.com/api/v1. A release created via the API is always a draft; it is only published after submission via the submit route and the subsequent content review — it then appears on both portals like any other release.

Authentication

All requests require a personal API token as a bearer header: Authorization: Bearer <token>. Each token carries permissions (e.g. press-releases:write) that control access to the respective endpoints. You create and revoke tokens yourself in your publisher account under "API tokens" — an active booking (plan or single press release) is required. Existing customers of the legacy portals: your previous API keys were migrated and keep working — both as bearer tokens and in the old form (X-ApiKey header) and on the documented /service/… paths. For new integrations we recommend the current /api/v1/… endpoints with bearer tokens.

Endpoints

Press releases

GET
/press-releases

List your releases (paginated, filterable via ?status= and ?per_page=, max. 100). · Permission: press-releases:read

POST
/press-releases

Create a new release — always as a draft (status draft). · Permission: press-releases:write

GET
/press-releases/{id}

Fetch a release incl. company, category and images. · Permission: press-releases:read

PATCH
/press-releases/{id}

Update a release — only in status draft or rejected. · Permission: press-releases:write

POST
/press-releases/{id}/submit

Submit for content review — the only path towards publication. · Permission: press-releases:write

DELETE
/press-releases/{id}

Delete a release — published releases are excluded. · Permission: press-releases:write

Images

GET
/press-releases/{id}/images

List the images of a release. · Permission: press-releases:read

POST
/press-releases/{id}/images

Upload an image (multipart/form-data) — only for draft/rejected. · Permission: press-release-images:write

DELETE
/press-release-images/{imageId}

Remove an image — only for draft/rejected. · Permission: press-release-images:write

Master data

GET
/companies

List your company profiles (newsrooms). · Permission: companies:read

GET
/companies/{id}

Fetch a company profile. · Permission: companies:read

GET
/categories

Active categories incl. translations — provides the category_id for new releases. · Permission: press-releases:read

Fields of a press release

Field Type Required Description
portal string — Target portal (presseecho or businessportal24). If omitted, the requested domain decides, otherwise the company profile's portal; an explicit value takes precedence.
company_id integer yes ID of one of your company profiles — determines the newsroom.
category_id integer yes Category (see GET /categories).
language string yes Language code, two characters: de or en.
title string yes Headline, max. 255 characters.
text string yes Content. Allowed HTML: p, br, h2, h3, strong, em, ul, ol, li, blockquote, a — everything else is stripped.
backlink_url string — Link to source/website, max. 255 characters.
keywords string — Keywords, comma-separated, max. 255 characters.
teaser_begin / teaser_end integer — Character offsets for the teaser excerpt.
no_export boolean — Exclude the release from feeds/exports.

Fields of an image upload

Field Type Required Description
image file yes JPG, PNG or WebP, max. 16 MB, at most 8,000 pixels per side. One title image per release.
ai_declaration string yes AI label of the image: original (no generative AI), ai_generated, ai_edited. If the file carries verified provenance data, that label applies and cannot be weakened.
copyright string yes Image credit as shown below the image (“Photo: …”), max. 255 characters.
rights_confirmed boolean yes Must be true: confirmation that you are entitled to publish the image and that your details are correct (wording see note below).
confirm_text_version string yes Identifier of the confirmed wording, currently img-confirm-v2. An outdated identifier is answered with 422 and the current one.
title string — Image title, max. 120 characters.
description string — Description, max. 500 characters.
license_url string — Link to the licence if a licence governs the use (e.g. Creative Commons, agency).
source_url string — Link to the source page — not a licence.
focus_x / focus_y integer — Focus point for cropping in percent (0–100), default centre.
no_crop boolean — true: do not crop, full image with neutral padding.
is_preview boolean — Set as preview image (replaces an existing one).

Quick start

The typical flow: create a draft, upload an image, submit for review.

# 1. Create a draft
curl -X POST https://pressekonto.com/api/v1/press-releases \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "company_id": 1,
    "category_id": 2,
    "language": "de",
    "title": "Neue Produktankündigung",
    "text": "<p>Unser neues Produkt …</p>"
  }'

# 2. Upload an image (multipart)
curl -X POST https://pressekonto.com/api/v1/press-releases/123/images \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -F "image=@pressefoto.jpg" \
  -F "ai_declaration=original" \
  -F "copyright=Mustermann GmbH" \
  -F "rights_confirmed=1" \
  -F "confirm_text_version=img-confirm-v2" \
  -F "is_preview=1"

# 3. Submit for content review
curl -X POST https://pressekonto.com/api/v1/press-releases/123/submit \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "ai_text_declaration": "none" }'

Required since July 2026: the submit call bindingly declares the AI grade of the text (ai_text_declaration: none, assisted, mostly_ai, fully_ai — transparency obligation under Art. 50 EU AI Act) and includes acknowledgement of permanent archiving (Terms § 13). Each image carries its own label (ai_declaration: original, ai_generated, ai_edited).

Images are optional. If an image is submitted, copyright, ai_declaration, rights_confirmed and confirm_text_version are required. The portal reads provenance data from the file (IPTC, XMP; later Content Credentials) and keeps the original file as evidence. With rights_confirmed you confirm the rights declaration in version img-confirm-v2 for each image; its wording is part of the API terms of use. Images without the required fields are rejected with 422; the release itself is unaffected.

Machine-readable reference: OpenAPI specification (YAML).

HTTP status codes

Code Meaning
200 / 201 / 204 Success — fetch, resource created or deleted.
401 Missing or invalid API token.
402 Submitting requires an active booking (plan or single release).
403 Token permission missing or the resource does not belong to your account.
409 Status conflict — e.g. editing an already published release.
422 Validation error or quota/guideline violation (details in the body).
429 Rate limit reached: 60 requests per minute per token (X-RateLimit-* headers).

Create an API token

You manage tokens yourself in the publisher account. For integration questions, support is happy to help: info@businessportal24.com