Bjuti API Dokumentatsioon

Tere tulemast Bjuti ametlikku arendajate portaali. See dokumentatsioon kirjeldab REST API ja Model Context Protocol (MCP) liideseid, mille abil saavad tarkvaraarendajad ja autonoomsed AI agendid otsida ilusalonge ja meistreid, pärida hinnakirju ja reaalajas vabu kalendriaegu, teostada ajutisi broneeringute lukustusi (15-min On Hold) ning kinnitada broneeringuid e-posti koodiga.

Ametlikud Domeenid: API ja MCP tugipunktid asuvad eranditult aadressil https://api.bjuti.ee. Põhiportaal on kättesaadav aadressil bjuti.ee. Masinloetav spetsifikatsioon asub aadressil /v1/openapi.json.

Broneerimise Töövoo Järjekord ja Parameetrite Ahel (AI Agentidele)

Eduka broneeringu teostamiseks peab autonoomne AI agent või arendaja kutsuma API teenuseid välja järgmises ranges järjekorras (Sammud 1 kuni 7). Iga järgmise sammu sisendparameetrid pärinevad eelnevate päringute vastustest:

7-sammuline Broneerimise Elutsükkel:

  1. Samm 1: Autentimine (POST /v1/agent/auth/token või MCP bjuti_agent_auth)
    Sisend: client_id, client_secret
    ➔ Saadud parameeter: access_token (Bearer token, kehtiv 15 min / 900 sek) ➔ Edastatakse kõigi järgnevate sammude HTTP päises: Authorization: Bearer <access_token>.
  2. Samm 2 (Valikuline): Kategooriate Tuvastamine (GET /v1/agent/booking/service-groups või MCP bjuti_get_service_categories)
    ➔ Saadud parameeter: category_id, name (Hair, Nails, Brows/Lashes, Skin, Massage jne).
  3. Samm 3: Salongi ja Meistri Leidmine (GET /v1/agent/booking/nearby-salons või /search-salons või MCP bjuti_find_salons)
    Sisend: GPS koordinaadid (lat, lng, radius_km) VÕI tekstipäring (q, salon_name, specialist_name)
    ➔ Saadud parameetrid:
    • salons[].location_id ➔ Kohustuslik sisend Sammudele 4, 5 ja 6!
    • salons[].professionals[].professional_id ➔ Kohustuslik sisend Sammudele 5 ja 6!
  4. Samm 4: Salongi Hinnakiri ja Teenused (GET /v1/agent/booking/pricelist või MCP bjuti_get_salon_pricelist)
    Sisend: location_id (Pärineb Sammust 3: salons[].location_id)
    ➔ Saadud parameetrid:
    • pricelist[].service_id ➔ Kohustuslik sisend (massiivina või komadega) Sammudele 5 ja 6!
    • pricelist[].specialists[].professional_id ➔ Teenust osutavate meistrite kinnitus.
  5. Samm 5: Vabade Aegade Kontroll (4-päeva aken) (GET /v1/agent/booking/availability-slots või MCP bjuti_get_available_slots)
    Sisendid:
    • location_id ➔ Pärineb Sammust 3
    • professional_id ➔ Pärineb Sammust 3 või 4
    • service_ids ➔ Pärineb Sammust 4 (komadega eraldatud UUID-d)
    • date ➔ Soovitud alguskuupäev formaadis YYYY-MM-DD
    ➔ Saadud parameetrid: slots[date][] massiivist valitakse kliendile sobiv algusaeg start_time (nt "14:30") ➔ Edastatakse Sammule 6! (Kui vabu aegu pole, tagastab waitlist_available: true).
  6. Samm 6: Aja Ajutine Lukustamine (15-minuti Hold) (POST /v1/agent/booking/hold või MCP bjuti_hold_booking)
    Sisendid:
    • location_id (Sammust 3)
    • professional_id (Sammust 3 või 4)
    • service_ids (Sammust 4)
    • date (Sammust 5)
    • start_time (Sammust 5: slots[date][])
    • Kliendi kontaktandmed: contact_firstname, contact_lastname, contact_phone, contact_email, message_text
    ➔ Saadud parameeter: booking_id (UUID) ➔ Edastatakse Sammule 7! Kliendi e-postile saadetakse 6-kohaline kinnituskood.
  7. Samm 7: Broneeringu Kinnitamine E-posti Koodiga (POST /v1/agent/booking/confirm või MCP bjuti_confirm_booking)
    Sisendid:
    • booking_id ➔ Pärineb Sammust 6: booking_id
    • verification_code ➔ 6-kohaline kood, mille klient sai oma e-posti aadressile
    ➔ Tulemus: Broneering kinnitatud (status: "confirmed") ja salongi kalendrisse kantud!
