Festry
Info

Data export and interface

The data export gives you all data Festry holds about your account and the profiles you manage: structured, machine-readable and with all uploaded files in their original form. You start it in your account or through the interface. This page describes the content, structure and fields of the export and serves as the register of data structures and formats under Art. 26(b) Data Act.

What is exported

Festry assigns all data it holds about an account to thirteen categories. The export follows the same structure: one JSON file per category.

  1. 1. Account and access data login details without password, roles and permissions, invitations, postal address File: 01-account.json
  2. 2. Profile and organisation data public and internal profile details, genres, places and venues File: 02-profiles.json
  3. 3. Member and line-up data band members, roles, contributors to works File: 03-members.json
  4. 4. Repertoire and works data songs, setlists, recordings, videos, tour dates File: 04-repertoire.json
  5. 5. Technical documents and requirements technical, stage and hospitality riders, uploaded documents File: 05-technical-documents.json
  6. 6. Event and planning data events, stages, running orders, backline, instructions, internal notes, calendars File: 06-events.json
  7. 7. Tender and application data tenders, received and submitted applications, ratings File: 07-tenders.json
  8. 8. Communication data messages from the event chat including timestamps and context File: 08-communication.json
  9. 9. Public pages and their reach Artist-Links, their blocks, aggregated view and click counts File: 09-public-pages.json
  10. 10. Contract, billing and payment data subscription and its history, cancellations, coupons, invoices File: 10-billing.json
  11. 11. Accounting data income and expenses, receipts, fixed assets, tags Festry does not keep accounting data for accounts. The bookkeeping that exists in Festry is Festry's own; your invoices are in category 10. That is why there is no file for this category.
  12. 12. Media files uploaded images, audio, video and PDF files in their original form File: 12-media.json
  13. 13. Settings notification settings and other account configuration File: 13-settings.json

Fully included are the profiles you manage as an administrator. Profiles you are only a member of appear in category 1 as a membership; their content is exported by whoever manages them.

What is not exported

The following is not your data or can be recreated from the originals included and is therefore not part of the export:

  • Administration accounts of the Festry team.
  • Delivery and interface logs (such as responses from the payment and mail services).
  • Platform-wide settings, counters and block lists, such as reserved page names or the customer number counter.
  • The plan master data - Festry's offer. The plan you booked is in category 10.
  • Content by Festry itself, such as legal texts and testimonials on the home page.
  • Anonymous statistics without reference to an account.
  • Festry's own bookkeeping.
  • Reports and contact requests. They have their own retention periods; information about them is available on request via the contact form.
  • Newsletter sign-ups. They belong to an email address, not to an account, and can be ended via the unsubscribe link in every mail.
  • Deletion logs - they only come into existence once an account has been deleted.
  • Security data such as your password, two-factor secrets and the access keys (API tokens) of the interface.
  • Derived files such as thumbnails and conversions; they can be regenerated from the originals.

Structure of the ZIP

The export is a ZIP archive. It contains:

  • README.md explains the export in your language.
  • manifest.json lists the identifier, time, included profiles, the status of each category and every file with size and SHA-256 checksum.
  • 01-account.json to 13-settings.json: one file per category. Categories without data are missing; their status is in the manifest.
  • files/ holds the uploaded originals, the archived invoices and calendars in iCalendar format.
  • chat/ holds one folder per event chat with its history, participants, your own read states and attachments.

Formats

  • Structured data as JSON (RFC 8259), character set UTF-8.
  • Points in time in ISO 8601 with time zone, e.g. 2026-10-06T14:30:00+02:00.
  • Days without time as YYYY-MM-DD.
  • Amounts as integers in cents with an ISO 4217 currency code, e.g. {"amount_cents": 129900, "currency": "EUR"}.
  • Coordinates in decimal degrees (WGS 84), as text with a fixed number of digits.
  • Translatable texts as an object with all language versions, language codes per BCP 47, e.g. {"de": "…", "en": "…"}.
  • An empty object appears as an empty list [].
  • Calendars additionally in iCalendar format (RFC 5545).
  • Uploaded files unchanged in their original form, with a SHA-256 checksum in the manifest.

Files and fields

For each file its fields with name, type and whether they can be empty (null). Nested fields are shown with their full path, [] stands for the entries of a list. Placeholders in file paths are in curly braces.

README.md

Format: Markdown

The explanation of the export in the language of the account: included profiles, structure, formats, categories and what is not included.

manifest.json

Format: JSON

The index of the export.

Field Type Can be empty Explanation
format_version integer no Version of the export format. It increases when the structure changes.
export_id text no
generated_at point in time no
requested_at point in time yes
requested_by object no
requested_by.user_id text no
requested_by.tenant_user_id text no
requested_by.email text no
profiles list of object no The fully included profiles.
profiles[].type text (artist, promoter) no
profiles[].id text no
profiles[].name text yes
locale text no Language of the README and the texts in the export.
formats object with text no The formats used, as a short description.
categories list of object no
categories[].number integer no
categories[].key text no
categories[].label text no
categories[].status text (included, pending, not_applicable, missing) no included (file included), not_applicable (no data of this kind), pending or missing.
categories[].file text yes
files list of object no Every file under files/ and chat/ with size and checksum.
files[].path text no
files[].size_bytes integer no
files[].sha256 text no SHA-256 checksum of the file, hexadecimal.

01-account.json

Format: JSON · The data of one category. Header and time are at the top, the data under data.: Account and access data

The data of one category. Header and time are at the top, the data under data.

