mein-plakat API (1.0.0)

Download OpenAPI specification:

API documentation for mein-plakat

Authorization

User management, roles, and permissions via Auth0 Management API

Get all permissions

Retrieves all API permissions (scopes) from all resource servers in Auth0.

Authorizations:
bearerAuth

Responses

Create permission

Creates a new permission (scope) on a resource server.

Authorizations:
bearerAuth
Request Body schema: application/json
required
resourceServerId
required
string

The ID of the resource server (API)

value
required
string

The permission scope value (e.g., read:users)

description
string

Responses

Request samples

Content type
application/json
{
  • "resourceServerId": "string",
  • "value": "string",
  • "description": "string"
}

Delete permission

Deletes a permission (scope) from a resource server.

Authorizations:
bearerAuth
Request Body schema: application/json
required
resourceServerId
required
string
value
required
string

Responses

Request samples

Content type
application/json
{
  • "resourceServerId": "string",
  • "value": "string"
}

Watchlist

Get watchlist

Retrieves the entire watchlist for the currently logged-in user.

Authorizations:
bearerAuth

Responses

Add to watchlist

Adds a location to the user's watchlist.

Authorizations:
bearerAuth
Request Body schema: application/json
required
providerId
required
string
locationId
required
string
positionNumber
number

Position number (default 1)

Responses

Request samples

Content type
application/json
{
  • "providerId": "string",
  • "locationId": "string",
  • "positionNumber": 0
}

Remove from watchlist

Removes a location from the user's watchlist.

Authorizations:
bearerAuth
query Parameters
providerId
required
string
locationId
required
string

Responses

Check watchlist status

Checks if a specific location is in the user's watchlist.

Authorizations:
bearerAuth
query Parameters
providerId
required
string
locationId
required
string

Responses

Response samples

Content type
application/json
{
  • "inWatchlist": true
}

Add all listings matching a filter state to the watchlist

Authorizations:
bearerAuth

Remove all listings matching a filter state from the watchlist

Authorizations:
bearerAuth

User Profile

Get my profile

Retrieves the profile of the currently logged-in user.

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "auth0Id": "string",
  • "email": "string",
  • "name": "string",
  • "picture": "string"
}

Update my profile

Updates the profile of the currently logged-in user.

Authorizations:
bearerAuth
Request Body schema: application/json
required
name
string
nickname
string
firstName
string
lastName
string
phone
string
companyName
string

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "nickname": "string",
  • "firstName": "string",
  • "lastName": "string",
  • "phone": "string",
  • "companyName": "string"
}

Change password

Sends a password reset email to the logged-in user.

Authorizations:
bearerAuth

Responses

Upload profile picture

Uploads a profile picture for the logged-in user (Multipart/form-data).

Authorizations:
bearerAuth
Request Body schema: multipart/form-data
file
string <binary>

Responses

Support

Create support ticket

Creates a ticket in the Simple Support System (project mein_plakat).

Authorizations:
bearerAuth
Request Body schema: application/json
required
title
required
string
content
required
string
ticketPriority
required
string
Enum: "trivial" "minor" "major" "critical" "blocker"
Array of objects

Responses

Request samples

Content type
application/json
{
  • "title": "string",
  • "content": "string",
  • "ticketPriority": "trivial",
  • "attachments": [
    ]
}

Admin

Import SDAW Data

Imports SDAW records from a file (text content).

Authorizations:
bearerAuth
Request Body schema:
required
string

SDAW file content

Responses

Request samples

Content type
No sample

Response samples

Content type
application/json
{
  • "success": true,
  • "messageType": "string",
  • "baseId": "string",
  • "stats": { }
}

Extract headers from schedule Excel/CSV

Extracts column headers from uploaded schedule file for mapping. Admin permission required.

Authorizations:
bearerAuth
Request Body schema: application/json
required
file
required
string <base64>

Base64 encoded Excel or CSV file

Responses

Request samples

Content type
application/json
{
  • "file": "string"
}

Response samples

Content type
application/json
{
  • "valid": true,
  • "columns": [
    ],
  • "defaultMapping": { }
}