Alternatiivsed Töövood:
  • Holdi vabastamine enne tähtaega: POST /v1/agent/booking/release-hold vajab parameetrit booking_id (Sammust 6).
  • Ootenimekirjaga liitumine: POST /v1/agent/booking/waitlist, kui Sammus 5 vabu aegu ei leitud ja waitlist_available: true.
  • Aktiivsete aegade kontroll: GET /v1/agent/booking/my-active kliendi e-posti järgi enne broneerimist (reegel: max 1 broneering kategoorias per klient).

Autentimine ja Tokenite Kehtivus (15-minuti reegel)

Kõik autentimist nõudvad API päringud eeldavad HTTP päises Bearer tokenit:

HTTP Request Header
Authorization: Bearer <access_token>
Range Turvareegel: Väljastatud access_token kehtib täpselt 15 minutit (900 sekundit). AI agent või klient peab säilitama väljastatud refresh_token-i ning aegumisel taotlema uue tokeni endpointist /v1/agent/auth/refresh. Autentimise endpointidel kehtib rate limit (kuni 10 päringut minutis).

Broneerimise ja Holdi Ärireeglid

  1. Hinnakirjapõhine valik: Agent peab broneeringut tehes saatma teenuste ID-de nimekirja (service_ids), mis pärineb salongi hinnakirjast (/pricelist).
  2. 15-minutiline On Hold lukustus: Broneeringu alustamisel (/hold) broneeritakse kalendriaeg koheselt olekusse On Hold. See aeg blokeerub teistele klientidele ja agentidele 15 minutiks.
  3. E-posti kinnituskood: Holdi loomisel saadetakse kliendi e-posti aadressile 6-kohaline kinnituskood. Broneeringu lõplikuks kinnitamiseks tuleb see sisestada endpointi /confirm (kuni 5 katset, seejärel broneering tühistatakse).
  4. 1 aktiivne broneering kategoorias per klient: AI Agent ei saa samale kliendile teha rohkem kui ühte kehtivat broneeringut samas kategoorias (nt Juuksur). Kui kliendil on juba tulevikus kehtiv aeg, tagastab süsteem veakoodi ACTIVE_BOOKING_EXISTS.

1. Access Tokeni Taotlemine

POST /v1/agent/auth/token
Avalik / Rate Limited

Autendib AI agendi või integratsiooni kliendi võtmete abil ja väljastab 15-minutilise Bearer tokeni ning refresh tokeni.

Parameetrid (JSON body)

VäliTüüpKirjeldus
client_id kohustuslikstringAgendi avalik kliendi-ID (nt ag_live_9b4c81...)
client_secret kohustuslikstringAgendi salajane võti
Päring (cURL)
curl -X POST https://api.bjuti.ee/v1/agent/auth/token \
  -H "Content-Type: application/json" \
  -d '{
    "client_id": "ag_live_9b4c81a2f0e84",
    "client_secret": "sec_f20a91e847c1..."
  }'
HTTP 200 OK
{
  "status": "success",
  "data": {
    "access_token": "agt_4f89b1c20e4a779d...",
    "token_type": "Bearer",
    "expires_in": 900,
    "expires_at": "2026-11-08T21:15:00+02:00",
    "refresh_token": "refr_d8a1c902b4e7..."
  }
}
HTTP 401 Unauthorized
{
  "status": "error",
  "code": "INVALID_CREDENTIALS",
  "message": "Invalid client_id or client_secret"
}

2. Access Tokeni Uuendamine (Refresh)

POST /v1/agent/auth/refresh
Avalik / Rate Limited

Vahetab kehtiva refresh tokeni uue 15-minutilise access tokeni vastu. Vana refresh token muudetakse kehtetuks (refresh token rotation).

Parameetrid (JSON body)

