Homejourney Singapore property listings
Search, read and compare Singapore property listings and book home services, with no account.
我该使用它吗
质量与安全性
发现(2)
- LOW在 get_guest_service_checkout_status 中
- LOW在 fetch 中
基于对工具定义和协议合规性的自动分析。
上下文开销
这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。
安装
一键安装
将以下内容添加到你的 `claude_desktop_config.json` 文件中:
{
"mcpServers": {
"listings": {
"url": "https://ai-apps.homejourney.sg/mcp/public"
}
}
}远程端点
https://ai-apps.homejourney.sg/mcp/publicstreamable-http它能做什么
工具清单
工具(11)
🟢search(query)
Search active Homejourney Singapore property listings. Broad availability questions are supported; use location, project, or feature keywords only when the user supplied them. Returns canonical listing URLs for citations.
输入模式
{
"type": "object",
"properties": {
"query": {
"type": "string"
}
},
"required": [
"query"
],
"additionalProperties": false
}输出模式
{
"type": "object",
"properties": {
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"title": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
}
},
"required": [
"id",
"title",
"url"
],
"additionalProperties": false
}
}
},
"required": [
"results"
],
"additionalProperties": false
}🟢fetch(id)
Fetch one Homejourney listing document by ID. Returns public-safe listing text and a canonical URL for citations.
输入模式
{
"type": "object",
"properties": {
"id": {
"type": "string"
}
},
"required": [
"id"
],
"additionalProperties": false
}输出模式
{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"title": {
"type": "string"
},
"text": {
"type": "string"
},
"url": {
"type": "string",
"format": "uri"
},
"metadata": {
"type": "object",
"additionalProperties": true
}
},
"required": [
"id",
"title",
"text",
"url"
],
"additionalProperties": false
}🟢search_listings(query, property_type, listing_type, price_min, price_max, ...)
Primary listing-discovery tool. Use this when a logged-in user asks what properties are available or supplies natural-language or structured Singapore property criteria. Omit query for a broad availability request; query is full-text search over project, title, address and description. pagination.total is the exact number of matching listings. Returns active, published, AI-channel-authorized, public-safe listing summaries only.
输入模式
{
"type": "object",
"properties": {
"query": {
"type": "string",
"maxLength": 120
},
"property_type": {
"type": "string",
"maxLength": 80
},
"listing_type": {
"type": "string",
"enum": [
"For Sale",
"For Rent"
]
},
"price_min": {
"type": "number",
"minimum": 1
},
"price_max": {
"type": "number",
"minimum": 1
},
"bedrooms": {
"type": "integer",
"minimum": 1,
"maximum": 10
},
"district": {
"type": "string",
"maxLength": 20
},
"subletting_type": {
"type": "string",
"enum": [
"whole_unit",
"master_room",
"common_room",
"studio",
"bed"
]
},
"available_from": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"lease_duration_months": {
"type": "integer",
"minimum": 1,
"maximum": 60
},
"bathrooms_min": {
"type": "integer",
"minimum": 1,
"maximum": 10
},
"bedroom_counts": {
"type": "array",
"description": "Exact bedroom counts to match, such as [2, 3]; 0 is a studio. Combines with bedrooms_min, so [0] plus bedrooms_min 5 means studio or 5+.",
"items": {
"type": "integer",
"minimum": 0,
"maximum": 10
},
"minItems": 1,
"maxItems": 11
},
"bedrooms_min": {
"type": "integer",
"minimum": 1,
"maximum": 10
},
"bathroom_counts": {
"type": "array",
"description": "Exact bathroom counts to match; combines with bathrooms_min.",
"items": {
"type": "integer",
"minimum": 1,
"maximum": 10
},
"minItems": 1,
"maxItems": 11
},
"hdb_flat_types": {
"type": "array",
"description": "HDB flat types, such as \"4-room\" or \"executive\".",
"items": {
"type": "string",
"enum": [
"2-room",
"3-room",
"4-room",
"5-room",
"executive"
]
},
"minItems": 1,
"maxItems": 5
},
"districts": {
"type": "array",
"description": "Singapore postal districts, such as \"D09\" or \"15\".",
"items": {
"type": "string",
"maxLength": 20
},
"minItems": 1,
"maxItems": 28
},
"size_min": {
"type": "number",
"minimum": 1,
"description": "Floor area in square feet."
},
"size_max": {
"type": "number",
"minimum": 1,
"description": "Floor area in square feet."
},
"psf_min": {
"type": "number",
"minimum": 1,
"description": "Price per square foot in SGD."
},
"psf_max": {
"type": "number",
"minimum": 1,
"description": "Price per square foot in SGD."
},
"tenure": {
"type": "string",
"enum": [
"Freehold",
"99 Year Leasehold",
"103 Year Leasehold",
"110 Year Leasehold",
"999 Year Leasehold",
"9999 Year Leasehold",
"Leasehold",
"Unknown"
]
},
"listed_within_days": {
"type": "integer",
"minimum": 1,
"maximum": 365
},
"mrt_stations": {
"type": "array",
"description": "Nearest MRT station names, such as \"Orchard\" or \"Tanjong Pagar\".",
"items": {
"type": "string",
"maxLength": 60
},
"minItems": 1,
"maxItems": 10
},
"mrt_lines": {
"type": "array",
"description": "MRT lines; a listing matches when its nearest station is on one. Combines with mrt_stations as 'near any'.",
"items": {
"type": "string",
"enum": [
"North South Line",
"East West Line",
"Northeast Line",
"Circle Line",
"Downtown Line",
"Thomson-East Coast Line"
]
},
"minItems": 1,
"maxItems": 6
},
"towns": {
"type": "array",
"description": "HDB towns or URA planning areas the listing lies in, such as \"Tampines\" or \"Bukit Timah\".",
"items": {
"type": "string",
"maxLength": 40
},
"minItems": 1,
"maxItems": 5
},
"project_name": {
"type": "string",
"maxLength": 120,
"description": "Exact condominium or development name."
},
"page": {
"type": "integer",
"minimum": 1,
"default": 1
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"default": 10
},
"sort": {
"type": "string",
"enum": [
"newest",
"listed_newest",
"price_asc",
"price_desc",
"psf_asc",
"psf_desc",
"size_asc",
"size_desc",
"nearest_mrt"
],
"default": "newest",
"description": "newest is the recommended order; listed_newest is strictly by listing date."
}
},
"additionalProperties": false
}🟢get_listing_details(listing_id)
Use this after search_listings when the user wants more public-safe information about one Homejourney listing. Never returns listing-party contact details.
输入模式
{
"type": "object",
"properties": {
"listing_id": {
"type": "string",
"format": "uuid"
}
},
"required": [
"listing_id"
],
"additionalProperties": false
}🟢compare_listings(listing_ids, criteria, host, host_reference_id)
Use this after search_listings when a logged-in user wants a ranked, public-safe shortlist comparison of two to six Homejourney listings.
输入模式
{
"type": "object",
"properties": {
"listing_ids": {
"type": "array",
"minItems": 2,
"maxItems": 6,
"items": {
"type": "string",
"format": "uuid"
}
},
"criteria": {
"type": "object",
"properties": {
"query": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"listing_type": {
"type": "string",
"enum": [
"For Sale",
"For Rent"
]
},
"price_min": {
"type": "number",
"minimum": 1
},
"price_max": {
"type": "number",
"minimum": 1
},
"bedrooms": {
"type": "integer",
"minimum": 1,
"maximum": 10
},
"bathrooms_min": {
"type": "integer",
"minimum": 1,
"maximum": 10
},
"property_type": {
"type": "string",
"minLength": 1,
"maxLength": 80
},
"preferred_districts": {
"type": "array",
"minItems": 1,
"maxItems": 6,
"items": {
"type": "string",
"minLength": 1,
"maxLength": 80
}
},
"mrt_stations": {
"type": "array",
"minItems": 1,
"maxItems": 6,
"description": "Preferred MRT or LRT stations, matched against each listing's nearest station.",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 60
}
},
"max_mrt_walk_minutes": {
"type": "integer",
"minimum": 1,
"maximum": 60,
"description": "Longest acceptable walk to the nearest MRT or LRT station, in minutes."
},
"subletting_types": {
"type": "array",
"minItems": 1,
"maxItems": 5,
"items": {
"type": "string",
"enum": [
"whole_unit",
"master_room",
"common_room",
"studio",
"bed"
]
}
},
"must_have_tags": {
"type": "array",
"minItems": 1,
"maxItems": 8,
"items": {
"type": "string",
"minLength": 1,
"maxLength": 60
}
},
"commute_note": {
"type": "string",
"minLength": 1,
"maxLength": 160
}
},
"additionalProperties": false
},
"host": {
"type": "string",
"minLength": 1,
"maxLength": 50
},
"host_reference_id": {
"type": "string",
"minLength": 1,
"maxLength": 200
}
},
"required": [
"listing_ids"
],
"additionalProperties": false
}🟢render_shortlist(comparedAt, criteriaSummary, listings, ranking, missingDataNotes, ...)
Render an already prepared public-safe Homejourney shortlist comparison. Use this after compare_listings when the host supports rich app UI.
输入模式
{
"type": "object",
"properties": {
"comparedAt": {
"type": "string",
"maxLength": 40
},
"criteriaSummary": {
"type": "string",
"maxLength": 300
},
"listings": {
"type": "array",
"minItems": 1,
"maxItems": 6,
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"title": {
"type": "string",
"maxLength": 160
},
"rank": {
"type": "integer",
"minimum": 1,
"maximum": 6
},
"score": {
"type": "number",
"minimum": -100,
"maximum": 100
},
"reasonCodes": {
"type": "array",
"maxItems": 12,
"items": {
"type": "string",
"minLength": 1,
"maxLength": 80
}
},
"tradeoffs": {
"type": "array",
"maxItems": 8,
"items": {
"type": "string",
"minLength": 1,
"maxLength": 180
}
},
"missingData": {
"type": "array",
"maxItems": 8,
"items": {
"type": "string",
"minLength": 1,
"maxLength": 120
}
},
"description": {
"type": [
"string",
"null"
],
"maxLength": 5000
},
"price": {
"type": "number",
"minimum": 1
},
"listingType": {
"type": "string",
"maxLength": 80
},
"propertyType": {
"type": "string",
"maxLength": 80
},
"sublettingType": {
"type": [
"string",
"null"
],
"maxLength": 80
},
"bedrooms": {
"type": "integer",
"minimum": 0,
"maximum": 20
},
"bathrooms": {
"type": "number",
"minimum": 0,
"maximum": 20
},
"squareFeet": {
"type": "number",
"minimum": 1
},
"tenure": {
"type": [
"string",
"null"
],
"maxLength": 100
},
"address": {
"type": "string",
"maxLength": 240
},
"district": {
"type": [
"string",
"null"
],
"maxLength": 80
},
"source": {
"type": "string",
"maxLength": 80
},
"visibilityBand": {
"type": [
"string",
"null"
],
"enum": [
"fresh",
"aging",
null
]
},
"lastVerifiedAt": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"images": {
"type": "array",
"maxItems": 8,
"items": {
"type": "string",
"format": "uri",
"maxLength": 500
}
},
"imageCount": {
"type": "integer",
"minimum": 0,
"maximum": 50
},
"canonicalUrl": {
"type": "string",
"format": "uri",
"maxLength": 300
},
"canonical_url": {
"type": "string",
"format": "uri",
"maxLength": 300
},
"continueInWebUrl": {
"type": "string",
"format": "uri",
"maxLength": 300
},
"continue_in_web_url": {
"type": "string",
"format": "uri",
"maxLength": 300
},
"continueInAppUrl": {
"type": "string",
"maxLength": 240
},
"continue_in_app_url": {
"type": "string",
"maxLength": 240
}
},
"required": [
"id"
],
"additionalProperties": false
}
},
"ranking": {
"type": "array",
"maxItems": 6,
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"rank": {
"type": "integer",
"minimum": 1,
"maximum": 6
},
"score": {
"type": "number",
"minimum": -100,
"maximum": 100
},
"reasonCodes": {
"type": "array",
"maxItems": 12,
"items": {
"type": "string",
"minLength": 1,
"maxLength": 80
}
}
},
"required": [
"id",
"rank"
],
"additionalProperties": false
}
},
"missingDataNotes": {
"type": "array",
"maxItems": 12,
"items": {
"type": "string",
"minLength": 1,
"maxLength": 160
}
},
"unavailableListingIds": {
"type": "array",
"maxItems": 6,
"items": {
"type": "string",
"minLength": 1,
"maxLength": 120
}
},
"canonicalUrls": {
"type": "array",
"maxItems": 6,
"items": {
"type": "string",
"format": "uri",
"maxLength": 300
}
}
},
"required": [
"listings"
],
"additionalProperties": false
}🟢render_listing_detail(listing_id)
Render a public-safe Homejourney listing detail view with photos and an external-open handoff. Use this when the user wants to inspect one listing.
输入模式
{
"type": "object",
"properties": {
"listing_id": {
"type": "string",
"format": "uuid"
}
},
"required": [
"listing_id"
],
"additionalProperties": false
}🟢search_services(query, service_type, provider_id, page, limit)
Use this to find active Homejourney services. A provider-published result identifies the provider, package, catalogue version, and price required for quoting and checkout: the Homejourney platform price for standardized packages, otherwise the provider-owned price. A result with priceSource launch_guide is a Homejourney catalog price with no provider yet: quote it with its platformUnitCount; the booking is offered to verified providers and the saved card is charged only after one accepts.
输入模式
{
"type": "object",
"properties": {
"query": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"service_type": {
"type": "string",
"minLength": 1,
"maxLength": 80
},
"provider_id": {
"type": "string",
"format": "uuid"
},
"page": {
"type": "integer",
"minimum": 1,
"default": 1
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 20,
"default": 10
}
},
"additionalProperties": false
}输出模式
{
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"serviceType": {
"type": "string",
"minLength": 1,
"maxLength": 80
},
"serviceId": {
"type": "string"
},
"serviceIntentId": {
"type": [
"string",
"null"
]
},
"name": {
"type": "string"
},
"unit": {
"type": "string"
},
"startingPrice": {
"type": [
"number",
"null"
]
},
"priceRange": {
"type": [
"object",
"null"
],
"properties": {
"min": {
"type": "number"
},
"max": {
"type": "number"
}
},
"required": [
"min",
"max"
],
"additionalProperties": false
},
"bookableState": {
"type": "string",
"enum": [
"bookable",
"quote_required"
]
},
"priceSource": {
"type": "string",
"enum": [
"provider_catalog",
"quote_required",
"launch_guide"
]
},
"providerId": {
"type": [
"string",
"null"
]
},
"providerName": {
"type": [
"string",
"null"
]
},
"providerLogoUrl": {
"type": [
"string",
"null"
]
},
"providerPackageId": {
"type": [
"string",
"null"
]
},
"catalogVersionId": {
"type": "string"
},
"platformUnitCount": {
"type": [
"integer",
"null"
]
},
"collectionMode": {
"type": "string",
"enum": [
"at_booking",
"after_acceptance"
]
},
"priceBasis": {
"type": "string"
},
"coverageHint": {
"type": "string"
},
"nextAction": {
"type": "string",
"enum": [
"quote_service_booking",
"request_provider_quote"
]
},
"estimatedDurationMinutes": {
"type": "integer"
},
"description": {
"type": "string"
},
"customerNote": {
"type": [
"string",
"null"
]
},
"capacity": {
"type": [
"string",
"null"
]
},
"truckSize": {
"type": [
"string",
"null"
]
},
"suitableFor": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"serviceType",
"serviceId",
"name",
"unit",
"startingPrice",
"bookableState",
"priceSource",
"providerId",
"providerName",
"providerPackageId",
"catalogVersionId",
"priceBasis",
"coverageHint",
"nextAction",
"estimatedDurationMinutes"
],
"additionalProperties": false
}
},
"pagination": {
"type": "object",
"properties": {
"page": {
"type": "integer"
},
"limit": {
"type": "integer"
},
"total": {
"type": "integer"
},
"totalPages": {
"type": "integer"
}
},
"required": [
"total"
],
"additionalProperties": true
},
"supportedServiceTypes": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 80
}
},
"unsupportedCategoryPolicy": {
"type": "string"
}
},
"required": [
"data",
"pagination",
"supportedServiceTypes",
"unsupportedCategoryPolicy"
],
"additionalProperties": false
}🟢quote_service_booking(service_type, service_details, provider_id, provider_package_id, catalog_version_id, ...)
Use this after search_services with the selected provider and package identifiers, or with price_source launch_guide and platform_unit_count for a Homejourney catalog price. Returns the exact server-revalidated price before confirmation and does not create a booking row. A catalog price also returns the assignment deadline, after which an unaccepted booking is cancelled at no charge.
输入模式
{
"type": "object",
"properties": {
"service_type": {
"type": "string",
"minLength": 1,
"maxLength": 80
},
"service_details": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"provider_id": {
"type": "string",
"pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
},
"provider_package_id": {
"type": "string",
"pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
},
"catalog_version_id": {
"type": "string",
"minLength": 1,
"maxLength": 160
},
"price_source": {
"type": "string",
"enum": [
"provider_catalog",
"launch_guide"
]
},
"scheduled_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"singapore_time": {
"type": "string",
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d$",
"description": "Exact customer-selected Singapore start time in 24-hour HH:mm format. Do not send a time range."
},
"customer_info": {
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"email": {
"type": "string",
"format": "email",
"maxLength": 254
},
"phone": {
"type": "string",
"minLength": 8,
"maxLength": 40
},
"address": {
"type": "string",
"minLength": 5,
"maxLength": 300
},
"unit_number": {
"type": "string",
"maxLength": 40
},
"pickup_address": {
"type": "string",
"minLength": 5,
"maxLength": 300
},
"pickup_unit_number": {
"type": "string",
"maxLength": 40
},
"delivery_address": {
"type": "string",
"minLength": 5,
"maxLength": 300
},
"delivery_unit_number": {
"type": "string",
"maxLength": 40
}
},
"required": [
"name",
"email",
"phone"
],
"additionalProperties": false
},
"issue_description": {
"type": "string",
"maxLength": 1000
},
"special_instructions": {
"type": "string",
"maxLength": 1000
},
"number_of_units": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"default": 1
},
"service_frequency": {
"type": "string",
"minLength": 1,
"maxLength": 60,
"default": "one-time"
},
"base_price": {
"type": "number",
"minimum": 0
},
"discount_amount": {
"type": "number",
"minimum": 0
},
"total_price": {
"type": "number",
"minimum": 0
},
"platform_unit_count": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"description": "The platformUnitCount of a launch_guide search result. Omit provider_id and provider_package_id with it."
}
},
"required": [
"service_type",
"service_details",
"catalog_version_id",
"price_source",
"scheduled_date",
"singapore_time",
"customer_info"
],
"additionalProperties": false
}输出模式
{
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"serviceType": {
"type": "string",
"minLength": 1,
"maxLength": 80
},
"serviceId": {
"type": "string"
},
"title": {
"type": "string"
},
"basePrice": {
"type": "number"
},
"serviceSubtotal": {
"type": "number"
},
"bookingFee": {
"type": "number"
},
"discountAmount": {
"type": "number"
},
"totalAmount": {
"type": "number"
},
"currency": {
"type": "string",
"enum": [
"SGD"
]
},
"estimatedDurationMinutes": {
"type": "integer"
},
"prerequisites": {
"type": "array",
"items": {
"type": "string"
}
},
"providerId": {
"type": [
"string",
"null"
]
},
"providerName": {
"type": [
"string",
"null"
]
},
"providerLogoUrl": {
"type": [
"string",
"null"
]
},
"providerPackageId": {
"type": [
"string",
"null"
]
},
"catalogVersionId": {
"type": [
"string",
"null"
]
},
"priceSource": {
"type": "string",
"enum": [
"provider_catalog",
"launch_guide"
]
},
"collectionMode": {
"type": "string",
"enum": [
"at_booking",
"after_acceptance"
]
},
"assignmentDeadlineAt": {
"type": [
"string",
"null"
]
}
},
"required": [
"serviceType",
"serviceId",
"title",
"basePrice",
"serviceSubtotal",
"bookingFee",
"discountAmount",
"totalAmount",
"currency",
"estimatedDurationMinutes",
"prerequisites",
"providerId",
"providerName",
"providerLogoUrl",
"providerPackageId",
"catalogVersionId",
"priceSource"
],
"additionalProperties": false
}
},
"required": [
"data"
],
"additionalProperties": false
}⚪prepare_guest_service_checkout(host, host_reference_id, idempotency_key, service_type, service_details, ...)
Use this for new customer bookings from an external agent, whether the customer already has a Homejourney account or not. After the customer confirms the selected provider package, or a Homejourney catalog price (price_source launch_guide with platform_unit_count), the exact price, schedule, address, customer-provided email and mobile number, and contact consent, it returns one branded Homejourney review-and-authorization link. No OTP is required. The customer approves their card for the exact booking without a charge; for a provider package Homejourney charges it only after verified completion, and PayNow can instead be requested after completion. A catalog price takes a card only: nothing is charged until a verified provider accepts, the amount is held then and charged when the job is done, and the booking is cancelled at no charge if no provider accepts. A booking appears in Main after sign-in with the same verified email or WhatsApp number.
输入模式
{
"type": "object",
"properties": {
"host": {
"type": "string",
"minLength": 1,
"maxLength": 50
},
"host_reference_id": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"idempotency_key": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"service_type": {
"type": "string",
"minLength": 1,
"maxLength": 80
},
"service_details": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"provider_id": {
"type": "string",
"pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
},
"provider_package_id": {
"type": "string",
"pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
},
"catalog_version_id": {
"type": "string",
"minLength": 1,
"maxLength": 160
},
"price_source": {
"type": "string",
"enum": [
"provider_catalog",
"launch_guide"
]
},
"scheduled_date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"singapore_time": {
"type": "string",
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d$",
"description": "Exact customer-selected Singapore start time in 24-hour HH:mm format. Do not send a time range."
},
"customer_info": {
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"email": {
"type": "string",
"format": "email",
"maxLength": 254
},
"phone": {
"type": "string",
"minLength": 8,
"maxLength": 40
},
"address": {
"type": "string",
"minLength": 5,
"maxLength": 300
},
"unit_number": {
"type": "string",
"maxLength": 40
},
"pickup_address": {
"type": "string",
"minLength": 5,
"maxLength": 300
},
"pickup_unit_number": {
"type": "string",
"maxLength": 40
},
"delivery_address": {
"type": "string",
"minLength": 5,
"maxLength": 300
},
"delivery_unit_number": {
"type": "string",
"maxLength": 40
}
},
"required": [
"name",
"email",
"phone"
],
"additionalProperties": false
},
"issue_description": {
"type": "string",
"maxLength": 1000
},
"special_instructions": {
"type": "string",
"maxLength": 1000
},
"number_of_units": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"default": 1
},
"service_frequency": {
"type": "string",
"minLength": 1,
"maxLength": 60,
"default": "one-time"
},
"base_price": {
"type": "number",
"minimum": 0
},
"discount_amount": {
"type": "number",
"minimum": 0
},
"total_price": {
"type": "number",
"minimum": 0
},
"platform_unit_count": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"description": "The platformUnitCount of a launch_guide search result. Omit provider_id and provider_package_id with it."
},
"confirmed": {
"type": "boolean",
"const": true
},
"consent_to_contact": {
"type": "boolean",
"const": true
},
"consent_text": {
"type": "string",
"maxLength": 300
}
},
"required": [
"host",
"idempotency_key",
"confirmed",
"service_type",
"service_details",
"catalog_version_id",
"price_source",
"scheduled_date",
"singapore_time",
"customer_info",
"consent_to_contact"
],
"additionalProperties": false
}输出模式
{
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"checkoutId": {
"type": "string"
},
"state": {
"type": "string"
},
"deduplicated": {
"type": "boolean"
},
"checkoutUrl": {
"type": "string"
},
"statusToken": {
"type": "string"
},
"expiresAt": {
"type": "string"
},
"maskedEmail": {
"type": "string"
},
"maskedPhone": {
"type": "string"
},
"serviceSubtotal": {
"type": "number"
},
"bookingFee": {
"type": "number"
},
"quantity": {
"type": "number"
},
"unitLabel": {
"type": [
"string",
"null"
]
},
"totalAmount": {
"type": "number"
},
"currency": {
"type": "string",
"enum": [
"SGD"
]
},
"providerId": {
"type": [
"string",
"null"
]
},
"providerName": {
"type": [
"string",
"null"
]
},
"providerLogoUrl": {
"type": [
"string",
"null"
]
},
"providerPackageId": {
"type": [
"string",
"null"
]
},
"packageName": {
"type": "string"
},
"collectionMode": {
"type": "string",
"enum": [
"at_booking",
"after_acceptance"
]
}
},
"required": [
"checkoutId",
"state",
"deduplicated",
"checkoutUrl",
"statusToken",
"expiresAt",
"maskedEmail",
"maskedPhone",
"serviceSubtotal",
"bookingFee",
"totalAmount",
"currency",
"providerId",
"providerName",
"providerLogoUrl",
"providerPackageId",
"packageName"
],
"additionalProperties": false
}
},
"required": [
"data"
],
"additionalProperties": false
}🟢get_guest_service_checkout_status(status_token)
Use the opaque status token returned by prepare_guest_service_checkout to check card approval, provider, completion, and payment state. Returns no contact or address details.
输入模式
{
"type": "object",
"properties": {
"status_token": {
"type": "string",
"minLength": 32,
"maxLength": 200
}
},
"required": [
"status_token"
],
"additionalProperties": false
}输出模式
{
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"state": {
"type": "string"
},
"paid": {
"type": "boolean"
},
"bookingId": {
"type": [
"string",
"null"
]
},
"bookingNumber": {
"type": [
"string",
"null"
]
},
"expiresAt": {
"type": "string"
}
},
"required": [
"state",
"paid",
"bookingId",
"bookingNumber",
"expiresAt"
],
"additionalProperties": false
}
},
"required": [
"data"
],
"additionalProperties": false
}社区
证据