Import schedule data

Imports schedule (Terminplan) data from Excel/CSV with field mapping. Replaces only business years present in file. Admin permission required.

Authorizations:
bearerAuth
Request Body schema: application/json
required
file
required
string <base64>

Base64 encoded Excel or CSV file

mapping
required
object

Column index to field name mapping (e.g. 0 to year, 1 to period)

Responses

Request samples

Content type
application/json
{
  • "file": "string",
  • "mapping": { }
}

Response samples

Content type
application/json
{
  • "success": true,
  • "count": 0
}

Request Signed File URL

Generates a temporary CloudFront signed URL for a private file (admin only).

Authorizations:
bearerAuth
Request Body schema: application/json
required
key
required
string

File key to request.

download
boolean

When true the URL is signed against S3 with Content-Disposition attachment, so the browser saves the file instead of displaying it.

fileName
string

Name the saved file gets; only used together with download.

Responses

Request samples

Content type
application/json
{
  • "key": "550e8400-e29b-41d4-a716-446655440000.pdf",
  • "download": true,
  • "fileName": "motiv.pdf"
}

Response samples

Content type
application/json

Extract Headers from Municipality Directory Excel

Extracts column headers from uploaded Excel file for mapping (admin only).

Authorizations:
bearerAuth
Request Body schema: application/json
required
file
required
string <base64>

Base64 encoded Excel file (xls or xlsx)

Responses

Request samples

Content type
application/json
{
  • "file": "string"
}

Response samples

Content type
application/json
{
  • "valid": true,
  • "columns": [
    ]
}

Import Municipality Directory Data

Imports municipality directory data from Excel file with field mapping (admin only).

Authorizations:
bearerAuth
Request Body schema: application/json
required
file
required
string <base64>

Base64 encoded Excel file

mapping
required
object

Mapping of original column keys to target field names

Responses

Request samples

Content type
application/json
{
  • "file": "string",
  • "mapping": { }
}

Response samples

Content type
application/json
{
  • "success": true,
  • "count": 0
}

Get location coverage summary

Returns pre-computed location coverage statistics (tiles, fiscal year data). Admin permission required.

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "data": { }
}

Get missing locations for a coverage metric

Returns paginated list of locations missing data for a given coverage metric. Admin permission required.

Authorizations:
bearerAuth
query Parameters
metric
required
string
Enum: "locationPhotos" "consumerMarketPhotos" "consumerMarketAddresses" "municipalityDirectory" "availableSpaces" "performanceValues" "mailingAddresses" "schedulesDecadicABlock" "schedulesDecadicBBlock" "schedulesDecadicCBlock" "schedulesWeekly" "schedules14day" "schedulesMonthly" "schedulesQuarterly" "schedulesHalfYearly" "schedulesYearly"
businessYear
integer
page
integer
Default: 1
limit
integer <= 100
Default: 25
sortBy
string
sortOrder
string
Enum: "ASC" "DESC"
search
string

Responses

Response samples

Content type
application/json
{
  • "items": [ ],
  • "pageInfo": {
    }
}

GraphQL

Execute GraphQL queries and mutations against the mein-plakat API.

Available Queries:

  • checkPermissions - Check if current user has admin permissions
  • locationPhotos(page, limit, districtId, providerId) - Get location photos with pagination
  • locationPhoto(id) - Get a single location photo by ID
  • consumerMarketPhotos(page, limit, consumerMarketId, providerId) - Get consumer market photos with pagination
  • consumerMarketPhoto(id) - Get a single consumer market photo by ID
  • logs(page, limit, app, level) - Get logs with pagination
  • sdawBaseRecords(type, page, limit) - Get SDAW base records (filtered by type)
  • sdawBaseRecord(id, type) - Get a single SDAW base record
  • sdawDetailRecords(baseId, type, collectionSuffix, page, limit) - Get SDAW detail metadata (actual data from S3 via REST)
  • importStats - Get overall import statistics
  • users(page, limit, sortBy, sortOrder) - Get users with pagination
  • receivedEmails(page, limit, sortBy, sortOrder) - Get received emails with pagination
  • sentEmails(page, limit, sortBy, sortOrder) - Get sent emails with pagination
  • combinedAdvertisingMedia(...) - Werbeträger merged locations (filterChain, counterSnapshots, optional extended PpS metrics)
  • advertisingMediaFilterContext(...) - Candidate row count; optional PpS bounds and population min/max (prefix chain, scan-capped)
  • geoRadiusMunicipalityPreview(addressLine, radiusKm) - Geocode center + municipalities with location counts inside radius (Nominatim + scan)