VäliTüüpKirjeldus
refresh_token kohustuslikstringEelmisest token-päringust saadud refresh token
Päring (cURL)
curl -X POST https://api.bjuti.ee/v1/agent/auth/refresh \
  -H "Content-Type: application/json" \
  -d '{
    "refresh_token": "refr_d8a1c902b4e7..."
  }'
HTTP 200 OK
{
  "status": "success",
  "data": {
    "access_token": "agt_99c301fa882b...",
    "token_type": "Bearer",
    "expires_in": 900,
    "expires_at": "2026-11-08T21:30:00+02:00",
    "refresh_token": "refr_66ea01449bc1..."
  }
}

3. Agendi Profiili Kontroll

GET /v1/agent/auth/me
Bearer Token

Tagastab autenditud agendi identiteedi, õigused ja hetkel aktiivse tokeni aegumise kuupäeva.

Parameetrid

Päringuparameetreid ei nõuta. Nõutav on Authorization: Bearer <token> päis.

Päring (cURL)
curl -X GET https://api.bjuti.ee/v1/agent/auth/me \
  -H "Authorization: Bearer agt_4f89b1c20e4a779d..."
HTTP 200 OK
{
  "status": "success",
  "data": {
    "agent_id": "9a148c3b-5521-4d30-bfae-1280ea9010ab",
    "name": "Concierge Booking Bot",
    "email": "bot@example.com",
    "token_expires_at": "2026-11-08T21:15:00+02:00",
    "seconds_remaining": 842
  }
}

4. Teenusekategooriate Nimekiri

GET /v1/agent/booking/service-groups
Bearer Token

Tagastab iluteenuste peagrupid (nt Juuksur, Küüned, Kulmud ja ripsmed, Massaaž, Näohooldus).

Query Parameetrid

ParameeterTüüpKirjeldus
country valikulinestringRiigikood (vaikimisi EE)
Päring (cURL)
curl -X GET "https://api.bjuti.ee/v1/agent/booking/service-groups?country=EE" \
  -H "Authorization: Bearer <access_token>"
HTTP 200 OK
{
  "status": "success",
  "data": [
    { "id": "hair", "code": "hair", "name": "Juuksuriteenused", "icon": "scissors" },
    { "id": "nails", "code": "nails", "name": "Küünetehnik", "icon": "hand-sparkles" },
    { "id": "face", "code": "face", "name": "Näohooldused", "icon": "spa" },
    { "id": "brows", "code": "brows", "name": "Kulmud ja ripsmed", "icon": "eye" }
  ]
}

5. Lähimate Salongide Otsing (GPS)

GET /v1/agent/booking/nearby-salons
Bearer Token

