MENU navbar-image

Introduction

This documentation provides all the necessary information to work with the organizer API.

The API uses API keys for authentication and supports multiple languages via the X-Language header or the lang query parameter.

You can pass your API key either via the X-API-KEY header or as an api_key query parameter.

With this API, you can fetch ticket data, track sales, and manage your events — quickly and securely.

Authenticating requests

To authenticate requests, include a X-Api-Key header with the value "{YOUR_AUTH_KEY}".

All authenticated endpoints are marked with a requires authentication badge in the documentation below.

You can retrieve your token by visiting your dashboard and clicking Generate API token.

Endpoints

Авторизация организатора через email и password

Example request:
curl --request POST \
    "https://tic.rs/api/organizer/v1/auth/login" \
    --header "Content-Type: application/json" \
    --data "{
    \"email\": \"[email protected]\",
    \"password\": \"+-0pBNvYgxwmi\\/#iw\"
}"
import requests
import json

url = 'https://tic.rs/api/organizer/v1/auth/login'
payload = {
    "email": "[email protected]",
    "password": "+-0pBNvYgxwmi\/#iw"
}
headers = {
  'Content-Type': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()
$client = new \GuzzleHttp\Client();
$url = 'https://tic.rs/api/organizer/v1/auth/login';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
        ],
        'json' => [
            'email' => '[email protected]',
            'password' => '+-0pBNvYgxwmi/#iw',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Request      

POST api/organizer/v1/auth/login

Headers

Content-Type      

Example: application/json

Body Parameters

email   string   

Must be a valid email address. Example: [email protected]

password   string   

Must be at least 6 characters. Example: +-0pBNvYgxwmi/#iw

Получение информации о текущем пользователе

Example request:
curl --request GET \
    --get "https://tic.rs/api/organizer/v1/auth/me"
import requests
import json

url = 'https://tic.rs/api/organizer/v1/auth/me'
response = requests.request('GET', url, )
response.json()
$client = new \GuzzleHttp\Client();
$url = 'https://tic.rs/api/organizer/v1/auth/me';
$response = $client->get($url);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (500):

Show headers
cache-control: no-cache, private
content-type: text/html; charset=UTF-8
x-ratelimit-limit: 60
x-ratelimit-remaining: 59
access-control-allow-origin: *
 


 

Request      

GET api/organizer/v1/auth/me

Выход из системы (инвалидация токена)

Example request:
curl --request POST \
    "https://tic.rs/api/organizer/v1/auth/logout"
import requests
import json

url = 'https://tic.rs/api/organizer/v1/auth/logout'
response = requests.request('POST', url, )
response.json()
$client = new \GuzzleHttp\Client();
$url = 'https://tic.rs/api/organizer/v1/auth/logout';
$response = $client->post($url);
$body = $response->getBody();
print_r(json_decode((string) $body));

Request      

POST api/organizer/v1/auth/logout

Обновление токена

Example request:
curl --request POST \
    "https://tic.rs/api/organizer/v1/auth/refresh"
import requests
import json

url = 'https://tic.rs/api/organizer/v1/auth/refresh'
response = requests.request('POST', url, )
response.json()
$client = new \GuzzleHttp\Client();
$url = 'https://tic.rs/api/organizer/v1/auth/refresh';
$response = $client->post($url);
$body = $response->getBody();
print_r(json_decode((string) $body));

Request      

POST api/organizer/v1/auth/refresh

MediaPartner API

Endpoints for media partners.

Rate limit: 60 requests/minute.

Events

requires authentication

Returns a paginated list of all published events with ticket sales (booking_type_id = 4). Each event object includes basic information, publication status, city, event type, venue, currency, categories, languages, and statistics (number of dates and bookings).

Example request:
curl --request GET \
    --get "https://tic.rs/api/mediapartner/v1/events?page=1&per_page=10&city_id=1&country_code=RS&date_from=2024-01-01&date_to=2024-12-31" \
    --header "X-Api-Key: {YOUR_AUTH_KEY}" \
    --header "X-Language: sr"
import requests
import json

url = 'https://tic.rs/api/mediapartner/v1/events'
params = {
  'page': '1',
  'per_page': '10',
  'city_id': '1',
  'country_code': 'RS',
  'date_from': '2024-01-01',
  'date_to': '2024-12-31',
}
headers = {
  'X-Api-Key': '{YOUR_AUTH_KEY}',
  'X-Language': 'sr'
}

response = requests.request('GET', url, headers=headers, params=params)
response.json()
$client = new \GuzzleHttp\Client();
$url = 'https://tic.rs/api/mediapartner/v1/events';
$response = $client->get(
    $url,
    [
        'headers' => [
            'X-Api-Key' => '{YOUR_AUTH_KEY}',
            'X-Language' => 'sr',
        ],
        'query' => [
            'page' => '1',
            'per_page' => '10',
            'city_id' => '1',
            'country_code' => 'RS',
            'date_from' => '2024-01-01',
            'date_to' => '2024-12-31',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
x-ratelimit-limit: 60
x-ratelimit-remaining: 56
access-control-allow-origin: *
 

{
    "data": [
        {
            "uuid": "qJrNencO",
            "name": "Ruslan Muhtarov. Snimanje stand-up koncerta",
            "description": "Ruslan Muhtarov. Snimanje stand-up koncerta",
            "created_at": "2024-11-08T22:03:37+01:00",
            "updated_at": "2025-05-18T17:47:31+02:00",
            "geo": {
                "city": {
                    "id": 1,
                    "name": "Beograd"
                },
                "country": {
                    "id": 1,
                    "code": "rs",
                    "name": "Srbija"
                },
                "place": {
                    "id": 89,
                    "name": "Prostor Miljenko Dereta",
                    "address": "Добрачина 55, Београд 11000, Сербия",
                    "city_id": 1
                }
            },
            "event_type": {
                "id": null,
                "name": null
            },
            "currency": {
                "id": 1,
                "code": "RSD"
            },
            "is_published": true,
            "organizer_publish_status": true,
            "has_future_dates": false,
            "calendars_count": 2,
            "reservations_count": 52,
            "is_available": true,
            "categories": [
                {
                    "id": 13,
                    "name": "Stand-up"
                },
                {
                    "id": 18,
                    "name": "Koncerti"
                },
                {
                    "id": 29,
                    "name": "Za odrasle"
                },
                {
                    "id": 33,
                    "name": "Zabava"
                }
            ],
            "languages": [
                {
                    "id": 1,
                    "name": "Русский",
                    "code": "ru"
                }
            ],
            "calendar": [
                {
                    "date_start": "2024-12-07T21:00:28+01:00",
                    "date_end": "2024-12-07T22:30:49+01:00",
                    "is_available": true,
                    "tickets": [
                        {
                            "name": " ",
                            "price": 1800,
                            "currency_code": "RSD",
                            "is_available": true
                        }
                    ]
                },
                {
                    "date_start": "2024-12-07T18:30:00+01:00",
                    "date_end": "2024-12-07T20:00:00+01:00",
                    "is_available": false,
                    "tickets": [
                        {
                            "name": " ",
                            "price": 1800,
                            "currency_code": "RSD",
                            "is_available": false
                        }
                    ]
                }
            ],
            "url": {
                "lite": "https://qqxyvuln.tic.rs/sr/qJrNencO?utm_source=mediapartner&utm_medium=api&utm_campaign=event&utm_content=subdomain&utm_term=AbXPw3fr",
                "public": "https://tic.rs/sr/beograd/events/stendap-13/ruslan-mukhtarov-filming-of-a-stand-up-concert-233?utm_source=mediapartner&utm_medium=api&utm_campaign=event&utm_content=public&utm_term=AbXPw3fr"
            }
        }
    ],
    "links": {
        "first": "https://tic.rs/api/mediapartner/v1/events?page=1",
        "last": "https://tic.rs/api/mediapartner/v1/events?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "« Prethodni",
                "active": false
            },
            {
                "url": "https://tic.rs/api/mediapartner/v1/events?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": null,
                "label": "Sledeći »",
                "active": false
            }
        ],
        "path": "https://tic.rs/api/mediapartner/v1/events",
        "per_page": 10,
        "to": 1,
        "total": 1
    }
}
 

Example response (401, Authentication failed):


{
    "message": "Invalid or inactive API key"
}
 

Request      

GET api/mediapartner/v1/events

Headers

X-Api-Key      

Example: {YOUR_AUTH_KEY}

X-Language      

Example: sr

Query Parameters

page   integer  optional  

The page number. Example: 1

per_page   integer  optional  

Number of results per page. Maximum: 50. Example: 10

city_id   integer  optional  

Filter events by city ID. Example: 1

country_code   string  optional  

Filter events by country code (e.g. RS, US, RU). Example: RS

date_from   string  optional  

Filter events by start date (YYYY-MM-DD format). Default: today. Example: 2024-01-01

date_to   string  optional  

Filter events by end date (YYYY-MM-DD format). Default: no limit. Example: 2024-12-31

Response

Response Fields

data   object   
uuid   string   

Unique identifier (UUID) of the event.

name   string   

Name of the event.

description   string   

Description of the event.

created_at   string   

Event creation timestamp (ISO 8601 format).

updated_at   string   

Event last update timestamp (ISO 8601 format).

geo   object   

Geographical information about the event.

city   object   

City where the event takes place.

id   integer   

City ID.

name   string   

City name.

country   object   

Country where the event takes place.

id   integer   

Country ID.

code   string   

Country code (e.g. RS, US, RU).

name   string   

Country name.

place   object   

Venue where the event is held.

id   integer   

Place ID.

name   string   

Place name.

address   string   

Full address of the place.

city_id   integer   

City ID where the place is located.

event_type   object   

Type of the event.

id   integer   

Event type ID.

name   string   

Event type name.

currency   object   

Currency used for ticket sales.

id   integer   

Currency ID.

code   string   

Currency code (e.g. RSD, EUR).

is_published   boolean   

Whether the event is publicly published.

organizer_publish_status   boolean   

Whether the organizer enabled publishing.

has_future_dates   boolean   

Whether the event has any future scheduled dates.

calendars_count   integer   

Number of scheduled dates for the event.

reservations_count   integer   

Number of reservations made for this event.

categories[]   object   

List of categories associated with the event.

categories   object   
id   integer   

Category ID.

name   string   

Category name.

languages[]   object   

List of supported languages for the event.

languages   object   
id   integer   

Language ID.

name   string   

Language name.

code   string   

Language code (e.g. sr, en, ru).

is_available   boolean   

Whether the event has any available tickets.

calendar[]   object   

List of event dates and tickets.

calendar   object   
date_start   string   

Start date and time of the event (ISO 8601 format).

date_end   string   

End date and time of the event (ISO 8601 format).

is_available   boolean   

Whether this date has any available tickets.

tickets[]   object   

List of available tickets for this date.

tickets   object   
name   string   

Ticket category name.

price   integer   

Ticket price in euro cents.

currency_code   string   

Currency code for the ticket price (e.g. RSD, EUR).

is_available   boolean   

Whether this ticket type is available for purchase.

url   object   

URLs for event pages with partner tracking.

subdomain   string   

URL to event page on organizer's subdomain with UTM parameters.

tic_rs   string   

URL to event page on tic.rs with UTM parameters.

Statistics

requires authentication

Returns statistics including unique users, event views, ticket clicks, purchases, and purchase amounts with breakdown by days and events.

Rate limit: 1 request per minute per organizer.

Example request:
curl --request GET \
    --get "https://tic.rs/api/mediapartner/v1/statistics?start_date=2024-01-01&end_date=2024-01-31&event_signature=ABC123&utm_filter=mediapartner" \
    --header "X-Api-Key: {YOUR_AUTH_KEY}" \
    --header "X-Language: sr"
import requests
import json

url = 'https://tic.rs/api/mediapartner/v1/statistics'
params = {
  'start_date': '2024-01-01',
  'end_date': '2024-01-31',
  'event_signature': 'ABC123',
  'utm_filter': 'mediapartner',
}
headers = {
  'X-Api-Key': '{YOUR_AUTH_KEY}',
  'X-Language': 'sr'
}

response = requests.request('GET', url, headers=headers, params=params)
response.json()
$client = new \GuzzleHttp\Client();
$url = 'https://tic.rs/api/mediapartner/v1/statistics';
$response = $client->get(
    $url,
    [
        'headers' => [
            'X-Api-Key' => '{YOUR_AUTH_KEY}',
            'X-Language' => 'sr',
        ],
        'query' => [
            'start_date' => '2024-01-01',
            'end_date' => '2024-01-31',
            'event_signature' => 'ABC123',
            'utm_filter' => 'mediapartner',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
x-ratelimit-limit: 1
x-ratelimit-remaining: 0
x-ratelimit-reset: 1764965975
access-control-allow-origin: *
 

{
    "views": 0,
    "clicks_buy": 0,
    "orders": 0,
    "order_sum": 0,
    "unique_events": 0,
    "daily_breakdown": [],
    "event_breakdown": []
}
 

Example response (401, Authentication failed):


{
    "message": "Invalid or inactive API key"
}
 

Request      

GET api/mediapartner/v1/statistics

Headers

X-Api-Key      

Example: {YOUR_AUTH_KEY}

X-Language      

Example: sr

Query Parameters

start_date   string  optional  

Start date for statistics (YYYY-MM-DD format). Example: 2024-01-01

end_date   string  optional  

End date for statistics (YYYY-MM-DD format). Example: 2024-01-31

event_signature   string  optional  

Filter by specific event signature. Example: ABC123

utm_filter   string  optional  

Filter by UTM parameter value. Example: mediapartner

Response

Response Fields

data   object   

Statistics data.

views   integer   

Number of unique users who viewed events.

clicks   integer   

Number of unique users who clicked "buy ticket".

orders   integer   

Number of unique users who made purchases.

order_sum   number   

Total sum of purchases.

unique_events   integer   

Number of unique events with activity.

daily_breakdown[]   object   

Daily statistics breakdown.

daily_breakdown   object   
date   string   

Date in YYYY-MM-DD format.

views   integer   

Views for this date.

clicks   integer   

Clicks for this date.

orders   integer   

Orders for this date.

order_sum   number   

Order sum for this date.

event_breakdown[]   object   

Event statistics breakdown.

event_breakdown   object   
event_signature   string   

Event signature.

event_name   string   

Event name.

views   integer   

Views for this event.

clicks   integer   

Clicks for this event.

orders   integer   

Orders for this event.

order_sum   number   

Order sum for this event.

Organizer API

Endpoints for organizers.

Rate limit: 60 requests/minute.

Events

requires authentication

Returns a paginated list of events created by the organizer. Each event object includes basic information, publication status, city, event type, venue, currency, categories, languages, and statistics (number of dates and bookings).

Example request:
curl --request GET \
    --get "https://tic.rs/api/organizer/v1/events?page=1&per_page=10&city_id=1" \
    --header "X-Api-Key: {YOUR_AUTH_KEY}" \
    --header "X-Language: sr"
import requests
import json

url = 'https://tic.rs/api/organizer/v1/events'
params = {
  'page': '1',
  'per_page': '10',
  'city_id': '1',
}
headers = {
  'X-Api-Key': '{YOUR_AUTH_KEY}',
  'X-Language': 'sr'
}

response = requests.request('GET', url, headers=headers, params=params)
response.json()
$client = new \GuzzleHttp\Client();
$url = 'https://tic.rs/api/organizer/v1/events';
$response = $client->get(
    $url,
    [
        'headers' => [
            'X-Api-Key' => '{YOUR_AUTH_KEY}',
            'X-Language' => 'sr',
        ],
        'query' => [
            'page' => '1',
            'per_page' => '10',
            'city_id' => '1',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
x-ratelimit-limit: 60
x-ratelimit-remaining: 58
access-control-allow-origin: *
 

{
    "data": [
        {
            "uuid": "WPWLVQ",
            "name": "Odit et.",
            "created_at": "2025-12-05T11:53:07+01:00",
            "updated_at": "2025-12-05T12:07:21+01:00",
            "city": {
                "id": 1,
                "name": "Beograd"
            },
            "event_type": {
                "id": 153,
                "name": "Sastanak zajednice"
            },
            "currency": {
                "id": 1,
                "code": "RSD"
            },
            "place": {
                "id": 2,
                "name": "Ben Akiba",
                "address": "Браће Крсмановић 6, Београд 11000, Сербия"
            },
            "is_published": true,
            "organizer_publish_status": true,
            "has_future_dates": true,
            "calendars_count": 1,
            "reservations_count": 3,
            "categories": [
                {
                    "id": 39,
                    "name": "Sastanci"
                }
            ],
            "languages": [
                {
                    "id": 1,
                    "name": "Русский"
                }
            ]
        },
        {
            "uuid": "TCPSCQLD",
            "name": "Enim non facere tempora.",
            "created_at": "2025-11-13T23:25:05+01:00",
            "updated_at": "2025-11-13T23:25:17+01:00",
            "city": {
                "id": 1,
                "name": "Beograd"
            },
            "event_type": {
                "id": 2,
                "name": "Koncert"
            },
            "currency": {
                "id": 1,
                "code": "RSD"
            },
            "place": {
                "id": 58,
                "name": "Фонтан у гостиницы Москва",
                "address": "Теразијска чесма, Теразије, Београд 11000, Сербия"
            },
            "is_published": false,
            "organizer_publish_status": false,
            "has_future_dates": false,
            "calendars_count": 0,
            "reservations_count": 0,
            "categories": [
                {
                    "id": 18,
                    "name": "Koncerti"
                }
            ],
            "languages": [
                {
                    "id": 5,
                    "name": "Türkçe"
                }
            ]
        },
        {
            "uuid": "UJWVLXJ",
            "name": "Distinctio eum doloremque id aut.",
            "created_at": "2025-11-13T22:32:19+01:00",
            "updated_at": "2025-11-13T22:32:30+01:00",
            "city": {
                "id": 1,
                "name": "Beograd"
            },
            "event_type": {
                "id": 2,
                "name": "Koncert"
            },
            "currency": {
                "id": 1,
                "code": "RSD"
            },
            "place": {
                "id": 58,
                "name": "Фонтан у гостиницы Москва",
                "address": "Теразијска чесма, Теразије, Београд 11000, Сербия"
            },
            "is_published": false,
            "organizer_publish_status": false,
            "has_future_dates": false,
            "calendars_count": 0,
            "reservations_count": 0,
            "categories": [
                {
                    "id": 18,
                    "name": "Koncerti"
                }
            ],
            "languages": [
                {
                    "id": 5,
                    "name": "Türkçe"
                }
            ]
        },
        {
            "uuid": "BEWTNNO",
            "name": "Quia officia est.",
            "created_at": "2025-11-13T22:32:00+01:00",
            "updated_at": "2025-11-13T22:32:12+01:00",
            "city": {
                "id": 1,
                "name": "Beograd"
            },
            "event_type": {
                "id": 2,
                "name": "Koncert"
            },
            "currency": {
                "id": 1,
                "code": "RSD"
            },
            "place": {
                "id": 58,
                "name": "Фонтан у гостиницы Москва",
                "address": "Теразијска чесма, Теразије, Београд 11000, Сербия"
            },
            "is_published": false,
            "organizer_publish_status": false,
            "has_future_dates": false,
            "calendars_count": 0,
            "reservations_count": 0,
            "categories": [
                {
                    "id": 18,
                    "name": "Koncerti"
                }
            ],
            "languages": [
                {
                    "id": 5,
                    "name": "Türkçe"
                }
            ]
        },
        {
            "uuid": "NTLTCVIP",
            "name": "Repudiandae laboriosam est.",
            "created_at": "2025-11-13T22:30:05+01:00",
            "updated_at": "2025-11-13T22:30:26+01:00",
            "city": {
                "id": 1,
                "name": "Beograd"
            },
            "event_type": {
                "id": 2,
                "name": "Koncert"
            },
            "currency": {
                "id": 1,
                "code": "RSD"
            },
            "place": {
                "id": 58,
                "name": "Фонтан у гостиницы Москва",
                "address": "Теразијска чесма, Теразије, Београд 11000, Сербия"
            },
            "is_published": false,
            "organizer_publish_status": false,
            "has_future_dates": false,
            "calendars_count": 0,
            "reservations_count": 0,
            "categories": [
                {
                    "id": 18,
                    "name": "Koncerti"
                }
            ],
            "languages": [
                {
                    "id": 5,
                    "name": "Türkçe"
                }
            ]
        },
        {
            "uuid": "SGIOGL",
            "name": "Recusandae modi rerum ex.",
            "created_at": "2025-11-13T22:24:03+01:00",
            "updated_at": "2025-11-13T22:24:17+01:00",
            "city": {
                "id": 1,
                "name": "Beograd"
            },
            "event_type": {
                "id": 2,
                "name": "Koncert"
            },
            "currency": {
                "id": 1,
                "code": "RSD"
            },
            "place": {
                "id": 58,
                "name": "Фонтан у гостиницы Москва",
                "address": "Теразијска чесма, Теразије, Београд 11000, Сербия"
            },
            "is_published": false,
            "organizer_publish_status": false,
            "has_future_dates": false,
            "calendars_count": 0,
            "reservations_count": 0,
            "categories": [
                {
                    "id": 18,
                    "name": "Koncerti"
                }
            ],
            "languages": [
                {
                    "id": 5,
                    "name": "Türkçe"
                }
            ]
        },
        {
            "uuid": "RZYHCT",
            "name": "Deserunt ducimus corrupti et.",
            "created_at": "2025-11-13T22:21:26+01:00",
            "updated_at": "2025-11-13T22:25:05+01:00",
            "city": {
                "id": 1,
                "name": "Beograd"
            },
            "event_type": {
                "id": 2,
                "name": "Koncert"
            },
            "currency": {
                "id": 1,
                "code": "RSD"
            },
            "place": {
                "id": 58,
                "name": "Фонтан у гостиницы Москва",
                "address": "Теразијска чесма, Теразије, Београд 11000, Сербия"
            },
            "is_published": false,
            "organizer_publish_status": false,
            "has_future_dates": false,
            "calendars_count": 0,
            "reservations_count": 0,
            "categories": [
                {
                    "id": 18,
                    "name": "Koncerti"
                }
            ],
            "languages": [
                {
                    "id": 5,
                    "name": "Türkçe"
                }
            ]
        },
        {
            "uuid": "FTMGOS",
            "name": "Corporis nesciunt ut ratione.",
            "created_at": "2025-11-13T22:18:26+01:00",
            "updated_at": "2025-11-13T22:25:00+01:00",
            "city": {
                "id": 1,
                "name": "Beograd"
            },
            "event_type": {
                "id": 2,
                "name": "Koncert"
            },
            "currency": {
                "id": 1,
                "code": "RSD"
            },
            "place": {
                "id": 58,
                "name": "Фонтан у гостиницы Москва",
                "address": "Теразијска чесма, Теразије, Београд 11000, Сербия"
            },
            "is_published": false,
            "organizer_publish_status": false,
            "has_future_dates": false,
            "calendars_count": 0,
            "reservations_count": 0,
            "categories": [
                {
                    "id": 18,
                    "name": "Koncerti"
                }
            ],
            "languages": [
                {
                    "id": 5,
                    "name": "Türkçe"
                }
            ]
        },
        {
            "uuid": "BMZEZC",
            "name": "Aut molestiae sunt.",
            "created_at": "2025-11-13T22:17:02+01:00",
            "updated_at": "2025-11-13T22:24:48+01:00",
            "city": {
                "id": 1,
                "name": "Beograd"
            },
            "event_type": {
                "id": 2,
                "name": "Koncert"
            },
            "currency": {
                "id": 1,
                "code": "RSD"
            },
            "place": {
                "id": 58,
                "name": "Фонтан у гостиницы Москва",
                "address": "Теразијска чесма, Теразије, Београд 11000, Сербия"
            },
            "is_published": false,
            "organizer_publish_status": false,
            "has_future_dates": false,
            "calendars_count": 0,
            "reservations_count": 0,
            "categories": [
                {
                    "id": 18,
                    "name": "Koncerti"
                }
            ],
            "languages": [
                {
                    "id": 5,
                    "name": "Türkçe"
                }
            ]
        },
        {
            "uuid": "EXQZTPPI",
            "name": "Et ipsam dolorem et.",
            "created_at": "2025-11-13T22:13:25+01:00",
            "updated_at": "2025-11-14T17:08:27+01:00",
            "city": {
                "id": 1,
                "name": "Beograd"
            },
            "event_type": {
                "id": 2,
                "name": "Koncert"
            },
            "currency": {
                "id": 1,
                "code": "RSD"
            },
            "place": {
                "id": 565,
                "name": "Парк републике Српске",
                "address": "Парк републике Српске, Бродарска 28, Београд, Сербия"
            },
            "is_published": false,
            "organizer_publish_status": false,
            "has_future_dates": false,
            "calendars_count": 2,
            "reservations_count": 0,
            "categories": [
                {
                    "id": 18,
                    "name": "Koncerti"
                }
            ],
            "languages": [
                {
                    "id": 5,
                    "name": "Türkçe"
                }
            ]
        }
    ],
    "links": {
        "first": "https://tic.rs/api/organizer/v1/events?page=1",
        "last": "https://tic.rs/api/organizer/v1/events?page=4",
        "prev": null,
        "next": "https://tic.rs/api/organizer/v1/events?page=2"
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 4,
        "links": [
            {
                "url": null,
                "label": "« Prethodni",
                "active": false
            },
            {
                "url": "https://tic.rs/api/organizer/v1/events?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": "https://tic.rs/api/organizer/v1/events?page=2",
                "label": "2",
                "active": false
            },
            {
                "url": "https://tic.rs/api/organizer/v1/events?page=3",
                "label": "3",
                "active": false
            },
            {
                "url": "https://tic.rs/api/organizer/v1/events?page=4",
                "label": "4",
                "active": false
            },
            {
                "url": "https://tic.rs/api/organizer/v1/events?page=2",
                "label": "Sledeći »",
                "active": false
            }
        ],
        "path": "https://tic.rs/api/organizer/v1/events",
        "per_page": 10,
        "to": 10,
        "total": 32
    }
}
 

Example response (401, Authentication failed):


{
    "message": "Invalid or inactive API key"
}
 

Request      

GET api/organizer/v1/events

Headers

X-Api-Key      

Example: {YOUR_AUTH_KEY}

X-Language      

Example: sr

Query Parameters

page   integer  optional  

The page number. Example: 1

per_page   integer  optional  

Number of results per page. Maximum: 50. Example: 10

city_id   integer  optional  

Filter events by city ID. Example: 1

Response

Response Fields

data   object   
uuid   string   

Unique identifier (UUID) of the event.

name   string   

Name of the event.

created_at   string   

Event creation timestamp (ISO 8601 format).

updated_at   string   

Event last update timestamp (ISO 8601 format).

city   object   

City where the event takes place.

id   integer   

City ID.

name   string   

City name.

event_type   object   

Type of the event.

id   integer   

Event type ID.

name   string   

Event type name.

currency   object   

Currency used for ticket sales.

id   integer   

Currency ID.

code   string   

Currency code (e.g. RSD, EUR).

place   object   

Venue where the event is held.

id   integer   

Place ID.

name   string   

Place name.

address   string   

Full address of the place.

is_published   boolean   

Whether the event is publicly published.

organizer_publish_status   boolean   

Whether the organizer enabled publishing.

has_future_dates   boolean   

Whether the event has any future scheduled dates.

calendars_count   integer   

Number of scheduled dates for the event.

reservations_count   integer   

Number of reservations made for this event.

categories[]   object   

List of categories associated with the event.

categories   object   
id   integer   

Category ID.

name   string   

Category name.

languages[]   object   

List of supported languages for the event.

languages   object   
id   integer   

Language ID.

name   string   

Language name.

Tickets

requires authentication

Returns a paginated list of all tickets purchased for the organizer's events. Each ticket includes detailed buyer information (full name, email, phone), ticket type, event name and date, applied promo code, price paid, and currency.

Example request:
curl --request GET \
    --get "https://tic.rs/api/organizer/v1/tickets?page=1&per_page=10&event_uuid=" \
    --header "X-Api-Key: {YOUR_AUTH_KEY}" \
    --header "X-Language: sr"
import requests
import json

url = 'https://tic.rs/api/organizer/v1/tickets'
params = {
  'page': '1',
  'per_page': '10',
  'event_uuid': '',
}
headers = {
  'X-Api-Key': '{YOUR_AUTH_KEY}',
  'X-Language': 'sr'
}

response = requests.request('GET', url, headers=headers, params=params)
response.json()
$client = new \GuzzleHttp\Client();
$url = 'https://tic.rs/api/organizer/v1/tickets';
$response = $client->get(
    $url,
    [
        'headers' => [
            'X-Api-Key' => '{YOUR_AUTH_KEY}',
            'X-Language' => 'sr',
        ],
        'query' => [
            'page' => '1',
            'per_page' => '10',
            'event_uuid' => '',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
x-ratelimit-limit: 60
x-ratelimit-remaining: 57
access-control-allow-origin: *
 

{
    "data": [
        {
            "purchase_date": "2025-12-05T21:15:23+01:00",
            "event": {
                "uuid": "WPWLVQ",
                "name": "Quis adipisci molestias fugit.",
                "date": "2026-08-30T17:00:00+02:00"
            },
            "customer": {
                "name": "Alanis McLaughlin",
                "email": "[email protected]",
                "phone": "+14303747043"
            },
            "promocode": null,
            "price_paid": {
                "amount": 867.62,
                "currency": {
                    "id": 1,
                    "code": "RSD"
                }
            },
            "utm": {
                "source": null,
                "medium": null,
                "campaign": null,
                "content": null,
                "term": null
            },
            "info": {
                "device_type": "desktop",
                "interface_language": "ru",
                "country_code": "DE"
            }
        },
        {
            "purchase_date": "2025-12-05T14:18:03+01:00",
            "event": {
                "uuid": "LQPPWQBE",
                "name": "Voluptate accusamus ut.",
                "date": "2027-01-31T10:00:00+01:00"
            },
            "customer": {
                "name": "Bridget Schaden",
                "email": "[email protected]",
                "phone": "+13806988637"
            },
            "promocode": "SAUS",
            "price_paid": {
                "amount": 837.87,
                "currency": {
                    "id": 1,
                    "code": "RSD"
                }
            },
            "utm": {
                "source": null,
                "medium": null,
                "campaign": null,
                "content": null,
                "term": null
            },
            "info": {
                "device_type": "desktop",
                "interface_language": "ru",
                "country_code": ""
            }
        },
        {
            "purchase_date": "2025-12-05T14:15:36+01:00",
            "event": {
                "uuid": "BCHGSRZ",
                "name": "Ratione iure impedit.",
                "date": "2027-01-31T10:00:00+01:00"
            },
            "customer": {
                "name": "Zachery Fadel",
                "email": "[email protected]",
                "phone": "+16824842226"
            },
            "promocode": null,
            "price_paid": {
                "amount": 588.09,
                "currency": {
                    "id": 1,
                    "code": "RSD"
                }
            },
            "utm": {
                "source": null,
                "medium": null,
                "campaign": null,
                "content": null,
                "term": null
            },
            "info": {
                "device_type": "desktop",
                "interface_language": "ru",
                "country_code": ""
            }
        },
        {
            "purchase_date": "2025-12-05T12:08:33+01:00",
            "event": {
                "uuid": "ZEZCRCVA",
                "name": "Alias ratione dolores.",
                "date": "2027-01-31T10:00:00+01:00"
            },
            "customer": {
                "name": "Dr. Lucie Bauch",
                "email": "[email protected]",
                "phone": "+19407091074"
            },
            "promocode": "QZIQ",
            "price_paid": {
                "amount": 981.34,
                "currency": {
                    "id": 1,
                    "code": "RSD"
                }
            },
            "utm": {
                "source": null,
                "medium": null,
                "campaign": null,
                "content": null,
                "term": null
            },
            "info": {
                "device_type": "desktop",
                "interface_language": "ru",
                "country_code": "DE"
            }
        },
        {
            "purchase_date": "2025-12-05T10:59:31+01:00",
            "event": {
                "uuid": "OLKGSSAA",
                "name": "Ut dolores omnis.",
                "date": "2026-01-31T15:00:00+01:00"
            },
            "customer": {
                "name": "Briana Konopelski",
                "email": "[email protected]",
                "phone": "+15418676967"
            },
            "promocode": null,
            "price_paid": {
                "amount": 15.07,
                "currency": {
                    "id": 1,
                    "code": "RSD"
                }
            },
            "utm": {
                "source": null,
                "medium": null,
                "campaign": null,
                "content": null,
                "term": null
            },
            "info": {
                "device_type": "desktop",
                "interface_language": "ru",
                "country_code": "VN"
            }
        },
        {
            "purchase_date": "2025-12-05T10:57:37+01:00",
            "event": {
                "uuid": "NADSMR",
                "name": "Odio dolorum voluptates.",
                "date": "2026-08-30T17:00:00+02:00"
            },
            "customer": {
                "name": "Christian Klocko PhD",
                "email": "[email protected]",
                "phone": "+17793152713"
            },
            "promocode": "PVFAYB",
            "price_paid": {
                "amount": 234.46,
                "currency": {
                    "id": 1,
                    "code": "RSD"
                }
            },
            "utm": {
                "source": null,
                "medium": null,
                "campaign": null,
                "content": null,
                "term": null
            },
            "info": {
                "device_type": "desktop",
                "interface_language": "ru",
                "country_code": "VN"
            }
        },
        {
            "purchase_date": "2025-12-03T06:39:09+01:00",
            "event": {
                "uuid": "QOEZONY",
                "name": "Harum minus nostrum ipsa.",
                "date": "2026-08-30T17:00:00+02:00"
            },
            "customer": {
                "name": "Zachary Zulauf",
                "email": "[email protected]",
                "phone": "+18186331713"
            },
            "promocode": "QNFSRK",
            "price_paid": {
                "amount": 352.67,
                "currency": {
                    "id": 1,
                    "code": "RSD"
                }
            },
            "utm": {
                "source": null,
                "medium": null,
                "campaign": null,
                "content": null,
                "term": null
            },
            "info": {
                "device_type": "desktop",
                "interface_language": "ru",
                "country_code": ""
            }
        },
        {
            "purchase_date": "2025-12-03T06:18:33+01:00",
            "event": {
                "uuid": "RKTYIIXX",
                "name": "Sequi saepe doloribus.",
                "date": "2026-08-30T17:00:00+02:00"
            },
            "customer": {
                "name": "Mrs. Corine Ledner",
                "email": "[email protected]",
                "phone": "+14139890509"
            },
            "promocode": "VCUPH",
            "price_paid": {
                "amount": 369.95,
                "currency": {
                    "id": 1,
                    "code": "RSD"
                }
            },
            "utm": {
                "source": null,
                "medium": null,
                "campaign": null,
                "content": null,
                "term": null
            },
            "info": {
                "device_type": "desktop",
                "interface_language": "ru",
                "country_code": "RS"
            }
        },
        {
            "purchase_date": "2025-12-03T06:16:16+01:00",
            "event": {
                "uuid": "UAVPADB",
                "name": "Sed sed in.",
                "date": "2026-08-30T17:00:00+02:00"
            },
            "customer": {
                "name": "Lewis Lubowitz",
                "email": "[email protected]",
                "phone": "+19546240479"
            },
            "promocode": "XHAAKFDL",
            "price_paid": {
                "amount": 37.15,
                "currency": {
                    "id": 1,
                    "code": "RSD"
                }
            },
            "utm": {
                "source": null,
                "medium": null,
                "campaign": null,
                "content": null,
                "term": null
            },
            "info": {
                "device_type": "desktop",
                "interface_language": "ru",
                "country_code": "RS"
            }
        },
        {
            "purchase_date": "2025-12-02T08:12:41+01:00",
            "event": {
                "uuid": "DHWNPB",
                "name": "Et sit doloribus.",
                "date": "2026-08-30T17:00:00+02:00"
            },
            "customer": {
                "name": "Khalid Hagenes",
                "email": "[email protected]",
                "phone": "+17254539644"
            },
            "promocode": null,
            "price_paid": {
                "amount": 288.94,
                "currency": {
                    "id": 1,
                    "code": "RSD"
                }
            },
            "utm": {
                "source": null,
                "medium": null,
                "campaign": null,
                "content": null,
                "term": null
            },
            "info": {
                "device_type": "desktop",
                "interface_language": "ru",
                "country_code": "DE"
            }
        }
    ],
    "links": {
        "first": "https://tic.rs/api/organizer/v1/tickets?page=1",
        "last": "https://tic.rs/api/organizer/v1/tickets?page=20",
        "prev": null,
        "next": "https://tic.rs/api/organizer/v1/tickets?page=2"
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 20,
        "links": [
            {
                "url": null,
                "label": "« Prethodni",
                "active": false
            },
            {
                "url": "https://tic.rs/api/organizer/v1/tickets?page=1",
                "label": "1",
                "active": true
            },
            {
                "url": "https://tic.rs/api/organizer/v1/tickets?page=2",
                "label": "2",
                "active": false
            },
            {
                "url": "https://tic.rs/api/organizer/v1/tickets?page=3",
                "label": "3",
                "active": false
            },
            {
                "url": "https://tic.rs/api/organizer/v1/tickets?page=4",
                "label": "4",
                "active": false
            },
            {
                "url": "https://tic.rs/api/organizer/v1/tickets?page=5",
                "label": "5",
                "active": false
            },
            {
                "url": "https://tic.rs/api/organizer/v1/tickets?page=6",
                "label": "6",
                "active": false
            },
            {
                "url": "https://tic.rs/api/organizer/v1/tickets?page=7",
                "label": "7",
                "active": false
            },
            {
                "url": "https://tic.rs/api/organizer/v1/tickets?page=8",
                "label": "8",
                "active": false
            },
            {
                "url": "https://tic.rs/api/organizer/v1/tickets?page=9",
                "label": "9",
                "active": false
            },
            {
                "url": "https://tic.rs/api/organizer/v1/tickets?page=10",
                "label": "10",
                "active": false
            },
            {
                "url": null,
                "label": "...",
                "active": false
            },
            {
                "url": "https://tic.rs/api/organizer/v1/tickets?page=19",
                "label": "19",
                "active": false
            },
            {
                "url": "https://tic.rs/api/organizer/v1/tickets?page=20",
                "label": "20",
                "active": false
            },
            {
                "url": "https://tic.rs/api/organizer/v1/tickets?page=2",
                "label": "Sledeći »",
                "active": false
            }
        ],
        "path": "https://tic.rs/api/organizer/v1/tickets",
        "per_page": 10,
        "to": 10,
        "total": 194
    }
}
 

Example response (401, Authentication failed):


{
    "message": "Invalid or inactive API key"
}
 

Request      

GET api/organizer/v1/tickets

Headers

X-Api-Key      

Example: {YOUR_AUTH_KEY}

X-Language      

Example: sr

Query Parameters

page   integer  optional  

The page number. Example: 1

per_page   integer  optional  

Number of results per page. Maximum: 50. Example: 10

event_uuid   string  optional  

The UUID of the event, obtained from the event list response.

Response

Response Fields

data   object   
purchase_date   string   

Date and time when the ticket was purchased (ISO 8601 format).

event   object   
uuid   string   

Unique identifier (UUID) of the event.

name   string   

Name of the event.

date   string   

Date and time when the event is scheduled (ISO 8601 format).

customer   object   
name   string   

Full name of the ticket buyer.

phone   string   

Phone number of the buyer.

email   string   

Email address of the buyer.

promocode   string|null   

Applied promo code, if any.

price_paid   object   
amount   number   

Total amount paid for the ticket.

currency   object   
id   integer   

Currency ID used in the transaction.

code   string   

Currency code (e.g. RSD, EUR).

utm   object   
source   string|null   

UTM source if tracked.

medium   string|null   

UTM medium if tracked.

campaign   string|null   

UTM campaign if tracked.

content   string|null   

UTM content if tracked.

term   string|null   

UTM term if tracked.

info   object   
device_type   string   

Device type used to make the order (mobile, desktop).

interface_language   string   

Interface language of the buyer (e.g. ru, en).

country_code   string   

ISO 3166-1 alpha-2 country code (e.g. RS, RU).

links   object   
first   string   

URL to the first page of results.

last   string   

URL to the last page of results.

prev   string|null   

URL to the previous page, or null.

next   string|null   

URL to the next page, or null.

meta   object   
current_page   integer   

Current page number.

from   integer   

Index of the first item on the current page.

last_page   integer   

Total number of pages.

links   object   
url   string|null   

URL for the pagination link.

label   string   

Label for the pagination link.

active   boolean   

Whether the page is currently active.

path   string   

Base URL of the paginated resource.

per_page   integer   

Number of items per page.

to   integer   

Index of the last item on the current page.

total   integer   

Total number of items across all pages.

Payment API

Organizer server API for creating and managing orders, viewing transactions, and initiating refund requests.

Rate limit: 60 requests/minute.

Orders

requires authentication

Returns a paginated list of orders created by the organizer. Each order object includes basic information, status, total amount and currency.

Example request:
curl --request GET \
    --get "https://tic.rs/api/payment/v1/orders?page=1&per_page=20&search=123&status=2&sort_by=created_at&sort_dir=desc" \
    --header "X-Api-Key: {YOUR_AUTH_KEY}" \
    --header "X-Language: sr Language code (sr/en/ru). Example: sr"
import requests
import json

url = 'https://tic.rs/api/payment/v1/orders'
params = {
  'page': '1',
  'per_page': '20',
  'search': '123',
  'status': '2',
  'sort_by': 'created_at',
  'sort_dir': 'desc',
}
headers = {
  'X-Api-Key': '{YOUR_AUTH_KEY}',
  'X-Language': 'sr Language code (sr/en/ru). Example: sr'
}

response = requests.request('GET', url, headers=headers, params=params)
response.json()
$client = new \GuzzleHttp\Client();
$url = 'https://tic.rs/api/payment/v1/orders';
$response = $client->get(
    $url,
    [
        'headers' => [
            'X-Api-Key' => '{YOUR_AUTH_KEY}',
            'X-Language' => 'sr Language code (sr/en/ru). Example: sr',
        ],
        'query' => [
            'page' => '1',
            'per_page' => '20',
            'search' => '123',
            'status' => '2',
            'sort_by' => 'created_at',
            'sort_dir' => 'desc',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
x-ratelimit-limit: 60
x-ratelimit-remaining: 54
access-control-allow-origin: *
 

{
    "data": [
        {
            "number": "AYM-0579",
            "signature": "f8c4c400-8d1b-484a-ab4a-dcff71625530",
            "created_at": "2025-11-05T17:34:14.000000Z",
            "status_id": 2,
            "status": "Оплачен",
            "amount_total": 101,
            "currency": "RSD",
            "public_token": "5njMTKyO"
        }
    ],
    "total": 1,
    "current_page": 1,
    "per_page": 20
}
 

Request      

GET api/payment/v1/orders

Headers

X-Api-Key      

Example: {YOUR_AUTH_KEY}

X-Language      

Example: sr Language code (sr/en/ru). Example: sr

Query Parameters

page   integer  optional  

The page number. Example: 1

per_page   integer  optional  

Number of results per page. Maximum: 100. Example: 20

search   string  optional  

Search by number, customer name/email/phone, signature or public_token. Example: 123

status   integer  optional  

Filter orders by status ID. Example: 2

sort_by   string  optional  

Sort field (created_at, number, status_id). Default: created_at. Example: created_at

sort_dir   string  optional  

Sort direction (asc, desc). Default: desc. Example: desc

Response

Response Fields

data   object   
number   string   

Order number

signature   string   

Unique signature

created_at   string   

Creation timestamp (ISO 8601)

status_id   integer   

Status ID

status   string   

Status name

amount_total   number   

Total amount

currency   string   

Currency code (e.g. RSD, EUR)

public_token   string   

Public token for public links

total   integer   

Total records

current_page   integer   

Current page number

per_page   integer   

Items per page

Create order

requires authentication

Creates an order with provided items. Supported item types: event, unpublished_ticket, service, product. You can specify service/delivery/event dates when applicable. Currency code may be provided; defaults to RSD.

Example request:
curl --request POST \
    "https://tic.rs/api/payment/v1/orders" \
    --header "X-Api-Key: {YOUR_AUTH_KEY}" \
    --header "X-Language: sr Language code (sr/en/ru). Example: sr" \
    --header "Content-Type: application/json" \
    --data "{
    \"customer\": {
        \"name\": \"Ivan Ivanov\",
        \"email\": \"[email protected]\",
        \"phone\": \"+381600000000\"
    },
    \"items\": [
        \"architecto\"
    ],
    \"currency\": \"EUR\",
    \"success_url\": \"https:\\/\\/example.com\\/success\",
    \"fail_url\": \"https:\\/\\/example.com\\/fail\"
}"
import requests
import json

url = 'https://tic.rs/api/payment/v1/orders'
payload = {
    "customer": {
        "name": "Ivan Ivanov",
        "email": "[email protected]",
        "phone": "+381600000000"
    },
    "items": [
        "architecto"
    ],
    "currency": "EUR",
    "success_url": "https:\/\/example.com\/success",
    "fail_url": "https:\/\/example.com\/fail"
}
headers = {
  'X-Api-Key': '{YOUR_AUTH_KEY}',
  'X-Language': 'sr Language code (sr/en/ru). Example: sr',
  'Content-Type': 'application/json'
}

response = requests.request('POST', url, headers=headers, json=payload)
response.json()
$client = new \GuzzleHttp\Client();
$url = 'https://tic.rs/api/payment/v1/orders';
$response = $client->post(
    $url,
    [
        'headers' => [
            'X-Api-Key' => '{YOUR_AUTH_KEY}',
            'X-Language' => 'sr Language code (sr/en/ru). Example: sr',
            'Content-Type' => 'application/json',
        ],
        'json' => [
            'customer' => [
                'name' => 'Ivan Ivanov',
                'email' => '[email protected]',
                'phone' => '+381600000000',
            ],
            'items' => [
                'architecto',
            ],
            'currency' => 'EUR',
            'success_url' => 'https://example.com/success',
            'fail_url' => 'https://example.com/fail',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Request      

POST api/payment/v1/orders

Headers

X-Api-Key      

Example: {YOUR_AUTH_KEY}

X-Language      

Example: sr Language code (sr/en/ru). Example: sr

Content-Type      

Example: application/json

Body Parameters

customer   object  optional  
name   string  optional  

nullable Customer name. Example: Ivan Ivanov

email   string  optional  

nullable Customer email. Example: [email protected]

phone   string  optional  

nullable Customer phone. Example: +381600000000

items   string[]   

List of items.

type   string   

Item type: event, unpublished_ticket, service, product. Example: service

name   string  optional  

required_unless:items[].type,event Item name for non-event items. Example: Cleaning service

amount   number   

Item unit amount. Example: 49.99

quantity   integer   

Quantity. Example: 2

event_id   integer  optional  

required_if:items[].type,event EventCalendar ID for event items. Example: 123

ticket_id   integer  optional  

The EventCalendar ID if needed by integration. Example: 123

event_date   date  optional  

nullable Date for unpublished_ticket. Example: 2025-12-31

service_date   date  optional  

nullable Date for service. Example: 2025-11-01

delivery_date   date  optional  

nullable Date for product delivery. Example: 2025-11-10

currency   string  optional  

nullable Currency code (ISO 4217). Example: EUR

success_url   string  optional  

nullable URL to redirect the customer after successful payment. Example: https://example.com/success

fail_url   string  optional  

nullable URL to redirect the customer after failed/cancelled payment. Example: https://example.com/fail

Response

Response Fields

data   object   
number   string   

Order number

signature   string   

Order signature

public_token   string   

Public token

payment_url   string   

Payment URL to start checkout

Show order by signature

requires authentication

Returns full order information by unique signature, including items and transactions.

Example request:
curl --request GET \
    --get "https://tic.rs/api/payment/v1/orders/8b266d05a4aab061e6febf6d3c0ee6d7" \
    --header "X-Api-Key: {YOUR_AUTH_KEY}" \
    --header "X-Language: sr Language code (sr/en/ru). Example: sr"
import requests
import json

url = 'https://tic.rs/api/payment/v1/orders/8b266d05a4aab061e6febf6d3c0ee6d7'
headers = {
  'X-Api-Key': '{YOUR_AUTH_KEY}',
  'X-Language': 'sr Language code (sr/en/ru). Example: sr'
}

response = requests.request('GET', url, headers=headers)
response.json()
$client = new \GuzzleHttp\Client();
$url = 'https://tic.rs/api/payment/v1/orders/8b266d05a4aab061e6febf6d3c0ee6d7';
$response = $client->get(
    $url,
    [
        'headers' => [
            'X-Api-Key' => '{YOUR_AUTH_KEY}',
            'X-Language' => 'sr Language code (sr/en/ru). Example: sr',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
x-ratelimit-limit: 60
x-ratelimit-remaining: 53
access-control-allow-origin: *
 

{
    "message": "Not found"
}
 

Request      

GET api/payment/v1/orders/{signature}

Headers

X-Api-Key      

Example: {YOUR_AUTH_KEY}

X-Language      

Example: sr Language code (sr/en/ru). Example: sr

URL Parameters

signature   string   

Unique order signature. Example: 8b266d05a4aab061e6febf6d3c0ee6d7

Response

Response Fields

data   object   
number   string   

Order number

signature   string   

Order signature

created_at   string   

Creation timestamp (ISO 8601)

status_id   integer   

Status ID

status   string   

Status name

currency   string   

Currency code

items[]   object   

Order items breakdown

total   number   

Total amount

public_token   string   

Public token

transactions[]   object   

Related transactions

Transactions

requires authentication

Returns a paginated list of transactions (payments/refunds) related to all orders of the organizer.

Example request:
curl --request GET \
    --get "https://tic.rs/api/payment/v1/transactions?page=1&per_page=20&order_signature=8b266d05a4aab061e6febf6d3c0ee6d7&status=approved&date_from=2025-09-01&date_to=2025-09-30&sort_by=created_at&sort_dir=desc" \
    --header "X-Api-Key: {YOUR_AUTH_KEY}" \
    --header "X-Language: sr Language code (sr/en/ru). Example: sr"
import requests
import json

url = 'https://tic.rs/api/payment/v1/transactions'
params = {
  'page': '1',
  'per_page': '20',
  'order_signature': '8b266d05a4aab061e6febf6d3c0ee6d7',
  'status': 'approved',
  'date_from': '2025-09-01',
  'date_to': '2025-09-30',
  'sort_by': 'created_at',
  'sort_dir': 'desc',
}
headers = {
  'X-Api-Key': '{YOUR_AUTH_KEY}',
  'X-Language': 'sr Language code (sr/en/ru). Example: sr'
}

response = requests.request('GET', url, headers=headers, params=params)
response.json()
$client = new \GuzzleHttp\Client();
$url = 'https://tic.rs/api/payment/v1/transactions';
$response = $client->get(
    $url,
    [
        'headers' => [
            'X-Api-Key' => '{YOUR_AUTH_KEY}',
            'X-Language' => 'sr Language code (sr/en/ru). Example: sr',
        ],
        'query' => [
            'page' => '1',
            'per_page' => '20',
            'order_signature' => '8b266d05a4aab061e6febf6d3c0ee6d7',
            'status' => 'approved',
            'date_from' => '2025-09-01',
            'date_to' => '2025-09-30',
            'sort_by' => 'created_at',
            'sort_dir' => 'desc',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
x-ratelimit-limit: 60
x-ratelimit-remaining: 52
access-control-allow-origin: *
 

{
    "data": [],
    "total": 0,
    "current_page": 1,
    "per_page": 20
}
 

Request      

GET api/payment/v1/transactions

Headers

X-Api-Key      

Example: {YOUR_AUTH_KEY}

X-Language      

Example: sr Language code (sr/en/ru). Example: sr

Query Parameters

page   integer  optional  

The page number. Example: 1

per_page   integer  optional  

Number of results per page. Maximum: 100. Example: 20

order_signature   string  optional  

Filter by order signature. Example: 8b266d05a4aab061e6febf6d3c0ee6d7

status   string  optional  

Filter by transaction status (approved/failed). Example: approved

date_from   string  optional  

date Filter by created_at from (inclusive). Example: 2025-09-01

date_to   string  optional  

date Filter by created_at to (inclusive). Example: 2025-09-30

sort_by   string  optional  

Sort field (created_at, amount, status). Default: created_at. Example: created_at

sort_dir   string  optional  

Sort direction (asc, desc). Default: desc. Example: desc

Response

Response Fields

data   object   
signature   string   

Payment signature (OID)

status   string   

Transaction status (approved/failed)

amount   number   

Amount (negative for refunds)

currency   string   

Currency code

created_at   string   

Creation timestamp (ISO 8601)

order   object   
signature   string   

Order signature

number   string   

Order number

public_token   string   

Order public token

total   integer   

Total records

current_page   integer   

Current page number

per_page   integer   

Items per page

Create refund request by payment signature

requires authentication

Creates a refund request for a single payment identified by its signature. Returns the refund request signature.

Example request:
curl --request POST \
    "https://tic.rs/api/payment/v1/refunds/payment/8b266d05a4aab061e6febf6d3c0ee6d7" \
    --header "X-Api-Key: {YOUR_AUTH_KEY}" \
    --header "X-Language: sr Language code (sr/en/ru). Example: sr"
import requests
import json

url = 'https://tic.rs/api/payment/v1/refunds/payment/8b266d05a4aab061e6febf6d3c0ee6d7'
headers = {
  'X-Api-Key': '{YOUR_AUTH_KEY}',
  'X-Language': 'sr Language code (sr/en/ru). Example: sr'
}

response = requests.request('POST', url, headers=headers)
response.json()
$client = new \GuzzleHttp\Client();
$url = 'https://tic.rs/api/payment/v1/refunds/payment/8b266d05a4aab061e6febf6d3c0ee6d7';
$response = $client->post(
    $url,
    [
        'headers' => [
            'X-Api-Key' => '{YOUR_AUTH_KEY}',
            'X-Language' => 'sr Language code (sr/en/ru). Example: sr',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Request      

POST api/payment/v1/refunds/payment/{signature}

Headers

X-Api-Key      

Example: {YOUR_AUTH_KEY}

X-Language      

Example: sr Language code (sr/en/ru). Example: sr

URL Parameters

signature   string   

Payment signature (OID). Example: 8b266d05a4aab061e6febf6d3c0ee6d7

Response

Response Fields

success   boolean   

Operation status

data   object   
signature   string   

Refund request signature

Create refund requests for all payments in an order

requires authentication

Cancels an order and creates refund requests for all its payments. Returns an array of refund request signatures.

Example request:
curl --request POST \
    "https://tic.rs/api/payment/v1/refunds/order/36bc1d644db04148b899b940451dc4ea" \
    --header "X-Api-Key: {YOUR_AUTH_KEY}" \
    --header "X-Language: sr Language code (sr/en/ru). Example: sr"
import requests
import json

url = 'https://tic.rs/api/payment/v1/refunds/order/36bc1d644db04148b899b940451dc4ea'
headers = {
  'X-Api-Key': '{YOUR_AUTH_KEY}',
  'X-Language': 'sr Language code (sr/en/ru). Example: sr'
}

response = requests.request('POST', url, headers=headers)
response.json()
$client = new \GuzzleHttp\Client();
$url = 'https://tic.rs/api/payment/v1/refunds/order/36bc1d644db04148b899b940451dc4ea';
$response = $client->post(
    $url,
    [
        'headers' => [
            'X-Api-Key' => '{YOUR_AUTH_KEY}',
            'X-Language' => 'sr Language code (sr/en/ru). Example: sr',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Request      

POST api/payment/v1/refunds/order/{signature}

Headers

X-Api-Key      

Example: {YOUR_AUTH_KEY}

X-Language      

Example: sr Language code (sr/en/ru). Example: sr

URL Parameters

signature   string   

Order signature. Example: 36bc1d644db04148b899b940451dc4ea

Response

Response Fields

success   boolean   

Operation status

data   object   
signatures[]   string   

Refund request signatures

Show refund request by signature

requires authentication

Returns detailed information about a single refund request.

Example request:
curl --request GET \
    --get "https://tic.rs/api/payment/v1/refunds/2a7f9f9e-6e3a-4e1a-9b8a-1b2c3d4e5f6a" \
    --header "X-Api-Key: {YOUR_AUTH_KEY}" \
    --header "X-Language: sr Language code (sr/en/ru). Example: sr"
import requests
import json

url = 'https://tic.rs/api/payment/v1/refunds/2a7f9f9e-6e3a-4e1a-9b8a-1b2c3d4e5f6a'
headers = {
  'X-Api-Key': '{YOUR_AUTH_KEY}',
  'X-Language': 'sr Language code (sr/en/ru). Example: sr'
}

response = requests.request('GET', url, headers=headers)
response.json()
$client = new \GuzzleHttp\Client();
$url = 'https://tic.rs/api/payment/v1/refunds/2a7f9f9e-6e3a-4e1a-9b8a-1b2c3d4e5f6a';
$response = $client->get(
    $url,
    [
        'headers' => [
            'X-Api-Key' => '{YOUR_AUTH_KEY}',
            'X-Language' => 'sr Language code (sr/en/ru). Example: sr',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
x-ratelimit-limit: 60
x-ratelimit-remaining: 51
access-control-allow-origin: *
 

{
    "message": "Not found"
}
 

Request      

GET api/payment/v1/refunds/{signature}

Headers

X-Api-Key      

Example: {YOUR_AUTH_KEY}

X-Language      

Example: sr Language code (sr/en/ru). Example: sr

URL Parameters

signature   string   

Refund request signature. Example: 2a7f9f9e-6e3a-4e1a-9b8a-1b2c3d4e5f6a

Response

Response Fields

data   object   
signature   string   

Refund request signature

status   string   

Refund processing status (pending/completed/failed)

platform_approval_status   string   

Platform approval status (pending/approved/rejected)

payment_signature   string   

Original payment signature

refund_payment_signature   string   

Refund payment signature (when created)

ip   string   

Request IP

user_agent   string   

Request user agent

request_url   string   

Request URL

created_at   string   

Creation timestamp (ISO 8601)

platform_approved_at   string|null   

Platform approval timestamp (ISO 8601)

platform_rejected_at   string|null   

Platform rejection timestamp (ISO 8601)

platform_rejection_reason   string|null   

Platform rejection reason

List refund requests

requires authentication

Returns a paginated list of refund requests for the organizer.

Example request:
curl --request GET \
    --get "https://tic.rs/api/payment/v1/refunds?page=1&per_page=20" \
    --header "X-Api-Key: {YOUR_AUTH_KEY}" \
    --header "X-Language: sr Language code (sr/en/ru). Example: sr"
import requests
import json

url = 'https://tic.rs/api/payment/v1/refunds'
params = {
  'page': '1',
  'per_page': '20',
}
headers = {
  'X-Api-Key': '{YOUR_AUTH_KEY}',
  'X-Language': 'sr Language code (sr/en/ru). Example: sr'
}

response = requests.request('GET', url, headers=headers, params=params)
response.json()
$client = new \GuzzleHttp\Client();
$url = 'https://tic.rs/api/payment/v1/refunds';
$response = $client->get(
    $url,
    [
        'headers' => [
            'X-Api-Key' => '{YOUR_AUTH_KEY}',
            'X-Language' => 'sr Language code (sr/en/ru). Example: sr',
        ],
        'query' => [
            'page' => '1',
            'per_page' => '20',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
x-ratelimit-limit: 60
x-ratelimit-remaining: 50
access-control-allow-origin: *
 

{
    "data": [
        {
            "signature": "1a9968c9-341e-4925-993b-e11cb6c199b6",
            "status": "pending",
            "platform_approval_status": "pending",
            "payment_signature": "f1bc9dd411917a9629a3955074b3196a",
            "refund_payment_signature": null,
            "created_at": "2025-11-21T12:49:50.000000Z"
        },
        {
            "signature": "8f409136-a236-4803-b778-49e3eb7e7b2a",
            "status": "pending",
            "platform_approval_status": "pending",
            "payment_signature": "be61fa049b806571ce96a8187ebfc1ea",
            "refund_payment_signature": null,
            "created_at": "2025-11-21T12:49:50.000000Z"
        },
        {
            "signature": "c00a4541-e7a5-40a1-a597-0cb0c2547e64",
            "status": "pending",
            "platform_approval_status": "pending",
            "payment_signature": "721176055d9d93ea85b35a0396e5e842",
            "refund_payment_signature": null,
            "created_at": "2025-11-21T12:49:49.000000Z"
        },
        {
            "signature": "29bcbb55-90af-40fc-aa78-9c3a31c65375",
            "status": "pending",
            "platform_approval_status": "pending",
            "payment_signature": "a098488736a42ac96a6b5c0751d950e5",
            "refund_payment_signature": null,
            "created_at": "2025-11-21T12:49:49.000000Z"
        },
        {
            "signature": "70deb19e-1bdb-48f6-ac70-325aa145e702",
            "status": "pending",
            "platform_approval_status": "pending",
            "payment_signature": "cdb10a21e38421320f16636f466a24e0",
            "refund_payment_signature": null,
            "created_at": "2025-11-21T12:49:49.000000Z"
        },
        {
            "signature": "02d5c41f-08f8-43a7-939e-b3543730fcbd",
            "status": "completed",
            "platform_approval_status": "approved",
            "payment_signature": "93aef08ef7df20d6bc4f920ecd1947cb",
            "refund_payment_signature": "2d4525905b5a1ca35139022f2b410d90",
            "created_at": "2025-10-11T10:37:24.000000Z"
        },
        {
            "signature": "13480454-0ec3-4266-9bff-ea33bdad50b4",
            "status": "pending",
            "platform_approval_status": "pending",
            "payment_signature": "8c1bf0bc21ff8804d51d75d15c78d447",
            "refund_payment_signature": null,
            "created_at": "2025-10-11T10:34:32.000000Z"
        },
        {
            "signature": "1785db40-ee84-4401-bebb-6d2085b9b0c8",
            "status": "pending",
            "platform_approval_status": "pending",
            "payment_signature": "5502c509c8937a158ed8102596905883",
            "refund_payment_signature": null,
            "created_at": "2025-10-10T09:12:43.000000Z"
        },
        {
            "signature": "188e87d3-1d6a-414f-9399-686ae3ea5366",
            "status": "completed",
            "platform_approval_status": "approved",
            "payment_signature": "14ced8c0885a92f7d8f0dd5183dbf7e0",
            "refund_payment_signature": "5bc3278cd882789ebd5973de565b4a3c",
            "created_at": "2025-10-08T21:54:43.000000Z"
        },
        {
            "signature": "096591d7-c62c-4545-8ed6-b4423602560d",
            "status": "completed",
            "platform_approval_status": "approved",
            "payment_signature": "efd2f7c1cd13cf0877f0c84c2cbfd408",
            "refund_payment_signature": "ecb472681aabae206880cb41036f7193",
            "created_at": "2025-10-08T15:06:26.000000Z"
        }
    ],
    "total": 10,
    "current_page": 1,
    "per_page": 20
}
 

Request      

GET api/payment/v1/refunds

Headers

X-Api-Key      

Example: {YOUR_AUTH_KEY}

X-Language      

Example: sr Language code (sr/en/ru). Example: sr

Query Parameters

page   integer  optional  

The page number. Example: 1

per_page   integer  optional  

Number of results per page. Maximum: 100. Example: 20

Response

Response Fields

data   object   
signature   string   

Refund request signature

status   string   

Refund processing status (pending/completed/failed)

platform_approval_status   string   

Platform approval status (pending/approved/rejected)

payment_signature   string   

Original payment signature

refund_payment_signature   string   

Refund payment signature (when created)

created_at   string   

Creation timestamp (ISO 8601)

total   integer   

Total records

current_page   integer   

Current page number

per_page   integer   

Items per page

Order statuses dictionary

requires authentication

Returns dictionary of possible order statuses.

Example request:
curl --request GET \
    --get "https://tic.rs/api/payment/v1/statuses/orders" \
    --header "X-Api-Key: {YOUR_AUTH_KEY}"
import requests
import json

url = 'https://tic.rs/api/payment/v1/statuses/orders'
headers = {
  'X-Api-Key': '{YOUR_AUTH_KEY}'
}

response = requests.request('GET', url, headers=headers)
response.json()
$client = new \GuzzleHttp\Client();
$url = 'https://tic.rs/api/payment/v1/statuses/orders';
$response = $client->get(
    $url,
    [
        'headers' => [
            'X-Api-Key' => '{YOUR_AUTH_KEY}',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
x-ratelimit-limit: 60
x-ratelimit-remaining: 49
access-control-allow-origin: *
 

{
    "data": [
        {
            "id": 1,
            "name": "Новый"
        },
        {
            "id": 2,
            "name": "Оплачен"
        },
        {
            "id": 3,
            "name": "Отправлен в логистику"
        },
        {
            "id": 4,
            "name": "В доставке"
        },
        {
            "id": 5,
            "name": "Выполнен"
        },
        {
            "id": 6,
            "name": "Корзина"
        },
        {
            "id": 7,
            "name": "Отменен"
        }
    ]
}
 

Request      

GET api/payment/v1/statuses/orders

Headers

X-Api-Key      

Example: {YOUR_AUTH_KEY}

Response

Response Fields

data   object   
id   integer   

Status ID

name   string   

Status name

Transaction statuses dictionary

requires authentication

Returns dictionary of possible transaction statuses.

Example request:
curl --request GET \
    --get "https://tic.rs/api/payment/v1/statuses/transactions" \
    --header "X-Api-Key: {YOUR_AUTH_KEY}"
import requests
import json

url = 'https://tic.rs/api/payment/v1/statuses/transactions'
headers = {
  'X-Api-Key': '{YOUR_AUTH_KEY}'
}

response = requests.request('GET', url, headers=headers)
response.json()
$client = new \GuzzleHttp\Client();
$url = 'https://tic.rs/api/payment/v1/statuses/transactions';
$response = $client->get(
    $url,
    [
        'headers' => [
            'X-Api-Key' => '{YOUR_AUTH_KEY}',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
x-ratelimit-limit: 60
x-ratelimit-remaining: 48
access-control-allow-origin: *
 

{
    "data": [
        {
            "code": "approved",
            "name": "Approved"
        },
        {
            "code": "failed",
            "name": "Failed"
        }
    ]
}
 

Request      

GET api/payment/v1/statuses/transactions

Headers

X-Api-Key      

Example: {YOUR_AUTH_KEY}

Response

Response Fields

data   object   
code   string   

Status code (approved/failed)

name   string   

Human readable name