Zooza API
1.0.0

Base URL
https://api.zooza.app/v1

Api that provides basic functions

This is version 1.0.0 of this API documentation. Last update on Aug 10, 2024.

Authentication

The API accepts 3 different authentication methods:

Company (http_api_key)

Send an authentication token in the X-ZOOZA-COMPANY header to authenticate with the API.

Token (http_api_key)

Send an authentication token in the X-ZOOZA-TOKEN header to authenticate with the API.

Api key (http_api_key)

Applications's API key. API key can be found in Settings > Registration forms

Agreements

Get agreement

GET /agreements/{ID}

Path parameters

  • ID integer Required

    Resource ID

Responses

  • 200 application/json

    Api will return agreement by it's ID (version id)

    Hide response attributes Show response attributes object
    • id integer

      Agreement version ID

    • agreement_id integer

      Agreement ID

    • company_id string

      ID of company that record belongs to

    • order integer

      Denotes order in which the agreement will appear in the form

    • name string

      Name is shown in the registration form. This is the name of the agreement and can contain |AGREEMENT_URL|. If present, this var needs to be replaced with url: https://agreements.zooza.app/{ID}. Should you want to display agreement inline within the registration form, use also Title and Description for full text of the agreement.

    • title string

      Title is shown to user when displaying agreement's detail.

    • description string

      Description is shown to user when displaying agreement's detail.

    • mandatory boolean

      All mandatory agreements need to be posted back to API (with full object containing title, description and name). Non-mandatory agreements should be sent only when given consent (e.g. Radio button is selected or checkbox is selected).

    • valid_from string(date-time)

      Date from which this agreement version is valid

    • type string

      Type of form input used to give consent with agreement. *none: No input is used. The consent is given by clicking the Register button *radio: Yes and No options are shown to user. If mandatory, any one of those two choices need to be selected *checkbox: Checkbox is shown to user. If mandatory, checkbox needs to be checked

      Values are none, radio, or checkbox.

    • for string

      Denotes to which application this agreement is targeted. *registration: When doing POST/registrations *checkout: When doing POST/orders *feedback: When doing POST/feedback_requests

      Values are registration, checkout, or feedback.

    • created string(date-time)
    • updated string(date-time)
    • apply_for string

      *everyone: The agreement is always shown *course: Agreement is required only for courses that match course_ids within courses property *feedback: Feedback form *members: Internal consents for company members

      Values are everyone, course, feedback, or members.

    • region string
    • courses array[integer]

      Used to match agreement to particular course. Use only if property apply_for is set to: course

GET /agreements/{ID}
curl \
 --request GET 'https://api.zooza.app/v1/agreements/{ID}'
Response examples (200)
{
  "id": 42,
  "agreement_id": 42,
  "company_id": "string",
  "order": 42,
  "name": "string",
  "title": "string",
  "description": "string",
  "mandatory": true,
  "valid_from": "2025-05-04T09:42:00Z",
  "type": "none",
  "for": "registration",
  "created": "2025-05-04T09:42:00Z",
  "updated": "2025-05-04T09:42:00Z",
  "apply_for": "everyone",
  "region": "string",
  "courses": [
    42
  ]
}

Attendance

Get schedules

GET /attendance

Query parameters

  • event_id integer

Responses

  • 200 application/json

    Success

    Hide response attributes Show response attributes object
    • id integer
    • event_id integer
    • cancellation_reason string
    • replacement_for integer
    • created string
    • modified string
    • attendance string
    • moved boolean
    • replacement boolean
    • credit_id integer
    • is_free_event integer
    • waitlist_credit_id integer
    • user_id integer
    • full_name string
    • email string
    • phone string
    • company_id string

      ID of company that record belongs to

    • registration_id integer
    • note string
    • paid integer(float)
    • slots integer
    • attendance_management string
    • registration_status string
    • calc__unused_replacements integer
    • payment_balance integer(float)
    • payment_debt integer(float)
    • payment_paid integer(float)
    • __calc__paid integer(float)
    • payment_status string
    • ef_dob string
    • ef_full_name string
    • ef_address string
    • replacement_in integer
    • internal_note string
    • other_company_attendance array
    • video_statistic array
GET /attendance
curl \
 --request GET 'https://api.zooza.app/v1/attendance'
Response examples (200)
[
  {
    "id": 42,
    "event_id": 42,
    "cancellation_reason": "string",
    "replacement_for": 42,
    "created": "string",
    "modified": "string",
    "attendance": "string",
    "moved": true,
    "replacement": true,
    "credit_id": 42,
    "is_free_event": 42,
    "waitlist_credit_id": 42,
    "user_id": 42,
    "full_name": "string",
    "email": "string",
    "phone": "string",
    "company_id": "string",
    "registration_id": 42,
    "note": "string",
    "paid": 42,
    "slots": 42,
    "attendance_management": "string",
    "registration_status": "string",
    "calc__unused_replacements": 42,
    "payment_balance": 42,
    "payment_debt": 42,
    "payment_paid": 42,
    "__calc__paid": 42,
    "payment_status": "string",
    "ef_dob": "string",
    "ef_full_name": "string",
    "ef_address": "string",
    "replacement_in": 42,
    "internal_note": "string",
    "other_company_attendance": [],
    "video_statistic": []
  }
]

Calendar

Events for given date range

GET /calendar
  • If start and end are sent, date is ignored and vice versa.
  • Any date range set is converted to start on monday and end on sunday

Query parameters

  • start string(date)
  • end string(date)
  • date string(date)

Responses

  • 200 application/json

    List of events

GET /calendar
curl \
 --request GET 'https://api.zooza.app/v1/calendar'
Response examples (200)
[
  {}
]

Companies

Get places that belong to a company

GET /companies/{ID}/places

Path parameters

  • ID integer Required

    Resource ID

Responses

  • 200 application/json

    List of places

GET /companies/{ID}/places
curl \
 --request GET 'https://api.zooza.app/v1/companies/{ID}/places'
Response examples (200)
[]

Courses

Get list of courses

GET /courses

