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
/press-releases
List your releases (paginated, filterable via ?status= and ?per_page=, max. 100).
· Permission: press-releases:read
/press-releases
Create a new release — always as a draft (status draft).
· Permission: press-releases:write
/press-releases/{id}
Fetch a release incl. company, category and images.
· Permission: press-releases:read
/press-releases/{id}
Update a release — only in status draft or rejected.
· Permission: press-releases:write
/press-releases/{id}/submit
Submit for content review — the only path towards publication.
· Permission: press-releases:write
/press-releases/{id}
Delete a release — published releases are excluded.
· Permission: press-releases:write
Images
/press-releases/{id}/images
List the images of a release.
· Permission: press-releases:read
/press-releases/{id}/images
Upload an image (multipart/form-data) — only for draft/rejected.
· Permission: press-release-images:write
/press-release-images/{imageId}
Remove an image — only for draft/rejected.
· Permission: press-release-images:write
Master data
/companies
List your company profiles (newsrooms).
· Permission: companies:read
/companies/{id}
Fetch a company profile.
· Permission: companies:read
/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 |
|---|---|---|---|
| company_id | integer | yes | ID of one of your company profiles — determines newsroom and portal. |
| 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. 8 MB. |
| title | string | — | Image title, max. 120 characters. |
| description | string | — | Description, max. 500 characters. |
| copyright | string | — | Copyright attribution, max. 255 characters. |
| 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 "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).
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