Otsib aktiivseid salongi asukohti kasutaja geograafiliste koordinaatide (laius- ja pikkuskraad) ning raadiuse alusel (arvutatakse Haversine'i valemiga).

Query Parameetrid

ParameeterTüüpKirjeldus
lat kohustuslikfloatKliendi laiuskraad (nt 59.43696)
lng kohustuslikfloatKliendi pikkuskraad (nt 24.75353)
radius_km valikulinefloatOtsingu raadius km (vaikimisi 25)
category valikulinestringTeenuse kategooria kood
Päring (cURL)
curl -X GET "https://api.bjuti.ee/v1/agent/booking/nearby-salons?lat=59.4369&lng=24.7535&radius_km=10" \
  -H "Authorization: Bearer <access_token>"
HTTP 200 OK
{
  "status": "success",
  "data": [
    {
      "location_id": "96fb29cf-a031-4ce8-b541-ef12998a1234",
      "company_name": "Studio Elegance OÜ",
      "location_name": "Studio Elegance Kesklinn",
      "address": "Rotermanni 8, Tallinn",
      "distance_km": 0.42,
      "rating": 4.9,
      "coordinates": { "lat": 59.4385, "lng": 24.7561 }
    }
  ]
}

7. Salongi Teenuste Hinnakiri & Alamteenused

GET /v1/agent/booking/pricelist
Bearer Token

Tagastab antud salongi asukohas pakutavad põhiteenused, nende hinnad (koos KM-ga), kestused minutites ning iga teenusega seotud võimalikud alamteenused / lisateenused (addons). Agent saab broneerimisel saata korraga nii põhiteenuse kui ka soovitud alamteenuste ID-d.

Query Parameetrid

ParameeterTüüpPäritolu ja Kirjeldus
location_id kohustuslikuuidPärineb Sammust 3 /nearby-salons või /search-salons vastuse väli salons[].location_id.
professional_id valikulineuuidPärineb Sammust 3 Välja salons[].professionals[].professional_id väärtus, et filtreerida konkreetse meistri teenuseid.
Päring (cURL)
curl -X GET "https://api.bjuti.ee/v1/agent/booking/pricelist?location_id=96fb29cf-a031-4ce8-b541-ef12998a1234" \
  -H "Authorization: Bearer <access_token>"
HTTP 200 OK
{
  "status": "success",
  "data": {
    "location_id": "96fb29cf-a031-4ce8-b541-ef12998a1234",
    "salon_name": "Studio Elegance Kesklinn",
    "services": [
      {
        "service_id": "c14d9b2e-7412-4aa3-8fa9-994b2a8901aa",
        "category": "hair",
        "name": "Naiste juukselõikus ja föönisoeng",
        "description": "Sisaldab pesu, peamassaaži, lõikust ja föönitamist.",
        "duration_minutes": 60,
        "price": 45.00,
        "addons": [
          {
            "service_id": "8b14da21-998b-4b11-9a40-ef81203491ba",
            "category": "hair",
            "name": "Intensiivne niisutav juuksemask",
            "description": "Taastav süvahooldus K18 või Olaplex baasil.",
            "duration_minutes": 20,
            "price": 15.00
          },
          {
            "service_id": "fe1023ba-1200-4781-a891-cb9041289190",
            "category": "hair",
            "name": "Lõõgastav peamassaaž eeterlike õlidega",
            "duration_minutes": 15,
            "price": 10.00
          }
        ]
      }
    ]
  }
}

8. Vabade Aegade Päring (4-päevane aken & Esimene vaba aeg)

GET /v1/agent/booking/availability-slots
Bearer Token

Arvutab spetsialisti kalendri ja graafiku alusel vabad broneerimisaknad valitud teenuste kogukestusele (toetab mitut teenust ja alamteenust korraga):

  • 4-päevane aken: Tagastab vabad ajad valitud kuupäevast kuni 3 päeva edasi (date kuni date + 3 days).
  • Esimene vaba aeg: Kui nendel päevadel aegu ei leidu, otsib süsteem automaatselt esimese tulevase vaba kuupäeva (kuni 45 päeva ette) plokis first_available.
  • Ootejärjekorra valmisolek: Väli waitlist_available: true annab agendile märku, et kui pakutud ajad ei sobi, saab kliendi lisada ootejärjekorda (/waitlist).

Query Parameetrid

ParameeterTüüpPäritolu ja Kirjeldus
location_id kohustuslikuuidPärineb Sammust 3 Salongi asukoha UUID (salons[].location_id).
professional_id kohustuslikuuidPärineb Sammust 3 või 4 Meistri UUID (salons[].professionals[].professional_id või pricelist[].specialists[].professional_id).
service_ids kohustuslikstringPärineb Sammust 4 Komaeraldusega teenuste ja lisateenuste UUID-d (pricelist[].service_id).
date kohustuslikstringAlguskuupäev formaadis YYYY-MM-DD (alguspunkt 4-päevasele saadavusaknale).
Päring (cURL)
curl -X GET "https://api.bjuti.ee/v1/agent/booking/availability-slots?location_id=96fb29cf-...&professional_id=8a1e47b2-...&service_ids=c14d9b2e-...,8b14da21-...&date=2026-11-15" \
  -H "Authorization: Bearer <access_token>"
HTTP 200 OK
{
  "status": "success",
  "data": {
    "location_id": "96fb29cf-a031-4ce8-b541-ef12998a1234",
    "professional_id": "8a1e47b2-3c10-482a-99cd-482b991a0021",
    "requested_date": "2026-11-15",
    "total_duration_minutes": 80,
    "dates": [
      {
        "date": "2026-11-15",
        "day_of_week": "Sunday",
        "slots_count": 0,
        "slots": []
      },
      {
        "date": "2026-11-16",
        "day_of_week": "Monday",
        "slots_count": 2,
        "slots": ["10:00", "14:30"]
      },
      {
        "date": "2026-11-17",
        "day_of_week": "Tuesday",
        "slots_count": 3,
        "slots": ["11:00", "13:00", "16:00"]
      },
      {
        "date": "2026-11-18",
        "day_of_week": "Wednesday",
        "slots_count": 0,
        "slots": []
      }
    ],
    "first_available": null,
    "waitlist_available": true
  }
}

9. Broneeringu Alustamine ja 15-minuti Hold

POST /v1/agent/booking/hold
Bearer Token

Lukustab vaba aja täpselt 15 minutiks staatusesse On Hold. Kontrollib reeglit (1 aktiivne broneering samas kategoorias per klient) ning saadab kliendi e-posti aadressile 6-kohalise kinnituskoodi.

Parameetrid (JSON body)

VäliTüüpPäritolu ja Kirjeldus
location_id kohustuslikuuidPärineb Sammust 3 Salongi asukoha UUID.
professional_id kohustuslikuuidPärineb Sammust 3 või 4 Valitud meistri UUID.
service_ids kohustuslikarray[uuid]Pärineb Sammust 4 Valitud teenuste UUID-de massiiv hinnakirjast.
date kohustuslikstringPärineb Sammust 5 Valitud kuupäev YYYY-MM-DD.
start_time kohustuslikstringPärineb Sammust 5 Vaba algusaeg vabade aegade maatriksist (slots[date][], nt "14:00").
contact_firstname kohustuslikstringKliendi eesnimi.
contact_lastname valikulinestringKliendi perekonnanimi.
contact_phone kohustuslikstringKliendi telefoninumber.
contact_email kohustuslikstringKliendi e-post (sinna saadetakse 6-kohaline kinnituskood).
message_text valikulinestringMärkus või soovid teenindajale.
result_photo_base64 valikulinestringSoovitud tulemuse pilt (Base64).
Päring (cURL)
curl -X POST https://api.bjuti.ee/v1/agent/booking/hold \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d '{
    "location_id": "96fb29cf-a031-4ce8-b541-ef12998a1234",
    "professional_id": "8a1e47b2-3c10-482a-99cd-482b991a0021",
    "service_ids": ["c14d9b2e-7412-4aa3-8fa9-994b2a8901aa"],
    "date": "2026-11-15",
    "start_time": "14:00",
    "contact_firstname": "Mari",
    "contact_lastname": "Tamm",
    "contact_phone": "+37255123456",
    "contact_email": "mari.tamm@example.com",
    "message_text": "Soovin heledamat tooni."
  }'
