Download OpenAPI specification:
All admin endpoints require an Authorization header: Authorization: Bearer $ACCESS_TOKEN. The API returns JSON.
Retrieve a list of employees, optionally filtered by query parameters. Pagination can be added later.
string Filter by email | |
| first_name | string Filter by first name |
| last_name | string Filter by last name |
| position | string Filter by position |
[- {
- "id": 0,
- "first_name": "string",
- "last_name": "string",
- "email": "user@example.com",
- "position": "string",
- "phone": "string",
- "active": true
}
]Backend should generate a password reset token and send email to the created user.
| first_name required | string |
| last_name required | string |
| birth_date | string <date> |
| gender | string |
| email required | string <email> |
| phone | string |
| address | string |
| username required | string |
| position | string |
| department | string |
| active | boolean |
| permissions | Array of strings |
{- "first_name": "string",
- "last_name": "string",
- "birth_date": "2019-08-24",
- "gender": "string",
- "email": "user@example.com",
- "phone": "string",
- "address": "string",
- "username": "string",
- "position": "string",
- "department": "string",
- "active": true,
- "permissions": [
- "string"
]
}{- "id": 0,
- "first_name": "string",
- "last_name": "string",
- "email": "user@example.com",
- "position": "string",
- "phone": "string",
- "active": true,
- "birth_date": "2001-09-11",
- "gender": "string",
- "address": "string",
- "username": "string",
- "department": "string",
- "permissions": [
- "employee.idk",
- "employee.whatever"
]
}| employeeId required | integer <int64> Employee ID |
{- "id": 0,
- "first_name": "string",
- "last_name": "string",
- "email": "user@example.com",
- "position": "string",
- "phone": "string",
- "active": true,
- "birth_date": "2001-09-11",
- "gender": "string",
- "address": "string",
- "username": "string",
- "department": "string",
- "permissions": [
- "employee.idk",
- "employee.whatever"
]
}Update an employee. Some fields are immutable.
| employeeId required | integer <int64> Employee ID |
| last_name | string |
| gender | string |
| phone | string |
| address | string |
| position | string |
| department | string |
| active | boolean |
| permissions | Array of strings |
{- "last_name": "string",
- "gender": "string",
- "phone": "string",
- "address": "string",
- "position": "string",
- "department": "string",
- "active": true,
- "permissions": [
- "string"
]
}{- "id": 0,
- "first_name": "string",
- "last_name": "string",
- "email": "user@example.com",
- "position": "string",
- "phone": "string",
- "active": true,
- "birth_date": "2001-09-11",
- "gender": "string",
- "address": "string",
- "username": "string",
- "department": "string",
- "permissions": [
- "employee.idk",
- "employee.whatever"
]
}Authenticate user. Response includes access and refresh tokens and permissions for client-side behavior.
| email required | string <email> |
| password required | string |
{- "email": "user@example.com",
- "password": "string"
}{- "accessToken": "string",
- "refreshToken": "string",
- "permissions": [
- "string"
]
}| email required | string <email> |
{- "email": "user@example.com"
}{- "message": "If that email exists, a reset link was sent."
}Set new password and activate employee if not activated. Token must be single-use.
| token required | string |
| password required | string |
{- "token": "string",
- "password": "correct horse battery staple"
}{- "message": "Password updated"
}| refresh_token required | string |
{- "refresh_token": "string"
}{- "access_token": "string",
- "refresh_token": "string"
}Returns a list of clients, optionally filtered by query parameters.
| first_name | string Filter by first name |
| last_name | string Filter by last name |
string Filter by email |
[- {
- "id": 1,
- "first_name": "Petar",
- "last_name": "Petrovic",
- "date_of_birth": "2001-09-11",
- "gender": "M",
- "email": "petar.petrovic@raf.rs",
- "phone_number": "+381601234567",
- "address": "Knez Mihailova 1, Beograd"
}
]| first_name required | string |
| last_name required | string |
| date_of_birth | string <date> |
| gender | string |
| email required | string <email> |
| phone_number | string |
| address | string |
| password required | string <password> |
{- "first_name": "string",
- "last_name": "string",
- "date_of_birth": "2019-08-24",
- "gender": "string",
- "email": "user@example.com",
- "phone_number": "string",
- "address": "string",
- "password": "pa$$word"
}{- "valid": true
}| clientId required | integer <int64> Client ID |
| first_name | string |
| last_name | string |
| date_of_birth | string <date> |
| gender | string |
string <email> | |
| phone_number | string |
| address | string |
{- "first_name": "string",
- "last_name": "string",
- "date_of_birth": "2019-08-24",
- "gender": "string",
- "email": "user@example.com",
- "phone_number": "string",
- "address": "string"
}{- "id": 1,
- "first_name": "Petar",
- "last_name": "Petrovic",
- "date_of_birth": "2001-09-11",
- "gender": "M",
- "email": "petar.petrovic@raf.rs",
- "phone_number": "+381601234567",
- "address": "Knez Mihailova 1, Beograd"
}Clients see their own active accounts. Employees see all accounts and can filter by owner name or account number.
| first_name | string |
| last_name | string |
| account_number | string |
[- {
- "account_number": "265000000000123456",
- "account_name": "Devizni racun 1",
- "owner_id": 123,
- "balance": 180000,
- "available_balance": 178000,
- "employee_id": 1,
- "creation_date": "2019-08-24T14:15:22Z",
- "expiration_date": "2019-08-24T14:15:22Z",
- "currency": "EUR",
- "status": "Aktivan",
- "account_type": "Poslovni",
- "daily_limit": 5000,
- "monthly_limit": 20000,
- "daily_spending": 3200,
- "monthly_spending": 12500
}
]Used by employees to create a checking (tekući) or foreign currency (devizni) account. Optional automatic card creation.
| client_id required | integer <int64> ID of the owner (Client) |
| account_type required | string Enum: "TEKUCI" "DEVIZNI" |
| subtype required | string (fizicko lice: standardni, stedni, penzionerski, za mlade, za studente i nezaposlene; pravno: DOO, AD, fondacija) |
| currency required | string RSD for checking, or [EUR, CHF, USD, ...] for FX |
| initial_balance required | number <double> Initial deposit field is mandatory. This may be subject to change, the spec is cringe |
| daily_limit | number Default: 0 |
| monthly_limit | number Default: 0 |
| create_card | boolean Checkbox to automatically create a card |
object (BusinessInfo) |
{- "client_id": 0,
- "account_type": "TEKUCI",
- "subtype": "string",
- "currency": "RSD",
- "initial_balance": 0.1,
- "daily_limit": 0,
- "monthly_limit": 0,
- "create_card": true,
- "business_info": {
- "company_name": "string",
- "registration_number": "string",
- "pib": "string",
- "activity_code": "10.1",
- "address": "string"
}
}{- "account_number": "265000000000123456",
- "account_name": "Devizni racun 1",
- "owner_id": 123,
- "balance": 180000,
- "available_balance": 178000,
- "employee_id": 1,
- "creation_date": "2019-08-24T14:15:22Z",
- "expiration_date": "2019-08-24T14:15:22Z",
- "currency": "EUR",
- "status": "Aktivan",
- "account_type": "Poslovni",
- "daily_limit": 5000,
- "monthly_limit": 20000,
- "daily_spending": 3200,
- "monthly_spending": 12500
}| accountNumber required | string Bank account number (18 digits) |
{- "account_number": "265000000000123456",
- "account_name": "Devizni racun 1",
- "owner_id": 123,
- "balance": 180000,
- "available_balance": 178000,
- "employee_id": 1,
- "creation_date": "2019-08-24T14:15:22Z",
- "expiration_date": "2019-08-24T14:15:22Z",
- "currency": "EUR",
- "status": "Aktivan",
- "account_type": "Poslovni",
- "daily_limit": 5000,
- "monthly_limit": 20000,
- "daily_spending": 3200,
- "monthly_spending": 12500
}| accountNumber required | string Bank account number (18 digits) |
| name required | string |
{- "name": "string"
}{- "code": 400,
- "message": "(error message)"
}Requires client verification to execute.
| accountNumber required | string Bank account number (18 digits) |
| daily_limit | number |
| monthly_limit | number |
{- "daily_limit": 0,
- "monthly_limit": 0
}Allows filtering by account, date, amount, and status.
| account_number | string |
| date | string <date> |
| amount | number |
| status | string |
[- {
- "from_account": "102-39443942389",
- "to_account": "102-394438340549",
- "initial_amount": 1,
- "final_amount": 1,
- "fee": 0,
- "currency": "EUR",
- "payment_code": "289",
- "reference_number": "117.6926",
- "purpose": "Opis svrhe plaćanja",
- "status": "Realizovano",
- "timestamp": "2019-08-24T14:15:22Z"
}
]Transfer funds to another client's account.
| sender_account required | string |
| recipient_account required | string |
| recipient_name required | string |
| amount required | number |
| payment_code required | string |
| reference_number | string |
| purpose | string |
{- "sender_account": "string",
- "recipient_account": "string",
- "recipient_name": "string",
- "amount": 0,
- "payment_code": "string",
- "reference_number": "string",
- "purpose": "string"
}{- "from_account": "102-39443942389",
- "to_account": "102-394438340549",
- "initial_amount": 1,
- "final_amount": 1,
- "fee": 0,
- "currency": "EUR",
- "payment_code": "289",
- "reference_number": "117.6926",
- "purpose": "Opis svrhe plaćanja",
- "status": "Realizovano",
- "timestamp": "2019-08-24T14:15:22Z"
}Transfer funds between two accounts owned by the same client. Direct if same currency, utilizes exchange rates and fees if currencies differ.
| from_account required | string |
| to_account required | string |
| amount required | number |
| description | string |
{- "from_account": "string",
- "to_account": "string",
- "amount": 0,
- "description": "string"
}{- "from_account": "102-39443942389",
- "to_account": "102-394438340549",
- "initial_amount": 1,
- "final_amount": 1,
- "fee": 0,
- "currency": "EUR",
- "payment_code": "289",
- "reference_number": "117.6926",
- "purpose": "Opis svrhe plaćanja",
- "status": "Realizovano",
- "timestamp": "2019-08-24T14:15:22Z"
}| name required | string |
| account_number required | string |
{- "name": "string",
- "account_number": "string"
}{- "id": 0,
- "name": "string",
- "account_number": "string"
}| id required | integer <int64> Recipient ID |
| name required | string |
| account_number required | string |
{- "name": "string",
- "account_number": "string"
}Clients view their own cards. Employees access cards based on linked accounts.
[- {
- "card_number": "1000000000000000",
- "card_type": "Debit",
- "card_name": "Mastercard",
- "creation_date": "2019-08-24T14:15:22Z",
- "expiration_date": "2019-08-24T14:15:22Z",
- "account_number": "10000000000000",
- "cvv": "343",
- "limit": 1000000,
- "status": "Aktivna"
}
]Request a new card. Backend sends an email to the client and creates a new card when the client accepts.
| account_number required | string |
| card_type required | string |
| card_brand required | string |
{- "account_number": "string",
- "card_type": "Debit",
- "card_brand": "Debit"
}{- "message": "Request accepted, please click the link in the email you've just received."
}Clients view their loans. Employees view all loans and can filter by type, account, and status.
| loan_type | string |
| account_number | string |
| status | string |
[- {
- "loan_number": "17629",
- "loan_type": "Gotovinski",
- "account_number": "string",
- "loan_amount": 296304.55,
- "repayment_period": 86,
- "nominal_rate": 10.24,
- "effective_rate": 0,
- "agreement_date": "2019-08-24",
- "maturity_date": "2019-08-24",
- "next_installment_amount": 6177.99,
- "next_installment_date": "2019-08-24",
- "remaining_debt": 55341.66,
- "currency": "RSD",
- "status": "Odobren"
}
]| loanNumber required | string Loan Number |
{- "loan_number": "17629",
- "loan_type": "Gotovinski",
- "account_number": "string",
- "loan_amount": 296304.55,
- "repayment_period": 86,
- "nominal_rate": 10.24,
- "effective_rate": 0,
- "agreement_date": "2019-08-24",
- "maturity_date": "2019-08-24",
- "next_installment_amount": 6177.99,
- "next_installment_date": "2019-08-24",
- "remaining_debt": 55341.66,
- "currency": "RSD",
- "status": "Odobren"
}Employee portal to view pending requests sorted by submission date.
| loan_type | string |
| account_number | string |
[- {
- "id": 0,
- "status": "string",
- "loan_type": "string",
- "loan_amount": 0,
- "purpose": "string",
- "account_number": "string",
- "submission_date": "2019-08-24T14:15:22Z",
- "currency": "string",
- "salary": 0,
- "employment_status": "string",
- "employment_period": "string",
- "phone_number": "string",
- "interest_rate_type": "string"
}
]| account_number required | string Account where funds will be deposited |
| loan_type required | string Enum: "GOTOVINSKI" "STAMBENI" "AUTO" "REFINANSIRAJUCI" "STUDENTSKI" |
| amount required | number |
| repayment_period required | integer Period otplate; months |
| currency required | string |
| purpose required | string Svrha kredita |
| salary required | number Iznos plate klijenta |
| employment_status required | string Status zaposlenja (npr. ZAPOSLEN, NEZAPOSLEN, PENZIONER) |
| employment_period required | string Vreme provedeno u radnom odnosu |
| phone_number required | string Kontakt telefon |
| interest_rate_type required | string Enum: "FIKSNA" "VARIJABILNA" Tip kamatne stope |
{- "account_number": "string",
- "loan_type": "GOTOVINSKI",
- "amount": 0,
- "repayment_period": 0,
- "currency": "string",
- "purpose": "string",
- "salary": 0,
- "employment_status": "string",
- "employment_period": "string",
- "phone_number": "string",
- "interest_rate_type": "FIKSNA"
}