Example Query:

query {
  locationPhotos(page: 1, limit: 10) {
    items {
      _id
      districtId
      providerId
      originalPath
      variants { size type path }
    }
    pageInfo { total hasNextPage }
  }
}
Authorizations:
bearerAuth
Request Body schema: application/json
required
query
required
string

GraphQL query string

variables
object

Optional variables for the query

operationName
string

Optional operation name if query contains multiple operations

Responses

Request samples

Content type
application/json
{
  • "query": "query { locationPhotos(limit: 5) { items { _id districtId } } }",
  • "variables": { },
  • "operationName": "string"
}

Response samples

Content type
application/json
{
  • "data": { },
  • "errors": [
    ]
}

Sign an upload straight into the bucket

Hands back everything the browser needs to put a file into the private files bucket by itself (admin only). Up to 64 MB that is one signed PUT; above it the answer carries the part URLs of a multipart upload instead, so gigabyte print data survives a broken line. Report the result to /v1/uploads/complete afterwards, that is where size and checksum are read off the stored object.

Authorizations:
bearerAuth
Request Body schema: application/json
required
scope
required
string
Enum: "motifs" "articles"

Where the file belongs.

referenceId
string

Id of the record the file hangs on, used as a folder.

filename
required
string
contentType
string
size
integer

Size of the file in bytes. Decides single PUT or multipart.

Responses

Request samples

Content type
application/json
{
  • "scope": "motifs",
  • "referenceId": "507f1f77bcf86cd799439011",
  • "filename": "motiv-v2.pdf",
  • "contentType": "application/pdf",
  • "size": 1073741824
}

Response samples

Content type
application/json
{
  • "mode": "single",
  • "key": "motifs/507f1f77bcf86cd799439011/9f1c-motiv-v2.pdf",
  • "uploadUrl": "string",
  • "uploadId": "string",
  • "partSize": 0,
  • "parts": [
    ],
  • "contentType": "string",
  • "expiresIn": 0,
  • "maxBytes": 0
}

Report a file that was put into the bucket

Closes a multipart upload when parts were used and then reads size, content type and checksum off the stored object (admin only). Nothing here is taken from the caller: a file over the limit of its scope or of a type the scope does not accept is deleted again right away, because at that point it already lies in the bucket.

Authorizations:
bearerAuth
Request Body schema: application/json
required
scope
required
string
Enum: "motifs" "articles"
key
required
string

The key from the presign call.

filename
string
uploadId
string

Only for a multipart upload.

Array of objects

Only for a multipart upload, the ETag of every part.

Responses

Request samples

Content type
application/json
{
  • "scope": "motifs",
  • "key": "motifs/507f1f77bcf86cd799439011/9f1c-motiv-v2.pdf",
  • "filename": "string",
  • "uploadId": "string",
  • "parts": [
    ]
}

Response samples

Content type
application/json
{
  • "key": "string",
  • "filename": "string",
  • "contentType": "string",
  • "size": 0,
  • "checksum": "string"
}

Drop a multipart upload the browser gave up on

Removes the parts of an unfinished multipart upload (admin only). Until it is completed no object exists under the key at all, so an upload that breaks off leaves no half file behind; this only makes sure the orphaned parts are not billed until the bucket rule clears them.

Authorizations:
bearerAuth
Request Body schema: application/json
required
scope
required
string
Enum: "motifs" "articles"
key
required
string
uploadId
required
string

Responses

Request samples

Content type
application/json
{
  • "scope": "motifs",
  • "key": "string",
  • "uploadId": "string"
}