HTTP 201 Created
{
  "status": "success",
  "data": {
    "booking_id": "3b29c1e0-71a2-47e9-a02b-118833fa0011",
    "status": "On Hold",
    "hold_expires_at": "2026-11-08T21:12:30+02:00",
    "hold_duration_seconds": 900,
    "message": "Time reserved for 15 minutes. Verification code sent to mari.tamm@example.com."
  }
}
HTTP 409 Conflict (Reegel: 1 broneering)
{
  "status": "error",
  "code": "ACTIVE_BOOKING_EXISTS",
  "message": "Client already has an active booking in category 'hair' on 2026-11-20 11:00."
}

10. Broneeringu Kinnitamine E-posti Koodiga

POST /v1/agent/booking/confirm
Bearer Token

Kinnitab On Hold broneeringu, kontrollides kliendi sisestatud 6-kohalist e-posti kinnituskoodi. Kaitstud brute-force rünnakute vastu (kuni 5 ebaõnnestunud katset enne broneeringu lukustamist). Kui salong nõuab ettemaksu, väljastatakse turvaline makselink.

Parameetrid (JSON body)

VäliTüüpPäritolu ja Kirjeldus
booking_id kohustuslikuuidPärineb Sammust 6 POST /v1/agent/booking/hold vastuse väli data.booking_id.
verification_code kohustuslikstringKliendi e-postile saadetud 6-kohaline kinnituskood (nt "481902").
Päring (cURL)
curl -X POST https://api.bjuti.ee/v1/agent/booking/confirm \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d '{
    "booking_id": "3b29c1e0-71a2-47e9-a02b-118833fa0011",
    "verification_code": "481902"
  }'