Responses

  • 200 application/json

    List of courses

    Hide response attributes Show response attributes object
    • company_id string

      ID of company that record belongs to

    • id integer

      Resource ID

    • registration_slots_min integer
    • registration_slots_max integer
    • registration_open boolean
    • show_on_site boolean
    • allow_cancel_until integer
    • replacements_limit integer
    • custom_email integer
    • custom_email_event_notification integer
    • hide_before integer
    • replacements_limit_per_events integer
    • cash boolean
    • online_card boolean
    • online_transfer boolean
    • fees_included_in_price boolean
    • public boolean
    • archive boolean
    • online_registration boolean
    • on_behalf boolean
    • feedback_during_course boolean
    • feedback_after_course boolean
    • hide_if_full boolean
    • allow_replacements boolean
    • allow_custom_replacements boolean
    • auto_approve_custom_replacements boolean
    • allow_replacements_waitlist boolean
    • auto_waitlist_notification boolean
    • use_extra_fields boolean
    • for_children boolean
    • event_notfication boolean
    • allow_registration_after_end boolean
    • allow_replacement_cancellation boolean
    • upcoming_events_notification boolean
    • allow_guest_registration boolean
    • allow_replacements_from_other_companies boolean
    • payment_schedule_is_mandatory boolean
    • allow_using_replacement_credits_as_discount boolean
    • flexible_replacements_limit boolean
    • allow_reschedule_of_replacements boolean
    • payments_managed_by_buyer boolean
    • online_card_provider string

      Values are tatra_banka, tatra_banka_cz, or stripe.

    • online_transfer_provider string

      Value is besteron.

    • created string(date-time)
    • name string
    • url string
    • get_extra_fields_from string

      Extra fields are required for:

      • all: Every person
      • other: Every person but registrant (first person)

      Values are all or other.

    • get_basic_fields_from string

      Basic fields ( First name, last name, email, phone ) are required for:

      • all: Every person
      • registrant: Just first person

      Values are all or registrant.

    • registration_type string

      Values are full2, open, or single.

    • course_type string

      Values are course, event, online_event, or photography.

    • waitlist string

      Values are any or this.

    • description string
    • theme string
    • late_registrations string

      Values are confirmation_required or auto_approve.

    • custom_label_note string
    • custom_label_first_name string
    • custom_label_last_name string
    • custom_label_phone string
    • custom_label_email string
    • collect_feedback_start string(date-time)
    • iban string
    • swift string
    • color string
    • price number(float)
    • registration_fee number(float)
    • __calc__fee_cash number(float)
    • __calc__fee_online_card number(float)
    • __calc__fee_online_transfer number(float)
    • replacements_settings object
      Hide replacements_settings attributes Show replacements_settings attributes object
    • replacements_settings_other_companies object
      Hide replacements_settings_other_companies attributes Show replacements_settings_other_companies attributes object
    • extra_fields array[object]
      Hide extra_fields attributes Show extra_fields attributes object
      • id integer

        Resource ID

      • field_order integer
      • course_id integer

        Resource ID

      • column_name string

        Values are dob, full_name, address, slots, business_name, business_address, business_id, tax_id, vat, identification_number, extra_field_1, extra_field_2, extra_field_3, extra_field_4, or extra_field_5.

      • name string
      • description string
      • custom_label string
      • active boolean
      • field_options object

        Age limit is used with field dob to limit values submitted within this extra field.

        Limit types

        There are three possible types: 1. none - limit is not used 2. date - date range is used for validation. Submitted value must be formated as date string 3. age - age range is used for validation. Submitted value must be formatted as integer

        Limit units

        If limit type is set to age, limit unit describes whether submitted integer is considered to be in years or months

        Limit usage

        Limit usage defines range that is used for validation: 1. both - both minimum limit and maximum limits are used. That means that submitted value must fall between these two values 2. min- only minimum value of limit is used. For example if minimum limit is set to 3 months, then any number equal or larger than 3 will pass the test 3. max- the opposite of minimum value

        Minimum and maximum limit values

        Depending on limit type this can either be a number (in case of age) or date string (in case of date)

        Hide field_options attributes Show field_options attributes object
    • feedback_questions array[object]
      Hide feedback_questions attributes Show feedback_questions attributes object
      • course_id integer

        Resource ID

      • company_id integer

        Resource ID

      • question_id integer

        Resource ID

      • question_active_during boolean
      • question_active_after boolean
      • is_mandatory boolean
      • name string
      • type string
GET /courses
curl \
 --request GET 'https://api.zooza.app/v1/courses'
Response examples (200)
[
  {
    "company_id": "string",
    "id": 42,
    "registration_slots_min": 42,
    "registration_slots_max": 42,
    "registration_open": true,
    "show_on_site": true,
    "allow_cancel_until": 42,
    "replacements_limit": 42,
    "custom_email": 42,
    "custom_email_event_notification": 42,
    "hide_before": 42,
    "replacements_limit_per_events": 42,
    "cash": true,
    "online_card": true,
    "online_transfer": true,
    "fees_included_in_price": true,
    "public": true,
    "archive": true,
    "online_registration": true,
    "on_behalf": true,
    "feedback_during_course": true,
    "feedback_after_course": true,
    "hide_if_full": true,
    "allow_replacements": true,
    "allow_custom_replacements": true,
    "auto_approve_custom_replacements": true,
    "allow_replacements_waitlist": true,
    "auto_waitlist_notification": true,
    "use_extra_fields": true,
    "for_children": true,
    "event_notfication": true,
    "allow_registration_after_end": true,
    "allow_replacement_cancellation": true,
    "upcoming_events_notification": true,
    "allow_guest_registration": true,
    "allow_replacements_from_other_companies": true,
    "payment_schedule_is_mandatory": true,
    "allow_using_replacement_credits_as_discount": true,
    "flexible_replacements_limit": true,
    "allow_reschedule_of_replacements": true,
    "payments_managed_by_buyer": true,
    "online_card_provider": "tatra_banka",
    "online_transfer_provider": "besteron",
    "created": "2025-05-04T09:42:00Z",
    "name": "string",
    "url": "string",
    "get_extra_fields_from": "all",
    "get_basic_fields_from": "all",
    "registration_type": "full2",
    "course_type": "course",
    "waitlist": "any",
    "description": "string",
    "theme": "string",
    "late_registrations": "confirmation_required",
    "custom_label_note": "string",
    "custom_label_first_name": "string",
    "custom_label_last_name": "string",
    "custom_label_phone": "string",
    "custom_label_email": "string",
    "collect_feedback_start": "2025-05-04T09:42:00Z",
    "iban": "string",
    "swift": "string",
    "color": "string",
    "price": 42.0,
    "registration_fee": 42.0,
    "__calc__fee_cash": 42.0,
    "__calc__fee_online_card": 42.0,
    "__calc__fee_online_transfer": 42.0,
    "replacements_settings": {
      "courses": [],
      "billing_periods": [],
      "places": []
    },
    "replacements_settings_other_companies": {
      "companies": [],
      "billing_periods": [],
      "places": [],
      "schedules": []
    },
    "extra_fields": [
      {
        "id": 42,
        "field_order": 42,
        "course_id": 42,
        "column_name": "dob",
        "name": "string",
        "description": "string",
        "custom_label": "string",
        "active": true,
        "field_options": {
          "age_limit_type": "none",
          "age_limit_units": "years",
          "age_limit_min": 42,
          "age_limit_max": 42,
          "age_limit_use": "both"
        }
      }
    ],
    "feedback_questions": [
      {
        "course_id": 42,
        "company_id": 42,
        "question_id": 42,
        "question_active_during": true,
        "question_active_after": true,
        "is_mandatory": true,
        "name": "string",
        "type": "string"
      }
    ]
  }
]