Delete an uploaded file

Removes a file from the private files bucket (admin only).

Authorizations:
bearerAuth
Request Body schema: application/json
required
key
required
string

Responses

Request samples

Content type
application/json
{
  • "key": "motifs/507f1f77bcf86cd799439011/9f1c-motiv-v2.pdf"
}

Create export job

Creates an async export job. Returns immediately with jobId. SIS process-exports task picks up pending jobs and generates the file. Admin permission required.

Authorizations:
bearerAuth
Request Body schema: application/json
required
format
required
string
Enum: "csv" "xlsx"
required
object

Responses

Request samples

Content type
application/json
{
  • "format": "csv",
  • "view": {
    }
}

Response samples

Content type
application/json
{
  • "jobId": "string",
  • "message": "string"
}

List database collections

Returns all MongoDB collections with document count. Admin permission required.

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "data": [
    ]
}

Get collection documents (paginated)

Returns paginated documents from a collection. Supports search. Admin permission required.

Authorizations:
bearerAuth
path Parameters
name
required
string

Collection name

query Parameters
page
integer
Default: 1
limit
integer <= 100
Default: 50
search
string

Search in common fields (min 2 chars)

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

Get AWS costs

Returns AWS Cost Explorer data (current month costs, estimated month-end, past 12 months). Cached for 1 hour. Admin permission required.

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "data": {
    },
  • "cached": true
}

Get Auth0 user count

Returns total Auth0 user count. Cached 1 hour. Admin permission required.

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "data": {
    }
}

SDAW

Get SDAW file content from S3

Returns the full decoded SDAW JSON for a given file UUID. The UUID corresponds to the S3 key sdaw/{uuid}.json.

Authorizations:
bearerAuth
path Parameters
uuid
required
string <uuid>

SdawFiles _id / S3 key UUID

Responses

Search

Get public filter data

Returns filter options for objectTypes and illuminations. No authentication required. Used by the Site app for dynamic filter loading.

Responses

Response samples

Content type
application/json
{
  • "objectTypes": [
    ],
  • "illuminations": [
    ]
}

Nearest municipalities by coordinates

Returns the closest MunicipalityDirectory entries to the given lat/lng (deduped by AGS). With useIp=1 and no lat/lng, resolves approximate coordinates from the caller IP: optional local GeoIP2-compatible local City MMDB e.g. DB-IP Lite (GEOIP_CITY_MMDB_PATH), then HTTPS ipwho.is. Loopback IPs use GEOIP_DEV_FALLBACK_* if set.

query Parameters
lat
number
lng
number
limit
integer
Default: 3
useIp
string

If 1 and lat/lng omitted, use client IP for coarse geolocation

Responses

Administrative boundary outlines by code

Returns a GeoJSON FeatureCollection of municipality (8-digit AGS) and/or Kreis (5-digit) outlines for the requested codes. Unknown codes are skipped. No authentication required.

query Parameters
codes
required
string
Example: codes=05315000,05334

Comma-separated municipality (8-digit AGS) or Kreis (5-digit) codes

Responses

Locations

Get location details by slug

Returns detailed information for an advertising location identified by its slug. Includes free booking terms (only periods whose end date is on or after today, Europe/Berlin), image variants, and core location data.

path Parameters
slug
required
string
Example: 3910841-b169-auer-str-69a-li

URL-safe slug (providerId+locationNumber+positionNumber+locationDescription)

Responses

Response samples

Content type
application/json
{
  • "slug": "3910841-b169-auer-str-69a-li",
  • "locationDescription": "string",
  • "postalCode": "string",
  • "district": "string",
  • "pricePerDay": 0,
  • "positionType": "string",
  • "lighting": "string",
  • "constructionType": "string",
  • "constructionTypeDisplayValue": "string",
  • "durationType": "string",
  • "durationTypeDisplayValue": "string",
  • "positionNumberTo": 0,
  • "latitude": 0,
  • "longitude": 0,
  • "qid": 0,
  • "photoName": "string",
  • "dimensionsHeight": 0,
  • "dimensionsWidth": 0,
  • "fawTags": [
    ],
  • "consumerMarket": {
    },
  • "freeTerms": [
    ],
  • "ppsLwt": 0,
  • "lwtPerformanceValues": [
    ],
  • "image": {
    },
  • "consumerMarketPhoto": { }
}