HTTP 200 OK
{
  "status": "success",
  "data": {
    "booking_id": "3b29c1e0-71a2-47e9-a02b-118833fa0011",
    "status": "Confirmed",
    "confirmed_at": "2026-11-08T20:58:12+02:00",
    "requires_deposit": false,
    "payment_url": null,
    "summary": {
      "salon": "Studio Elegance Kesklinn",
      "professional": "Kadri Kallas",
      "date": "2026-11-15",
      "start_time": "14:00",
      "total_price": 45.00
    }
  }
}
HTTP 400 Bad Request
{
  "status": "error",
  "code": "INVALID_VERIFICATION_CODE",
  "message": "Invalid code. 3 attempts remaining."
}

11. Hold Lukustuse Enneaegne Vabastamine

POST /v1/agent/booking/release-hold
Bearer Token

Kui klient otsustab broneerimise katkestada või valida teise aja, saab agent holdi viivitamatult vabastada ilma 15-minutilist aegumist ootamata.

Parameetrid (JSON body)

VäliTüüpPäritolu ja Kirjeldus
booking_id kohustuslikuuidPärineb Sammust 6 Vabastatava broneeringu ID (data.booking_id).
Päring (cURL)
curl -X POST https://api.bjuti.ee/v1/agent/booking/release-hold \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d '{
    "booking_id": "3b29c1e0-71a2-47e9-a02b-118833fa0011"
  }'
HTTP 200 OK
{
  "status": "success",
  "message": "Booking hold released successfully. Slot is available again."
}

12. Ootejärjekorra API (Waitlist)

POST /v1/agent/booking/waitlist
Bearer Token

Lisab kliendi meistri ootenimekirja, kui soovitud kuupäevadel ei leidunud sobivat vaba aega. Kui klient juba ootab sama meistri juurde, värskendatakse tema soovi detaile (säilitades järjekorrakoha). Kui salongi graafikus avaneb uus vaba aeg (nt lisandunud töögraafik või tühistamine), pakutakse või broneeritakse see ootenimekirjast FIFO põhimõttel.

Parameetrid (JSON body)

VäliTüüpPäritolu ja Kirjeldus
location_id kohustuslikuuidPärineb Sammust 3 Salongi asukoha UUID (salons[].location_id).
professional_id kohustuslikuuidPärineb Sammust 3 või 4 Meistri UUID.
service_ids kohustuslikarray[uuid]Pärineb Sammust 4 Soovitud teenuste ja lisateenuste UUID-de massiiv.
contact_firstname kohustuslikstringKliendi eesnimi.
contact_lastname valikulinestringKliendi perekonnanimi.
contact_phone kohustuslikstringKliendi telefoninumber.
contact_email kohustuslikstringKliendi e-posti aadress.
message_text valikulinestringKliendi eelistatud kellaajad või lisasoovid.
Päring (cURL)
curl -X POST https://api.bjuti.ee/v1/agent/booking/waitlist \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d '{
    "location_id": "96fb29cf-a031-4ce8-b541-ef12998a1234",
    "professional_id": "8a1e47b2-3c10-482a-99cd-482b991a0021",
    "service_ids": ["c14d9b2e-7412-4aa3-8fa9-994b2a8901aa"],
    "contact_firstname": "Mari",
    "contact_lastname": "Tamm",
    "contact_phone": "+37255123456",
    "contact_email": "mari.tamm@example.com",
    "message_text": "Sobivad ajad tööpäeviti peale 17:00."
  }'
HTTP 201 Created
{
  "status": "success",
  "message": "Client successfully added to waiting list.",
  "data": {
    "waitlist_id": "18cf41a0-8910-4bc3-90b1-4478129031ef",
    "already_waiting": false,
    "status": "waiting",
    "title": "Naiste juukselõikus ja föönisoeng",
    "duration_minutes": 60,
    "created_at": "2026-11-08T21:25:00+02:00"
  }
}
HTTP 200 OK (Juba ootenimekirjas)
{
  "status": "success",
  "message": "Client is already on the waiting list; request details updated.",
  "data": {
    "waitlist_id": "18cf41a0-8910-4bc3-90b1-4478129031ef",
    "already_waiting": true,
    "status": "waiting",
    "title": "Naiste juukselõikus ja föönisoeng",
    "duration_minutes": 60
  }
}

13. Kliendi Aktiivsete Broneeringute Kontroll

GET /v1/agent/booking/my-active
Bearer Token