Create course

POST /courses
application/json

Body Required

  • name string
  • public boolean
  • online_registration boolean
  • registration_type string

    Values are full2, single, or openapi.

  • course_type string

    Values are course, event, online_event, or photography.

Responses

  • 200 application/json

    Course Resource

    Hide response attributes Show response attributes object
    • company_id string

      ID of company that record belongs to

    • id integer

      Resource ID

    • registration_slots_min integer
    • registration_slots_max integer
    • registration_open boolean
    • show_on_site boolean
    • allow_cancel_until integer
    • replacements_limit integer
    • custom_email integer
    • custom_email_event_notification integer
    • hide_before integer
    • replacements_limit_per_events integer
    • cash boolean
    • online_card boolean
    • online_transfer boolean
    • fees_included_in_price boolean
    • public boolean
    • archive boolean
    • online_registration boolean
    • on_behalf boolean
    • feedback_during_course boolean
    • feedback_after_course boolean
    • hide_if_full boolean
    • allow_replacements boolean
    • allow_custom_replacements boolean
    • auto_approve_custom_replacements boolean
    • allow_replacements_waitlist boolean
    • auto_waitlist_notification boolean
    • use_extra_fields boolean
    • for_children boolean
    • event_notfication boolean
    • allow_registration_after_end boolean
    • allow_replacement_cancellation boolean
    • upcoming_events_notification boolean
    • allow_guest_registration boolean
    • allow_replacements_from_other_companies boolean
    • payment_schedule_is_mandatory boolean
    • allow_using_replacement_credits_as_discount boolean
    • flexible_replacements_limit boolean
    • allow_reschedule_of_replacements boolean
    • payments_managed_by_buyer boolean
    • online_card_provider string

      Values are tatra_banka, tatra_banka_cz, or stripe.

    • online_transfer_provider string

      Value is besteron.

    • created string(date-time)
    • name string
    • url string
    • get_extra_fields_from string

      Extra fields are required for:

      • all: Every person
      • other: Every person but registrant (first person)

      Values are all or other.

    • get_basic_fields_from string

      Basic fields ( First name, last name, email, phone ) are required for:

      • all: Every person
      • registrant: Just first person

      Values are all or registrant.

    • registration_type string

      Values are full2, open, or single.

    • course_type string

      Values are course, event, online_event, or photography.

    • waitlist string

      Values are any or this.

    • description string
    • theme string
    • late_registrations string

      Values are confirmation_required or auto_approve.

    • custom_label_note string
    • custom_label_first_name string
    • custom_label_last_name string
    • custom_label_phone string
    • custom_label_email string
    • collect_feedback_start string(date-time)
    • iban string
    • swift string
    • color string
    • price number(float)
    • registration_fee number(float)
    • __calc__fee_cash number(float)
    • __calc__fee_online_card number(float)
    • __calc__fee_online_transfer number(float)
    • replacements_settings object
      Hide replacements_settings attributes Show replacements_settings attributes object
    • replacements_settings_other_companies object
      Hide replacements_settings_other_companies attributes Show replacements_settings_other_companies attributes object
    • extra_fields array[object]
      Hide extra_fields attributes Show extra_fields attributes object
      • id integer

        Resource ID

      • field_order integer
      • course_id integer

        Resource ID

      • column_name string

        Values are dob, full_name, address, slots, business_name, business_address, business_id, tax_id, vat, identification_number, extra_field_1, extra_field_2, extra_field_3, extra_field_4, or extra_field_5.

      • name string
      • description string
      • custom_label string
      • active boolean
      • field_options object

        Age limit is used with field dob to limit values submitted within this extra field.

        Limit types

        There are three possible types: 1. none - limit is not used 2. date - date range is used for validation. Submitted value must be formated as date string 3. age - age range is used for validation. Submitted value must be formatted as integer

        Limit units

        If limit type is set to age, limit unit describes whether submitted integer is considered to be in years or months

        Limit usage

        Limit usage defines range that is used for validation: 1. both - both minimum limit and maximum limits are used. That means that submitted value must fall between these two values 2. min- only minimum value of limit is used. For example if minimum limit is set to 3 months, then any number equal or larger than 3 will pass the test 3. max- the opposite of minimum value

        Minimum and maximum limit values

        Depending on limit type this can either be a number (in case of age) or date string (in case of date)

        Hide field_options attributes Show field_options attributes object
    • feedback_questions array[object]
      Hide feedback_questions attributes Show feedback_questions attributes object
      • course_id integer

        Resource ID

      • company_id integer

        Resource ID

      • question_id integer

        Resource ID

      • question_active_during boolean
      • question_active_after boolean
      • is_mandatory boolean
      • name string
      • type string
POST /courses
curl \
 --request POST 'https://api.zooza.app/v1/courses' \
 --header "Content-Type: application/json" \
 --data '{"name":"string","public":true,"online_registration":true,"registration_type":"full2","course_type":"course"}'