Get location details by provider/location/position IDs

Alternative to slug lookup. Returns the same location details (free terms, image info) when identified by providerId, locationNumber, and positionNumber. IDs are parsed as integers.

path Parameters
providerId
required
string
Example: 39

Sender identification (integer)

locationId
required
string
Example: 10841

Location number

positionId
required
string
Example: 1

Position number

Responses

Core

Health Check

Returns the health status of the API service

Responses

Response samples

Content type
application/json
{
  • "status": "ok",
  • "timestamp": "2024-01-01T00:00:00.000Z",
  • "pps": true,
  • "sis": false
}

Email Templates

List Email Template Attachments

Returns all attachments for a given email template (admin only).

Authorizations:
bearerAuth
path Parameters
templateId
required
string
Example: 507f1f77bcf86cd799439011

The email template ID.

Responses

Response samples

Content type
application/json
{
  • "attachments": [
    ]
}

Upload Email Template Attachment

Uploads a file attachment for an email template. The file is stored in S3 and metadata is saved in the template document (admin only).

Authorizations:
bearerAuth
path Parameters
templateId
required
string
Example: 507f1f77bcf86cd799439011

The email template ID.

Request Body schema: application/json
required
file
required
string

Base64-encoded file content.

filename
required
string

Original filename.

contentType
string

MIME type of the file.

Responses

Request samples

Content type
application/json
{
  • "file": "JVBERi0xLjQK...",
  • "filename": "document.pdf",
  • "contentType": "application/pdf"
}

Response samples

Content type
application/json
{
  • "attachment": {
    }
}

Delete Email Template Attachment

Deletes a file attachment from an email template. Removes the file from S3 and the metadata from the template document (admin only).

Authorizations:
bearerAuth
path Parameters
templateId
required
string
Example: 507f1f77bcf86cd799439011

The email template ID.

attachmentId
required
string
Example: 507f1f77bcf86cd799439012

The attachment ID.

Responses

Response samples

Content type
application/json
{
  • "success": true
}

Customer portal

The order an approval request is about

Resolves the token of an approval mail to the whole changed order, not just to the list of changes: positions, sales articles, what changed and the price effect. The token only names the request; the login decides who may see it, so a stranger with the link gets nothing.

Authorizations:
bearerAuth
path Parameters
token
required
string

Responses

Grant the approval

The customer confirms the changed order. The request is logged with the moment and the person, and the order moves to "Freigabe erteilt" (5.2.9). Nothing is sent from here.

Authorizations:
bearerAuth
path Parameters
token
required
string

Responses

What the customer is asked to upload

The motif behind the upload link of the customer interaction (5.4.2), with the request that was sent and whether the link is still open. It closes as soon as a newer version arrived in the meantime, otherwise the customer would overwrite the newer state.

Authorizations:
bearerAuth
path Parameters
id
required
string

Responses

Register a new print file version for a motif

Behind the login, never on an open token (your ruling of 13.08.2026). The link closes as soon as a newer version arrived in the meantime. The same file again is not a new version: the checksum of the stored object decides that, the same rule as in the admin (5.4.2).

Authorizations:
bearerAuth
path Parameters
id
required
string
Request Body schema: application/json
required
key
required
string

the key from the presign call

filename
required
string
uploadId
string

only for a multipart upload

Array of objects

only for a multipart upload, the ETag of every part

Responses

Request samples

Content type
application/json
{
  • "key": "string",
  • "filename": "string",
  • "uploadId": "string",
  • "parts": [
    ]
}

A signed URL to put a new print file into the bucket

Print data for posters runs into gigabytes and never goes through the Lambda: the browser gets a signed URL and puts the file into the bucket itself. The link is checked here as well, so a closed one hands out no URL in the first place.