Field Type Can be empty Explanation
category object no Number, key and name of the category.
category.number integer no
category.key text no
category.label text no
generated_at point in time no
data object no
data.account object no The login account. Password and two-factor secrets are not included.
data.account.user_id text no
data.account.name text no
data.account.email text no
data.account.locale text yes Language of the account (de or en).
data.account.email_verified_at point in time yes
data.account.created_at point in time yes
data.account.updated_at point in time yes
data.account.two_factor_enabled boolean no
data.person object no The person behind the account.
data.person.tenant_user_id text no
data.person.customer_number text yes
data.person.salutation text yes
data.person.first_name text yes
data.person.last_name text yes
data.person.created_at point in time yes
data.organisation object yes The organisation the account belongs to.
data.organisation.tenant_id text no
data.organisation.tenant_number text yes
data.organisation.tenant_name text yes
data.organisation.address object yes
data.organisation.address.salutation text yes
data.organisation.address.first_name text yes
data.organisation.address.last_name text yes
data.organisation.address.company text yes
data.organisation.address.vat_number text yes
data.organisation.address.street text yes
data.organisation.address.street_number text yes
data.organisation.address.zip text yes
data.organisation.address.city text yes
data.organisation.address.country text yes Country as entered, usually as a country code.
data.organisation.address.phone text yes
data.organisation.address.mobile text yes
data.organisation.address.latitude decimal yes Decimal degrees (WGS 84) as text.
data.organisation.address.longitude decimal yes Decimal degrees (WGS 84) as text.
data.memberships list of object no All profiles the account belongs to, with role.
data.memberships[].profile_type text (artist, promoter) no
data.memberships[].profile_id text no
data.memberships[].profile_name text yes
data.memberships[].role text (admin, manager, member) no
data.memberships[].joined_at point in time yes
data.memberships[].deactivated_at point in time yes
data.memberships[].included_in_full boolean no true if the profile is fully included in the export (administrator role).
data.billing_addresses list of object no
data.billing_addresses[].profile_type text (artist, promoter) no
data.billing_addresses[].profile_id text no
data.billing_addresses[].salutation text yes
data.billing_addresses[].first_name text yes
data.billing_addresses[].last_name text yes
data.billing_addresses[].company text yes
data.billing_addresses[].vat_number text yes
data.billing_addresses[].street text yes
data.billing_addresses[].street_number text yes
data.billing_addresses[].zip text yes
data.billing_addresses[].city text yes
data.billing_addresses[].country text yes Country as entered, usually as a country code.
data.billing_addresses[].phone text yes
data.billing_addresses[].mobile text yes
data.billing_addresses[].latitude decimal yes Decimal degrees (WGS 84) as text.
data.billing_addresses[].longitude decimal yes Decimal degrees (WGS 84) as text.
data.invitations_received list of object no
data.invitations_received[].invitation_id text no
data.invitations_received[].profile_type text (artist, promoter) yes
data.invitations_received[].profile_name text yes
data.invitations_received[].role text (admin, manager, member) no
data.invitations_received[].created_at point in time yes
data.invitations_received[].expires_at point in time no
data.invitations_received[].accepted_at point in time yes
data.invitations_sent list of object no
data.invitations_sent[].invitation_id text no
data.invitations_sent[].profile_type text (artist, promoter) yes
data.invitations_sent[].profile_name text yes
data.invitations_sent[].role text (admin, manager, member) no
data.invitations_sent[].created_at point in time yes
data.invitations_sent[].expires_at point in time no
data.invitations_sent[].accepted_at point in time yes
data.invitations_sent[].email text no
data.data_exports list of object no
data.data_exports[].account_data_export_id text no
data.data_exports[].status text (pending, processing, ready, expired, failed) no
data.data_exports[].created_at point in time yes
data.data_exports[].completed_at point in time yes
data.data_exports[].expires_at point in time yes
data.data_exports[].downloaded_at point in time yes
data.terms_acceptances list of object no
data.terms_acceptances[].terms_acceptance_id text no
data.terms_acceptances[].context text no Where consent was given, e.g. at registration.
data.terms_acceptances[].consent_text text no The wording that was agreed to.
data.terms_acceptances[].legal_document_id text yes
data.terms_acceptances[].terms_revision integer yes
data.terms_acceptances[].terms_published_at point in time yes
data.terms_acceptances[].locale text no
data.terms_acceptances[].accepted_at point in time no

02-profiles.json

Format: JSON · The data of one category. Header and time are at the top, the data under data.: Profile and organisation data

The data of one category. Header and time are at the top, the data under data.

Field Type Can be empty Explanation
category object no Number, key and name of the category.
category.number integer no
category.key text no
category.label text no
generated_at point in time no
data object no
data.artists list of object no
data.artists[].artist_id text no
data.artists[].name text yes
data.artists[].biography language versions no
data.artists[].spotify_id text yes
data.artists[].social_media_instagram text yes
data.artists[].social_media_facebook text yes
data.artists[].social_media_tiktok text yes
data.artists[].founded_at point in time yes
data.artists[].founders list of text yes
data.artists[].phone text yes
data.artists[].email text yes
data.artists[].zip text yes
data.artists[].city text yes
data.artists[].country text yes Country as entered, usually as a country code.
data.artists[].latitude decimal yes Decimal degrees (WGS 84) as text.
data.artists[].longitude decimal yes Decimal degrees (WGS 84) as text.
data.artists[].available_for_booking boolean no
data.artists[].visible_in_search boolean no
data.artists[].fee_is_public boolean no
data.artists[].created_at point in time yes
data.artists[].updated_at point in time yes
data.artists[].fee amount yes The fee of the profile; null means by arrangement.
data.artists[].genres list of object no
data.artists[].genres[].name text no
data.artists[].genres[].is_primary boolean no The main genre of the profile.
data.artists[].team list of object no The members of the profile with role.
data.artists[].team[].name text yes
data.artists[].team[].email text yes
data.artists[].team[].role text (admin, manager, member) no
data.artists[].team[].joined_at point in time yes
data.artists[].files list of text no Paths of the related originals in the ZIP.
data.promoters list of object no
data.promoters[].promoter_id text no
data.promoters[].name text yes
data.promoters[].contact_first_name text yes
data.promoters[].contact_last_name text yes
data.promoters[].website_url text yes
data.promoters[].created_at point in time yes
data.promoters[].updated_at point in time yes
data.promoters[].team list of object no The members of the profile with role.
data.promoters[].team[].name text yes
data.promoters[].team[].email text yes
data.promoters[].team[].role text (admin, manager, member) no
data.promoters[].team[].joined_at point in time yes
data.promoters[].files list of text no Paths of the related originals in the ZIP.
data.venues list of object no Venues of your own events, as reference for category 6.
data.venues[].location_id text no
data.venues[].name text no
data.venues[].website text yes
data.venues[].email text yes
data.venues[].address object yes
data.venues[].address.street text yes
data.venues[].address.street_number text yes
data.venues[].address.zip text yes
data.venues[].address.city text yes
data.venues[].address.country text yes Country as entered, usually as a country code.
data.venues[].address.latitude decimal yes Decimal degrees (WGS 84) as text.
data.venues[].address.longitude decimal yes Decimal degrees (WGS 84) as text.
data.venues[].stages list of object no
data.venues[].stages[].stage_id text no
data.venues[].stages[].name text no
data.venues[].stages[].capacity integer yes

03-members.json

Format: JSON · The data of one category. Header and time are at the top, the data under data.: Member and line-up data

The data of one category. Header and time are at the top, the data under data.

