English
English
Appearance
English
English
Appearance
Productions can have mediafiles attached: posters, scene images, trailers, technical riders, and more. Each mediafile has a category (mediafile_type) and one or more downloadable files.
POST /entities/filter
Content-Type: application/json[
{ "type": "type", "value": "mediafile" },
{
"type": "selection",
"key": ["podiumnet:1|properties.ref_productions.value"],
"value": "{production_id}",
"match_exact": true
}
][
{ "type": "type", "value": "mediafile" },
{
"type": "selection",
"key": ["podiumnet:1|properties.ref_productions.value"],
"value": "{production_id}",
"match_exact": true
},
{
"type": "selection",
"key": ["podiumnet:1|properties.mediafile_type.value"],
"value": "poster",
"match_exact": true
}
]{
"count": 3,
"results": [
{
"id": "MF-ABC123",
"_id": "uuid-here",
"type": "mediafile",
"metadata": [
{ "key": "mediafile_type", "value": "scene_images" },
{ "key": "title", "value": "Rehearsal image 1" },
{ "key": "description", "value": "Photo from the dress rehearsal" },
{ "key": "copyright", "value": "© Jan Photographer" }
],
"relations": [
{ "key": "PR-ABC123", "type": "refProductions" }
],
"identifiers": ["uuid-here", "MF-ABC123", "rehearsal-image-1.jpg"],
"display_filename": "transcoded-rehearsal-image-1.jpg",
"audit": {
"created": { "at": "2026-05-20T16:54:48Z", "by": "user@example.com" },
"updated": { "at": "2026-05-20T16:58:32Z", "by": "user@example.com" }
}
}
],
"skip": 0,
"limit": 20
}| Field | Description |
|---|---|
id | Human-readable mediafile ID (e.g. MF-ABC123) |
metadata[mediafile_type] | Category (see table below) |
metadata[title] | Title of the mediafile |
metadata[description] | Description |
metadata[copyright] | Copyright notice |
relations[refProductions] | ID of the linked production |
identifiers | Includes the original filename |
display_filename | Filename of the transcoded version |
mediafile_type | Category |
|---|---|
poster | Poster (Affiche) |
scene_images | Scene images (Scenebeelden) |
trailer | Trailer |
review | Reviews (Recensies) |
rider | Technical info (Technische info) |
social_media | Social media posts |
music_fragments | Music fragments (Muziekfragmenten) |
framing | Framing (Omkadering) |
Multiple files per category
A production can have multiple mediafiles with the same mediafile_type. This is intentional — for example, under rider both a technical rider and a venue sheet may be present. All files are returned.
Use the following endpoint to obtain signed download URLs for both the original and transcoded file:
GET __API_BASE_URL__/mediafiles/{id}/download-urls
Authorization: Bearer {token}
X-tenant-id: podiumnetResponse:
{
"original_file_location": "https://storage.example.com/download-with-ticket/{filename}?ticket_id={uuid}",
"transcode_file_location": "https://storage.example.com/download-with-ticket/{display_filename}?ticket_id={uuid}"
}| Field | Description |
|---|---|
original_file_location | Signed URL to the original uploaded file |
transcode_file_location | Signed URL to the transcoded version (JPEG for images, same as original for PDFs) |
Download directly from the URL — no extra Authorization header needed (the ticket is embedded in the URL):
GET {original_file_location}URL lifetime
Signed URLs expire after ~1 hour. Do not store them — request a fresh URL from /mediafiles/{id}/download-urls each time you need the file.
The full flow for fetching and downloading mediafiles from a production:
Step 1 — Authenticate
Obtain an OAuth token or use a static JWT. See Authentication.
Step 2 — Find the production
POST __API_BASE_URL__/entities/filter?limit=20
Content-Type: application/json
[
{ "type": "type", "value": "production" },
{ "type": "text", "key": ["podiumnet:1|properties.title.value"], "value": "Hamlet*" },
{ "type": "selection", "key": ["podiumnet:1|properties.ref_venues.value"], "value": "{venue_id}", "match_exact": true }
]Note the id of the desired production from the results (e.g. PR-ABC123).
Step 3 — Check media availability
Fetch the production and inspect the status fields in metadata (e.g. posters_status). See Productions.
Step 4 — Fetch mediafiles by category
POST __API_BASE_URL__/entities/filter?limit=20
Content-Type: application/json
[
{ "type": "type", "value": "mediafile" },
{ "type": "selection", "key": ["podiumnet:1|properties.ref_productions.value"], "value": "PR-ABC123", "match_exact": true },
{ "type": "selection", "key": ["podiumnet:1|properties.mediafile_type.value"], "value": "poster", "match_exact": true }
]Step 5 — Get the download URL
GET /mediafiles/{id}/download-urlsStep 6 — Download the file
GET {original_file_location}