Request examples
{
  "name": "string",
  "public": true,
  "online_registration": true,
  "registration_type": "full2",
  "course_type": "course"
}
Response examples (200)
{
  "company_id": "string",
  "id": 42,
  "registration_slots_min": 42,
  "registration_slots_max": 42,
  "registration_open": true,
  "show_on_site": true,
  "allow_cancel_until": 42,
  "replacements_limit": 42,
  "custom_email": 42,
  "custom_email_event_notification": 42,
  "hide_before": 42,
  "replacements_limit_per_events": 42,
  "cash": true,
  "online_card": true,
  "online_transfer": true,
  "fees_included_in_price": true,
  "public": true,
  "archive": true,
  "online_registration": true,
  "on_behalf": true,
  "feedback_during_course": true,
  "feedback_after_course": true,
  "hide_if_full": true,
  "allow_replacements": true,
  "allow_custom_replacements": true,
  "auto_approve_custom_replacements": true,
  "allow_replacements_waitlist": true,
  "auto_waitlist_notification": true,
  "use_extra_fields": true,
  "for_children": true,
  "event_notfication": true,
  "allow_registration_after_end": true,
  "allow_replacement_cancellation": true,
  "upcoming_events_notification": true,
  "allow_guest_registration": true,
  "allow_replacements_from_other_companies": true,
  "payment_schedule_is_mandatory": true,
  "allow_using_replacement_credits_as_discount": true,
  "flexible_replacements_limit": true,
  "allow_reschedule_of_replacements": true,
  "payments_managed_by_buyer": true,
  "online_card_provider": "tatra_banka",
  "online_transfer_provider": "besteron",
  "created": "2025-05-04T09:42:00Z",
  "name": "string",
  "url": "string",
  "get_extra_fields_from": "all",
  "get_basic_fields_from": "all",
  "registration_type": "full2",
  "course_type": "course",
  "waitlist": "any",
  "description": "string",
  "theme": "string",
  "late_registrations": "confirmation_required",
  "custom_label_note": "string",
  "custom_label_first_name": "string",
  "custom_label_last_name": "string",
  "custom_label_phone": "string",
  "custom_label_email": "string",
  "collect_feedback_start": "2025-05-04T09:42:00Z",
  "iban": "string",
  "swift": "string",
  "color": "string",
  "price": 42.0,
  "registration_fee": 42.0,
  "__calc__fee_cash": 42.0,
  "__calc__fee_online_card": 42.0,
  "__calc__fee_online_transfer": 42.0,
  "replacements_settings": {
    "courses": [],
    "billing_periods": [],
    "places": []
  },
  "replacements_settings_other_companies": {
    "companies": [],
    "billing_periods": [],
    "places": [],
    "schedules": []
  },
  "extra_fields": [
    {
      "id": 42,
      "field_order": 42,
      "course_id": 42,
      "column_name": "dob",
      "name": "string",
      "description": "string",
      "custom_label": "string",
      "active": true,
      "field_options": {
        "age_limit_type": "none",
        "age_limit_units": "years",
        "age_limit_min": 42,
        "age_limit_max": 42,
        "age_limit_use": "both"
      }
    }
  ],
  "feedback_questions": [
    {
      "course_id": 42,
      "company_id": 42,
      "question_id": 42,
      "question_active_during": true,
      "question_active_after": true,
      "is_mandatory": true,
      "name": "string",
      "type": "string"
    }
  ]
}

Get course detail

GET /courses/{ID}

Path parameters

  • ID integer Required

    Resource ID

Responses

  • 200 application/json

    Course detail

    Hide response attributes Show response attributes object
    • company_id string

      ID of company that record belongs to

    • id integer

      Resource ID

    • registration_slots_min integer
    • registration_slots_max integer
    • registration_open boolean
    • show_on_site boolean
    • allow_cancel_until integer
    • replacements_limit integer
    • custom_email integer
    • custom_email_event_notification integer
    • hide_before integer
    • replacements_limit_per_events integer
    • cash boolean
    • online_card boolean
    • online_transfer boolean
    • fees_included_in_price boolean
    • public boolean
    • archive boolean
    • online_registration boolean
    • on_behalf boolean
    • feedback_during_course boolean
    • feedback_after_course boolean
    • hide_if_full boolean
    • allow_replacements boolean
    • allow_custom_replacements boolean
    • auto_approve_custom_replacements boolean
    • allow_replacements_waitlist boolean
    • auto_waitlist_notification boolean
    • use_extra_fields boolean
    • for_children boolean
    • event_notfication boolean
    • allow_registration_after_end boolean
    • allow_replacement_cancellation boolean
    • upcoming_events_notification boolean
    • allow_guest_registration boolean
    • allow_replacements_from_other_companies boolean
    • payment_schedule_is_mandatory boolean
    • allow_using_replacement_credits_as_discount boolean
    • flexible_replacements_limit boolean
    • allow_reschedule_of_replacements boolean
    • payments_managed_by_buyer boolean
    • online_card_provider string

      Values are tatra_banka, tatra_banka_cz, or stripe.

    • online_transfer_provider string

      Value is besteron.

    • created string(date-time)
    • name string
    • url string
    • get_extra_fields_from string

      Extra fields are required for:

      • all: Every person
      • other: Every person but registrant (first person)

      Values are all or other.

    • get_basic_fields_from string

      Basic fields ( First name, last name, email, phone ) are required for:

      • all: Every person
      • registrant: Just first person

      Values are all or registrant.

    • registration_type string

      Values are full2, open, or single.

    • course_type string

      Values are course, event, online_event, or photography.

    • waitlist string

      Values are any or this.

    • description string
    • theme string
    • late_registrations string

      Values are confirmation_required or auto_approve.

    • custom_label_note string
    • custom_label_first_name string
    • custom_label_last_name string
    • custom_label_phone string
    • custom_label_email string
    • collect_feedback_start string(date-time)
    • iban string
    • swift string
    • color string
    • price number(float)
    • registration_fee number(float)
    • __calc__fee_cash number(float)
    • __calc__fee_online_card number(float)
    • __calc__fee_online_transfer number(float)
    • replacements_settings object
      Hide replacements_settings attributes Show replacements_settings attributes object
    • replacements_settings_other_companies object
      Hide replacements_settings_other_companies attributes Show replacements_settings_other_companies attributes object
    • extra_fields array[object]
      Hide extra_fields attributes Show extra_fields attributes object
      • id integer

        Resource ID

      • field_order integer
      • course_id integer

        Resource ID

      • column_name string

        Values are dob, full_name, address, slots, business_name, business_address, business_id, tax_id, vat, identification_number, extra_field_1, extra_field_2, extra_field_3, extra_field_4, or extra_field_5.

      • name string
      • description string
      • custom_label string
      • active boolean
      • field_options object

        Age limit is used with field dob to limit values submitted within this extra field.

        Limit types

        There are three possible types: 1. none - limit is not used 2. date - date range is used for validation. Submitted value must be formated as date string 3. age - age range is used for validation. Submitted value must be formatted as integer

        Limit units

        If limit type is set to age, limit unit describes whether submitted integer is considered to be in years or months

        Limit usage

        Limit usage defines range that is used for validation: 1. both - both minimum limit and maximum limits are used. That means that submitted value must fall between these two values 2. min- only minimum value of limit is used. For example if minimum limit is set to 3 months, then any number equal or larger than 3 will pass the test 3. max- the opposite of minimum value

        Minimum and maximum limit values

        Depending on limit type this can either be a number (in case of age) or date string (in case of date)

        Hide field_options attributes Show field_options attributes object
    • feedback_questions array[object]
      Hide feedback_questions attributes Show feedback_questions attributes object
      • course_id integer

        Resource ID

      • company_id integer

        Resource ID

      • question_id integer

        Resource ID

      • question_active_during boolean
      • question_active_after boolean
      • is_mandatory boolean
      • name string
      • type string