Field Type Can be empty Explanation
category object no Number, key and name of the category.
category.number integer no
category.key text no
category.label text no
generated_at point in time no
data object no
data.artists list of object no
data.artists[].artist_id text no
data.artists[].artist_name text yes
data.artists[].members list of object no
data.artists[].members[].artist_member_id text no
data.artists[].members[].name text yes
data.artists[].members[].gema_first_name text yes Name for the GEMA report if it differs from the display name.
data.artists[].members[].gema_last_name text yes Name for the GEMA report if it differs from the display name.
data.artists[].members[].instrument language versions no
data.artists[].members[].description language versions no
data.artists[].members[].active boolean no
data.artists[].members[].created_at point in time yes
data.artists[].song_contributors list of object no The contributors to the works of the setlists.
data.artists[].song_contributors[].artist_song_contributor_id text no
data.artists[].song_contributors[].artist_song_id text no Identifier of a song from category 4.
data.artists[].song_contributors[].artist_member_id text yes Identifier of a band member if the contributor is one.
data.artists[].song_contributors[].first_name text yes
data.artists[].song_contributors[].last_name text yes
data.artists[].song_contributors[].type text (composer, lyricist) no composer or lyricist.
data.artists[].song_contributors[].gema_relevant boolean no Whether the contribution counts for the GEMA report.
data.artists[].song_contributors[].sort_order integer no

04-repertoire.json

Format: JSON · The data of one category. Header and time are at the top, the data under data.: Repertoire and works data

The data of one category. Header and time are at the top, the data under data.

Field Type Can be empty Explanation
category object no Number, key and name of the category.
category.number integer no
category.key text no
category.label text no
generated_at point in time no
data object no
data.artists list of object no
data.artists[].artist_id text no
data.artists[].artist_name text yes
data.artists[].songs list of object no
data.artists[].songs[].artist_song_id text no
data.artists[].songs[].title text no
data.artists[].songs[].key text yes Musical key.
data.artists[].songs[].description text yes
data.artists[].songs[].duration_seconds integer yes
data.artists[].songs[].musician_count integer yes
data.artists[].songs[].is_active boolean no
data.artists[].songs[].created_at point in time yes
data.artists[].setlists list of object no
data.artists[].setlists[].artist_setlist_id text no
data.artists[].setlists[].name text no
data.artists[].setlists[].event_name text yes
data.artists[].setlists[].description text yes
data.artists[].setlists[].event_id text yes Identifier of an event from category 6.
data.artists[].setlists[].created_at point in time yes
data.artists[].setlists[].songs list of object no
data.artists[].setlists[].songs[].artist_song_id text no Identifier of a song from category 4.
data.artists[].setlists[].songs[].satzangabe text yes Arrangement details for the GEMA report.
data.artists[].setlists[].songs[].sort_order integer no
data.artists[].tracks list of object no Recordings; the audio file is under files in its original form.
data.artists[].tracks[].artist_track_id text no
data.artists[].tracks[].order integer yes
data.artists[].tracks[].title text no
data.artists[].tracks[].album text yes
data.artists[].tracks[].duration_seconds integer yes
data.artists[].tracks[].available_in_profile boolean no
data.artists[].tracks[].available_for_application boolean no
data.artists[].tracks[].available_on_link_page boolean no
data.artists[].tracks[].published_at point in time yes
data.artists[].tracks[].created_at point in time yes
data.artists[].tracks[].files list of text no Paths of the related originals in the ZIP.
data.artists[].videos list of object no
data.artists[].videos[].artist_video_id text no
data.artists[].videos[].order integer yes
data.artists[].videos[].type text (youtube, vimeo) no
data.artists[].videos[].title text no
data.artists[].videos[].album text yes
data.artists[].videos[].platform_id text no Identifier of the video on the platform (e.g. YouTube).
data.artists[].videos[].available_in_profile boolean no
data.artists[].videos[].available_for_application boolean no
data.artists[].videos[].published_at point in time yes
data.artists[].videos[].created_at point in time yes
data.artists[].tour_dates list of object no
data.artists[].tour_dates[].artist_tour_date_id text no
data.artists[].tour_dates[].title text no
data.artists[].tour_dates[].city text yes
data.artists[].tour_dates[].country text yes Country as entered, usually as a country code.
data.artists[].tour_dates[].starts_at point in time no
data.artists[].tour_dates[].ticket_url text yes
data.artists[].tour_dates[].sold_out boolean no
data.artists[].tour_dates[].source text (manual, bandsintown) no Where the date comes from: created by hand or imported.
data.artists[].tour_dates[].external_id text yes Identifier of the date at the service it was imported from.
data.artists[].tour_dates_ics_file text yes Path of the iCalendar file in the ZIP.

files/tour-dates/{artist_id}.ics

Format: iCalendar · The data of one category. Header and time are at the top, the data under data.: Repertoire and works data

The tour dates of an artist profile as a calendar.

05-technical-documents.json

Format: JSON · The data of one category. Header and time are at the top, the data under data.: Technical documents and requirements

The data of one category. Header and time are at the top, the data under data.

Field Type Can be empty Explanation
category object no Number, key and name of the category.
category.number integer no
category.key text no
category.label text no
generated_at point in time no
data object no
data.artists list of object no
data.artists[].artist_id text no
data.artists[].artist_name text yes
data.artists[].stage_rider object yes
data.artists[].stage_rider.source text (upload, generated) no Whether the rider was created in the builder or uploaded as a file.
data.artists[].stage_rider.travel_party JSON no The travel party as a list, as entered in the builder.
data.artists[].stage_rider.introduction language versions no
data.artists[].stage_rider.guestlist language versions no
data.artists[].stage_rider.catering language versions no
data.artists[].stage_rider.drinks language versions no
data.artists[].stage_rider.parking language versions no
data.artists[].stage_rider.contact language versions no
data.artists[].stage_rider.available_in_press_package boolean no
data.artists[].stage_rider.updated_at point in time yes
data.artists[].tech_rider object yes
data.artists[].tech_rider.source text (upload, generated) no Whether the rider was created in the builder or uploaded as a file.
data.artists[].tech_rider.introduction language versions no
data.artists[].tech_rider.tech_specs JSON no The technical list as entries with language versions, as entered in the builder.
data.artists[].tech_rider.multicore JSON no The channel list as channel and description (language versions).
data.artists[].tech_rider.available_in_press_package boolean no
data.artists[].tech_rider.updated_at point in time yes
data.artists[].hospitality_rider object yes
data.artists[].hospitality_rider.source text (upload, generated) no Whether the rider was created in the builder or uploaded as a file.
data.artists[].hospitality_rider.introduction language versions no
data.artists[].hospitality_rider.catering_items JSON no The catering requests as a list, as entered in the builder.
data.artists[].hospitality_rider.accommodation language versions no
data.artists[].hospitality_rider.travel_arrival language versions no
data.artists[].hospitality_rider.available_in_press_package boolean no
data.artists[].hospitality_rider.updated_at point in time yes
data.artists[].documents list of object no
data.artists[].documents[].artist_document_id text no
data.artists[].documents[].type text (image, contract, bill, id, manual) no
data.artists[].documents[].title text no
data.artists[].documents[].description text no
data.artists[].documents[].available_in_presspack boolean no
data.artists[].documents[].available_for_application boolean no
data.artists[].documents[].created_at point in time yes
data.artists[].documents[].files list of text no Paths of the related originals in the ZIP.
data.promoters list of object no
data.promoters[].promoter_id text no
data.promoters[].promoter_name text yes
data.promoters[].documents list of object no
data.promoters[].documents[].promoter_document_id text no
data.promoters[].documents[].type text (image, contract, bill, id, manual) no
data.promoters[].documents[].title text no
data.promoters[].documents[].description text yes
data.promoters[].documents[].created_at point in time yes
data.promoters[].documents[].files list of text no Paths of the related originals in the ZIP.
data.promoters[].event_documents list of object no
data.promoters[].event_documents[].event_document_id text no
data.promoters[].event_documents[].event_id text no Identifier of an event from category 6.
data.promoters[].event_documents[].type text (image, contract, bill, id, manual) no
data.promoters[].event_documents[].title text no
data.promoters[].event_documents[].description text yes
data.promoters[].event_documents[].created_at point in time yes
data.promoters[].event_documents[].files list of text no Paths of the related originals in the ZIP.

