Public Data API

WebsiteBuiler: [unresolved]

How to read documentation

this document is a description of a series of json files, every field is defined as name: Type, <general description> <optional set of properties>. any reference to the keyword self in the description should be interpretted as the value of the field defined in the file by the user.

Data types

JSON datatypes

Custom defined

Emum: MetaType

A MetaType is the underlying Type of some custom defined Type, for example, Date is Type with String being its MetaType, but with the additional semantics that it’s a String that holds an ISO 8601 formatted Date.

Enum is a MetaType, that is used to describe other types which are effectively an enum. it’s followed by a set of cases, a case has a name and a type, which is described like other fields. Later in some file, when a field (F) has a type (T), such that T has Enum as its MetaType, F’s type is effectively the type of one of the cases. (note: each case has name and type, but only type is relevent to the actual data files, name is only used for documention purposes. more details on this in the example bellow)

For example, we can define a Type Image that has the MetaType Enum. with cases:

Later we can have a field use this Type as follows:

This field, logo, can either be of the type declared by Image:url or Image:local (also note this is how we can refer to cases by their name in documentation. we can also refer to cases of certain fields, for example logo:url or logo:local). valid examples:

logo: {
    url: "https://example.com/image.png"
}

or

logo: {
    file_path: "./image.png"
}

Note that having both url and file_path in one Dictionary will result in an error.

We can also have a shorthand syntax for “initializing” Types with Enum MetaType for use in documentation, the syntax is T:C(V) for a Type T with MetaType Enum, and case C, and value V. For example, if we want to document that it’s forbidden to set logo to a local image called “forbidden.png”, we can say: “it’s not allowed for logo to be Image:local({file_path: "./forbidden.png"})”.


Properties

By default each property is required, here are the additional properties:

Settings file

Each repository has its own /data/settings.json which could have these fields:

/data/people.json

An array of people, each person has the following:

/data/participations.json

An array of olympiads SIT participated in, each olympiad has the following:

/data/olympiads.json

An array of olympiads SIT participated in, each olympiad has the following:

/data/images.json

These images would be shown in Image libary, shouldn’t have a strict rules about the title/description.

You might check and share image proposals form, which is maintained by the website developers.

An array of images, each image consist of these labels:

/data/contact.json

A dictionary of (developers/maintainers/admin), each having an array of person ID

/data/exams.json

A dictionary of exam IDs in format (exam_2_2025) or similar, where every exam has:

/data/tsts.json

A dictionary of year and olympiad IDs, and every olympiad ID contains:

/data/contact.json

A dictionary with three possible arrays of User ID as a string:

Constant files

These files are needed, but they aren’t database kind.

/data/countries.json

/data/translations.json

A dictionary with its fields being supported languages, currently ar, en.

Each text should be translated in all languages and its accessed in Jekyll liquid using site.data[page.lang].text_name.