GET /courses/{ID}
curl \
 --request GET 'https://api.zooza.app/v1/courses/{ID}'
Response examples (200)
{
  "company_id": "string",
  "id": 42,
  "registration_slots_min": 42,
  "registration_slots_max": 42,
  "registration_open": true,
  "show_on_site": true,
  "allow_cancel_until": 42,
  "replacements_limit": 42,
  "custom_email": 42,
  "custom_email_event_notification": 42,
  "hide_before": 42,
  "replacements_limit_per_events": 42,
  "cash": true,
  "online_card": true,
  "online_transfer": true,
  "fees_included_in_price": true,
  "public": true,
  "archive": true,
  "online_registration": true,
  "on_behalf": true,
  "feedback_during_course": true,
  "feedback_after_course": true,
  "hide_if_full": true,
  "allow_replacements": true,
  "allow_custom_replacements": true,
  "auto_approve_custom_replacements": true,
  "allow_replacements_waitlist": true,
  "auto_waitlist_notification": true,
  "use_extra_fields": true,
  "for_children": true,
  "event_notfication": true,
  "allow_registration_after_end": true,
  "allow_replacement_cancellation": true,
  "upcoming_events_notification": true,
  "allow_guest_registration": true,
  "allow_replacements_from_other_companies": true,
  "payment_schedule_is_mandatory": true,
  "allow_using_replacement_credits_as_discount": true,
  "flexible_replacements_limit": true,
  "allow_reschedule_of_replacements": true,
  "payments_managed_by_buyer": true,
  "online_card_provider": "tatra_banka",
  "online_transfer_provider": "besteron",
  "created": "2025-05-04T09:42:00Z",
  "name": "string",
  "url": "string",
  "get_extra_fields_from": "all",
  "get_basic_fields_from": "all",
  "registration_type": "full2",
  "course_type": "course",
  "waitlist": "any",
  "description": "string",
  "theme": "string",
  "late_registrations": "confirmation_required",
  "custom_label_note": "string",
  "custom_label_first_name": "string",
  "custom_label_last_name": "string",
  "custom_label_phone": "string",
  "custom_label_email": "string",
  "collect_feedback_start": "2025-05-04T09:42:00Z",
  "iban": "string",
  "swift": "string",
  "color": "string",
  "price": 42.0,
  "registration_fee": 42.0,
  "__calc__fee_cash": 42.0,
  "__calc__fee_online_card": 42.0,
  "__calc__fee_online_transfer": 42.0,
  "replacements_settings": {
    "courses": [],
    "billing_periods": [],
    "places": []
  },
  "replacements_settings_other_companies": {
    "companies": [],
    "billing_periods": [],
    "places": [],
    "schedules": []
  },
  "extra_fields": [
    {
      "id": 42,
      "field_order": 42,
      "course_id": 42,
      "column_name": "dob",
      "name": "string",
      "description": "string",
      "custom_label": "string",
      "active": true,
      "field_options": {
        "age_limit_type": "none",
        "age_limit_units": "years",
        "age_limit_min": 42,
        "age_limit_max": 42,
        "age_limit_use": "both"
      }
    }
  ],
  "feedback_questions": [
    {
      "course_id": 42,
      "company_id": 42,
      "question_id": 42,
      "question_active_during": true,
      "question_active_after": true,
      "is_mandatory": true,
      "name": "string",
      "type": "string"
    }
  ]
}

Update course

PUT /courses/{ID}

Path parameters

  • ID integer Required

    Resource ID

application/json

Body Required

  • registration_type string
  • course_type string
  • description string
  • url string
  • name string
  • custom_label_note string
  • custom_label_first_name string
  • custom_label_last_name string
  • custom_label_phone string
  • custom_label_email string
  • collect_feedback_start string(date-time)
  • waitlist string
  • late_registrations string
  • online_card_provider string
  • online_transfer_provider string
  • online_registration boolean
  • auto_waitlist_notification boolean
  • hide_if_full boolean
  • use_extra_fields boolean
  • feedback_during_course boolean
  • feedback_after_course boolean
  • cash boolean
  • online_card boolean
  • online_transfer boolean
  • fees_included_in_price boolean
  • public boolean
  • archive boolean
  • for_children boolean
  • allow_guest_registration boolean
  • payments_managed_by_buyer boolean
  • allow_reschedule_of_replacements boolean
  • flexible_replacements_limit boolean
  • replacements_limit_per_events integer
  • allow_replacements_from_other_companies boolean
  • payment_schedule_is_mandatory boolean
  • allow_replacements boolean
  • allow_replacements_waitlist boolean
  • allow_custom_replacements boolean
  • custom_email integer

    Custom registration confirmation email ID

  • custom_email_event_notification integer

    Custom event notification email ID

  • allow_replacement_cancellation boolean
  • allow_using_replacement_credits_as_discount boolean
  • auto_approve_custom_replacements boolean
  • upcoming_events_notification boolean
  • event_notfication boolean
  • replacements_settings object
  • replacements_settings_other_companies object
  • hide_before integer
  • replacements_limit integer
  • price integer(float)
  • registration_fee integer(float)
  • iban string
  • color string
  • swift string
  • registration_slots_max integer
  • registration_slots_min integer
  • get_basic_fields_from string

    Values are registrant or all.

  • get_extra_fields_from string

    Values are all or other.

  • extra_fields array[object]
    Hide extra_fields attributes Show extra_fields attributes object
    • id integer

      If submitted - existing field will be updated

    • active boolean
    • custom_label string
    • field_options object
    • course_id integer

      Required if creating new field

    • field_id integer

      Required if creating new field. It's the field id from the definition, not stored instance on course