06-events.json

Format: JSON · The data of one category. Header and time are at the top, the data under data.: Event and planning data

The data of one category. Header and time are at the top, the data under data.

Field Type Can be empty Explanation
category object no Number, key and name of the category.
category.number integer no
category.key text no
category.label text no
generated_at point in time no
data object no
data.organised_events list of object no Events of the managed promoter profiles, in full.
data.organised_events[].promoter_id text no
data.organised_events[].promoter_name text yes
data.organised_events[].events list of object no
data.organised_events[].events[].event_id text no
data.organised_events[].events[].name text no
data.organised_events[].events[].description_short language versions no
data.organised_events[].events[].description language versions no
data.organised_events[].events[].starts_at point in time no
data.organised_events[].events[].ends_at point in time no
data.organised_events[].events[].ticket_url text yes
data.organised_events[].events[].sold_out boolean no
data.organised_events[].events[].published boolean no
data.organised_events[].events[].cancelled boolean no
data.organised_events[].events[].closed boolean no
data.organised_events[].events[].created_at point in time yes
data.organised_events[].events[].stages list of object no
data.organised_events[].events[].stages[].stage_id text no
data.organised_events[].events[].stages[].name text no
data.organised_events[].events[].stages[].location_id text no Identifier of a venue from category 2.
data.organised_events[].events[].artists list of object no
data.organised_events[].events[].artists[].artist_id text no
data.organised_events[].events[].artists[].artist_name text yes
data.organised_events[].events[].artists[].status text (invited, booked, declined) no
data.organised_events[].events[].artists[].responded_at point in time yes
data.organised_events[].events[].artists[].fee amount yes The fee of this booking; null means by arrangement.
data.organised_events[].events[].artists[].proposed_fee object yes An open fee proposal, otherwise null.
data.organised_events[].events[].artists[].proposed_fee.fee amount yes
data.organised_events[].events[].artists[].proposed_fee.proposed_at point in time yes
data.organised_events[].events[].running_order list of object no The running order with performance, changeover and get-in times.
data.organised_events[].events[].running_order[].running_order_entry_id text no
data.organised_events[].events[].running_order[].stage_id text no
data.organised_events[].events[].running_order[].type text (performance, changeover, get_in) no
data.organised_events[].events[].running_order[].title text yes
data.organised_events[].events[].running_order[].artist_id text yes
data.organised_events[].events[].running_order[].starts_at point in time no
data.organised_events[].events[].running_order[].ends_at point in time yes
data.organised_events[].events[].backline list of object no Equipment needed and who brings it.
data.organised_events[].events[].backline[].event_backline_item_id text no
data.organised_events[].events[].backline[].name text no
data.organised_events[].events[].backline[].quantity_needed integer no
data.organised_events[].events[].backline[].assignments list of object no
data.organised_events[].events[].backline[].assignments[].artist_id text no
data.organised_events[].events[].backline[].assignments[].artist_name text yes
data.organised_events[].events[].backline[].assignments[].quantity integer no
data.organised_events[].events[].instructions object yes The instructions of the event to the artists.
data.organised_events[].events[].instructions.body text yes
data.organised_events[].events[].instructions.updated_at point in time yes
data.organised_events[].events[].internal_notes object yes The internal note of the promoter side.
data.organised_events[].events[].internal_notes.body text yes
data.organised_events[].events[].internal_notes.updated_at point in time yes
data.organised_events[].events[].declines list of object no
data.organised_events[].events[].declines[].artist_id text no
data.organised_events[].events[].declines[].artist_name text yes
data.organised_events[].events[].declines[].declined_at point in time no
data.organised_events[].events[].files list of text no Paths of the related originals in the ZIP.
data.participations list of object no Participation of the managed artist profiles in events.
data.participations[].artist_id text no
data.participations[].artist_name text yes
data.participations[].events list of object no
data.participations[].events[].event_id text no
data.participations[].events[].name text no
data.participations[].events[].starts_at point in time no
data.participations[].events[].ends_at point in time no
data.participations[].events[].cancelled boolean no
data.participations[].events[].promoter_name text yes
data.participations[].events[].status text (invited, booked, declined) no
data.participations[].events[].responded_at point in time yes
data.participations[].events[].fee amount yes The fee of this booking; null means by arrangement.
data.participations[].events[].proposed_fee object yes An open fee proposal, otherwise null.
data.participations[].events[].proposed_fee.fee amount yes
data.participations[].events[].proposed_fee.proposed_at point in time yes
data.participations[].events[].running_order list of object no
data.participations[].events[].running_order[].stage_id text no
data.participations[].events[].running_order[].type text (performance, changeover, get_in) no
data.participations[].events[].running_order[].title text yes
data.participations[].events[].running_order[].starts_at point in time no
data.participations[].events[].running_order[].ends_at point in time yes
data.participations[].events[].backline list of object no
data.participations[].events[].backline[].item text yes
data.participations[].events[].backline[].quantity integer no
data.participations[].events[].instructions object yes The instructions of the event to the artists.
data.participations[].events[].instructions.body text yes
data.participations[].events[].instructions.updated_at point in time yes
data.participations[].events[].internal_notes object yes The internal note of the artist side.
data.participations[].events[].internal_notes.body text yes
data.participations[].events[].internal_notes.updated_at point in time yes
data.participations[].calendars list of object no
data.participations[].calendars[].calendar_id text no
data.participations[].calendars[].name text no
data.participations[].calendars[].color text no
data.participations[].calendars[].type text (subscription, internal) no
data.participations[].calendars[].is_published boolean no
data.participations[].calendars[].description text yes
data.participations[].calendars[].created_at point in time yes
data.participations[].calendars[].ics_file text no Path of the iCalendar file in the ZIP.
data.participations[].calendars[].entries list of object no
data.participations[].calendars[].entries[].calendar_event_id text no
data.participations[].calendars[].entries[].title text no
data.participations[].calendars[].entries[].description text yes
data.participations[].calendars[].entries[].location text yes
data.participations[].calendars[].entries[].starts_at point in time no
data.participations[].calendars[].entries[].ends_at point in time no
data.participations[].calendars[].entries[].all_day boolean no
data.participations[].calendars[].entries[].reminder_minutes_before integer yes
data.participations[].calendars[].entries[].source text (imported, manual, festry_booking, running_order) no
data.participations[].calendars[].entries[].festry_event_id text yes Identifier of an event from category 6.

