GLØDI
Find clinics, treatments, prices and free times on GLØDI in Norway, with booking links.
我該用這個嗎
品質與安全性
發現項目(1)
- LOW在 browse_site 中
根據工具定義與協定合規性的自動化分析。
上下文成本
這是每次將伺服器的工具載入模型上下文時所消耗的約略 token 數量。數量越高,可用於其他工作的注意力就越少。
安裝
一鍵安裝
將以下內容加入你的 `claude_desktop_config.json` 檔案:
{
"mcpServers": {
"public-catalog": {
"url": "https://glodi.no/mcp"
}
}
}遠端端點
https://glodi.no/mcpstreamable-http它能做什麼
工具清單
工具(14)
🟢find_clinics(page, page_size, query, near, place, ...)
Find clinics near a place, in a town or by name, nearest first. Each clinic has its clinic_id, address, distance, phone numbers with call/SMS/WhatsApp channels, hours today, open now and rating. Give near (latitude/longitude) or place (a town, place name or four-digit postal code). With treatment_id, only clinics that offer it now, with their price from.
輸入結構描述
{
"type": "object",
"properties": {
"page": {
"type": "integer",
"minimum": 1,
"maximum": 10000,
"default": 1
},
"page_size": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"default": 20
},
"query": {
"type": "string",
"maxLength": 160,
"description": "A clinic name or a town. A town without a clinic of that name is searched as a place."
},
"near": {
"type": "object",
"properties": {
"latitude": {
"type": "number",
"minimum": -90,
"maximum": 90,
"description": "WGS84 latitude, for example 59.79."
},
"longitude": {
"type": "number",
"minimum": -180,
"maximum": 180,
"description": "WGS84 longitude, for example 10.33."
}
},
"required": [
"latitude",
"longitude"
],
"additionalProperties": false,
"description": "A position. It wins over place."
},
"place": {
"type": "string",
"maxLength": 100,
"description": "A town or place name (\"Asker\", \"Lierskogen\") or a four-digit postal code (\"3420\")."
},
"radius_km": {
"type": "number",
"minimum": 0.5,
"maximum": 500,
"default": 25,
"description": "Search radius around the position."
},
"treatment_id": {
"type": "string",
"maxLength": 200,
"description": "Only clinics that offer this treatment now."
},
"open_now": {
"type": "boolean",
"default": false,
"description": "Only clinics open at this moment (Europe/Oslo)."
},
"open_on": {
"type": "string",
"format": "date",
"description": "Only clinics open on this day (YYYY-MM-DD)."
},
"locale": {
"type": "string",
"enum": [
"nb",
"en"
],
"default": "nb",
"description": "Answer language: nb (Norwegian) or en."
}
},
"required": [],
"additionalProperties": false
}輸出結構描述
{
"type": "object",
"properties": {
"count": {
"type": "integer"
},
"next": {
"type": [
"string",
"null"
]
},
"previous": {
"type": [
"string",
"null"
]
},
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"clinic_id": {
"type": "string",
"description": "The clinic slug; pass it as clinic_id to other tools."
},
"name": {
"type": "string"
},
"type": {
"type": "string"
},
"short_description": {
"type": "string"
},
"address": {
"type": "object",
"properties": {
"street": {
"type": "string"
},
"postal_code": {
"type": "string"
},
"city": {
"type": "string"
}
},
"required": [
"street",
"postal_code",
"city"
],
"additionalProperties": false
},
"location": {
"type": [
"object",
"null"
],
"properties": {
"latitude": {
"type": "number"
},
"longitude": {
"type": "number"
}
},
"required": [
"latitude",
"longitude"
],
"additionalProperties": false
},
"distance_km": {
"type": [
"number",
"null"
]
},
"phones": {
"type": "array",
"items": {
"type": "object",
"properties": {
"number": {
"type": "string"
},
"label": {
"type": "string"
},
"note": {
"type": "string"
},
"channels": {
"type": "array",
"items": {
"type": "string"
},
"description": "call, sms or whatsapp."
}
},
"required": [
"number",
"label",
"note",
"channels"
],
"additionalProperties": false
}
},
"email": {
"type": "string"
},
"url": {
"type": "string"
},
"hours_today": {
"type": [
"object",
"null"
],
"properties": {
"date": {
"type": "string"
},
"closed": {
"type": "boolean"
},
"opens": {
"type": [
"string",
"null"
]
},
"closes": {
"type": [
"string",
"null"
]
},
"closure_reason": {
"type": "string"
}
},
"required": [
"date",
"closed",
"opens",
"closes",
"closure_reason"
],
"additionalProperties": false
},
"open_now": {
"type": [
"boolean",
"null"
]
},
"rating": {
"type": [
"object",
"null"
],
"properties": {
"average": {
"type": [
"number",
"null"
],
"description": "Average of published reviews, 1 to 5."
},
"count": {
"type": "integer"
}
},
"required": [
"average",
"count"
],
"additionalProperties": false
},
"price_from_nok": {
"type": [
"number",
"null"
],
"description": "Lowest current price of treatment_id at this clinic."
}
},
"required": [
"clinic_id",
"name",
"type",
"short_description",
"address",
"location",
"distance_km",
"phones",
"email",
"url",
"hours_today",
"open_now",
"rating",
"price_from_nok"
],
"additionalProperties": false
}
},
"place": {
"type": [
"object",
"null"
],
"properties": {
"query": {
"type": "string"
},
"name": {
"type": "string"
},
"kind": {
"type": "string"
},
"municipality": {
"type": "string"
},
"postal_code": {
"type": [
"string",
"null"
]
},
"latitude": {
"type": "number"
},
"longitude": {
"type": "number"
},
"source": {
"type": "string"
}
},
"required": [
"query",
"name",
"kind",
"municipality",
"postal_code",
"latitude",
"longitude",
"source"
],
"additionalProperties": false
},
"radius_km": {
"type": [
"number",
"null"
]
},
"none_within_radius": {
"type": "boolean"
},
"nearest_outside_radius": {
"type": "array",
"items": {
"type": "object",
"properties": {
"clinic_id": {
"type": "string",
"description": "The clinic slug; pass it as clinic_id to other tools."
},
"name": {
"type": "string"
},
"type": {
"type": "string"
},
"short_description": {
"type": "string"
},
"address": {
"type": "object",
"properties": {
"street": {
"type": "string"
},
"postal_code": {
"type": "string"
},
"city": {
"type": "string"
}
},
"required": [
"street",
"postal_code",
"city"
],
"additionalProperties": false
},
"location": {
"type": [
"object",
"null"
],
"properties": {
"latitude": {
"type": "number"
},
"longitude": {
"type": "number"
}
},
"required": [
"latitude",
"longitude"
],
"additionalProperties": false
},
"distance_km": {
"type": [
"number",
"null"
]
},
"phones": {
"type": "array",
"items": {
"type": "object",
"properties": {
"number": {
"type": "string"
},
"label": {
"type": "string"
},
"note": {
"type": "string"
},
"channels": {
"type": "array",
"items": {
"type": "string"
},
"description": "call, sms or whatsapp."
}
},
"required": [
"number",
"label",
"note",
"channels"
],
"additionalProperties": false
}
},
"email": {
"type": "string"
},
"url": {
"type": "string"
},
"hours_today": {
"type": [
"object",
"null"
],
"properties": {
"date": {
"type": "string"
},
"closed": {
"type": "boolean"
},
"opens": {
"type": [
"string",
"null"
]
},
"closes": {
"type": [
"string",
"null"
]
},
"closure_reason": {
"type": "string"
}
},
"required": [
"date",
"closed",
"opens",
"closes",
"closure_reason"
],
"additionalProperties": false
},
"open_now": {
"type": [
"boolean",
"null"
]
},
"rating": {
"type": [
"object",
"null"
],
"properties": {
"average": {
"type": [
"number",
"null"
],
"description": "Average of published reviews, 1 to 5."
},
"count": {
"type": "integer"
}
},
"required": [
"average",
"count"
],
"additionalProperties": false
},
"price_from_nok": {
"type": [
"number",
"null"
],
"description": "Lowest current price of treatment_id at this clinic."
}
},
"required": [
"clinic_id",
"name",
"type",
"short_description",
"address",
"location",
"distance_km",
"phones",
"email",
"url",
"hours_today",
"open_now",
"rating",
"price_from_nok"
],
"additionalProperties": false
}
}
},
"required": [
"count",
"next",
"previous",
"results",
"place",
"radius_km",
"none_within_radius",
"nearest_outside_radius"
],
"additionalProperties": false
}🟢get_clinic(clinic_id, locale)
One clinic's facts: address, phones, the week's opening hours (also odd and even weeks), closed days, parking, team, treatment categories with prices, current offers, payment methods, cancellation notice, gift cards and subscriptions.
輸入結構描述
{
"type": "object",
"properties": {
"clinic_id": {
"type": "string",
"maxLength": 80,
"description": "The clinic_id find_clinics returns. Never build it from a name. A clinic site needs none."
},
"locale": {
"type": "string",
"enum": [
"nb",
"en"
],
"default": "nb",
"description": "Answer language: nb (Norwegian) or en."
}
},
"required": [],
"additionalProperties": false
}輸出結構描述
{
"type": "object",
"properties": {
"clinic_id": {
"type": "string",
"description": "The clinic slug; pass it as clinic_id to other tools."
},
"name": {
"type": "string"
},
"type": {
"type": "string"
},
"short_description": {
"type": "string"
},
"address": {
"type": "object",
"properties": {
"street": {
"type": "string"
},
"postal_code": {
"type": "string"
},
"city": {
"type": "string"
}
},
"required": [
"street",
"postal_code",
"city"
],
"additionalProperties": false
},
"location": {
"type": [
"object",
"null"
],
"properties": {
"latitude": {
"type": "number"
},
"longitude": {
"type": "number"
}
},
"required": [
"latitude",
"longitude"
],
"additionalProperties": false
},
"distance_km": {
"type": [
"number",
"null"
]
},
"phones": {
"type": "array",
"items": {
"type": "object",
"properties": {
"number": {
"type": "string"
},
"label": {
"type": "string"
},
"note": {
"type": "string"
},
"channels": {
"type": "array",
"items": {
"type": "string"
},
"description": "call, sms or whatsapp."
}
},
"required": [
"number",
"label",
"note",
"channels"
],
"additionalProperties": false
}
},
"email": {
"type": "string"
},
"url": {
"type": "string"
},
"hours_today": {
"type": [
"object",
"null"
],
"properties": {
"date": {
"type": "string"
},
"closed": {
"type": "boolean"
},
"opens": {
"type": [
"string",
"null"
]
},
"closes": {
"type": [
"string",
"null"
]
},
"closure_reason": {
"type": "string"
}
},
"required": [
"date",
"closed",
"opens",
"closes",
"closure_reason"
],
"additionalProperties": false
},
"open_now": {
"type": [
"boolean",
"null"
]
},
"rating": {
"type": [
"object",
"null"
],
"properties": {
"average": {
"type": [
"number",
"null"
],
"description": "Average of published reviews, 1 to 5."
},
"count": {
"type": "integer"
}
},
"required": [
"average",
"count"
],
"additionalProperties": false
},
"price_from_nok": {
"type": [
"number",
"null"
],
"description": "Lowest current price of treatment_id at this clinic."
},
"description": {
"type": "string"
},
"week_hours": {
"type": [
"object",
"null"
],
"properties": {
"timezone": {
"type": "string"
},
"alternating": {
"type": "boolean"
},
"this_week": {
"type": "string",
"description": "odd or even: the parity of the current ISO week."
},
"schedules": {
"type": "array",
"items": {
"type": "object",
"properties": {
"weeks": {
"type": "string",
"description": "every, odd or even ISO weeks."
},
"days": {
"type": "array",
"items": {
"type": "object",
"properties": {
"weekday": {
"type": "integer",
"description": "0 is Monday."
},
"day": {
"type": "string"
},
"closed": {
"type": "boolean"
},
"opens": {
"type": [
"string",
"null"
]
},
"closes": {
"type": [
"string",
"null"
]
}
},
"required": [
"weekday",
"day",
"closed",
"opens",
"closes"
],
"additionalProperties": false
}
}
},
"required": [
"weeks",
"days"
],
"additionalProperties": false
}
}
},
"required": [
"timezone",
"alternating",
"this_week",
"schedules"
],
"additionalProperties": false
},
"closures": {
"type": "array",
"items": {
"type": "object",
"properties": {
"date": {
"type": "string"
},
"reason": {
"type": "string"
}
},
"required": [
"date",
"reason"
],
"additionalProperties": false
}
},
"parking": {
"type": "string"
},
"social_links": {
"type": "array",
"items": {
"type": "object",
"properties": {
"platform": {
"type": "string"
},
"url": {
"type": "string"
}
},
"required": [
"platform",
"url"
],
"additionalProperties": false
}
},
"legal_name": {
"type": "string"
},
"org_number": {
"type": "string"
},
"team": {
"type": "array",
"items": {
"type": "object",
"properties": {
"practitioner_id": {
"type": [
"integer",
"null"
]
},
"name": {
"type": "string"
},
"title": {
"type": "string"
},
"rating": {
"type": [
"object",
"null"
],
"properties": {
"average": {
"type": [
"number",
"null"
],
"description": "Average of published reviews, 1 to 5."
},
"count": {
"type": "integer"
}
},
"required": [
"average",
"count"
],
"additionalProperties": false
},
"url": {
"type": [
"string",
"null"
]
}
},
"required": [
"practitioner_id",
"name",
"title",
"rating",
"url"
],
"additionalProperties": false
}
},
"treatment_tree": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"treatment_count": {
"type": "integer"
},
"price_from_nok": {
"type": [
"number",
"null"
]
},
"price_to_nok": {
"type": [
"number",
"null"
]
},
"subcategories": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"treatment_count": {
"type": "integer"
},
"price_from_nok": {
"type": [
"number",
"null"
]
},
"price_to_nok": {
"type": [
"number",
"null"
]
}
},
"required": [
"name",
"slug",
"treatment_count",
"price_from_nok",
"price_to_nok"
],
"additionalProperties": false
}
}
},
"required": [
"name",
"slug",
"treatment_count",
"price_from_nok",
"price_to_nok",
"subcategories"
],
"additionalProperties": false
}
},
"on_offer": {
"type": "array",
"items": {
"type": "object",
"properties": {
"treatment_id": {
"type": "string"
},
"name": {
"type": "string"
},
"offer_price_from_nok": {
"type": [
"number",
"null"
]
},
"offer_price_to_nok": {
"type": [
"number",
"null"
]
},
"url": {
"type": "string"
}
},
"required": [
"treatment_id",
"name",
"offer_price_from_nok",
"offer_price_to_nok",
"url"
],
"additionalProperties": false
}
},
"payment_methods": {
"type": "array",
"items": {
"type": "string"
}
},
"cancellation_notice_hours": {
"type": [
"integer",
"null"
]
},
"gift_card": {
"type": [
"object",
"null"
],
"properties": {
"url": {
"type": "string"
},
"terms": {
"type": "string"
},
"expiry": {
"type": "string"
}
},
"required": [
"url",
"terms",
"expiry"
],
"additionalProperties": false
},
"subscriptions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"interval": {
"type": "string",
"description": "The default delivery interval."
},
"discount_percent": {
"type": [
"number",
"null"
]
},
"free_shipping": {
"type": "boolean"
},
"products": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"price_nok": {
"type": [
"number",
"null"
]
}
},
"required": [
"name",
"price_nok"
],
"additionalProperties": false
}
},
"url": {
"type": "string"
}
},
"required": [
"name",
"description",
"interval",
"discount_percent",
"free_shipping",
"products",
"url"
],
"additionalProperties": false
}
},
"products_count": {
"type": "integer"
},
"events_count": {
"type": "integer"
},
"privacy_url": {
"type": "string"
},
"terms_url": {
"type": "string"
}
},
"required": [
"clinic_id",
"name",
"type",
"short_description",
"address",
"location",
"distance_km",
"phones",
"email",
"url",
"hours_today",
"open_now",
"rating",
"price_from_nok",
"description",
"week_hours",
"closures",
"parking",
"social_links",
"legal_name",
"org_number",
"team",
"treatment_tree",
"on_offer",
"payment_methods",
"cancellation_notice_hours",
"gift_card",
"subscriptions",
"products_count",
"events_count",
"privacy_url",
"terms_url"
],
"additionalProperties": false
}🟢find_practitioners(page, page_size, query, clinic_id, locale)
Find a practitioner by name (at least two letters) and the clinics where each can be booked now. For who can do one treatment option, with prices, use get_booking_choices.
輸入結構描述
{
"type": "object",
"properties": {
"page": {
"type": "integer",
"minimum": 1,
"maximum": 10000,
"default": 1
},
"page_size": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"default": 20
},
"query": {
"type": "string",
"maxLength": 160,
"description": "At least two letters of the practitioner name."
},
"clinic_id": {
"type": "string",
"maxLength": 80,
"description": "The clinic_id find_clinics returns. Never build it from a name. A clinic site needs none."
},
"locale": {
"type": "string",
"enum": [
"nb",
"en"
],
"default": "nb",
"description": "Answer language: nb (Norwegian) or en."
}
},
"required": [],
"additionalProperties": false
}輸出結構描述
{
"type": "object",
"properties": {
"count": {
"type": "integer"
},
"next": {
"type": [
"string",
"null"
]
},
"previous": {
"type": [
"string",
"null"
]
},
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"practitioner_id": {
"type": "integer"
},
"name": {
"type": "string"
},
"title": {
"type": "string"
},
"url": {
"type": [
"string",
"null"
]
},
"clinics": {
"type": "array",
"items": {
"type": "object",
"properties": {
"clinic_id": {
"type": "string"
},
"name": {
"type": "string"
}
},
"required": [
"clinic_id",
"name"
],
"additionalProperties": false
}
},
"rating": {
"type": [
"object",
"null"
],
"properties": {
"average": {
"type": [
"number",
"null"
],
"description": "Average of published reviews, 1 to 5."
},
"count": {
"type": "integer"
}
},
"required": [
"average",
"count"
],
"additionalProperties": false
}
},
"required": [
"practitioner_id",
"name",
"title",
"url",
"clinics",
"rating"
],
"additionalProperties": false
}
}
},
"required": [
"count",
"next",
"previous",
"results"
],
"additionalProperties": false
}🟢search_treatments(page, page_size, query, clinic_id, near, ...)
Search treatments in Norwegian and English at once; spelling mistakes and compound words are handled. Each result has its treatment_id, category path, price from-to, offer price, duration, clinic count and, with near or place, the nearest clinics. Filter by category, body_area or skin_concern (browse_site lists them). Treatments no clinic can book now are left out unless include_unbookable is true. Without a match: suggestions and categories.
輸入結構描述
{
"type": "object",
"properties": {
"page": {
"type": "integer",
"minimum": 1,
"maximum": 10000,
"default": 1
},
"page_size": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"default": 20
},
"query": {
"type": "string",
"maxLength": 160,
"description": "Treatment words in Norwegian or English. Leave empty to browse."
},
"clinic_id": {
"type": "string",
"maxLength": 80,
"description": "The clinic_id find_clinics returns. Never build it from a name. A clinic site needs none."
},
"near": {
"type": "object",
"properties": {
"latitude": {
"type": "number",
"minimum": -90,
"maximum": 90,
"description": "WGS84 latitude, for example 59.79."
},
"longitude": {
"type": "number",
"minimum": -180,
"maximum": 180,
"description": "WGS84 longitude, for example 10.33."
}
},
"required": [
"latitude",
"longitude"
],
"additionalProperties": false,
"description": "A position. It wins over place."
},
"place": {
"type": "string",
"maxLength": 100,
"description": "A town or place name (\"Asker\", \"Lierskogen\") or a four-digit postal code (\"3420\")."
},
"category": {
"type": "string",
"maxLength": 200,
"description": "A category slug from browse_site, or its slug path (\"ansikt/laser\")."
},
"body_area": {
"type": "string",
"maxLength": 120,
"description": "A body area slug from browse_site."
},
"skin_concern": {
"type": "string",
"maxLength": 120,
"description": "A skin concern slug from browse_site."
},
"max_price_nok": {
"type": "number",
"minimum": 0,
"description": "Only treatments with a price from at most this."
},
"on_offer": {
"type": "boolean",
"default": false,
"description": "Only treatments with an active offer."
},
"include_unbookable": {
"type": "boolean",
"default": false,
"description": "Also treatments no clinic can book now."
},
"locale": {
"type": "string",
"enum": [
"nb",
"en"
],
"default": "nb",
"description": "Answer language: nb (Norwegian) or en."
}
},
"required": [],
"additionalProperties": false
}輸出結構描述
{
"type": "object",
"properties": {
"count": {
"type": "integer"
},
"next": {
"type": [
"string",
"null"
]
},
"previous": {
"type": [
"string",
"null"
]
},
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"treatment_id": {
"type": "string",
"description": "The treatment slug; pass it as treatment_id."
},
"service_id": {
"type": "integer"
},
"name": {
"type": "string"
},
"other_name": {
"type": "string",
"description": "The name in the other language."
},
"category_path": {
"type": "array",
"items": {
"type": "string"
}
},
"summary": {
"type": "string"
},
"price_from_nok": {
"type": [
"number",
"null"
]
},
"price_to_nok": {
"type": [
"number",
"null"
]
},
"offer": {
"type": [
"object",
"null"
],
"properties": {
"price_from_nok": {
"type": [
"number",
"null"
]
},
"price_to_nok": {
"type": [
"number",
"null"
]
}
},
"required": [
"price_from_nok",
"price_to_nok"
],
"additionalProperties": false
},
"duration_minutes": {
"type": [
"object",
"null"
],
"properties": {
"min": {
"type": [
"integer",
"null"
]
},
"max": {
"type": [
"integer",
"null"
]
}
},
"required": [
"min",
"max"
],
"additionalProperties": false
},
"option_count": {
"type": "integer"
},
"requires_consultation": {
"type": "boolean"
},
"bookable": {
"type": [
"boolean",
"null"
],
"description": "null: still unknown."
},
"clinic_count": {
"type": [
"integer",
"null"
]
},
"nearest_clinics": {
"type": "array",
"items": {
"type": "object",
"properties": {
"clinic_id": {
"type": "string"
},
"name": {
"type": "string"
},
"distance_km": {
"type": [
"number",
"null"
]
},
"price_from_nok": {
"type": [
"number",
"null"
]
},
"url": {
"type": "string"
}
},
"required": [
"clinic_id",
"name",
"distance_km",
"price_from_nok",
"url"
],
"additionalProperties": false
}
},
"url": {
"type": "string"
},
"booking_url": {
"type": "string"
}
},
"required": [
"treatment_id",
"service_id",
"name",
"other_name",
"category_path",
"summary",
"price_from_nok",
"price_to_nok",
"offer",
"duration_minutes",
"option_count",
"requires_consultation",
"bookable",
"clinic_count",
"nearest_clinics",
"url",
"booking_url"
],
"additionalProperties": false
}
},
"complete": {
"type": "boolean",
"description": "false: some prices or bookability are still building."
},
"corrected_query": {
"type": [
"string",
"null"
]
},
"suggestions": {
"type": "array",
"items": {
"type": "string"
}
},
"categories": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"treatment_count": {
"type": "integer"
}
},
"required": [
"name",
"slug",
"treatment_count"
],
"additionalProperties": false
}
},
"place": {
"type": [
"object",
"null"
],
"properties": {
"query": {
"type": "string"
},
"name": {
"type": "string"
},
"kind": {
"type": "string"
},
"municipality": {
"type": "string"
},
"postal_code": {
"type": [
"string",
"null"
]
},
"latitude": {
"type": "number"
},
"longitude": {
"type": "number"
},
"source": {
"type": "string"
}
},
"required": [
"query",
"name",
"kind",
"municipality",
"postal_code",
"latitude",
"longitude",
"source"
],
"additionalProperties": false
}
},
"required": [
"count",
"next",
"previous",
"results",
"complete",
"corrected_query",
"suggestions",
"categories",
"place"
],
"additionalProperties": false
}🟢get_treatment(treatment_id, clinic_id, near, place, locale)
One treatment: what it is, the procedure, recovery and safety, sessions and interval, its options with option_id, price, offer price and duration, the clinics that offer it and its reviews. Every option has a booking_url.
輸入結構描述
{
"type": "object",
"properties": {
"treatment_id": {
"type": "string",
"maxLength": 200,
"description": "The treatment_id search_treatments returns."
},
"clinic_id": {
"type": "string",
"maxLength": 80,
"description": "The clinic_id find_clinics returns. Never build it from a name. A clinic site needs none."
},
"near": {
"type": "object",
"properties": {
"latitude": {
"type": "number",
"minimum": -90,
"maximum": 90,
"description": "WGS84 latitude, for example 59.79."
},
"longitude": {
"type": "number",
"minimum": -180,
"maximum": 180,
"description": "WGS84 longitude, for example 10.33."
}
},
"required": [
"latitude",
"longitude"
],
"additionalProperties": false,
"description": "A position. It wins over place."
},
"place": {
"type": "string",
"maxLength": 100,
"description": "A town or place name (\"Asker\", \"Lierskogen\") or a four-digit postal code (\"3420\")."
},
"locale": {
"type": "string",
"enum": [
"nb",
"en"
],
"default": "nb",
"description": "Answer language: nb (Norwegian) or en."
}
},
"required": [
"treatment_id"
],
"additionalProperties": false
}輸出結構描述
{
"type": "object",
"properties": {
"treatment_id": {
"type": "string"
},
"service_id": {
"type": "integer"
},
"name": {
"type": "string"
},
"other_name": {
"type": "string"
},
"category_path": {
"type": "array",
"items": {
"type": "string"
}
},
"about": {
"type": "string"
},
"facts": {
"type": "object",
"properties": {
"sessions": {
"type": [
"integer",
"null"
]
},
"interval_days": {
"type": [
"integer",
"null"
]
},
"price_is_per_session": {
"type": "boolean"
},
"requires_consultation": {
"type": "boolean"
}
},
"required": [
"sessions",
"interval_days",
"price_is_per_session",
"requires_consultation"
],
"additionalProperties": false
},
"content": {
"type": "object",
"properties": {
"procedure": {
"type": "string"
},
"experience_and_recovery": {
"type": "string"
},
"expectations_and_safety": {
"type": "string"
},
"benefits": {
"type": "array",
"items": {
"type": "string"
}
},
"expected_results": {
"type": "string"
}
},
"required": [
"procedure",
"experience_and_recovery",
"expectations_and_safety",
"benefits",
"expected_results"
],
"additionalProperties": false
},
"options": {
"type": "array",
"items": {
"type": "object",
"properties": {
"option_id": {
"type": "integer"
},
"name": {
"type": "string"
},
"price_from_nok": {
"type": [
"number",
"null"
]
},
"price_to_nok": {
"type": [
"number",
"null"
]
},
"offer_price_nok": {
"type": [
"number",
"null"
]
},
"duration_minutes": {
"type": [
"integer",
"null"
]
},
"party_size": {
"type": "integer"
},
"bookable": {
"type": [
"boolean",
"null"
]
},
"booking_url": {
"type": "string"
}
},
"required": [
"option_id",
"name",
"price_from_nok",
"price_to_nok",
"offer_price_nok",
"duration_minutes",
"party_size",
"bookable",
"booking_url"
],
"additionalProperties": false
}
},
"clinics": {
"type": "array",
"items": {
"type": "object",
"properties": {
"clinic_id": {
"type": "string"
},
"name": {
"type": "string"
},
"distance_km": {
"type": [
"number",
"null"
]
},
"price_from_nok": {
"type": [
"number",
"null"
]
},
"url": {
"type": "string"
}
},
"required": [
"clinic_id",
"name",
"distance_km",
"price_from_nok",
"url"
],
"additionalProperties": false
}
},
"reviews": {
"type": [
"object",
"null"
],
"properties": {
"average": {
"type": [
"number",
"null"
],
"description": "Average of published reviews, 1 to 5."
},
"count": {
"type": "integer"
}
},
"required": [
"average",
"count"
],
"additionalProperties": false
},
"guide_url": {
"type": [
"string",
"null"
]
},
"url": {
"type": "string"
},
"complete": {
"type": "boolean"
},
"place": {
"type": [
"object",
"null"
],
"properties": {
"query": {
"type": "string"
},
"name": {
"type": "string"
},
"kind": {
"type": "string"
},
"municipality": {
"type": "string"
},
"postal_code": {
"type": [
"string",
"null"
]
},
"latitude": {
"type": "number"
},
"longitude": {
"type": "number"
},
"source": {
"type": "string"
}
},
"required": [
"query",
"name",
"kind",
"municipality",
"postal_code",
"latitude",
"longitude",
"source"
],
"additionalProperties": false
}
},
"required": [
"treatment_id",
"service_id",
"name",
"other_name",
"category_path",
"about",
"facts",
"content",
"options",
"clinics",
"reviews",
"guide_url",
"url",
"complete",
"place"
],
"additionalProperties": false
}🟢get_booking_choices(option_id, clinic_id, near, place, locale)
The choices the booking lightbox offers for one option_id. Without a clinic: every clinic that can book it, with distance, practitioner count and prices. With clinic_id: the practitioners with their own prices (practitioner_id), add-ons, packages, party size, cancellation notice and payment methods.
輸入結構描述
{
"type": "object",
"properties": {
"option_id": {
"type": "integer",
"minimum": 1,
"description": "The option_id get_treatment returns."
},
"clinic_id": {
"type": "string",
"maxLength": 80,
"description": "The clinic_id find_clinics returns. Never build it from a name. A clinic site needs none."
},
"near": {
"type": "object",
"properties": {
"latitude": {
"type": "number",
"minimum": -90,
"maximum": 90,
"description": "WGS84 latitude, for example 59.79."
},
"longitude": {
"type": "number",
"minimum": -180,
"maximum": 180,
"description": "WGS84 longitude, for example 10.33."
}
},
"required": [
"latitude",
"longitude"
],
"additionalProperties": false,
"description": "A position. It wins over place."
},
"place": {
"type": "string",
"maxLength": 100,
"description": "A town or place name (\"Asker\", \"Lierskogen\") or a four-digit postal code (\"3420\")."
},
"locale": {
"type": "string",
"enum": [
"nb",
"en"
],
"default": "nb",
"description": "Answer language: nb (Norwegian) or en."
}
},
"required": [
"option_id"
],
"additionalProperties": false
}輸出結構描述
{
"type": "object",
"properties": {
"option_id": {
"type": "integer"
},
"option_name": {
"type": "string"
},
"treatment_id": {
"type": "string"
},
"clinic_id": {
"type": [
"string",
"null"
]
},
"complete": {
"type": "boolean",
"description": "false: some clinics or practitioners are still building."
},
"clinics": {
"type": "array",
"items": {
"type": "object",
"properties": {
"clinic_id": {
"type": "string"
},
"name": {
"type": "string"
},
"address": {
"type": "object",
"properties": {
"street": {
"type": "string"
},
"postal_code": {
"type": "string"
},
"city": {
"type": "string"
}
},
"required": [
"street",
"postal_code",
"city"
],
"additionalProperties": false
},
"location": {
"type": [
"object",
"null"
],
"properties": {
"latitude": {
"type": "number"
},
"longitude": {
"type": "number"
}
},
"required": [
"latitude",
"longitude"
],
"additionalProperties": false
},
"distance_km": {
"type": [
"number",
"null"
]
},
"rating": {
"type": [
"object",
"null"
],
"properties": {
"average": {
"type": [
"number",
"null"
],
"description": "Average of published reviews, 1 to 5."
},
"count": {
"type": "integer"
}
},
"required": [
"average",
"count"
],
"additionalProperties": false
},
"practitioner_count": {
"type": "integer"
},
"price_from_nok": {
"type": [
"number",
"null"
]
},
"price_to_nok": {
"type": [
"number",
"null"
]
},
"duration_minutes": {
"type": [
"object",
"null"
],
"properties": {
"min": {
"type": [
"integer",
"null"
]
},
"max": {
"type": [
"integer",
"null"
]
}
},
"required": [
"min",
"max"
],
"additionalProperties": false
},
"offer_price_from_nok": {
"type": [
"number",
"null"
]
},
"offer_price_to_nok": {
"type": [
"number",
"null"
]
},
"booking_url": {
"type": "string"
}
},
"required": [
"clinic_id",
"name",
"address",
"location",
"distance_km",
"rating",
"practitioner_count",
"price_from_nok",
"price_to_nok",
"duration_minutes",
"offer_price_from_nok",
"offer_price_to_nok",
"booking_url"
],
"additionalProperties": false
}
},
"practitioners": {
"type": "array",
"items": {
"type": "object",
"properties": {
"practitioner_id": {
"type": "integer"
},
"name": {
"type": "string"
},
"title": {
"type": "string"
},
"seniority": {
"type": "string"
},
"price_nok": {
"type": [
"number",
"null"
]
},
"offer_price_nok": {
"type": [
"number",
"null"
]
},
"duration_minutes": {
"type": [
"integer",
"null"
]
},
"rating": {
"type": [
"number",
"null"
]
},
"review_count": {
"type": "integer"
},
"has_free_time": {
"type": "boolean"
},
"booking_url": {
"type": "string"
}
},
"required": [
"practitioner_id",
"name",
"title",
"seniority",
"price_nok",
"offer_price_nok",
"duration_minutes",
"rating",
"review_count",
"has_free_time",
"booking_url"
],
"additionalProperties": false
}
},
"add_ons": {
"type": "array",
"items": {
"type": "object",
"properties": {
"add_on_id": {
"type": "integer"
},
"name": {
"type": "string"
},
"price_nok": {
"type": [
"number",
"null"
]
},
"extra_minutes": {
"type": "integer"
}
},
"required": [
"add_on_id",
"name",
"price_nok",
"extra_minutes"
],
"additionalProperties": false
}
},
"packages": {
"type": "array",
"items": {
"type": "object",
"properties": {
"package_id": {
"type": "integer"
},
"name": {
"type": "string"
},
"sessions": {
"type": "integer"
},
"price_nok": {
"type": [
"number",
"null"
]
},
"saving_percent": {
"type": [
"number",
"null"
]
},
"booking_url": {
"type": "string"
}
},
"required": [
"package_id",
"name",
"sessions",
"price_nok",
"saving_percent",
"booking_url"
],
"additionalProperties": false
}
},
"party_size": {
"type": "integer"
},
"cancellation_notice_hours": {
"type": [
"integer",
"null"
]
},
"payment_methods": {
"type": "array",
"items": {
"type": "string"
}
},
"booking_url": {
"type": "string"
},
"place": {
"type": [
"object",
"null"
],
"properties": {
"query": {
"type": "string"
},
"name": {
"type": "string"
},
"kind": {
"type": "string"
},
"municipality": {
"type": "string"
},
"postal_code": {
"type": [
"string",
"null"
]
},
"latitude": {
"type": "number"
},
"longitude": {
"type": "number"
},
"source": {
"type": "string"
}
},
"required": [
"query",
"name",
"kind",
"municipality",
"postal_code",
"latitude",
"longitude",
"source"
],
"additionalProperties": false
}
},
"required": [
"option_id",
"option_name",
"treatment_id",
"clinic_id",
"complete",
"clinics",
"practitioners",
"add_ons",
"packages",
"party_size",
"cancellation_notice_hours",
"payment_methods",
"booking_url",
"place"
],
"additionalProperties": false
}🟢find_free_days(option_id, clinic_id, near, place, practitioner_id, ...)
Which days have a free time for one option_id, for up to 60 days, at clinic_id or at the three nearest clinics to near or place. For one practitioner_id or anyone; add_on_ids lengthen the visit. No free day gives a waitlist_url.
輸入結構描述
{
"type": "object",
"properties": {
"option_id": {
"type": "integer",
"minimum": 1,
"description": "The option_id get_treatment returns."
},
"clinic_id": {
"type": "string",
"maxLength": 80,
"description": "The clinic_id find_clinics returns. Never build it from a name. A clinic site needs none."
},
"near": {
"type": "object",
"properties": {
"latitude": {
"type": "number",
"minimum": -90,
"maximum": 90,
"description": "WGS84 latitude, for example 59.79."
},
"longitude": {
"type": "number",
"minimum": -180,
"maximum": 180,
"description": "WGS84 longitude, for example 10.33."
}
},
"required": [
"latitude",
"longitude"
],
"additionalProperties": false,
"description": "A position. It wins over place."
},
"place": {
"type": "string",
"maxLength": 100,
"description": "A town or place name (\"Asker\", \"Lierskogen\") or a four-digit postal code (\"3420\")."
},
"practitioner_id": {
"type": "integer",
"minimum": 1,
"description": "One practitioner; omit for anyone."
},
"add_on_ids": {
"type": "array",
"items": {
"type": "integer",
"minimum": 1
},
"maxItems": 10,
"description": "Add-on ids from get_booking_choices. Their minutes lengthen each time."
},
"from_date": {
"type": "string",
"format": "date",
"description": "First day (YYYY-MM-DD); default today."
},
"days": {
"type": "integer",
"minimum": 1,
"maximum": 60,
"default": 30,
"description": "How many days to check."
},
"locale": {
"type": "string",
"enum": [
"nb",
"en"
],
"default": "nb",
"description": "Answer language: nb (Norwegian) or en."
}
},
"required": [
"option_id"
],
"additionalProperties": false
}輸出結構描述
{
"type": "object",
"properties": {
"option_id": {
"type": "integer"
},
"practitioner_id": {
"type": [
"integer",
"null"
]
},
"from_date": {
"type": "string"
},
"to_date": {
"type": "string"
},
"clinics": {
"type": "array",
"items": {
"type": "object",
"properties": {
"clinic_id": {
"type": "string"
},
"name": {
"type": "string"
},
"distance_km": {
"type": [
"number",
"null"
]
},
"free_days": {
"type": "array",
"items": {
"type": "string"
}
},
"next_free_day": {
"type": [
"string",
"null"
]
},
"complete": {
"type": "boolean"
},
"booking_url": {
"type": "string"
},
"waitlist_url": {
"type": [
"string",
"null"
]
}
},
"required": [
"clinic_id",
"name",
"distance_km",
"free_days",
"next_free_day",
"complete",
"booking_url",
"waitlist_url"
],
"additionalProperties": false
}
},
"place": {
"type": [
"object",
"null"
],
"properties": {
"query": {
"type": "string"
},
"name": {
"type": "string"
},
"kind": {
"type": "string"
},
"municipality": {
"type": "string"
},
"postal_code": {
"type": [
"string",
"null"
]
},
"latitude": {
"type": "number"
},
"longitude": {
"type": "number"
},
"source": {
"type": "string"
}
},
"required": [
"query",
"name",
"kind",
"municipality",
"postal_code",
"latitude",
"longitude",
"source"
],
"additionalProperties": false
}
},
"required": [
"option_id",
"practitioner_id",
"from_date",
"to_date",
"clinics",
"place"
],
"additionalProperties": false
}🟢find_free_times(option_id, clinic_id, date, from_date, days, ...)
The free times on a date (or up to 7 days) for one option_id at clinic_id, with the practitioners free at each time and their prices. Every time has a booking_url that opens the booking lightbox with the option, practitioner, day, time and add-ons chosen. A time is not held until the person books it.
輸入結構描述
{
"type": "object",
"properties": {
"option_id": {
"type": "integer",
"minimum": 1,
"description": "The option_id get_treatment returns."
},
"clinic_id": {
"type": "string",
"maxLength": 80,
"description": "The clinic_id find_clinics returns. Never build it from a name. A clinic site needs none."
},
"date": {
"type": "string",
"format": "date",
"description": "One day (YYYY-MM-DD)."
},
"from_date": {
"type": "string",
"format": "date",
"description": "First day of a range (YYYY-MM-DD); default today."
},
"days": {
"type": "integer",
"minimum": 1,
"maximum": 7,
"default": 1,
"description": "How many days from from_date."
},
"practitioner_id": {
"type": "integer",
"minimum": 1,
"description": "One practitioner; omit for anyone."
},
"add_on_ids": {
"type": "array",
"items": {
"type": "integer",
"minimum": 1
},
"maxItems": 10,
"description": "Add-on ids from get_booking_choices. Their minutes lengthen each time."
},
"part_of_day": {
"type": "string",
"enum": [
"morning",
"afternoon",
"evening"
],
"description": "morning: before 12:00; afternoon: 12:00-17:00; evening: from 17:00."
},
"locale": {
"type": "string",
"enum": [
"nb",
"en"
],
"default": "nb",
"description": "Answer language: nb (Norwegian) or en."
}
},
"required": [
"option_id"
],
"additionalProperties": false
}輸出結構描述
{
"type": "object",
"properties": {
"option_id": {
"type": "integer"
},
"clinic_id": {
"type": "string"
},
"practitioner_id": {
"type": [
"integer",
"null"
]
},
"days": {
"type": "array",
"items": {
"type": "object",
"properties": {
"date": {
"type": "string"
},
"times": {
"type": "array",
"items": {
"type": "object",
"properties": {
"start": {
"type": "string"
},
"end": {
"type": "string"
},
"practitioners": {
"type": "array",
"items": {
"type": "object",
"properties": {
"practitioner_id": {
"type": "integer"
},
"name": {
"type": "string"
},
"price_nok": {
"type": [
"number",
"null"
]
},
"offer_price_nok": {
"type": [
"number",
"null"
]
}
},
"required": [
"practitioner_id",
"name",
"price_nok",
"offer_price_nok"
],
"additionalProperties": false
}
},
"booking_url": {
"type": "string"
}
},
"required": [
"start",
"end",
"practitioners",
"booking_url"
],
"additionalProperties": false
}
},
"more_times": {
"type": "boolean",
"description": "true: the day has more times than listed."
}
},
"required": [
"date",
"times",
"more_times"
],
"additionalProperties": false
}
},
"note": {
"type": "string"
},
"waitlist_url": {
"type": [
"string",
"null"
]
}
},
"required": [
"option_id",
"clinic_id",
"practitioner_id",
"days",
"note",
"waitlist_url"
],
"additionalProperties": false
}🟢list_offers(page, page_size, clinic_id, item_type, item_slug, ...)
The live offers (campaigns), with each treatment or product, its price before and after, and until when it holds. Filter by clinic_id, item_type or item_slug; offer_id reads one offer.
輸入結構描述
{
"type": "object",
"properties": {
"page": {
"type": "integer",
"minimum": 1,
"maximum": 10000,
"default": 1
},
"page_size": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"default": 20
},
"clinic_id": {
"type": "string",
"maxLength": 80,
"description": "The clinic_id find_clinics returns. Never build it from a name. A clinic site needs none."
},
"item_type": {
"type": "string",
"enum": [
"service",
"product"
],
"description": "Offers on treatments or products."
},
"item_slug": {
"type": "string",
"maxLength": 200,
"description": "Offers on this treatment or product."
},
"offer_id": {
"type": "string",
"format": "uuid",
"description": "One offer with all its items."
},
"locale": {
"type": "string",
"enum": [
"nb",
"en"
],
"default": "nb",
"description": "Answer language: nb (Norwegian) or en."
}
},
"required": [],
"additionalProperties": false
}輸出結構描述
{
"type": "object",
"properties": {
"count": {
"type": "integer"
},
"next": {
"type": [
"string",
"null"
]
},
"previous": {
"type": [
"string",
"null"
]
},
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"offer_id": {
"type": "string"
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"starts_at": {
"type": [
"string",
"null"
]
},
"ends_at": {
"type": [
"string",
"null"
]
},
"discount_percentage": {
"type": [
"integer",
"null"
]
},
"benefit": {
"type": "object",
"properties": {
"type": {
"type": "string"
},
"percent": {
"type": [
"number",
"null"
]
},
"amount_nok": {
"type": [
"number",
"null"
]
},
"price_nok": {
"type": [
"number",
"null"
]
}
},
"required": [
"type",
"percent",
"amount_nok",
"price_nok"
],
"additionalProperties": false
},
"pricing_state": {
"type": "string",
"description": "exact: the listed price holds; conditional: it depends on the cart."
},
"terms_summary": {
"type": "string"
},
"url": {
"type": "string"
},
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string"
},
"name": {
"type": "string"
},
"clinic_id": {
"type": "string"
},
"clinic": {
"type": "string"
},
"original_price_nok": {
"type": [
"number",
"null"
]
},
"offer_price_nok": {
"type": [
"number",
"null"
]
},
"valid_until": {
"type": [
"string",
"null"
]
},
"available": {
"type": [
"boolean",
"null"
]
},
"url": {
"type": "string"
},
"booking_url": {
"type": [
"string",
"null"
],
"description": "Opens the booking lightbox for the offered treatment option."
}
},
"required": [
"type",
"name",
"clinic_id",
"clinic",
"original_price_nok",
"offer_price_nok",
"valid_until",
"available",
"url",
"booking_url"
],
"additionalProperties": false
}
}
},
"required": [
"offer_id",
"name",
"description",
"starts_at",
"ends_at",
"discount_percentage",
"benefit",
"pricing_state",
"terms_summary",
"url",
"items"
],
"additionalProperties": false
}
}
},
"required": [
"count",
"next",
"previous",
"results"
],
"additionalProperties": false
}🟢search_products(page, page_size, query, clinic_id, brand, ...)
Search skincare and retail products: GLØDI's marketplace on glodi.no and each clinic's shop on its own site. Filter by brand, category or stock. product_id reads one product with its description, sellers, subscription options, matching treatments and reviews.
輸入結構描述
{
"type": "object",
"properties": {
"page": {
"type": "integer",
"minimum": 1,
"maximum": 10000,
"default": 1
},
"page_size": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"default": 20
},
"query": {
"type": "string",
"maxLength": 160,
"description": "Product, brand or ingredient words in Norwegian or English. Leave empty to browse."
},
"clinic_id": {
"type": "string",
"maxLength": 80,
"description": "The clinic_id find_clinics returns. Never build it from a name. A clinic site needs none."
},
"brand": {
"type": "string",
"maxLength": 120,
"description": "A brand name or slug."
},
"category": {
"type": "string",
"maxLength": 120,
"description": "A product category name or slug."
},
"in_stock_only": {
"type": "boolean",
"default": false,
"description": "Only products in stock now."
},
"product_id": {
"type": "string",
"maxLength": 200,
"description": "One product with its sellers."
},
"locale": {
"type": "string",
"enum": [
"nb",
"en"
],
"default": "nb",
"description": "Answer language: nb (Norwegian) or en."
}
},
"required": [],
"additionalProperties": false
}輸出結構描述
{
"type": "object",
"properties": {
"count": {
"type": "integer"
},
"next": {
"type": [
"string",
"null"
]
},
"previous": {
"type": [
"string",
"null"
]
},
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"product_id": {
"type": "string",
"description": "The product slug."
},
"name": {
"type": "string"
},
"brand": {
"type": "string"
},
"category": {
"type": "string"
},
"price_nok": {
"type": [
"number",
"null"
],
"description": "The lowest price a seller asks now."
},
"list_price_nok": {
"type": [
"number",
"null"
],
"description": "The recommended retail price."
},
"in_stock": {
"type": [
"boolean",
"null"
]
},
"url": {
"type": "string"
},
"description": {
"type": [
"string",
"null"
]
},
"how_to_use": {
"type": [
"string",
"null"
]
},
"sellers": {
"type": "array",
"items": {
"type": "object",
"properties": {
"seller": {
"type": "string"
},
"price_nok": {
"type": [
"number",
"null"
]
},
"in_stock": {
"type": "boolean"
},
"pickup": {
"type": "boolean"
},
"delivery": {
"type": "boolean"
},
"url": {
"type": "string"
}
},
"required": [
"seller",
"price_nok",
"in_stock",
"pickup",
"delivery",
"url"
],
"additionalProperties": false
}
},
"subscription_options": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"discount_percent": {
"type": [
"number",
"null"
]
},
"free_shipping": {
"type": "boolean"
}
},
"required": [
"name",
"discount_percent",
"free_shipping"
],
"additionalProperties": false
}
},
"compatible_treatments": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"url": {
"type": "string"
}
},
"required": [
"name",
"url"
],
"additionalProperties": false
}
},
"reviews": {
"type": [
"object",
"null"
],
"properties": {
"average": {
"type": [
"number",
"null"
],
"description": "Average of published reviews, 1 to 5."
},
"count": {
"type": "integer"
}
},
"required": [
"average",
"count"
],
"additionalProperties": false
}
},
"required": [
"product_id",
"name",
"brand",
"category",
"price_nok",
"list_price_nok",
"in_stock",
"url",
"description",
"how_to_use",
"sellers",
"subscription_options",
"compatible_treatments",
"reviews"
],
"additionalProperties": false
}
},
"corrected_query": {
"type": [
"string",
"null"
]
},
"suggestions": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"count",
"next",
"previous",
"results",
"corrected_query",
"suggestions"
],
"additionalProperties": false
}🟢list_events(page, page_size, clinic_id, from_date, type, ...)
Upcoming arrangements and courses, GLØDI's own and the clinics', with sessions, seats left, price from and registration state. event_id reads one event with its program, prerequisites and price tiers.
輸入結構描述
{
"type": "object",
"properties": {
"page": {
"type": "integer",
"minimum": 1,
"maximum": 10000,
"default": 1
},
"page_size": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"default": 20
},
"clinic_id": {
"type": "string",
"maxLength": 80,
"description": "The clinic_id find_clinics returns. Never build it from a name. A clinic site needs none."
},
"from_date": {
"type": "string",
"format": "date",
"description": "Only sessions from this day (YYYY-MM-DD); default today."
},
"type": {
"type": "string",
"enum": [
"event",
"course"
],
"description": "Arrangements or courses."
},
"event_id": {
"type": "string",
"maxLength": 200,
"description": "One event with its program."
},
"locale": {
"type": "string",
"enum": [
"nb",
"en"
],
"default": "nb",
"description": "Answer language: nb (Norwegian) or en."
}
},
"required": [],
"additionalProperties": false
}輸出結構描述
{
"type": "object",
"properties": {
"count": {
"type": "integer"
},
"next": {
"type": [
"string",
"null"
]
},
"previous": {
"type": [
"string",
"null"
]
},
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"event_id": {
"type": "string",
"description": "The event slug."
},
"title": {
"type": "string"
},
"type": {
"type": "string",
"description": "event or course."
},
"host": {
"type": "object",
"properties": {
"kind": {
"type": "string",
"description": "clinic or glodi."
},
"clinic_id": {
"type": [
"string",
"null"
]
},
"name": {
"type": "string"
}
},
"required": [
"kind",
"clinic_id",
"name"
],
"additionalProperties": false
},
"venue": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"address": {
"type": "string"
}
},
"required": [
"name",
"address"
],
"additionalProperties": false
},
"sessions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"date": {
"type": "string"
},
"start": {
"type": "string"
},
"end": {
"type": "string"
},
"seats_left": {
"type": [
"integer",
"null"
]
}
},
"required": [
"date",
"start",
"end",
"seats_left"
],
"additionalProperties": false
}
},
"is_full": {
"type": "boolean"
},
"price_from_nok": {
"type": [
"number",
"null"
]
},
"registration_open": {
"type": "boolean"
},
"url": {
"type": "string"
},
"description": {
"type": [
"string",
"null"
]
},
"program_modules": {
"type": "array",
"items": {
"type": "object",
"properties": {
"title": {
"type": "string"
},
"description": {
"type": "string"
}
},
"required": [
"title",
"description"
],
"additionalProperties": false
}
},
"prerequisites": {
"type": [
"string",
"null"
]
},
"pricing_tiers": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"price_nok": {
"type": [
"number",
"null"
]
}
},
"required": [
"name",
"price_nok"
],
"additionalProperties": false
}
},
"waitlist": {
"type": "boolean"
}
},
"required": [
"event_id",
"title",
"type",
"host",
"venue",
"sessions",
"is_full",
"price_from_nok",
"registration_open",
"url",
"description",
"program_modules",
"prerequisites",
"pricing_tiers",
"waitlist"
],
"additionalProperties": false
}
}
},
"required": [
"count",
"next",
"previous",
"results"
],
"additionalProperties": false
}🟢list_reviews(page, page_size, clinic_id, practitioner, treatment_id, ...)
Published reviews and their summary (average, count, distribution) for one clinic_id, practitioner, treatment_id or product_id.
輸入結構描述
{
"type": "object",
"properties": {
"page": {
"type": "integer",
"minimum": 1,
"maximum": 10000,
"default": 1
},
"page_size": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"default": 20
},
"clinic_id": {
"type": "string",
"maxLength": 80,
"description": "The clinic_id find_clinics returns. Never build it from a name. A clinic site needs none."
},
"practitioner": {
"type": "string",
"maxLength": 200,
"description": "The practitioner page slug (/behandler/<slug>)."
},
"treatment_id": {
"type": "string",
"maxLength": 200
},
"product_id": {
"type": "string",
"maxLength": 200
},
"rating": {
"type": "integer",
"minimum": 1,
"maximum": 5,
"description": "Only reviews with this rating."
},
"locale": {
"type": "string",
"enum": [
"nb",
"en"
],
"default": "nb",
"description": "Answer language: nb (Norwegian) or en."
}
},
"required": [],
"additionalProperties": false
}輸出結構描述
{
"type": "object",
"properties": {
"count": {
"type": "integer"
},
"next": {
"type": [
"string",
"null"
]
},
"previous": {
"type": [
"string",
"null"
]
},
"subject_type": {
"type": "string"
},
"subject_id": {
"type": "string"
},
"summary": {
"type": "object",
"properties": {
"average": {
"type": [
"number",
"null"
]
},
"count": {
"type": "integer"
},
"distribution": {
"type": "object",
"additionalProperties": {
"type": "integer"
},
"description": "Count per rating 1 to 5."
}
},
"required": [
"average",
"count",
"distribution"
],
"additionalProperties": false
},
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"rating": {
"type": "integer"
},
"title": {
"type": "string"
},
"text": {
"type": "string"
},
"date": {
"type": [
"string",
"null"
]
},
"verified": {
"type": "boolean"
},
"subject": {
"type": "string"
},
"author": {
"type": "string"
}
},
"required": [
"rating",
"title",
"text",
"date",
"verified",
"subject",
"author"
],
"additionalProperties": false
}
}
},
"required": [
"count",
"next",
"previous",
"subject_type",
"subject_id",
"summary",
"results"
],
"additionalProperties": false
}🟢browse_site(locale)
The map of everything public here: every list page with its count, and the treatment categories, body areas and skin concerns with their slugs, for vague needs ("pigmentering", "acne"). Also the contact facts and, on glodi.no, GLØDI's plans for clinics.
輸入結構描述
{
"type": "object",
"properties": {
"locale": {
"type": "string",
"enum": [
"nb",
"en"
],
"default": "nb",
"description": "Answer language: nb (Norwegian) or en."
}
},
"required": [],
"additionalProperties": false
}輸出結構描述
{
"type": "object",
"properties": {
"scope": {
"type": "string",
"description": "glodi or clinic."
},
"clinic_id": {
"type": [
"string",
"null"
]
},
"name": {
"type": "string"
},
"sections": {
"type": "array",
"items": {
"type": "object",
"properties": {
"section": {
"type": "string"
},
"title": {
"type": "string"
},
"url": {
"type": "string"
},
"count": {
"type": [
"integer",
"null"
]
}
},
"required": [
"section",
"title",
"url",
"count"
],
"additionalProperties": false
}
},
"categories": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"treatment_count": {
"type": "integer"
},
"url": {
"type": "string"
}
},
"required": [
"name",
"slug",
"treatment_count",
"url"
],
"additionalProperties": false
}
},
"body_areas": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"treatment_count": {
"type": "integer"
},
"url": {
"type": "string"
}
},
"required": [
"name",
"slug",
"treatment_count",
"url"
],
"additionalProperties": false
}
},
"skin_concerns": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"slug": {
"type": "string"
},
"treatment_count": {
"type": "integer"
},
"url": {
"type": "string"
}
},
"required": [
"name",
"slug",
"treatment_count",
"url"
],
"additionalProperties": false
}
},
"contact": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"legal_name": {
"type": "string"
},
"email": {
"type": "string"
},
"url": {
"type": "string"
},
"phones": {
"type": "array",
"items": {
"type": "object",
"properties": {
"number": {
"type": "string"
},
"label": {
"type": "string"
},
"note": {
"type": "string"
},
"channels": {
"type": "array",
"items": {
"type": "string"
},
"description": "call, sms or whatsapp."
}
},
"required": [
"number",
"label",
"note",
"channels"
],
"additionalProperties": false
}
},
"address": {
"type": "object",
"properties": {
"street": {
"type": "string"
},
"postal_code": {
"type": "string"
},
"city": {
"type": "string"
}
},
"required": [
"street",
"postal_code",
"city"
],
"additionalProperties": false
},
"social_links": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"name",
"legal_name",
"email",
"url"
],
"additionalProperties": false
},
"business_plans": {
"type": [
"object",
"null"
],
"properties": {
"plans": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"monthly_price_nok": {
"type": [
"number",
"null"
],
"description": "VAT excluded."
},
"annual_price_nok": {
"type": [
"number",
"null"
],
"description": "VAT excluded."
},
"includes": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"name",
"description",
"monthly_price_nok",
"annual_price_nok",
"includes"
],
"additionalProperties": false
}
},
"add_ons": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"monthly_price_nok": {
"type": [
"number",
"null"
],
"description": "VAT excluded."
},
"features": {
"type": "array",
"items": {
"type": "string"
}
},
"contact_only": {
"type": "boolean"
}
},
"required": [
"name",
"description",
"monthly_price_nok",
"features",
"contact_only"
],
"additionalProperties": false
}
}
},
"required": [
"plans",
"add_ons"
],
"additionalProperties": false,
"description": "GLØDI's software plans for clinics (glodi.no only)."
}
},
"required": [
"scope",
"clinic_id",
"name",
"sections",
"categories",
"body_areas",
"skin_concerns",
"contact",
"business_plans"
],
"additionalProperties": false
}🟢read_public_page(url, locale)
Read one public page, normally a URL another answer returned: its text sections, links, schema.org facts and typed data for the page type (clinic, treatment, practitioner, offer, product, brand, event, guide, article, ingredient or job).
輸入結構描述
{
"type": "object",
"properties": {
"url": {
"type": "string",
"format": "uri",
"maxLength": 2048,
"description": "A public page URL, normally one another answer returned."
},
"locale": {
"type": "string",
"enum": [
"nb",
"en"
],
"default": "nb",
"description": "Answer language: nb (Norwegian) or en."
}
},
"required": [
"url"
],
"additionalProperties": false
}輸出結構描述
{
"type": "object",
"properties": {
"url": {
"type": "string"
},
"title": {
"type": "string"
},
"description": {
"type": "string"
},
"language": {
"type": "string"
},
"image": {
"type": "string"
},
"page_type": {
"type": "string"
},
"sections": {
"type": "array",
"items": {
"type": "object",
"properties": {
"title": {
"type": "string"
},
"text": {
"type": "string"
},
"links": {
"type": "array",
"items": {
"type": "object",
"properties": {
"title": {
"type": "string"
},
"url": {
"type": "string"
}
},
"required": [
"title",
"url"
],
"additionalProperties": false
}
}
},
"required": [
"title",
"text",
"links"
],
"additionalProperties": false
}
},
"facts": {
"type": "array",
"items": {
"type": "object"
},
"description": "The page's schema.org objects."
},
"data": {
"type": [
"object",
"null"
],
"description": "Typed facts for the page type; null when none apply."
}
},
"required": [
"url",
"title",
"description",
"language",
"image",
"page_type",
"sections",
"facts",
"data"
],
"additionalProperties": false
}社群
證據