Authorizations:
bearerAuth
path Parameters
id
required
string
Request Body schema: application/json
required
filename
required
string
contentType
string

Responses

Request samples

Content type
application/json
{
  • "filename": "string",
  • "contentType": "string"
}

Checkout

Everything the checkout page needs

Resolves the cart to poster formats over the assignment table, builds the offer of sales articles per format out of the article master (checkout role, display condition, option groups) and prices it with the dated price rows of the customer group. Also returns the open projects the order may be attached to, the invoice addresses and the print files already staged.

Authorizations:
bearerAuth

Responses

Place the order

Writes the order, its booked positions, the motifs the choice implies and the sales articles that hang on no motif, then authorizes the payment. Nothing is charged and no mail goes out. A booking spanning two business years is split right here.

Authorizations:
bearerAuth
Request Body schema: application/json
required
paymentMethod
required
string
Enum: "invoice" "bank_transfer" "direct_debit"
projectId
string

An open project of this customer, optional

invoiceAddressId
string
note
string
selection
object

What the customer chose, keyed by poster format id

Responses

Request samples

Content type
application/json
{
  • "paymentMethod": "invoice",
  • "projectId": "string",
  • "invoiceAddressId": "string",
  • "note": "string",
  • "selection": { }
}

A signed URL to put a print file into the bucket

Print data for posters runs from hundreds of megabytes into gigabytes, so it never goes through the Lambda: the browser gets a signed URL, puts the file into the bucket itself and hands back only the key. The content type is part of the signature.

Authorizations:
bearerAuth
Request Body schema: application/json
required
filename
required
string
contentType
string

Responses

Request samples

Content type
application/json
{
  • "filename": "string",
  • "contentType": "string"
}

Register a print file that was put into the bucket

A motif hangs on a project and may never move between projects, so a file the customer brings in the checkout is parked until it can be assigned. Size and checksum are read off the stored object, not off what the caller claims.

Authorizations:
bearerAuth
Request Body schema: application/json
required
key
required
string

the key from the presign call

filename
required
string
posterFormatId
string
title
string
uploadId
string

only for a multipart upload

Array of objects

only for a multipart upload, the ETag of every part

Responses

Request samples

Content type
application/json
{
  • "key": "string",
  • "filename": "string",
  • "posterFormatId": "string",
  • "title": "string",
  • "uploadId": "string",
  • "parts": [
    ]
}

Drop a staged print file

Only a file that is still waiting can be dropped; once it became a motif version it belongs to the project.

Authorizations:
bearerAuth
path Parameters
id
required
string

Responses

Cart

Get shopping cart

Returns the current user's cart lines with optional term alternatives per line. Enriched with municipalityNameSnapshot, districtSnapshot, and thumbnailUrl (location photo) when available.

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "items": [
    ]
}

Add cart line

Adds a bookable term as a cart line. Duplicate provider/location/position/termin returns 409.

Authorizations:
bearerAuth
Request Body schema: application/json
required
providerId
required
string
locationId
required
string
positionNumber
string

Optional; defaults from location when omitted

terminId
required
string

Encoded term identifier (business year + free period)

slug
string

Optional SEO slug snapshot (max 256 chars)

Responses

Request samples

Content type
application/json
{
  • "providerId": "string",
  • "locationId": "string",
  • "positionNumber": "string",
  • "terminId": "string",
  • "slug": "string"
}

Remove cart line

Removes a line by its stable itemId (UUID).

Authorizations:
bearerAuth
path Parameters
itemId
required
string

Responses

Change term on cart line

Switches the bookable term for an existing line; pricing and dates are recalculated from free terms.

Authorizations:
bearerAuth
path Parameters
itemId
required
string
Request Body schema: application/json
required
terminId
required
string

Responses

Request samples

Content type
application/json
{
  • "terminId": "string"
}

Add all listings matching a filter state to the cart for a period

Re-runs the listing search server-side and adds each match (up to 100) for the given decade/date. Skips listings without that period free.

Authorizations:
bearerAuth

Remove all cart lines matching a filter state's results