files/calendars/{calendar_id}.ics

Format: iCalendar · The data of one category. Header and time are at the top, the data under data.: Event and planning data

A calendar of an artist profile with all entries.

07-tenders.json

Format: JSON · The data of one category. Header and time are at the top, the data under data.: Tender and application data

The data of one category. Header and time are at the top, the data under data.

Field Type Can be empty Explanation
category object no Number, key and name of the category.
category.number integer no
category.key text no
category.label text no
generated_at point in time no
data object no
data.tenders list of object no
data.tenders[].promoter_id text no
data.tenders[].promoter_name text yes
data.tenders[].tenders list of object no
data.tenders[].tenders[].event_tender_id text no
data.tenders[].tenders[].event_id text no Identifier of an event from category 6.
data.tenders[].tenders[].slug text no
data.tenders[].tenders[].shortcode text no Short code of the public application address.
data.tenders[].tenders[].starts_at point in time no Period in which applications are possible.
data.tenders[].tenders[].ends_at point in time no Period in which applications are possible.
data.tenders[].tenders[].closed boolean no
data.tenders[].tenders[].closed_at point in time yes
data.tenders[].tenders[].evaluation_closed_at point in time yes
data.tenders[].tenders[].paused boolean no
data.tenders[].tenders[].require_youtube boolean no
data.tenders[].tenders[].require_social_media boolean no
data.tenders[].tenders[].radius_km integer yes Radius in kilometres from which applications may come.
data.tenders[].tenders[].created_at point in time yes
data.tenders[].tenders[].event_name text yes
data.tenders[].tenders[].location object yes
data.tenders[].tenders[].location.zip text yes
data.tenders[].tenders[].location.city text yes
data.tenders[].tenders[].location.country text yes Country as entered, usually as a country code.
data.tenders[].tenders[].location.latitude decimal yes Decimal degrees (WGS 84) as text.
data.tenders[].tenders[].location.longitude decimal yes Decimal degrees (WGS 84) as text.
data.tenders[].tenders[].rating_closures list of object no Who in the team has finished rating.
data.tenders[].tenders[].rating_closures[].tenant_user_id text no
data.tenders[].tenders[].rating_closures[].closed_at point in time no
data.tenders[].tenders[].applications list of object no
data.tenders[].tenders[].applications[].event_tender_application_id text no
data.tenders[].tenders[].applications[].artist_id text yes Identifier of the artist profile; null for an application without a profile.
data.tenders[].tenders[].applications[].email text no
data.tenders[].tenders[].applications[].contact_phone text no
data.tenders[].tenders[].applications[].external_artist_name text yes The fields external_* come from an application without a profile.
data.tenders[].tenders[].applications[].external_description text yes
data.tenders[].tenders[].applications[].external_website_url text yes
data.tenders[].tenders[].applications[].external_youtube_url text yes
data.tenders[].tenders[].applications[].external_instagram text yes
data.tenders[].tenders[].applications[].external_facebook text yes
data.tenders[].tenders[].applications[].external_tiktok text yes
data.tenders[].tenders[].applications[].external_zip text yes
data.tenders[].tenders[].applications[].external_city text yes
data.tenders[].tenders[].applications[].external_country text yes Country as entered, usually as a country code.
data.tenders[].tenders[].applications[].external_latitude decimal yes Decimal degrees (WGS 84) as text.
data.tenders[].tenders[].applications[].external_longitude decimal yes Decimal degrees (WGS 84) as text.
data.tenders[].tenders[].applications[].overnight_needed boolean no
data.tenders[].tenders[].applications[].submitted_at point in time no
data.tenders[].tenders[].applications[].status text (submitted, accepted, rejected, withdrawn) no
data.tenders[].tenders[].applications[].decided_at point in time yes
data.tenders[].tenders[].applications[].decision_note text yes
data.tenders[].tenders[].applications[].email_verified_at point in time yes
data.tenders[].tenders[].applications[].data_erased_at point in time yes When the details of a closed application were erased.
data.tenders[].tenders[].applications[].artist_track_id text yes Identifier of the attached recording from category 4.
data.tenders[].tenders[].applications[].proposed_fee amount no The proposed fee of the application.
data.tenders[].tenders[].applications[].genres list of text no
data.tenders[].tenders[].applications[].files list of text no Paths of the related originals in the ZIP.
data.tenders[].tenders[].applications[].ratings list of object no The ratings of the team, 1 to 5 stars.
data.tenders[].tenders[].applications[].ratings[].tenant_user_id text no
data.tenders[].tenders[].applications[].ratings[].stars integer no
data.tenders[].tenders[].applications[].ratings[].created_at point in time yes
data.applications_submitted list of object no
data.applications_submitted[].artist_id text no
data.applications_submitted[].artist_name text yes
data.applications_submitted[].applications list of object no
data.applications_submitted[].applications[].event_name text yes
data.applications_submitted[].applications[].event_starts_at point in time yes
data.applications_submitted[].applications[].event_tender_application_id text no
data.applications_submitted[].applications[].artist_id text yes Identifier of the artist profile; null for an application without a profile.
data.applications_submitted[].applications[].email text no
data.applications_submitted[].applications[].contact_phone text no
data.applications_submitted[].applications[].external_artist_name text yes The fields external_* come from an application without a profile.
data.applications_submitted[].applications[].external_description text yes
data.applications_submitted[].applications[].external_website_url text yes
data.applications_submitted[].applications[].external_youtube_url text yes
data.applications_submitted[].applications[].external_instagram text yes
data.applications_submitted[].applications[].external_facebook text yes
data.applications_submitted[].applications[].external_tiktok text yes
data.applications_submitted[].applications[].external_zip text yes
data.applications_submitted[].applications[].external_city text yes
data.applications_submitted[].applications[].external_country text yes Country as entered, usually as a country code.
data.applications_submitted[].applications[].external_latitude decimal yes Decimal degrees (WGS 84) as text.
data.applications_submitted[].applications[].external_longitude decimal yes Decimal degrees (WGS 84) as text.
data.applications_submitted[].applications[].overnight_needed boolean no
data.applications_submitted[].applications[].submitted_at point in time no
data.applications_submitted[].applications[].status text (submitted, accepted, rejected, withdrawn) no
data.applications_submitted[].applications[].decided_at point in time yes
data.applications_submitted[].applications[].decision_note text yes
data.applications_submitted[].applications[].email_verified_at point in time yes
data.applications_submitted[].applications[].data_erased_at point in time yes When the details of a closed application were erased.
data.applications_submitted[].applications[].artist_track_id text yes Identifier of the attached recording from category 4.
data.applications_submitted[].applications[].proposed_fee amount no The proposed fee of the application.
data.applications_submitted[].applications[].genres list of text no
data.applications_submitted[].applications[].files list of text no Paths of the related originals in the ZIP.

