User authentication and verification endpoints for online booking
Online Booking (1.0.0)
Public API for client-facing online booking integration. This API enables third-party developers to embed online booking functionality into external platforms such as business catalogs, branded apps, and partner services. Base URL: https://api.alteg.io/api
All requests require partner authorization via Bearer token in the HTTP header: Authorization: Bearer <partner_token> To obtain a partner token, register in the Altegio Marketplace.
Request
Each Altegio client can create an unlimited number of Online Booking forms with different designs and booking scenarios.
Typically, the ID of a booking form is embedded in the subdomain. For example: https://b123.alteg.io, where 123 is the booking form ID. This ID can be used to retrieve all necessary parameters for implementing Online Booking and to determine whether the booking applies to a specific location or a location chain.
For chain widgets, you will also need to call the [GET] /locations method with the company_id filter to retrieve the list of locations available for booking.
The object containing the Online Booking form settings includes the following fields:
| Field | Type | Description |
|---|---|---|
| steps | Array of objects | Booking form steps with custom settings |
| style | object | Booking form design settings |
| group_id | number | Location chain ID (0 - if the booking form is for a non-chain location) |
| company_id | number | Location ID (always returned, used to get additional settings) |
| phone_confirmation | boolean | Do I need to confirm the phone by SMS (if groupid = 0 (not a group form), otherwise look in the settings of each location separately) |
| language | string | Booking form language (code from langs array) |
| langs | array of object | List of widget languages |
| comment_required | boolean | Whether the field with a comment within booking is required |
| google_analytics_id | string | Google Analytics ID |
| facebook_pixel_id | string | Facebook Pixel ID |
| sms_enabled | boolean | Is sending SMS available? |
| comment_input_name | string (optional) | Title for the field with a comment to the booking (if not set, the default value is used) |
| booking_notify_text | string (optional) | The text of the notification that is displayed (if set) at the step of entering contact data |
| is_show_privacy_policy | boolean | Whether it is necessary to display the text of the agreement on the personal data processing policy to the user |
| specialization_display_mode | number | Display the specialization or position of the team member. 0 - Specialization, 1 - Position |
The steps array consists of objects that have the following fields:
| Field | Type | Description | For what steps is specified |
|---|---|---|---|
| step | string | Step city/company/service/team member/datetime/contact/confirm | |
| title | string | Name of the step to display in the interface | For everyone |
| number | number | What number should this step be displayed on (starting from 1) | For everyone |
| default | string or number | The default value for this step, if set | For all but datetime |
| hidden | boolean | Hide this step when booking or not | For everyone |
| date_hidden | boolean | Hide this step when booking or not | For datetime |
| time_hidden | boolean | Hide this step when booking or not | For datetime |
| date_default | string | The default value for this step, if set | For datetime |
| time_default | number | The default value for this step, if set | For datetime |
The style object has the following fields:
| Field | Type | Description |
|---|---|---|
| show header | boolean | Show header and menu or not |
| logo | string | Path to logo image |
| header_background | string | Path to subtitle background image |
| menu_background | string | Path to menu background image |
| primaryPalette | string | The main color of the form (all colors from the list: red, pink, purple, deep-purple, indigo, blue, light-blue, cyan, teal, green, light-green, lime, yellow, amber, orange, deep-orange, brown , grey, blue-grey, white, black) |
| accentPalette | string | Form secondary color (subtitle semi-transparent cover) |
| warnPalette | string | Booking form buttons color |
| backgroundPalette | string | Booking form background color |
- Mock serverhttps://developer.alteg.io/_mock/en/public/openapi/bookform/{id}
- Production serverhttps://api.alteg.io/api/v1/bookform/{id}
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
https://developer.alteg.io/_mock/en/public/openapi/bookform/1 \
-H 'Accept: application/vnd.api.v2+json' \
-H 'Authorization: Bearer <YOUR_Bearer {PartnerToken}_HERE>' \
-H 'Content-Type: string'OK
Object with data
{ "success": true, "data": { "steps": [ … ], "style": { … }, "group_id": 1, "company_id": 1, "phone_confirmation": false, "lang": "en-US", "langs": [ … ], "comment_required": false, "metrika_counter_id": 50217133, "google_analytics_id": "UA-125358345-1", "facebook_pixel_id": "2218788388343154", "app_metrika_id": "46ab3b93-1bc6-457d-82f0-c1b51f39b01e", "sms_enabled": true }, "meta": [] }
- Mock serverhttps://developer.alteg.io/_mock/en/public/openapi/i18n/{lang_code}
- Production serverhttps://api.alteg.io/api/v1/i18n/{lang_code}
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
https://developer.alteg.io/_mock/en/public/openapi/i18n/en-US \
-H 'Accept: application/vnd.api.v2+json' \
-H 'Authorization: Bearer <YOUR_Bearer {PartnerToken}_HERE>' \
-H 'Content-Type: string'{ "404": { "not-found": "It seems that this page does not exist.", "not-found-record": "Such an appointment does not exist.", "go-home": "To main" }, "action": { "send": "send" }, "tips": { "terms": { … }, "review-sent": "Review sent", "your-mark": "your mark", "leave-a-review": "Leave a review", "leave-a-tip-to-a-specialist": "Leave a tip for a specialist", "credited": "Tip credited", "visit-amount": "Visit amount", "will-be-written-off": "Will be written off", "at-time": "v", "rate-specialist-to-sent-feedback": "Rate a specialist to send feedback", "title": "Tips", "tips-required": "Please select a tip amount", "review-or-tips-required": "It seems that there is nothing to send to a specialist yet", "enter-sum": "Enter amount", "custom-sum": "Own amount", "cancel-tips": "Cancel tip", "bad-sum": "Tipping must be indicated by the amount" }, "payment-status": { "payment-error": "Payment error. Try again", "payment-redirect": "You should be directed to the payment system.", "payment-config-error": "Error in setting up the payment system", "contact-us-for-questions": "Contact us if you have any questions.", "contacts": "Contacts", "order-registered": "Application completed", "order-paid": "Order has been paid", "retry": "Repeat", "order-created-successfully": "The order has been successfully created. Our representative will contact you to clarify the details.", "order-is-being-processed": "Operation is being processed", "get-payment-data": "Receiving payment data", "transaction-number": "Transaction number", "payment-transaction-info-1": "If you received a check, then the purchase was successfully completed. Check the email address you provided when purchasing.", "payment-transaction-info-2": " If the receipt did not arrive, please try again or contact us using the contacts below.", "order-number-info": "Provide this number at the time of your visit to redeem your certificate or pass." }, "user-data-form": { "loyalty-phone-tip": "Provide this number at the time of your visit to redeem your certificate or pass.", "name-required": "Name required", "email-required": "Email required", "loyalty-email": "E-mail for receipt and purchase", "agreement-link": "with the terms of the agreement", "data-processing-link": "data processing", "terms-prefix": "By clicking on the button you agree", "proceed": "Checkout", "pay": "Pay", "phone-code": "The code", "phone": "Telephone", "invalid-phone": "Invalid number" }, "and": "and", "terms-of-agreement": "Terms of agreement", "data-processing": "Data processing", "license-agreement": "License agreement", "personal-data": "Your data", "buy-for": "Buy for", "group_booking": { "personal_booking": "Individual services", "group_booking": "Group events", "choose_group_event": "Choose an event", "group_events_available": "Registration available for group events", "places": "Places", "group_events_is_not_available": "There are no group events for the selected day", "group_events_is_not_available_filial": "Group events are not configured in this location yet", "repeat": "Sign up again", "duration": "Duration", "no_space": "No places", "not_found": "There are no events for the selected filters. Try changing your filter options" }, "geo": { "geo_timeout_error": "Unable to determine your location. You may be out of GPS coverage", "geo_timeout_error_android": "Unable to determine your location. You may be out of GPS coverage. If you have geolocation disabled, you need to enable it and restart the application.", "geo_access_error": "No access to your location. The application cannot show locations near you. If you have geolocation disabled, you need to enable it and restart the application." }, "tooltips": { "change_filial": "Now you will always start recording from this branch. You can change the location through the menu item", "change_filial_back_button": "You can also use the back button to change location" }, "prepaid": { "required": "prepayment required", "allowed": "prepayment is optional", "prepaid_sum": "To pay online:", "postpaid_sum": "Payment on the spot:" }, "back": "Back", "backCity": "Cities", "backFilials": "Locations", "backRecordType": "Record Type", "filials": "Locations", "my_profile": "Cabinet", "about_us": "About Us", "record": { "show_details": "View details", "is_canceled": "Recording canceled", "is_canceled_success": "Recording canceled successfully", "record": "Recording", "place": "Place", "master": "Team Member", "service": "Service", "services": "Services", "date": "date", "past": "Passed", "through": "Across", "time": "Time", "clients_count": "Number of seats:", "book_visit": "Make a visit", "add_service": "+ Add service", "add_master": "+ Add Team Member", "add_datetime": "+ Add date and time", "cancel_record": "Cancel appointment", "cancel_record_warning": "Once canceled, the recording will not be recoverable.", "confirm_cancel_record": "Are you sure you want to cancel the recording?", "error_cancel_record": "You cannot unsubscribe", "error_cancel_record_new1": "It is not possible to cancel an appointment online. Please contact the administrator.", "error_cancel_record_new2_1": "Unable to cancel online booking", "error_cancel_record_new2_2": "before visiting. Please contact the administrator.", "add_to_google_calendar": "Add to google calendar", "booking_success": "You have successfully signed up!", "create_new_record": "Sign up more", "future_records": "Upcoming sessions", "past_records": "Past", "change_record_time": "Transfer appointment", "error_change_record_time": "Unable to reschedule online. Please contact the administrator.", "error_change_record_time2_1": "Unable to reschedule online appointment", "error_change_record_time2_2": "before visiting. Please contact the administrator.", "selected_services": "Selected services", "calculate_services": "Services available...", "change_record_fail": "Error transferring recording, please try another time", "continue_booking": "Continue recording", "go_to_registration": "Go to Altegio website", "repeat": "Repeat recording", "is_deleted": "Your appointment has been deleted." }, "at": "v", "on": "on the", "h": "h.", "m": "min.", "from": "from", "dist_m": "m", "dist_km": "km", "yesterday": "yesterday", "today": "today", "tomorrow": "tomorrow", "Close": "close", "Yes": "Yes", "No": "Not", "refresh": "Refresh", "online_record_disabled": "Online registration is disabled. <br> We apologize for the inconvenience caused.", "online_record_disabled_long_text": "Online registration is temporarily unavailable. You can still manage your online records in your account, transfer them and delete them.", "address": { "about": "About location", "address": "The address", "phone": "Telephone", "phones": "Phones", "schedule": "Working hours", "site": "Site", "date_and_time": "date and time", "photos": "Photos", "details": "More about the location" }, "common": { "information": "information", "reviews": "reviews", "contacts": "contacts" }, "notification": { "your_city": "What is your city <%- city_name %>?", "yes_my_city": "Yes, this is my city", "no_my_city": "No, choose a city", "read_all": "Read", "delete_all": "Delete", "deleted_record": "Deleting an appointment", "record": "Recording", "news": "news", "review": "Feedback about the team member", "notify": "Notification", "sent": "Sent" }, "header": { "loyalty_cards": "Loyalty Cards", "widget_settings": "Widget settings", "settings": "Settings", "select_town": "Choose city", "select_company": "Choose location", "select_date": "Date picker", "select_master": "Team Member selection", "select_time": "Timing", "select_service": "Service selection", "input_personal": "Entering contact details", "online_record": "Online appointment", "selection_of": "Choice", "contacts_form": "Registration", "record_created": "Post created!", "login": "entrance", "profile": "Personal Area", "my_records": "My notes", "record_create_disabled": "Online registration is temporarily unavailable.", "master-info": "About Team Member", "notification": "Notifications", "my_notifications": "My notifications", "none_notifications": "No notifications", "cart": "Proof of payment", "change_record": "Record transfer", "you_booking": "Your order", "you_data": "Your data", "record": "Recording", "actions": "Actions", "cancel-record": "Cancel recording", "booking_again": "Sign up again", "choose_time": "Pick a time", "choose_staff": "Choose a team member", "about_service": "About the service", "records": "Entries", "confirmation": "Confirmation" }, "loyalty": { "empty-list": "There is nothing here yet", "points": { … }, "no_cards": "You don't have any cards.", "no_certificate": "You do not have any certificate.", "no_subscription": "You don't have any subscription.", "discount": "discount", "cashback": "cashback", "paid_amount": "Paid", "sold_amount": "Sales", "visit_count": "Visits", "balance": "Accumulated (cashback)", "certificate": { … }, "subscription": { … }, "subscriptions": { … }, "programs": { … } }, "save": "Save", "proceed": "Continue", "profile": { "name": { … }, "noFutureRecords": "You have no upcoming sessions", "noPastRecords": "You have no past sessions", "phone": { … }, "email": { … }, "password": { … }, "error": "An error occurred while saving data", "saved": "Changes to your personal data are saved", "contactsDetails": "Contact details", "your_records": "Your appointments at the location." }, "registration": { "registration": "registration", "form": { … } }, "menu": { "account": "Personal data", "change_filial": "Change Location", "change_city": "Change city", "online_record": "Online booking", "about": "About location", "change_lang": "Change the language", "hide_menu": "Hide menu", "login": "To come in", "myRecords": "My notes", "on-line": "Online appointment", "logout": "Log off", "my": "Personal Area", "favorite": "Favorites", "change_password": "password change", "header": "Menu", "profile": "Profile", "loyalty": "My cards", "loyalty_subscriptions": "Subscriptions", "loyalty_certificates": "Certificates" }, "footer": { "worked_on": "Works for", "worked_on_company_name": "Altegio" }, "city": { "town_abbreviation": "G.", "service_count": "Number of locations:", "select_filial": "Location selection", "not_found_cities": "No cities found for your request", "search_cities": "Find cities", "affiliate": { … } }, "company": { "list": "List", "on_map": "On the map", "no_companies_text_1": "You do not have any active location. To set up locations, go to", "lk": "Personal account Altegio", "no_companies_text_2": "After setting, press the button", "no_companies": "No companies", "near_session": "The closest available recording session is:", "active_master": "Active team members:", "at_o_clock": "v", "find_companies": "Find locations", "not_found_companies": "No locations found for your search", "look_at_the_map": "View on the map" }, "steps": { "date_and_time": "date and time", "staff": { … }, "service": "Service", "time": "Time" }, "master": { "master": "Team Member", "skip_select_master": "Skip team member selection", "skip_select": "Skip selection", "near_session": "Upcoming sessions", "nearest_time": "Next time to sign up", "no_record": "There are no free sessions for the selected day", "no_record_new": "There is no free time for this date. Choose another date or another team member", "no_master": "The team member was fired or no longer works at this location", "any_master": "Irrelevant", "record_is_available": "You can sign up", "reviews": { … }, "prepaid": { … } }, "cart": { "title": "Services selected for payment", "confirm": "Confirm Appointment", "go-to-pay": "Proceed to checkout", "confirmed": "Appointment Paid", "pay-success": "Payment was successful!" }, "reviews": { "cancelAddReview": "Cancel", "later": "Rate later", "addReview": "Leave feedback", "yourReviewMark": "your mark", "reviewFieldLabelText": "your feedback", "reviewTitle": "Please rate the quality of the application", "reviewMessage": "Write suggestions for improvements", "reviewRequestStoreTitle": "Would you like to rate the store?", "reviewButton": "Estimate", "thanksForReview": "Thanks for the feedback" }, "date": { "day_of": "Day off", "no_record": "Working, no record", "have_record": "Working, there is a record", "by_month_num": { … }, "by_month_short": { … } }, "time": { "hourCased": { … }, "weekCased": { … }, "monthCased": { … }, "yearCased": { … }, "dayCased": { … }, "minuteCased": { … }, "secondCased": { … }, "at_o_clock": "v", "noTimes": "There are no free sessions for the selected day", "the_part_of_day": { … }, "by_week_day": { … }, "by_full_week_day": { … } }, "service": { "selected": "Selected", "selected_service_count": "Selected services:", "noServicesAndEvents": "No promotions or services found for your search", "noMoreServices": "There are no services that can be booked together with the selected services", "noMoreService": "There are no services that can be booked together with the selected service", "search": "Search...", "sale": "Stock", "services": "Services", "add": "Add a service", "add_short": "Add", "currency_short": "R.", "services_pref": { … }, "order_on": "Order for", "price": "price", "price_not_available": "Price not specified", "price_from": "from", "price_to": "before", "unavailable_service": "no longer available for online registration. Would you like to choose another?", "unavailable_services": "are no longer available for online booking. Would you like to choose others?" }, "confirm": { "confirm": "Sign up", "show_order_details": "View order details", "order_details": "Order Details", "smsNotify": "Reminder", "dontSend": "Do not send", "order_on": "Service order", "service_sale": "Promotion Services", "license_text": "Duis placerat lectus et justo mollis, nec sodales orci congue. Vestibulum semper non urna ac suscipit. Vestibulum tempor, ligula id laoreet hendrerit, massa augue iaculis magna, sit amet dapibus tortor ligula non nibh.", "accept": "By clicking the \"Register\" button, you agree to", "i_accept": "I accept", "i_agree": "I agree", "accept_inline": "By clicking the \"Register\" button, you agree", "accept_personal_data_inline": "processing of personal data", "and_accept": "and accept", "terms_of_agreement": "terms of the user agreement", "terms_of_agreement_inline": "user agreement terms", "how_my_personal_data_will_be_processed": "how my personal data will be processed", "first_name": "Name", "phone": "Telephone", "will_be_used_to_confirm": "Will be used for confirmation", "comment": "A comment", "email": "Email", "recording": "Sign up", "code_and_phone_num": "Code and phone number", "phone_confirm_short": "Confirm number", "phone_already_exists": "The specified number is already in use.", "phone_confirm": "Verify phone number", "phone_confirm_button": "Confirm", "defaultError": "System error:", "you_want_to_book": "Do you want to enroll", "your_master": "your team member", "waiting_for_you_at_the_address": "We are waiting for you at", "untilVisit": { … }, "orderErrorsActions": { … }, "orderErrors": { … }, "errors": { … } }, "login": { "login": "entrance", "sms_auth": "SMS authorization", "input_code_confirm": "Enter the code received by SMS to the number", "input_phone_num": "Enter your phone number, we will send an SMS to it with an access code to your personal account", "input_login_and_password": "If you already have a username and password, enter them below", "code_confirm": "confirmation code", "come_in": "To come in", "sms_not_send_with_colon": "If the SMS did not arrive, you can request a second code via:", "sms_not_send": "If the SMS did not arrive, you can request a second code via", "sms_not_send_next_try": "If the SMS did not arrive, you can", "request_new_sms_code": "Request code again", "change_phone_num": "Change phone number", "get_code": "to get the code", "or": "or", "authorized_as": "You are logged in as", "come_in_with_login_and_pass": "Log in with username and password", "phone_or_email": "Phone or email", "pass": "Password", "come_in_with_sms_authorise": "Log in via SMS authorization", "errors": { … } }, "Jan": "January", "Feb": "February", "March": "Martha", "Mar": "Martha", "Apr": "April", "May": "May", "Jun": "June", "Jul": "July", "Aug": "august", "Sep": "September", "Oct": "October", "Nov": "november", "Dec": "December", "activity": { "places_left": "Remaining places", "filters": { … } }, "button": { "select": "Select", "select_time": "Choose time", "all_right": "That's right", "get_sms": "Receive SMS", "back": "Return", "add_more": "Add more", "remove-from-record": "Remove from order", "continue": "Continue", "confirm": "Confirm", "canceling": "Cancel", "more_reviews": "More reviews" }, "landscape": "It will be more convenient if you turn the device vertically" }
Request
The object of services available for booking has the following fields:
| Field | Type | Description |
|---|---|---|
| categories | array of objects | Array of service categories (you can't book a category) |
| services | array of objects | Services available for booking by category |
An object from the categories array, has the following fields:
| Field | Type | Description |
|---|---|---|
| id | number | Category ID |
| title | string | Category name |
| gender | number | Category belonging to gender (1 - male, 2 - female, 0 - not specified) |
| weight | number | Category weight. Categories are sorted by weight, heavier ones first |
| api_id | string | External Category ID |
An object from the services array, has the following fields:
| Field | Type | Description |
|---|---|---|
| id | number | Service ID |
| title | string | Service name |
| category_id | number | Identifier of the category to which the service belongs |
| weight | number | Category weight. Services are sorted by weight, heavier ones first |
| price_min | number | The minimum cost of the service |
| price_max | number | Maximum cost of the service |
| discount | number | Service discount |
| comment | string | Comment on the service |
| active | number | Is the service active |
| prepaid | string | Online payment status |
| gender | number | Gender for which the service is provided |
| session_length | number | Service duration in seconds (only if filter by team member is set) |
| image | string | Image services |
If you need to get the services provided by a specific team member, then you need to use the filter by team member. The following filters are available:
- staff_id: team member ID. If you need services that only the selected team member provides
- datetime: date (in iso8601 format). Specifies the desired appointment date. Use this parameter to retrieve services that can be booked with the selected team member on that specific date.
- service_ids: An array of service IDs. If a team member is already selected and the time and service(s) are part of an existing appointment, this parameter should be used to select an additional service.
- Mock serverhttps://developer.alteg.io/_mock/en/public/openapi/book_services/{location_id}
- Production serverhttps://api.alteg.io/api/v1/book_services/{location_id}
- curl
- JavaScript
- Node.js
- Python
- Java
- C#
- PHP
- Go
- Ruby
- R
- Payload
curl -i -X GET \
'https://developer.alteg.io/_mock/en/public/openapi/book_services/4564?staff_id=0&datetime=2026-09-09T18%3A30&service_ids%5B%5D=0' \
-H 'Accept: application/vnd.api.v2+json' \
-H 'Authorization: Bearer <YOUR_Bearer {PartnerToken}_HERE>' \
-H 'Content-Type: string'OK
Object with data
{ "success": true, "data": { "events": [], "services": [ … ], "category": [ … ] }, "meta": [] }