Authorizations:
bearerAuth

User Management

Sync user data

Synchronizes Auth0 user data to the local database after login. Called from frontend after successful authentication.

Authorizations:
bearerAuth
Request Body schema: application/json
required
auth0Id
string
email
string
firstName
string
lastName
string

Responses

Request samples

Content type
application/json
{
  • "auth0Id": "string",
  • "email": "string",
  • "firstName": "string",
  • "lastName": "string"
}

Get all users

Retrieves all users from Auth0 with local database data. Admin permission required.

Authorizations:
bearerAuth
query Parameters
page
integer
Default: 0
per_page
integer
Default: 50
search
string
sort
string
Default: "created_at:-1"

Responses

Get user by ID

Retrieves a single user from Auth0 with roles, permissions, and local data.

Authorizations:
bearerAuth
path Parameters
id
required
string

Auth0 user ID (e.g., auth0|123...)

Responses

Update user

Updates a user in Auth0 and local database. Admin permission required.

Authorizations:
bearerAuth
path Parameters
id
required
string
Request Body schema: application/json
auth0Data
object

Data to update in Auth0 (name, nickname, blocked, etc.)

localData
object

Data to update in local database

roles
Array of strings

Array of role IDs to assign

Responses

Request samples

Content type
application/json
{
  • "auth0Data": { },
  • "localData": { },
  • "roles": [
    ]
}

Delete user

Deletes a user from Auth0 and local database. Admin permission required.

Authorizations:
bearerAuth
path Parameters
id
required
string

Responses

Get all roles

Retrieves all roles from Auth0. Admin permission required.

Authorizations:
bearerAuth
query Parameters
page
integer
per_page
integer

Responses

Create role

Creates a new role in Auth0. Admin permission required.

Authorizations:
bearerAuth
Request Body schema: application/json
required
name
required
string
description
string

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "description": "string"
}

Get role by ID

Retrieves a single role from Auth0 with its permissions.

Authorizations:
bearerAuth
path Parameters
id
required
string

Responses

Update role

Updates a role in Auth0, including name, description, and assigned permissions.

Authorizations:
bearerAuth
path Parameters
id
required
string
Request Body schema: application/json
name
string
description
string
Array of objects

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "description": "string",
  • "permissions": [
    ]
}

Delete role

Deletes a role from Auth0. Admin permission required.

Authorizations:
bearerAuth
path Parameters
id
required
string

Responses

Authentication

Login (redirect to Auth0)

Redirects the user to the Auth0 Universal Login page.

query Parameters
returnTo
string

URL to return to after login

Responses

Logout (redirect to Auth0)

Logs the user out via Auth0.

query Parameters
returnTo
string

URL to return to after logout

Responses

Auth0 Callback

Handles the callback from Auth0, exchanges code for tokens, and redirects back to the app.

query Parameters
code
string
state
string
error
string

Responses

Get user info from token

Returns the user profile information contained in the access token.

Authorizations:
bearerAuth

Responses

Refresh Token

Exchanges a refresh token for a new access token.

Request Body schema: application/json
required
refresh_token
required
string

Responses

Request samples

Content type
application/json
{
  • "refresh_token": "string"
}

Assistant

Search advertising spaces for the assistant

Criteria in plain words (places, categories, period, budget, environment, products to advertise) to the site's filter state, then a Typesense search. Answers with a German summary in result (count, split by category and lighting, the first hits with price and identifier) and the filterState the site applies to its search page. No authentication.

Request Body schema: application/json
required
locations
Array of strings
radiusKm
number

Die Seite bietet 5, 10, 20, 30 und 50 km; andere Werte werden aufgerundet, mehr als 50 wird 50.

categories
Array of strings
Items Enum: "largeFormat" "cityLightPoster" "advertisingColumns" "digitalScreens"
positionTypes
Array of strings
illuminated
boolean
lighting
Array of strings
Items Enum: "B" "H" "U"

B beleuchtet, H hinterleuchtet, U unbeleuchtet; hat Vorrang vor illuminated.