08-communication.json

Format: JSON · The data of one category. Header and time are at the top, the data under data.: Communication data

The data of one category. Header and time are at the top, the data under data.

Field Type Can be empty Explanation
category object no Number, key and name of the category.
category.number integer no
category.key text no
category.label text no
generated_at point in time no
data object no
data.threads list of object no
data.threads[].folder text no The folder of this chat in the ZIP.
data.threads[].event object no
data.threads[].event.event_id text no
data.threads[].event.name text no
data.threads[].event.starts_at point in time no
data.threads[].own_sides list of object no With which of your own profiles the account takes part in this chat.
data.threads[].own_sides[].side text (promoter, artist) no
data.threads[].own_sides[].profile text no
data.threads[].files object no Paths of the three files of this chat in the ZIP.
data.threads[].files.thread text no
data.threads[].files.messages text no
data.threads[].files.own_state text no

chat/{folder}/thread.json

Format: JSON · The data of one category. Header and time are at the top, the data under data.: Communication data

One event chat: the event, your own sides and all participants with joining and leaving.

Field Type Can be empty Explanation
event object no
event.event_id text no
event.name text no
event.starts_at point in time no
own_sides list of object no With which of your own profiles the account takes part in this chat.
own_sides[].side text (promoter, artist) no
own_sides[].profile text no
participants list of object no Everyone involved; of the other side only profile name and side.
participants[].profile text no
participants[].side text (promoter, artist) no
participants[].joined_at point in time yes
participants[].left_at point in time yes

chat/{folder}/messages.json

Format: JSON · The data of one category. Header and time are at the top, the data under data.: Communication data

All messages of a chat in chronological order. Messages have a sender, system entries the field system_entry instead.

Field Type Can be empty Explanation
messages list of object no
messages[].sent_at point in time yes
messages[].type text (message, system) no
messages[].system_entry object no Only for system entries: kind and readable text. The field may be missing.
messages[].system_entry.type text (backline_assigned, backline_unassigned) yes
messages[].system_entry.text text yes
messages[].sender object no Only for messages: name, side and profile of the sender. The field may be missing.
messages[].sender.name text no
messages[].sender.side text (promoter, artist) no
messages[].sender.profile text yes
messages[].body text yes The field may be missing.
messages[].shared_document object yes A document shared from the documents, otherwise null. The field may be missing.
messages[].shared_document.title text yes
messages[].shared_document.file_name text yes
messages[].shared_document.path text yes Path of the file in the ZIP; null if the original is missing.
messages[].shared_document.note text no Note if the file is missing or was deleted. The field may be missing.
messages[].attachments list of object no The field may be missing.
messages[].attachments[].file_name text yes
messages[].attachments[].path text yes Path of the file in the ZIP; null if the original is missing.
messages[].attachments[].note text no Note if the file is missing or was deleted. The field may be missing.

chat/{folder}/own-state.json

Format: JSON · The data of one category. Header and time are at the top, the data under data.: Communication data

Your own read states and mutes in this chat.

Field Type Can be empty Explanation
reads list of object no
reads[].side text (promoter, artist) yes
reads[].profile text no
reads[].last_read_at point in time yes
mutes list of object no
mutes[].side text (promoter, artist) yes
mutes[].profile text no
mutes[].muted_at point in time yes

chat/{folder}/attachments/{media_id}-{file_name}

Format: Original file · The data of one category. Header and time are at the top, the data under data.: Communication data

The attachments and shared documents of a chat in their original form.

09-public-pages.json

Format: JSON · The data of one category. Header and time are at the top, the data under data.: Public pages and their reach

The data of one category. Header and time are at the top, the data under data.

Field Type Can be empty Explanation
category object no Number, key and name of the category.
category.number integer no
category.key text no
category.label text no
generated_at point in time no
data object no
data.link_pages list of object no The Artist-Links of the managed artist profiles.
data.link_pages[].artist_id text no
data.link_pages[].artist_name text yes
data.link_pages[].artist_link_page_id text no
data.link_pages[].slug text no The name in the address of the Artist-Links.
data.link_pages[].public_id text no The fixed identifier in the address of the Artist-Links.
data.link_pages[].is_active boolean no
data.link_pages[].primary_color text yes
data.link_pages[].custom_title text yes
data.link_pages[].use_custom_title boolean no
data.link_pages[].use_logo_favicon boolean no
data.link_pages[].bandsintown_artist_id text yes
data.link_pages[].slug_changed_at point in time yes
data.link_pages[].created_at point in time yes
data.link_pages[].blocks list of object no
data.link_pages[].blocks[].type text (bio, music_player, videos, tour_dates, press_package, social_links, custom_link) no
data.link_pages[].blocks[].is_visible boolean no
data.link_pages[].blocks[].title text yes
data.link_pages[].blocks[].url text yes
data.link_pages[].blocks[].icon text yes
data.link_pages[].blocks[].order integer yes
data.link_pages[].daily_views list of object no Views per day, without reference to visitors.
data.link_pages[].daily_views[].date date no
data.link_pages[].daily_views[].views integer no
data.link_pages[].daily_clicks list of object no Clicks per day and target, without reference to visitors.
data.link_pages[].daily_clicks[].date date no
data.link_pages[].daily_clicks[].target_type text (block, social, spotify, press_package) no
data.link_pages[].daily_clicks[].target_key text no Which target was clicked, e.g. a block or a platform.
data.link_pages[].daily_clicks[].clicks integer no
data.imprints list of object no The imprint of the Artist-Links.
data.imprints[].artist_id text no
data.imprints[].artist_name text yes
data.imprints[].legal_form text (natural_person, gbr, registered_merchant, corporation, association, other) no
data.imprints[].legal_form_other text yes
data.imprints[].name text yes
data.imprints[].representatives text yes
data.imprints[].street text yes
data.imprints[].street_number text yes
data.imprints[].zip text yes
data.imprints[].city text yes
data.imprints[].country text yes Country as entered, usually as a country code.
data.imprints[].email text yes
data.imprints[].phone text yes
data.imprints[].register_court text yes
data.imprints[].register_number text yes
data.imprints[].vat_id text yes
data.imprints[].business_id text yes
data.imprints[].responsible_name text yes
data.imprints[].responsible_address text yes
data.imprints[].is_complete boolean no Whether all mandatory details of the imprint are filled in.
data.imprints[].created_at point in time yes
data.imprints[].updated_at point in time yes