Responses

  • 200 application/json

    Updated course

    Hide response attributes Show response attributes object
    • company_id string

      ID of company that record belongs to

    • id integer

      Resource ID

    • registration_slots_min integer
    • registration_slots_max integer
    • registration_open boolean
    • show_on_site boolean
    • allow_cancel_until integer
    • replacements_limit integer
    • custom_email integer
    • custom_email_event_notification integer
    • hide_before integer
    • replacements_limit_per_events integer
    • cash boolean
    • online_card boolean
    • online_transfer boolean
    • fees_included_in_price boolean
    • public boolean
    • archive boolean
    • online_registration boolean
    • on_behalf boolean
    • feedback_during_course boolean
    • feedback_after_course boolean
    • hide_if_full boolean
    • allow_replacements boolean
    • allow_custom_replacements boolean
    • auto_approve_custom_replacements boolean
    • allow_replacements_waitlist boolean
    • auto_waitlist_notification boolean
    • use_extra_fields boolean
    • for_children boolean
    • event_notfication boolean
    • allow_registration_after_end boolean
    • allow_replacement_cancellation boolean
    • upcoming_events_notification boolean
    • allow_guest_registration boolean
    • allow_replacements_from_other_companies boolean
    • payment_schedule_is_mandatory boolean
    • allow_using_replacement_credits_as_discount boolean
    • flexible_replacements_limit boolean
    • allow_reschedule_of_replacements boolean
    • payments_managed_by_buyer boolean
    • online_card_provider string

      Values are tatra_banka, tatra_banka_cz, or stripe.

    • online_transfer_provider string

      Value is besteron.

    • created string(date-time)
    • name string
    • url string
    • get_extra_fields_from string

      Extra fields are required for:

      • all: Every person
      • other: Every person but registrant (first person)

      Values are all or other.

    • get_basic_fields_from string

      Basic fields ( First name, last name, email, phone ) are required for:

      • all: Every person
      • registrant: Just first person

      Values are all or registrant.

    • registration_type string

      Values are full2, open, or single.

    • course_type string

      Values are course, event, online_event, or photography.

    • waitlist string

      Values are any or this.

    • description string
    • theme string
    • late_registrations string

      Values are confirmation_required or auto_approve.

    • custom_label_note string
    • custom_label_first_name string
    • custom_label_last_name string
    • custom_label_phone string
    • custom_label_email string
    • collect_feedback_start string(date-time)
    • iban string
    • swift string
    • color string
    • price number(float)
    • registration_fee number(float)
    • __calc__fee_cash number(float)
    • __calc__fee_online_card number(float)
    • __calc__fee_online_transfer number(float)
    • replacements_settings object
      Hide replacements_settings attributes Show replacements_settings attributes object
    • replacements_settings_other_companies object
      Hide replacements_settings_other_companies attributes Show replacements_settings_other_companies attributes object
    • extra_fields array[object]
      Hide extra_fields attributes Show extra_fields attributes object
      • id integer

        Resource ID

      • field_order integer
      • course_id integer

        Resource ID

      • column_name string

        Values are dob, full_name, address, slots, business_name, business_address, business_id, tax_id, vat, identification_number, extra_field_1, extra_field_2, extra_field_3, extra_field_4, or extra_field_5.

      • name string
      • description string
      • custom_label string
      • active boolean
      • field_options object

        Age limit is used with field dob to limit values submitted within this extra field.

        Limit types

        There are three possible types: 1. none - limit is not used 2. date - date range is used for validation. Submitted value must be formated as date string 3. age - age range is used for validation. Submitted value must be formatted as integer

        Limit units

        If limit type is set to age, limit unit describes whether submitted integer is considered to be in years or months

        Limit usage

        Limit usage defines range that is used for validation: 1. both - both minimum limit and maximum limits are used. That means that submitted value must fall between these two values 2. min- only minimum value of limit is used. For example if minimum limit is set to 3 months, then any number equal or larger than 3 will pass the test 3. max- the opposite of minimum value

        Minimum and maximum limit values

        Depending on limit type this can either be a number (in case of age) or date string (in case of date)

        Hide field_options attributes Show field_options attributes object
    • feedback_questions array[object]
      Hide feedback_questions attributes Show feedback_questions attributes object
      • course_id integer

        Resource ID

      • company_id integer

        Resource ID

      • question_id integer

        Resource ID

      • question_active_during boolean
      • question_active_after boolean
      • is_mandatory boolean
      • name string
      • type string
PUT /courses/{ID}
curl \
 --request PUT 'https://api.zooza.app/v1/courses/{ID}' \
 --header "Content-Type: application/json" \
 --data '{"registration_type":"string","course_type":"string","description":"string","url":"string","name":"string","custom_label_note":"string","custom_label_first_name":"string","custom_label_last_name":"string","custom_label_phone":"string","custom_label_email":"string","collect_feedback_start":"2025-05-04T09:42:00Z","waitlist":"string","late_registrations":"string","online_card_provider":"string","online_transfer_provider":"string","online_registration":true,"auto_waitlist_notification":true,"hide_if_full":true,"use_extra_fields":true,"feedback_during_course":true,"feedback_after_course":true,"cash":true,"online_card":true,"online_transfer":true,"fees_included_in_price":true,"public":true,"archive":true,"for_children":true,"allow_guest_registration":true,"payments_managed_by_buyer":true,"allow_reschedule_of_replacements":true,"flexible_replacements_limit":true,"replacements_limit_per_events":42,"allow_replacements_from_other_companies":true,"payment_schedule_is_mandatory":true,"allow_replacements":true,"allow_replacements_waitlist":true,"allow_custom_replacements":true,"custom_email":42,"custom_email_event_notification":42,"allow_replacement_cancellation":true,"allow_using_replacement_credits_as_discount":true,"auto_approve_custom_replacements":true,"upcoming_events_notification":true,"event_notfication":true,"replacements_settings":{},"replacements_settings_other_companies":{},"hide_before":42,"replacements_limit":42,"price":42,"registration_fee":42,"iban":"string","color":"string","swift":"string","registration_slots_max":42,"registration_slots_min":42,"get_basic_fields_from":"registrant","get_extra_fields_from":"all","extra_fields":[{"id":42,"active":true,"custom_label":"string","field_options":{},"course_id":42,"field_id":42}]}'