Võimaldab agendil pärida kliendi aktiivseid tulevikubroneeringuid enne uue broneeringu alustamist, et vältida dubleerivaid broneeringuid samas kategoorias.

Query Parameetrid

ParameeterTüüpKirjeldus
contact_email kohustuslikstringKliendi e-posti aadress
category valikulinestringKategooria kood (nt hair)
Päring (cURL)
curl -X GET "https://api.bjuti.ee/v1/agent/booking/my-active?contact_email=mari.tamm@example.com" \
  -H "Authorization: Bearer <access_token>"
HTTP 200 OK
{
  "status": "success",
  "data": [
    {
      "booking_id": "77a102bb-8199-4c01-bf10-9941a8291001",
      "status": "Confirmed",
      "category": "hair",
      "service_name": "Naiste juukselõikus",
      "salon_name": "Studio Elegance Kesklinn",
      "start_time": "2026-11-20T11:00:00+02:00"
    }
  ]
}

Mis on Bjuti MCP Server?

Model Context Protocol (MCP) on avatud standard, mis võimaldab tehisintellekti mudelitel ja agentidel (nt Claude, Cursor, kohandatud assistendid) turvaliselt suhelda reaalsete süsteemidega. Bjuti pakub standardiseeritud MCP serverit, mis võimaldab AI agentidel otse ja ilma vahekoodita teostada salongiotsingut, kalendriaegade arvutust ja broneeringute haldust.

MCP Serveri URL: https://api.bjuti.ee/mcp.
Server toetab nii JSON-RPC 2.0 päringuid kui ka Server-Sent Events (SSE) voogesitusühendusi.

MCP Kliendi Seadistamine (Näited)

Kui kasutate Claude Desktopi, Cursorit või muud MCP tuge omavat AI klienti, saate lisada Bjuti MCP serveri oma kliendi konfiguratsioonifaili:

Näide: Claude Desktop (`claude_desktop_config.json`)

Claude Desktop Config
{
  "mcpServers": {
    "bjuti": {
      "url": "https://api.bjuti.ee/mcp",
      "headers": {
        "Authorization": "Bearer <TEIE_ACCESS_TOKEN>"
      }
    }
  }
}

Näide: JSON-RPC päring otse üle HTTPS-i

cURL JSON-RPC Päring
curl -X POST https://api.bjuti.ee/mcp \
  -H "Authorization: Bearer <access_token>" \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
      "name": "bjuti_find_salons",
      "arguments": {
        "lat": 59.4369,
        "lng": 24.7535,
        "radius_km": 15
      }
    }
  }'

Avaldatud Bjuti MCP Tööriistad (Tools)

Bjuti MCP server teeb AI agendile kättesaadavaks järgmised spetsialiseeritud tööriistad:

Tööriista Nimi Sisendparameetrid Kirjeldus
bjuti_agent_auth client_id, client_secret Autendib agendi ja tagastab 15-minutilise Bearer tokeni.
bjuti_get_service_categories country (valikuline) Tagastab iluteenuste peagrupid (Juuksed, Küüned, Nägu jne).
bjuti_find_salons lat, lng, radius_km, query Otsib lähimaid salonge GPS koordinaatide või teksti järgi.
bjuti_get_salon_pricelist location_id Tagastab salongi asukoha teenuste ja hindade ametliku hinnakirja.
bjuti_get_available_slots location_id, professional_id, service_ids, date Arvutab spetsialisti kalendri ja graafiku alusel vabad broneerimisaknad.
bjuti_hold_booking location_id, professional_id, service_ids, date, start_time, contact_firstname, contact_phone, contact_email Lukustab valitud aja 15 minutiks ning saadab kliendile 6-kohalise e-posti kinnituskoodi.
bjuti_confirm_booking booking_id, verification_code Kinnitab On Hold broneeringu e-postiga saadud kinnituskoodi alusel.
bjuti_release_hold booking_id Vabastab aktiivse 15-minutilise holdi koheselt enne selle aegumist.
bjuti_join_waitlist location_id, professional_id, service_ids, contact_firstname, contact_phone, contact_email Lisab kliendi meistri ootenimekirja, kui soovitud kuupäevadel sobivat vaba aega ei leidunud.
bjuti_get_active_booking contact_email, category_id Kontrollib kliendi aktiivseid tulevikubroneeringuid.