10-billing.json

Format: JSON · The data of one category. Header and time are at the top, the data under data.: Contract, billing and payment data

The data of one category. Header and time are at the top, the data under data.

Field Type Can be empty Explanation
category object no Number, key and name of the category.
category.number integer no
category.key text no
category.label text no
generated_at point in time no
data object no
data.profiles list of object no
data.profiles[].profile_type text (artist, promoter) no
data.profiles[].profile_id text no
data.profiles[].profile_name text yes
data.profiles[].subscriptions list of object no
data.profiles[].subscriptions[].tenant_subscription_id text no
data.profiles[].subscriptions[].contract_number text yes
data.profiles[].subscriptions[].status text no Status of the subscription, e.g. active, trialing or canceled.
data.profiles[].subscriptions[].current_period_start point in time yes
data.profiles[].subscriptions[].current_period_end point in time yes
data.profiles[].subscriptions[].trial_ends_at point in time yes
data.profiles[].subscriptions[].cancel_at_period_end boolean no
data.profiles[].subscriptions[].cancelled_at point in time yes
data.profiles[].subscriptions[].ends_at point in time yes
data.profiles[].subscriptions[].created_at point in time yes
data.profiles[].subscriptions[].plan text yes
data.profiles[].subscriptions[].scheduled_plan text yes The plan that will be switched to at the end of the period.
data.profiles[].subscriptions[].cancellation object yes
data.profiles[].subscriptions[].cancellation.reason text (dont_want_festry, dont_like_festry, switching_platform, missing_features, platform_problems, other, account_deleted, profile_blocked) no
data.profiles[].subscriptions[].cancellation.feedback text yes
data.profiles[].subscriptions[].cancellation.created_at point in time yes
data.profiles[].payment_provider_subscriptions list of object no The subscription at the payment provider Stripe. Payment method data is never held by Festry.
data.profiles[].payment_provider_subscriptions[].type text no
data.profiles[].payment_provider_subscriptions[].stripe_id text yes
data.profiles[].payment_provider_subscriptions[].stripe_status text no
data.profiles[].payment_provider_subscriptions[].stripe_price text yes
data.profiles[].payment_provider_subscriptions[].quantity integer yes
data.profiles[].payment_provider_subscriptions[].trial_ends_at point in time yes
data.profiles[].payment_provider_subscriptions[].ends_at point in time yes
data.profiles[].payment_provider_subscriptions[].created_at point in time yes
data.profiles[].payment_provider_subscriptions[].items list of object no
data.profiles[].payment_provider_subscriptions[].items[].stripe_product text no
data.profiles[].payment_provider_subscriptions[].items[].stripe_price text no
data.profiles[].payment_provider_subscriptions[].items[].quantity integer yes
data.profiles[].coupons list of object no
data.profiles[].coupons[].duration_amount integer no
data.profiles[].coupons[].duration_unit text (week, month) no
data.profiles[].coupons[].expires_at point in time no
data.profiles[].coupons[].redeemed_at point in time yes
data.profiles[].coupons[].plan text yes
data.profiles[].invoices list of object no
data.profiles[].invoices[].invoice_id text no
data.profiles[].invoices[].invoice_number text yes
data.profiles[].invoices[].type text (subscription, one_off) no
data.profiles[].invoices[].status text no
data.profiles[].invoices[].recipient_name text yes
data.profiles[].invoices[].recipient_email text yes
data.profiles[].invoices[].recipient_address object with text yes The billing address as it appears on the invoice.
data.profiles[].invoices[].finalized_at point in time yes
data.profiles[].invoices[].paid_at point in time yes
data.profiles[].invoices[].amount_paid amount no
data.profiles[].invoices[].file text yes Path of the PDF in the ZIP; null if none is archived.
data.profiles[].invoices[].credit_notes list of object no
data.profiles[].invoices[].credit_notes[].credit_note_id text no
data.profiles[].invoices[].credit_notes[].number text yes
data.profiles[].invoices[].credit_notes[].memo text yes
data.profiles[].invoices[].credit_notes[].credited_at point in time yes
data.profiles[].invoices[].credit_notes[].amount amount no
data.profiles[].invoices[].credit_notes[].refund_amount amount no
data.profiles[].invoices[].credit_notes[].file text yes Path of the PDF in the ZIP; null if none is archived.
data.checkout_consents list of object no The consents given when booking a plan, with wording.
data.checkout_consents[].checkout_consent_id text no
data.checkout_consents[].subscribable_id text no Identifier of the profile the plan was booked for.
data.checkout_consents[].plan_name text no
data.checkout_consents[].consent_version text no
data.checkout_consents[].locale text no
data.checkout_consents[].consent_text text no The wording that was agreed to.
data.checkout_consents[].consented_at point in time no
data.checkout_consents[].terms_version text yes
data.checkout_consents[].terms_locale text yes
data.checkout_consents[].terms_text text yes
data.checkout_consents[].terms_acknowledged_at point in time yes
data.contract_declarations list of object no Terminations and withdrawals Festry has assigned to this account.
data.contract_declarations[].reference text no
data.contract_declarations[].type text (termination, withdrawal) no
data.contract_declarations[].termination_kind text (ordinary, extraordinary) yes
data.contract_declarations[].extraordinary_reason text yes
data.contract_declarations[].contract_description text no
data.contract_declarations[].declarant_name text no
data.contract_declarations[].declarant_email text no
data.contract_declarations[].customer_reference text yes
data.contract_declarations[].recognized_customer_number text yes
data.contract_declarations[].recognized_contract_number text yes
data.contract_declarations[].end_timing text (next_possible, specific_date) yes
data.contract_declarations[].desired_end_date point in time yes
data.contract_declarations[].confirmation_email text no
data.contract_declarations[].received_at point in time no
data.contract_declarations[].confirmation_sent_at point in time yes
data.contract_declarations[].completion_sent_at point in time yes
data.contract_declarations[].contract_ends_at point in time yes
data.contract_declarations[].status text (received, under_review, completed) no

files/invoices/{file_name}.pdf

Format: Original file · The data of one category. Header and time are at the top, the data under data.: Contract, billing and payment data

The archived invoices as PDF.

files/credit-notes/{file_name}.pdf

Format: Original file · The data of one category. Header and time are at the top, the data under data.: Contract, billing and payment data