environment
Array of strings
advertisedProducts
Array of strings
durationTypes
Array of strings
Items Enum: "weekly" "decade"
dateFrom
string <date>
dateTo
string <date>
minPricePerDay
number
maxPricePerDay
number
text
string
sort
string
Enum: "price_asc" "price_desc" "relevance"
limit
integer [ 0 .. 10 ]

0 returns count, split and filterState only

Responses

Request samples

Content type
application/json
{
  • "locations": [
    ],
  • "radiusKm": 20,
  • "categories": [
    ],
  • "positionTypes": [
    ],
  • "illuminated": true,
  • "lighting": [
    ],
  • "environment": [
    ],
  • "advertisedProducts": [
    ],
  • "durationTypes": [
    ],
  • "dateFrom": "2019-08-24",
  • "dateTo": "2019-08-24",
  • "minPricePerDay": 0,
  • "maxPricePerDay": 0,
  • "text": "string",
  • "sort": "price_asc",
  • "limit": 10
}

Response samples

Content type
application/json
{
  • "ok": true,
  • "result": "string",
  • "found": 0,
  • "places": [
    ],
  • "filterState": { },
  • "searchQuery": "string"
}

Details and free terms of one advertising space

Type, size, lighting, price per day, environment, advertising bans and the free booking periods (weeks or decades) of one space, optionally only those overlapping a period. No authentication.

Request Body schema: application/json
required
space
required
string

Identifier from the search, a details link or providerId_locationNumber_positionNumber

dateFrom
string <date>
dateTo
string <date>

Responses

Request samples

Content type
application/json
{
  • "space": "string",
  • "dateFrom": "2019-08-24",
  • "dateTo": "2019-08-24"
}

Send an offer request to mein-plakat

Validates the request and mails it to the mein-plakat mailbox (reply-to the customer). Only the fonella tools may call it: they send the key in X-Assistant-Key. Missing or invalid fields come back with ok false and the reasons in result.

header Parameters
X-Assistant-Key
required
string
Request Body schema: application/json
required
name
required
string
company
string
email
string <email>
phone
string
message
required
string
locations
Array of strings
categories
Array of strings
spaces
Array of strings
dateFrom
string <date>
dateTo
string <date>
period
string
budget
string
confirmed
required
boolean

The customer confirmed sending the request

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "company": "string",
  • "email": "user@example.com",
  • "phone": "string",
  • "message": "string",
  • "locations": [
    ],
  • "categories": [
    ],
  • "spaces": [
    ],
  • "dateFrom": "2019-08-24",
  • "dateTo": "2019-08-24",
  • "period": "string",
  • "budget": "string",
  • "confirmed": true
}

Offer request from the form of the website

The form on the website sends here. No key: the request must come from a page of the site (Origin header), the hidden field website must stay empty and startedAt (epoch milliseconds when the form was opened) must be at least three seconds old. Same fields and checks as the assistant's offer request; confirmed is the checkbox of the form. Mails to the mein-plakat mailbox with the customer's address as reply-to.

Request Body schema: application/json
required
name
required
string
company
string
email
string <email>
phone
string
message
required
string
locations
Array of strings
categories
Array of strings
spaces
Array of strings
dateFrom
string <date>
dateTo
string <date>
period
string
budget
string
confirmed
required
boolean
startedAt
required
integer

Epoch milliseconds when the form was opened

website
string

Trap field, must stay empty

pageUrl
string
language
string

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "company": "string",
  • "email": "user@example.com",
  • "phone": "string",
  • "message": "string",
  • "locations": [
    ],
  • "categories": [
    ],
  • "spaces": [
    ],
  • "dateFrom": "2019-08-24",
  • "dateTo": "2019-08-24",
  • "period": "string",
  • "budget": "string",
  • "confirmed": true,
  • "startedAt": 0,
  • "website": "string",
  • "pageUrl": "string",
  • "language": "string"
}

OpenAPI description of the public search routes

OpenAPI 3.1 document of /v1/assistant/search and /v1/assistant/space, linked from /.well-known/ard.json of the site. No authentication.

Responses

Response samples

Content type
application/json
{ }