Request examples
{
  "registration_type": "string",
  "course_type": "string",
  "description": "string",
  "url": "string",
  "name": "string",
  "custom_label_note": "string",
  "custom_label_first_name": "string",
  "custom_label_last_name": "string",
  "custom_label_phone": "string",
  "custom_label_email": "string",
  "collect_feedback_start": "2025-05-04T09:42:00Z",
  "waitlist": "string",
  "late_registrations": "string",
  "online_card_provider": "string",
  "online_transfer_provider": "string",
  "online_registration": true,
  "auto_waitlist_notification": true,
  "hide_if_full": true,
  "use_extra_fields": true,
  "feedback_during_course": true,
  "feedback_after_course": true,
  "cash": true,
  "online_card": true,
  "online_transfer": true,
  "fees_included_in_price": true,
  "public": true,
  "archive": true,
  "for_children": true,
  "allow_guest_registration": true,
  "payments_managed_by_buyer": true,
  "allow_reschedule_of_replacements": true,
  "flexible_replacements_limit": true,
  "replacements_limit_per_events": 42,
  "allow_replacements_from_other_companies": true,
  "payment_schedule_is_mandatory": true,
  "allow_replacements": true,
  "allow_replacements_waitlist": true,
  "allow_custom_replacements": true,
  "custom_email": 42,
  "custom_email_event_notification": 42,
  "allow_replacement_cancellation": true,
  "allow_using_replacement_credits_as_discount": true,
  "auto_approve_custom_replacements": true,
  "upcoming_events_notification": true,
  "event_notfication": true,
  "replacements_settings": {},
  "replacements_settings_other_companies": {},
  "hide_before": 42,
  "replacements_limit": 42,
  "price": 42,
  "registration_fee": 42,
  "iban": "string",
  "color": "string",
  "swift": "string",
  "registration_slots_max": 42,
  "registration_slots_min": 42,
  "get_basic_fields_from": "registrant",
  "get_extra_fields_from": "all",
  "extra_fields": [
    {
      "id": 42,
      "active": true,
      "custom_label": "string",
      "field_options": {},
      "course_id": 42,
      "field_id": 42
    }
  ]
}
Response examples (200)
{
  "company_id": "string",
  "id": 42,
  "registration_slots_min": 42,
  "registration_slots_max": 42,
  "registration_open": true,
  "show_on_site": true,
  "allow_cancel_until": 42,
  "replacements_limit": 42,
  "custom_email": 42,
  "custom_email_event_notification": 42,
  "hide_before": 42,
  "replacements_limit_per_events": 42,
  "cash": true,
  "online_card": true,
  "online_transfer": true,
  "fees_included_in_price": true,
  "public": true,
  "archive": true,
  "online_registration": true,
  "on_behalf": true,
  "feedback_during_course": true,
  "feedback_after_course": true,
  "hide_if_full": true,
  "allow_replacements": true,
  "allow_custom_replacements": true,
  "auto_approve_custom_replacements": true,
  "allow_replacements_waitlist": true,
  "auto_waitlist_notification": true,
  "use_extra_fields": true,
  "for_children": true,
  "event_notfication": true,
  "allow_registration_after_end": true,
  "allow_replacement_cancellation": true,
  "upcoming_events_notification": true,
  "allow_guest_registration": true,
  "allow_replacements_from_other_companies": true,
  "payment_schedule_is_mandatory": true,
  "allow_using_replacement_credits_as_discount": true,
  "flexible_replacements_limit": true,
  "allow_reschedule_of_replacements": true,
  "payments_managed_by_buyer": true,
  "online_card_provider": "tatra_banka",
  "online_transfer_provider": "besteron",
  "created": "2025-05-04T09:42:00Z",
  "name": "string",
  "url": "string",
  "get_extra_fields_from": "all",
  "get_basic_fields_from": "all",
  "registration_type": "full2",
  "course_type": "course",
  "waitlist": "any",
  "description": "string",
  "theme": "string",
  "late_registrations": "confirmation_required",
  "custom_label_note": "string",
  "custom_label_first_name": "string",
  "custom_label_last_name": "string",
  "custom_label_phone": "string",
  "custom_label_email": "string",
  "collect_feedback_start": "2025-05-04T09:42:00Z",
  "iban": "string",
  "swift": "string",
  "color": "string",
  "price": 42.0,
  "registration_fee": 42.0,
  "__calc__fee_cash": 42.0,
  "__calc__fee_online_card": 42.0,
  "__calc__fee_online_transfer": 42.0,
  "replacements_settings": {
    "courses": [],
    "billing_periods": [],
    "places": []
  },
  "replacements_settings_other_companies": {
    "companies": [],
    "billing_periods": [],
    "places": [],
    "schedules": []
  },
  "extra_fields": [
    {
      "id": 42,
      "field_order": 42,
      "course_id": 42,
      "column_name": "dob",
      "name": "string",
      "description": "string",
      "custom_label": "string",
      "active": true,
      "field_options": {
        "age_limit_type": "none",
        "age_limit_units": "years",
        "age_limit_min": 42,
        "age_limit_max": 42,
        "age_limit_use": "both"
      }
    }
  ],
  "feedback_questions": [
    {
      "course_id": 42,
      "company_id": 42,
      "question_id": 42,
      "question_active_during": true,
      "question_active_after": true,
      "is_mandatory": true,
      "name": "string",
      "type": "string"
    }
  ]
}

Customer invoices

Get all customer invoices

GET /customer_invoices

Query parameters

  • order_id integer
  • page_size integer
  • page integer
  • start string(date)
  • end string(date)
  • order_type string

    Values are course or product.