The archived credit notes as PDF.

12-media.json

Format: JSON · The data of one category. Header and time are at the top, the data under data.: Media files

The data of one category. Header and time are at the top, the data under data.

Field Type Can be empty Explanation
category object no Number, key and name of the category.
category.number integer no
category.key text no
category.label text no
generated_at point in time no
data object no
data.files list of object no Every file under files/ and chat/ with size, checksum and origin.
data.files[].path text no
data.files[].size_bytes integer no
data.files[].sha256 text no SHA-256 checksum of the file, hexadecimal.
data.files[].media_id text no Identifier of the uploaded file. The following fields are missing for generated files. The field may be missing.
data.files[].owner_type text no What the file belongs to, e.g. Artist or ArtistDocument. The field may be missing.
data.files[].owner_id text no The field may be missing.
data.files[].collection text no What the file was uploaded for, e.g. logo or document. The field may be missing.
data.files[].name text no The field may be missing.
data.files[].mime_type text yes The field may be missing.
data.files[].created_at point in time yes The field may be missing.
data.files[].artist_id text no Only for generated files and invoices: what they belong to. The field may be missing.
data.files[].calendar_id text no Only for generated files and invoices: what they belong to. The field may be missing.
data.files[].invoice_id text no Only for generated files and invoices: what they belong to. The field may be missing.
data.files[].invoice_number text yes The field may be missing.
data.files[].credit_note_id text no Only for generated files and invoices: what they belong to. The field may be missing.
data.files[].credit_note_number text yes The field may be missing.

files/{collection}/{media_id}/{file_name}

Format: Original file · The data of one category. Header and time are at the top, the data under data.: Media files

All uploaded files in their original form: images, logos, documents, recordings and application material. Derived versions such as thumbnails are deliberately missing.

13-settings.json

Format: JSON · The data of one category. Header and time are at the top, the data under data.: Settings

The data of one category. Header and time are at the top, the data under data.

Field Type Can be empty Explanation
category object no Number, key and name of the category.
category.number integer no
category.key text no
category.label text no
generated_at point in time no
data object no
data.locale text yes Language of the account (de or en).
data.mail_notifications list of object no Which optional mails the account receives.
data.mail_notifications[].mail_type text (booking-artist-booked, booking-artist-accepted, booking-artist-unbooked, booking-artist-declined, booking-event-cancelled-for-artist, booking-event-deleted, booking-running-order-updated, booking-fee-change-proposed, booking-fee-change-accepted, booking-fee-change-declined, booking-fee-change-reminder, booking-artist-blocked, booking-promoter-blocked, booking-profile-unblocked, booking-performance-cancelled, tender-application-confirmation, tender-application-received, tender-application-accepted, tender-application-rejected, tender-cancelled, tender-new-application, tender-closed, tender-evaluation-phase-started, tender-data-erasure-announced, tender-data-erased) no
data.mail_notifications[].enabled boolean no
data.plan_recommendation_dismissed_at point in time yes When the plan recommendation was last closed.

Interface

Through the interface, a program starts the same export, checks its status and downloads the same ZIP as in your account. It is open and free of charge.

Authentication

Every request needs an API token in the header Authorization: Bearer <token>. You create it in your account under settings, privacy: https://account.core-119.festry-dev.de/settings/privacy

A token is only good for the data export, is valid for 365 days and can be revoked at any time. You can have at most 5 active tokens. All tokens are deleted with the account.

Endpoints

Method Path Effect
POST https://core-119.festry-dev.de/api/v1/data-exports Starts an export. Response 202 with the export and its status address in the header Location.
GET https://core-119.festry-dev.de/api/v1/data-exports Your exports, newest first.
GET https://core-119.festry-dev.de/api/v1/data-exports/{id} The status of an export; when ready, with download address.
GET https://core-119.festry-dev.de/api/v1/data-exports/{id}/download The ZIP, streamed. The same as the download in your account.

Response

An export appears as an object under data (for the list as a list):

{
    "data": {
        "id": "9f1c2d3e-0000-4000-8000-000000000000",
        "status": "ready",
        "created_at": "2026-10-06T14:30:00+02:00",
        "completed_at": "2026-10-06T14:31:12+02:00",
        "expires_at": "2026-10-13T14:31:12+02:00",
        "size_bytes": 1048576,
        "links": {
            "self": "https://core-119.festry-dev.de/api/v1/data-exports/9f1c2d3e-0000-4000-8000-000000000000",
            "download": "https://core-119.festry-dev.de/api/v1/data-exports/9f1c2d3e-0000-4000-8000-000000000000/download"
        }
    }
}

Status of an export

  • pending: started or in progress.
  • ready: ready for download until expires_at.
  • failed: not created. You can start a new one right away.
  • expired: expired, the file was deleted.

Periods and limits

  • Cooldown: one export every 24 hours. A POST within the cooldown gets 429 with the header Retry-After (seconds) and the time in available_at. Failed exports do not count.
  • Validity: the download is available for 7 days, after that the file is deleted.
  • Rate limit: 30 requests per minute and token. Above that you get 429 with Retry-After.

Status codes

  • 200 Success.
  • 202 Export started.
  • 401 Token missing, expired or revoked.
  • 403 Token without the ability data-export.
  • 404 Export not found or not yours.
  • 409 Download not yet possible (pending) or export failed (failed).
  • 410 Export expired, file deleted.
  • 429 Cooldown or rate limit.
  • 503 Festry is not open right now.

Errors

Errors always come as JSON with a fixed code and a text in the language from the header Accept-Language (de or en, otherwise de):

{
    "error": {
        "code": "unauthenticated",
        "message": "No valid API token. The token is missing, has expired or was revoked."
    }
}

Possible codes: unauthenticated, missing_ability, forbidden, not_found, method_not_allowed, gone, too_many_requests, cooldown, export_expired, export_failed, export_not_ready, platform_closed, service_unavailable, invalid_request, http_error, server_error.

Example with curl

# Start an export
curl -X POST https://core-119.festry-dev.de/api/v1/data-exports \
  -H "Authorization: Bearer $FESTRY_TOKEN" \
  -H "Accept-Language: en"

# Check the status until status is "ready"
curl https://core-119.festry-dev.de/api/v1/data-exports/{id} \
  -H "Authorization: Bearer $FESTRY_TOKEN"

# Download the ZIP
curl -L -o festry-export.zip https://core-119.festry-dev.de/api/v1/data-exports/{id}/download \
  -H "Authorization: Bearer $FESTRY_TOKEN"

Machine-readable description

The same description is available in machine-readable form as JSON Schema (draft 2020-12). Each JSON file of the ZIP has a definition there, x-files maps the paths in the ZIP: https://core-119.festry-dev.de/info/data-export/schema.json