Responses

  • 200 application/json

    Get list of invoices

    Hide response attributes Show response attributes object
    • id integer
    • invoice_no integer
    • order_id integer
    • order_type string

      Values are course or product.

    • company_id integer
    • box_id integer
    • faktury_online_error_code integer
    • faktury_online_code string
    • created string(date-time)
    • updated string(date-time)
    • options object
      Hide options attributes Show options attributes object
      • date string(date)
      • text string

        Text of the item on the invoice

      • payment_method string

        Values are hotovost, prevod, karta, or eprovider.

    • invoice_data object
      Hide invoice_data attributes Show invoice_data attributes object
      • d object

        Supplier information

        Hide d attributes Show d attributes object
        • d_name string
        • d_street string
        • d_city string
        • d_state string
        • d_zip string
        • d_ico string
        • d_dic string
        • d_icdph string
        • d_vatpayer string
        • d_viewpayer string
        • d_iban string
        • d_email string
        • d_web string
        • d_phone string
      • o object

        Buyer information

        Hide o attributes Show o attributes object
        • o_name string
        • o_street string
        • o_email string
        • o_phone string
      • f object

        Invoice information

        Hide f attributes Show f attributes object
        • f_number integer
        • f_vs integer
        • f_qr integer
        • f_payment string
        • f_paid integer(float)
        • f_date_issue string(date)
        • f_date_delivery string(date)
      • p array[object]

        Invoice items

        Hide p attributes Show p attributes object
        • p_text string
        • p_quantity integer
        • p_unit string
        • p_price integer(float)
      • key string
      • email string
GET /customer_invoices
curl \
 --request GET 'https://api.zooza.app/v1/customer_invoices'
Response examples (200)
[
  {
    "id": 42,
    "invoice_no": 42,
    "order_id": 42,
    "order_type": "course",
    "company_id": 42,
    "box_id": 42,
    "faktury_online_error_code": 42,
    "faktury_online_code": "string",
    "created": "2025-05-04T09:42:00Z",
    "updated": "2025-05-04T09:42:00Z",
    "options": {
      "date": "2025-05-04",
      "text": "string",
      "payment_method": "hotovost"
    },
    "invoice_data": {
      "d": {
        "d_name": "string",
        "d_street": "string",
        "d_city": "string",
        "d_state": "string",
        "d_zip": "string",
        "d_ico": "string",
        "d_dic": "string",
        "d_icdph": "string",
        "d_vatpayer": "string",
        "d_viewpayer": "string",
        "d_iban": "string",
        "d_email": "string",
        "d_web": "string",
        "d_phone": "string"
      },
      "o": {
        "o_name": "string",
        "o_street": "string",
        "o_email": "string",
        "o_phone": "string"
      },
      "f": {
        "f_number": 42,
        "f_vs": 42,
        "f_qr": 42,
        "f_payment": "string",
        "f_paid": 42,
        "f_date_issue": "2025-05-04",
        "f_date_delivery": "2025-05-04"
      },
      "p": [
        {
          "p_text": "string",
          "p_quantity": 42,
          "p_unit": "string",
          "p_price": 42
        }
      ],
      "key": "string",
      "email": "string"
    }
  }
]

Create an invoice for customer

POST /customer_invoices
application/json

Body Required

  • order_type string

    Values are course or order.

  • order_id

    Resource ID

  • options array[object]

Responses

  • 200 application/json

    Newly created invoice

    Hide response attributes Show response attributes object
    • id integer
    • invoice_no integer
    • order_id integer
    • order_type string

      Values are course or product.

    • company_id integer
    • box_id integer
    • faktury_online_error_code integer
    • faktury_online_code string
    • created string(date-time)
    • updated string(date-time)
    • options object
      Hide options attributes Show options attributes object
      • date string(date)
      • text string

        Text of the item on the invoice

      • payment_method string

        Values are hotovost, prevod, karta, or eprovider.

    • invoice_data object
      Hide invoice_data attributes Show invoice_data attributes object
      • d object

        Supplier information

        Hide d attributes Show d attributes object
        • d_name string
        • d_street string
        • d_city string
        • d_state string
        • d_zip string
        • d_ico string
        • d_dic string
        • d_icdph string
        • d_vatpayer string
        • d_viewpayer string
        • d_iban string
        • d_email string
        • d_web string
        • d_phone string
      • o object

        Buyer information

        Hide o attributes Show o attributes object
        • o_name string
        • o_street string
        • o_email string
        • o_phone string
      • f object

        Invoice information

        Hide f attributes Show f attributes object
        • f_number integer
        • f_vs integer
        • f_qr integer
        • f_payment string
        • f_paid integer(float)
        • f_date_issue string(date)
        • f_date_delivery string(date)
      • p array[object]

        Invoice items

        Hide p attributes Show p attributes object
        • p_text string
        • p_quantity integer
        • p_unit string
        • p_price integer(float)
      • key string
      • email string
POST /customer_invoices
curl \
 --request POST 'https://api.zooza.app/v1/customer_invoices' \
 --header "Content-Type: application/json" \
 --data '{"order_type":"course","options":[{}]}'
Request examples
{
  "order_type": "course",
  "options": [
    {}
  ]
}
Response examples (200)
{
  "id": 42,
  "invoice_no": 42,
  "order_id": 42,
  "order_type": "course",
  "company_id": 42,
  "box_id": 42,
  "faktury_online_error_code": 42,
  "faktury_online_code": "string",
  "created": "2025-05-04T09:42:00Z",
  "updated": "2025-05-04T09:42:00Z",
  "options": {
    "date": "2025-05-04",
    "text": "string",
    "payment_method": "hotovost"
  },
  "invoice_data": {
    "d": {
      "d_name": "string",
      "d_street": "string",
      "d_city": "string",
      "d_state": "string",
      "d_zip": "string",
      "d_ico": "string",
      "d_dic": "string",
      "d_icdph": "string",
      "d_vatpayer": "string",
      "d_viewpayer": "string",
      "d_iban": "string",
      "d_email": "string",
      "d_web": "string",
      "d_phone": "string"
    },
    "o": {
      "o_name": "string",
      "o_street": "string",
      "o_email": "string",
      "o_phone": "string"
    },
    "f": {
      "f_number": 42,
      "f_vs": 42,
      "f_qr": 42,
      "f_payment": "string",
      "f_paid": 42,
      "f_date_issue": "2025-05-04",
      "f_date_delivery": "2025-05-04"
    },
    "p": [
      {
        "p_text": "string",
        "p_quantity": 42,
        "p_unit": "string",
        "p_price": 42
      }
    ],
    "key": "string",
    "email": "string"
  }
}