Zarvo
Find UK padel courts, live availability and public games, then hand booking to the provider.
使うべきか
品質と安全性
ツール定義とプロトコルへの準拠に関する自動分析に基づいています。
コンテキストコスト
これは、サーバーのツールがモデルのコンテキストに読み込まれるたびに消費されるおおよそのトークン数です。数が多いほど、ほかのタスクに使える注意が減ります。
インストール
ワンクリックインストール
これを `claude_desktop_config.json` ファイルに追加してください:
{
"mcpServers": {
"padel": {
"url": "https://zarvo.uk/mcp"
}
}
}リモートエンドポイント
https://zarvo.uk/mcpstreamable-httpできること
ツール一覧
ツール(9)
🟢search_courts(date, date_range, earliest_time, latest_end_time, duration_minutes, ...)
Use this when a group wants bookable court options near a UK location on one date or across a bounded date range. Searches configured providers, normalizes known whole-court and per-player prices, adds catalogue venue IDs and coordinates, and returns at most the requested limit across all dates. Providers such as MATCHi may return a null anonymous price; those slots remain visible under a price ceiling with price_details.basis unknown and must not be presented as budget matches. Travel time is a straight-line heuristic with a 15% soft-filter tolerance near max_travel_minutes, not live routing. number_of_players affects per-player price only; use singles_court to require explicit singles support. Do not use for venue-only discovery or public games.
入力スキーマ
{
"type": "object",
"properties": {
"date": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
},
"date_range": {
"type": "object",
"properties": {
"start": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
},
"end": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
},
"max_days": {
"default": 7,
"type": "integer",
"minimum": 1,
"maximum": 14
}
},
"required": [
"start",
"end"
]
},
"earliest_time": {
"default": "00:00",
"type": "string",
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d$"
},
"latest_end_time": {
"type": "string",
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d$"
},
"duration_minutes": {
"description": "Omit to return every duration offered by the provider.",
"type": "integer",
"minimum": 30,
"maximum": 180,
"multipleOf": 30
},
"number_of_players": {
"default": 4,
"description": "Used to compute per-player price only. Does not filter court capacity; use singles_court for that.",
"type": "integer",
"minimum": 1,
"maximum": 4
},
"singles_court": {
"default": false,
"description": "When true, restrict results to courts or venues explicitly identified as supporting singles play.",
"type": "boolean"
},
"provider": {
"type": "string",
"enum": [
"padelstars",
"playtomic",
"padelmates",
"matchi",
"clubspark",
"matchpoint"
]
},
"location": {
"type": "string",
"minLength": 2,
"maxLength": 120
},
"radius_km": {
"default": 10,
"type": "number",
"exclusiveMinimum": 0,
"maximum": 200
},
"max_travel_minutes": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 180
},
"travel_mode": {
"default": "drive",
"type": "string",
"enum": [
"drive"
]
},
"court_type": {
"type": "string",
"enum": [
"indoor",
"outdoor",
"covered",
"unspecified"
]
},
"max_price_per_player": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 1000
},
"limit": {
"default": 3,
"type": "integer",
"minimum": 1,
"maximum": 20
}
},
"required": [
"location"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}出力スキーマ
{
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"slot_id": {
"type": "string",
"minLength": 1
},
"provider": {
"type": "string",
"enum": [
"padelstars",
"playtomic",
"padelmates",
"matchi",
"clubspark",
"matchpoint"
]
},
"venue": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1
},
"name": {
"type": "string",
"minLength": 1
},
"location": {
"type": "string",
"minLength": 1
}
},
"required": [
"id",
"name",
"location"
],
"additionalProperties": false
},
"court": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1
},
"name": {
"type": "string",
"minLength": 1
}
},
"required": [
"id",
"name"
],
"additionalProperties": false
},
"starts_at": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"duration": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"price": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
]
},
"currency": {
"type": "string",
"minLength": 3,
"maxLength": 3
},
"club_id": {
"anyOf": [
{
"type": "string",
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
},
{
"type": "null"
}
]
},
"date": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
},
"source": {
"type": "object",
"properties": {
"provider": {
"type": "string",
"minLength": 1
},
"provider_url": {
"type": "string",
"format": "uri"
},
"method": {
"type": "string",
"enum": [
"provider_live_api",
"provider_public_page",
"catalog_snapshot"
]
}
},
"required": [
"provider",
"provider_url",
"method"
],
"additionalProperties": false
},
"checked_at": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"availability": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"available",
"unavailable",
"unknown"
]
},
"confidence": {
"type": "string",
"enum": [
"confirmed_live",
"provider_reported",
"derived",
"unknown"
]
}
},
"required": [
"status",
"confidence"
],
"additionalProperties": false
},
"price_details": {
"type": "object",
"properties": {
"amount": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
]
},
"currency": {
"type": "string",
"minLength": 3,
"maxLength": 3
},
"basis": {
"type": "string",
"enum": [
"whole_court",
"per_player",
"session",
"unknown"
]
},
"number_of_players": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"calculated_per_player": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
]
}
},
"required": [
"amount",
"currency",
"basis",
"number_of_players",
"calculated_per_player"
],
"additionalProperties": false
},
"travel": {
"type": "object",
"properties": {
"coordinates": {
"anyOf": [
{
"type": "object",
"properties": {
"latitude": {
"type": "number",
"minimum": -90,
"maximum": 90
},
"longitude": {
"type": "number",
"minimum": -180,
"maximum": 180
}
},
"required": [
"latitude",
"longitude"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"straight_line_distance_km": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
]
},
"estimated_duration_minutes": {
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"mode": {
"type": "string",
"enum": [
"drive"
]
},
"confidence": {
"type": "string",
"enum": [
"estimated",
"unavailable"
]
},
"method": {
"type": "string",
"enum": [
"straight_line_heuristic",
"not_calculated"
]
}
},
"required": [
"coordinates",
"straight_line_distance_km",
"estimated_duration_minutes",
"mode",
"confidence",
"method"
],
"additionalProperties": false
},
"travel_estimate_uncertain": {
"type": "boolean"
},
"revalidation": {
"type": "object",
"properties": {
"required": {
"type": "boolean"
},
"recheck_after": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
{
"type": "null"
}
]
},
"expires_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
{
"type": "null"
}
]
},
"semantics": {
"type": "string",
"enum": [
"recheck_before_handoff",
"rechecked_for_handoff"
]
}
},
"required": [
"required",
"recheck_after",
"expires_at",
"semantics"
],
"additionalProperties": false
}
},
"required": [
"slot_id",
"provider",
"venue",
"court",
"starts_at",
"duration",
"price",
"currency",
"club_id",
"date",
"source",
"checked_at",
"availability",
"price_details",
"travel",
"travel_estimate_uncertain",
"revalidation"
],
"additionalProperties": false
}
},
"meta": {
"type": "object",
"properties": {
"count": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"providers": {
"type": "object",
"properties": {
"requested": {
"type": "array",
"items": {
"type": "string",
"enum": [
"padelstars",
"playtomic",
"padelmates",
"matchi",
"clubspark",
"matchpoint"
]
}
},
"succeeded": {
"type": "array",
"items": {
"type": "string",
"enum": [
"padelstars",
"playtomic",
"padelmates",
"matchi",
"clubspark",
"matchpoint"
]
}
},
"failed": {
"type": "array",
"items": {
"type": "object",
"properties": {
"provider": {
"type": "string",
"enum": [
"padelstars",
"playtomic",
"padelmates",
"matchi",
"clubspark",
"matchpoint"
]
},
"code": {
"type": "string",
"minLength": 1
}
},
"required": [
"provider",
"code"
],
"additionalProperties": false
}
}
},
"required": [
"requested",
"succeeded",
"failed"
],
"additionalProperties": false
},
"checked_at": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"partial": {
"type": "boolean"
},
"result_limit": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"travel_time_is_estimated": {
"type": "boolean",
"const": true
}
},
"required": [
"count",
"providers",
"checked_at",
"partial",
"result_limit",
"travel_time_is_estimated"
],
"additionalProperties": false
}
},
"required": [
"data",
"meta"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢search_clubs(court_type, racket_rental, facility, location, query, ...)
Use this lightweight directory lookup to find clubs by location and facilities or resolve a club description, nearby landmark, or partial club name into candidate club_id, club_name, and provider values. Put only club-name wording in query; add location when an area was supplied. Use court_type for indoor/outdoor/covered courts, racket_rental for racket hire, and facility for a requested amenity. Preserve these filters when refining a search. Do not infer or pass provider from a club or brand-like name: provider is only an explicit booking-platform hint. If that hint conflicts with the directory, name resolution may return the canonical provider instead. It returns Zarvo club metadata, not live court availability. Follow with get_club for full metadata or get_availability for live slots at a selected provider club.
入力スキーマ
{
"type": "object",
"properties": {
"court_type": {
"type": "string",
"enum": [
"indoor",
"outdoor",
"covered",
"unspecified"
]
},
"racket_rental": {
"type": "boolean"
},
"facility": {
"type": "string",
"minLength": 2,
"maxLength": 120
},
"location": {
"type": "string",
"minLength": 2,
"maxLength": 120
},
"query": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"provider": {
"description": "Only filter by provider when the user explicitly names a booking platform. Never infer this from the club name.",
"type": "string",
"enum": [
"padelstars",
"playtomic",
"padelmates",
"matchi",
"clubspark",
"matchpoint"
]
},
"radius_km": {
"default": 10,
"type": "number",
"exclusiveMinimum": 0,
"maximum": 200
},
"limit": {
"default": 10,
"type": "integer",
"minimum": 1,
"maximum": 20
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema"
}出力スキーマ
{
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"club_id": {
"type": "string",
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
},
"club_name": {
"type": "string",
"minLength": 1
},
"provider": {
"type": "string",
"enum": [
"padelstars",
"playtomic",
"padelmates",
"matchi",
"clubspark",
"matchpoint"
]
},
"address": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
},
"distance_km": {
"type": "number",
"minimum": 0
}
},
"required": [
"club_id",
"club_name",
"provider",
"address",
"distance_km"
],
"additionalProperties": false
}
},
"meta": {
"type": "object",
"properties": {
"count": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"result_limit": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"radius_km": {
"type": "number",
"exclusiveMinimum": 0
},
"snapshot_at": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
}
},
"required": [
"count",
"result_limit",
"radius_km",
"snapshot_at"
],
"additionalProperties": false
}
},
"required": [
"data",
"meta"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢search_public_games(provider, location, radius_km, date, date_range, ...)
Use this when a player wants an existing public padel game with an open spot. Omit date, time, level, and limit filters unless the user requested them; by default it returns every matching game around the location across the next 14 UK days. Returns anonymous match metadata and the provider join page; it never reveals player identities or joins on the user’s behalf. Do not use for empty-court bookings.
入力スキーマ
{
"type": "object",
"properties": {
"provider": {
"type": "string",
"enum": [
"padelstars",
"playtomic",
"padelmates",
"matchi",
"clubspark",
"matchpoint"
]
},
"location": {
"type": "string",
"minLength": 2,
"maxLength": 120
},
"radius_km": {
"default": 10,
"type": "number",
"exclusiveMinimum": 0,
"maximum": 200
},
"date": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
},
"date_range": {
"type": "object",
"properties": {
"start": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
},
"end": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
},
"max_days": {
"default": 14,
"type": "integer",
"minimum": 1,
"maximum": 14
}
},
"required": [
"start",
"end"
]
},
"earliest_time": {
"type": "string",
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d$"
},
"player_level": {
"type": "number",
"minimum": 1,
"maximum": 7
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 500
}
},
"required": [
"location"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}出力スキーマ
{
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"game_id": {
"type": "string",
"minLength": 1
},
"provider": {
"type": "string",
"enum": [
"padelstars",
"playtomic",
"padelmates",
"matchi",
"clubspark",
"matchpoint"
]
},
"venue": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1
},
"name": {
"type": "string",
"minLength": 1
},
"location": {
"type": "string",
"minLength": 1
}
},
"required": [
"id",
"name",
"location"
],
"additionalProperties": false
},
"court": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1
},
"name": {
"type": "string",
"minLength": 1
}
},
"required": [
"id",
"name"
],
"additionalProperties": false
},
"starts_at": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"sport": {
"type": "string",
"minLength": 1
},
"gender": {
"type": "string",
"enum": [
"mixed",
"male",
"female",
"unknown"
]
},
"level": {
"type": "object",
"properties": {
"minimum": {
"anyOf": [
{
"type": "number",
"minimum": 1,
"maximum": 7
},
{
"type": "null"
}
]
},
"maximum": {
"anyOf": [
{
"type": "number",
"minimum": 1,
"maximum": 7
},
{
"type": "null"
}
]
}
},
"required": [
"minimum",
"maximum"
],
"additionalProperties": false
},
"players": {
"type": "object",
"properties": {
"joined": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"capacity": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"open_spots": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
},
"required": [
"joined",
"capacity",
"open_spots"
],
"additionalProperties": false
},
"counts_for_ranking": {
"type": "boolean"
},
"join_url": {
"type": "string",
"format": "uri"
},
"source": {
"type": "object",
"properties": {
"provider": {
"type": "string",
"minLength": 1
},
"provider_url": {
"type": "string",
"format": "uri"
},
"method": {
"type": "string",
"enum": [
"provider_live_api",
"provider_public_page",
"catalog_snapshot"
]
}
},
"required": [
"provider",
"provider_url",
"method"
],
"additionalProperties": false
},
"checked_at": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"availability": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"available",
"unavailable",
"unknown"
]
},
"confidence": {
"type": "string",
"enum": [
"confirmed_live",
"provider_reported",
"derived",
"unknown"
]
}
},
"required": [
"status",
"confidence"
],
"additionalProperties": false
},
"price_details": {
"type": "null"
},
"travel": {
"type": "object",
"properties": {
"coordinates": {
"anyOf": [
{
"type": "object",
"properties": {
"latitude": {
"type": "number",
"minimum": -90,
"maximum": 90
},
"longitude": {
"type": "number",
"minimum": -180,
"maximum": 180
}
},
"required": [
"latitude",
"longitude"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"straight_line_distance_km": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
]
},
"estimated_duration_minutes": {
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"mode": {
"type": "string",
"enum": [
"drive"
]
},
"confidence": {
"type": "string",
"enum": [
"estimated",
"unavailable"
]
},
"method": {
"type": "string",
"enum": [
"straight_line_heuristic",
"not_calculated"
]
}
},
"required": [
"coordinates",
"straight_line_distance_km",
"estimated_duration_minutes",
"mode",
"confidence",
"method"
],
"additionalProperties": false
},
"revalidation": {
"type": "object",
"properties": {
"required": {
"type": "boolean",
"const": true
},
"semantics": {
"type": "string",
"const": "provider_controls_join_availability"
}
},
"required": [
"required",
"semantics"
],
"additionalProperties": false
}
},
"required": [
"game_id",
"provider",
"venue",
"court",
"starts_at",
"sport",
"gender",
"level",
"players",
"counts_for_ranking",
"join_url",
"source",
"checked_at",
"availability",
"price_details",
"travel",
"revalidation"
],
"additionalProperties": false
}
},
"meta": {
"type": "object",
"properties": {
"count": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"providers": {
"type": "object",
"properties": {
"requested": {
"type": "array",
"items": {
"type": "string",
"enum": [
"padelstars",
"playtomic",
"padelmates",
"matchi",
"clubspark",
"matchpoint"
]
}
},
"succeeded": {
"type": "array",
"items": {
"type": "string",
"enum": [
"padelstars",
"playtomic",
"padelmates",
"matchi",
"clubspark",
"matchpoint"
]
}
},
"failed": {
"type": "array",
"items": {
"type": "object",
"properties": {
"provider": {
"type": "string",
"enum": [
"padelstars",
"playtomic",
"padelmates",
"matchi",
"clubspark",
"matchpoint"
]
},
"code": {
"type": "string",
"minLength": 1
}
},
"required": [
"provider",
"code"
],
"additionalProperties": false
}
}
},
"required": [
"requested",
"succeeded",
"failed"
],
"additionalProperties": false
},
"checked_at": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"partial": {
"type": "boolean"
},
"result_limit": {
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"travel_time_is_estimated": {
"type": "boolean",
"const": true
},
"search": {
"type": "object",
"properties": {
"start_date": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
},
"end_date": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
},
"days_checked": {
"type": "integer",
"minimum": 1,
"maximum": 14
}
},
"required": [
"start_date",
"end_date",
"days_checked"
],
"additionalProperties": false
}
},
"required": [
"count",
"providers",
"checked_at",
"partial",
"result_limit",
"travel_time_is_estimated",
"search"
],
"additionalProperties": false
}
},
"required": [
"data",
"meta"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢search_activities(provider, location, radius_km, start_date, search_days, ...)
Use this when a player wants scheduled PadelStars activities such as coaching, training, intro sessions, socials, junior sessions, or competitions. Returns live session times, levels, vacancies, prices when published, and the provider booking page. It never joins, books, or pays on the user’s behalf.
入力スキーマ
{
"type": "object",
"properties": {
"provider": {
"default": "padelstars",
"type": "string",
"const": "padelstars"
},
"location": {
"type": "string",
"minLength": 2,
"maxLength": 120
},
"radius_km": {
"default": 10,
"type": "number",
"exclusiveMinimum": 0,
"maximum": 200
},
"start_date": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
},
"search_days": {
"default": 7,
"type": "integer",
"minimum": 1,
"maximum": 21
},
"earliest_time": {
"type": "string",
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d$"
},
"category": {
"type": "string",
"enum": [
"social",
"coaching",
"training",
"intro",
"junior",
"competition",
"league",
"tournament",
"other"
]
},
"player_level": {
"type": "number",
"minimum": 1,
"maximum": 7
},
"availability": {
"default": "available",
"type": "string",
"enum": [
"available",
"all"
]
},
"limit": {
"default": 10,
"type": "integer",
"minimum": 1,
"maximum": 20
}
},
"required": [
"location",
"start_date"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}出力スキーマ
{
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"session_id": {
"type": "string",
"minLength": 1
},
"provider": {
"type": "string",
"enum": [
"padelstars",
"playtomic",
"padelmates",
"matchi",
"clubspark",
"matchpoint"
]
},
"category": {
"type": "string",
"enum": [
"social",
"coaching",
"training",
"intro",
"junior",
"competition",
"league",
"tournament",
"other"
]
},
"name": {
"type": "string",
"minLength": 1
},
"venue": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1
},
"name": {
"type": "string",
"minLength": 1
},
"location": {
"type": "string",
"minLength": 1
}
},
"required": [
"id",
"name",
"location"
],
"additionalProperties": false
},
"space": {
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1
}
},
"required": [
"name"
],
"additionalProperties": false
},
"starts_at": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"duration": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"level": {
"type": "object",
"properties": {
"minimum": {
"anyOf": [
{
"type": "number",
"minimum": 1,
"maximum": 7
},
{
"type": "null"
}
]
},
"maximum": {
"anyOf": [
{
"type": "number",
"minimum": 1,
"maximum": 7
},
{
"type": "null"
}
]
}
},
"required": [
"minimum",
"maximum"
],
"additionalProperties": false
},
"availability": {
"type": "object",
"properties": {
"booked": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"capacity": {
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"open_spots": {
"anyOf": [
{
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
}
},
"required": [
"booked",
"capacity",
"open_spots"
],
"additionalProperties": false
},
"price": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
]
},
"currency": {
"type": "string",
"minLength": 3,
"maxLength": 3
},
"booking_url": {
"type": "string",
"format": "uri"
},
"source": {
"type": "object",
"properties": {
"provider": {
"type": "string",
"minLength": 1
},
"provider_url": {
"type": "string",
"format": "uri"
},
"method": {
"type": "string",
"enum": [
"provider_live_api",
"provider_public_page",
"catalog_snapshot"
]
}
},
"required": [
"provider",
"provider_url",
"method"
],
"additionalProperties": false
},
"checked_at": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
}
},
"required": [
"session_id",
"provider",
"category",
"name",
"venue",
"space",
"starts_at",
"duration",
"level",
"availability",
"price",
"currency",
"booking_url",
"source",
"checked_at"
],
"additionalProperties": false
}
},
"meta": {
"type": "object",
"properties": {
"count": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"providers": {
"type": "object",
"properties": {
"requested": {
"type": "array",
"items": {
"type": "string",
"enum": [
"padelstars",
"playtomic",
"padelmates",
"matchi",
"clubspark",
"matchpoint"
]
}
},
"succeeded": {
"type": "array",
"items": {
"type": "string",
"enum": [
"padelstars",
"playtomic",
"padelmates",
"matchi",
"clubspark",
"matchpoint"
]
}
},
"failed": {
"type": "array",
"items": {
"type": "object",
"properties": {
"provider": {
"type": "string",
"enum": [
"padelstars",
"playtomic",
"padelmates",
"matchi",
"clubspark",
"matchpoint"
]
},
"code": {
"type": "string",
"minLength": 1
}
},
"required": [
"provider",
"code"
],
"additionalProperties": false
}
}
},
"required": [
"requested",
"succeeded",
"failed"
],
"additionalProperties": false
},
"checked_at": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"partial": {
"type": "boolean"
},
"result_limit": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"travel_time_is_estimated": {
"type": "boolean",
"const": true
},
"search": {
"type": "object",
"properties": {
"start_date": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
},
"end_date": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
},
"days_checked": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
}
},
"required": [
"start_date",
"end_date",
"days_checked"
],
"additionalProperties": false
}
},
"required": [
"count",
"providers",
"checked_at",
"partial",
"result_limit",
"travel_time_is_estimated",
"search"
],
"additionalProperties": false
}
},
"required": [
"data",
"meta"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢get_club(club_id)
Use this after a Zarvo club ID is known and the user wants its address, coordinates, facilities, racket rental, contact information, official website, or social links. This returns directory metadata, not live availability.
入力スキーマ
{
"type": "object",
"properties": {
"club_id": {
"type": "string",
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
}
},
"required": [
"club_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}出力スキーマ
{
"type": "object",
"properties": {
"data": {
"type": "object",
"properties": {
"venue_id": {
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"id": {
"type": "string",
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
},
"name": {
"type": "string",
"minLength": 1
},
"city": {
"type": "string",
"minLength": 1
},
"slug": {
"type": "string",
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
},
"public_path": {
"type": "string",
"pattern": "^\\/clubs\\/[a-z0-9-]+\\/[a-z0-9-]+$"
},
"image_url": {
"anyOf": [
{
"type": "string",
"format": "uri"
},
{
"type": "null"
}
]
},
"google_maps_url": {
"anyOf": [
{
"type": "string",
"format": "uri"
},
{
"type": "null"
}
]
},
"country_code": {
"type": "string",
"minLength": 2,
"maxLength": 2
},
"status": {
"type": "string",
"enum": [
"open",
"coming_soon",
"closed"
]
},
"platform": {
"type": "string",
"minLength": 1
},
"operator": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"coordinates": {
"anyOf": [
{
"type": "object",
"properties": {
"latitude": {
"type": "number",
"minimum": -90,
"maximum": 90
},
"longitude": {
"type": "number",
"minimum": -180,
"maximum": 180
}
},
"required": [
"latitude",
"longitude"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"distance_km": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
]
},
"courts": {
"type": "object",
"properties": {
"indoor": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"outdoor": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"covered": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"unspecified": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"total": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
}
},
"required": [
"indoor",
"outdoor",
"covered",
"unspecified",
"total"
],
"additionalProperties": false
},
"price": {
"anyOf": [
{
"type": "object",
"properties": {
"minimum": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
]
},
"maximum": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
]
},
"currency": {
"type": "string",
"minLength": 3,
"maxLength": 3
}
},
"required": [
"minimum",
"maximum",
"currency"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"address": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
},
"racket_rental": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
]
},
"facilities": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
}
},
"details_available": {
"type": "boolean"
},
"details_extracted_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
},
{
"type": "null"
}
]
},
"descriptions": {
"type": "object",
"properties": {
"courts": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
},
"price": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
},
"racket_rental": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
}
},
"required": [
"courts",
"price",
"racket_rental"
],
"additionalProperties": false
},
"contact": {
"anyOf": [
{
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1
},
"phone": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
]
},
"email": {
"anyOf": [
{
"type": "string",
"format": "email",
"pattern": "^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
},
{
"type": "null"
}
]
},
"website_url": {
"anyOf": [
{
"type": "string",
"format": "uri"
},
{
"type": "null"
}
]
}
},
"required": [
"name",
"phone",
"email",
"website_url"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"social_media_urls": {
"type": "array",
"items": {
"type": "string",
"format": "uri"
}
}
},
"required": [
"id",
"name",
"city",
"slug",
"public_path",
"country_code",
"status",
"platform",
"operator",
"coordinates",
"distance_km",
"courts",
"price",
"address",
"racket_rental",
"facilities",
"details_available",
"details_extracted_at",
"descriptions",
"contact",
"social_media_urls"
],
"additionalProperties": false
},
"source": {
"type": "object",
"properties": {
"provider": {
"type": "string",
"minLength": 1
},
"provider_url": {
"type": "string",
"format": "uri"
},
"method": {
"type": "string",
"enum": [
"provider_live_api",
"provider_public_page",
"catalog_snapshot"
]
}
},
"required": [
"provider",
"provider_url",
"method"
],
"additionalProperties": false
},
"checked_at": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"snapshot_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
},
{
"type": "null"
}
]
}
},
"required": [
"data",
"source",
"checked_at",
"snapshot_at"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢get_availability(date, date_range, earliest_time, latest_end_time, duration_minutes, ...)
Use this when the user has selected a named provider club and wants its available courts on one date or across a bounded date range. Copy provider and club_name exactly from the selected search_clubs result; never infer provider from the club name. Results include Zarvo club IDs when matched and the total limit applies across all dates. number_of_players affects per-player price only; use singles_court to require explicit singles support. Do not use for a broad nearby search; use search_courts instead.
入力スキーマ
{
"type": "object",
"properties": {
"date": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
},
"date_range": {
"type": "object",
"properties": {
"start": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
},
"end": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
},
"max_days": {
"default": 7,
"type": "integer",
"minimum": 1,
"maximum": 14
}
},
"required": [
"start",
"end"
]
},
"earliest_time": {
"default": "00:00",
"type": "string",
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d$"
},
"latest_end_time": {
"type": "string",
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d$"
},
"duration_minutes": {
"description": "Omit to return every duration offered by the provider.",
"type": "integer",
"minimum": 30,
"maximum": 180,
"multipleOf": 30
},
"number_of_players": {
"default": 4,
"description": "Used to compute per-player price only. Does not filter court capacity; use singles_court for that.",
"type": "integer",
"minimum": 1,
"maximum": 4
},
"singles_court": {
"default": false,
"description": "When true, restrict results to courts or venues explicitly identified as supporting singles play.",
"type": "boolean"
},
"provider": {
"type": "string",
"enum": [
"padelstars",
"playtomic",
"padelmates",
"matchi",
"clubspark",
"matchpoint"
]
},
"club_name": {
"type": "string",
"minLength": 2,
"maxLength": 160
},
"limit": {
"default": 10,
"type": "integer",
"minimum": 1,
"maximum": 20
}
},
"required": [
"provider",
"club_name"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}出力スキーマ
{
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"slot_id": {
"type": "string",
"minLength": 1
},
"provider": {
"type": "string",
"enum": [
"padelstars",
"playtomic",
"padelmates",
"matchi",
"clubspark",
"matchpoint"
]
},
"venue": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1
},
"name": {
"type": "string",
"minLength": 1
},
"location": {
"type": "string",
"minLength": 1
}
},
"required": [
"id",
"name",
"location"
],
"additionalProperties": false
},
"court": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1
},
"name": {
"type": "string",
"minLength": 1
}
},
"required": [
"id",
"name"
],
"additionalProperties": false
},
"starts_at": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"duration": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"price": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
]
},
"currency": {
"type": "string",
"minLength": 3,
"maxLength": 3
},
"club_id": {
"anyOf": [
{
"type": "string",
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
},
{
"type": "null"
}
]
},
"date": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
},
"source": {
"type": "object",
"properties": {
"provider": {
"type": "string",
"minLength": 1
},
"provider_url": {
"type": "string",
"format": "uri"
},
"method": {
"type": "string",
"enum": [
"provider_live_api",
"provider_public_page",
"catalog_snapshot"
]
}
},
"required": [
"provider",
"provider_url",
"method"
],
"additionalProperties": false
},
"checked_at": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"availability": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"available",
"unavailable",
"unknown"
]
},
"confidence": {
"type": "string",
"enum": [
"confirmed_live",
"provider_reported",
"derived",
"unknown"
]
}
},
"required": [
"status",
"confidence"
],
"additionalProperties": false
},
"price_details": {
"type": "object",
"properties": {
"amount": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
]
},
"currency": {
"type": "string",
"minLength": 3,
"maxLength": 3
},
"basis": {
"type": "string",
"enum": [
"whole_court",
"per_player",
"session",
"unknown"
]
},
"number_of_players": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"calculated_per_player": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
]
}
},
"required": [
"amount",
"currency",
"basis",
"number_of_players",
"calculated_per_player"
],
"additionalProperties": false
},
"travel": {
"type": "object",
"properties": {
"coordinates": {
"anyOf": [
{
"type": "object",
"properties": {
"latitude": {
"type": "number",
"minimum": -90,
"maximum": 90
},
"longitude": {
"type": "number",
"minimum": -180,
"maximum": 180
}
},
"required": [
"latitude",
"longitude"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"straight_line_distance_km": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
]
},
"estimated_duration_minutes": {
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"mode": {
"type": "string",
"enum": [
"drive"
]
},
"confidence": {
"type": "string",
"enum": [
"estimated",
"unavailable"
]
},
"method": {
"type": "string",
"enum": [
"straight_line_heuristic",
"not_calculated"
]
}
},
"required": [
"coordinates",
"straight_line_distance_km",
"estimated_duration_minutes",
"mode",
"confidence",
"method"
],
"additionalProperties": false
},
"travel_estimate_uncertain": {
"type": "boolean"
},
"revalidation": {
"type": "object",
"properties": {
"required": {
"type": "boolean"
},
"recheck_after": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
{
"type": "null"
}
]
},
"expires_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
{
"type": "null"
}
]
},
"semantics": {
"type": "string",
"enum": [
"recheck_before_handoff",
"rechecked_for_handoff"
]
}
},
"required": [
"required",
"recheck_after",
"expires_at",
"semantics"
],
"additionalProperties": false
}
},
"required": [
"slot_id",
"provider",
"venue",
"court",
"starts_at",
"duration",
"price",
"currency",
"club_id",
"date",
"source",
"checked_at",
"availability",
"price_details",
"travel",
"travel_estimate_uncertain",
"revalidation"
],
"additionalProperties": false
}
},
"meta": {
"type": "object",
"properties": {
"count": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991
},
"providers": {
"type": "object",
"properties": {
"requested": {
"type": "array",
"items": {
"type": "string",
"enum": [
"padelstars",
"playtomic",
"padelmates",
"matchi",
"clubspark",
"matchpoint"
]
}
},
"succeeded": {
"type": "array",
"items": {
"type": "string",
"enum": [
"padelstars",
"playtomic",
"padelmates",
"matchi",
"clubspark",
"matchpoint"
]
}
},
"failed": {
"type": "array",
"items": {
"type": "object",
"properties": {
"provider": {
"type": "string",
"enum": [
"padelstars",
"playtomic",
"padelmates",
"matchi",
"clubspark",
"matchpoint"
]
},
"code": {
"type": "string",
"minLength": 1
}
},
"required": [
"provider",
"code"
],
"additionalProperties": false
}
}
},
"required": [
"requested",
"succeeded",
"failed"
],
"additionalProperties": false
},
"checked_at": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"partial": {
"type": "boolean"
},
"result_limit": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"travel_time_is_estimated": {
"type": "boolean",
"const": true
}
},
"required": [
"count",
"providers",
"checked_at",
"partial",
"result_limit",
"travel_time_is_estimated"
],
"additionalProperties": false
}
},
"required": [
"data",
"meta"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢recheck_slot(slot_id, number_of_players, date, earliest_time, latest_end_time, ...)
Optional standalone check. get_booking_handoff already revalidates before returning a URL; call this only to confirm availability without proceeding to handoff. It never books, holds inventory, takes payment, or returns checkout.
入力スキーマ
{
"type": "object",
"properties": {
"slot_id": {
"type": "string",
"minLength": 1,
"maxLength": 2048
},
"number_of_players": {
"default": 4,
"type": "integer",
"minimum": 1,
"maximum": 4
},
"date": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
},
"earliest_time": {
"type": "string",
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d$"
},
"latest_end_time": {
"type": "string",
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d$"
},
"duration_minutes": {
"type": "integer",
"minimum": 30,
"maximum": 180,
"multipleOf": 30
}
},
"required": [
"slot_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}出力スキーマ
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"oneOf": [
{
"type": "object",
"properties": {
"status": {
"type": "string",
"const": "available"
},
"checked_at": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"data": {
"type": "object",
"properties": {
"slot_id": {
"type": "string",
"minLength": 1
},
"provider": {
"type": "string",
"enum": [
"padelstars",
"playtomic",
"padelmates",
"matchi",
"clubspark",
"matchpoint"
]
},
"venue": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1
},
"name": {
"type": "string",
"minLength": 1
},
"location": {
"type": "string",
"minLength": 1
}
},
"required": [
"id",
"name",
"location"
],
"additionalProperties": false
},
"court": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1
},
"name": {
"type": "string",
"minLength": 1
}
},
"required": [
"id",
"name"
],
"additionalProperties": false
},
"starts_at": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"duration": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"price": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
]
},
"currency": {
"type": "string",
"minLength": 3,
"maxLength": 3
},
"club_id": {
"anyOf": [
{
"type": "string",
"pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
},
{
"type": "null"
}
]
},
"date": {
"type": "string",
"format": "date",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))$"
},
"source": {
"type": "object",
"properties": {
"provider": {
"type": "string",
"minLength": 1
},
"provider_url": {
"type": "string",
"format": "uri"
},
"method": {
"type": "string",
"enum": [
"provider_live_api",
"provider_public_page",
"catalog_snapshot"
]
}
},
"required": [
"provider",
"provider_url",
"method"
],
"additionalProperties": false
},
"checked_at": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"availability": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"available",
"unavailable",
"unknown"
]
},
"confidence": {
"type": "string",
"enum": [
"confirmed_live",
"provider_reported",
"derived",
"unknown"
]
}
},
"required": [
"status",
"confidence"
],
"additionalProperties": false
},
"price_details": {
"type": "object",
"properties": {
"amount": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
]
},
"currency": {
"type": "string",
"minLength": 3,
"maxLength": 3
},
"basis": {
"type": "string",
"enum": [
"whole_court",
"per_player",
"session",
"unknown"
]
},
"number_of_players": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"calculated_per_player": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
]
}
},
"required": [
"amount",
"currency",
"basis",
"number_of_players",
"calculated_per_player"
],
"additionalProperties": false
},
"travel": {
"type": "object",
"properties": {
"coordinates": {
"anyOf": [
{
"type": "object",
"properties": {
"latitude": {
"type": "number",
"minimum": -90,
"maximum": 90
},
"longitude": {
"type": "number",
"minimum": -180,
"maximum": 180
}
},
"required": [
"latitude",
"longitude"
],
"additionalProperties": false
},
{
"type": "null"
}
]
},
"straight_line_distance_km": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
]
},
"estimated_duration_minutes": {
"anyOf": [
{
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
{
"type": "null"
}
]
},
"mode": {
"type": "string",
"enum": [
"drive"
]
},
"confidence": {
"type": "string",
"enum": [
"estimated",
"unavailable"
]
},
"method": {
"type": "string",
"enum": [
"straight_line_heuristic",
"not_calculated"
]
}
},
"required": [
"coordinates",
"straight_line_distance_km",
"estimated_duration_minutes",
"mode",
"confidence",
"method"
],
"additionalProperties": false
},
"travel_estimate_uncertain": {
"type": "boolean"
},
"revalidation": {
"type": "object",
"properties": {
"required": {
"type": "boolean"
},
"recheck_after": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
{
"type": "null"
}
]
},
"expires_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
{
"type": "null"
}
]
},
"semantics": {
"type": "string",
"enum": [
"recheck_before_handoff",
"rechecked_for_handoff"
]
}
},
"required": [
"required",
"recheck_after",
"expires_at",
"semantics"
],
"additionalProperties": false
}
},
"required": [
"slot_id",
"provider",
"venue",
"court",
"starts_at",
"duration",
"price",
"currency",
"club_id",
"date",
"source",
"checked_at",
"availability",
"price_details",
"travel",
"travel_estimate_uncertain",
"revalidation"
],
"additionalProperties": false
}
},
"required": [
"status",
"checked_at",
"data"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"status": {
"type": "string",
"const": "unavailable"
},
"checked_at": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"slot_id": {
"type": "string",
"minLength": 1
},
"reason": {
"type": "string",
"minLength": 1
}
},
"required": [
"status",
"checked_at",
"slot_id",
"reason"
],
"additionalProperties": false
}
]
}🟡create_game_plan(age_confirmed, original_request, slot_ids, mode)
Use this only when the user explicitly wants to organise one to three selected court options with other people. Rechecks each selected slot, creates an expiring Zarvo plan, and returns separate guest and private organiser links. This changes Zarvo state but does not book a court.
入力スキーマ
{
"type": "object",
"properties": {
"age_confirmed": {
"type": "boolean"
},
"original_request": {
"type": "string",
"minLength": 3,
"maxLength": 4000
},
"slot_ids": {
"minItems": 1,
"maxItems": 3,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 2048
}
},
"mode": {
"type": "string",
"enum": [
"choose_one",
"book_all"
]
}
},
"required": [
"original_request",
"slot_ids",
"mode"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}出力スキーマ
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"oneOf": [
{
"type": "object",
"properties": {
"public_id": {
"type": "string",
"minLength": 1
},
"status": {
"type": "string",
"enum": [
"draft",
"collecting",
"ready",
"awaiting_booking",
"confirmed",
"cancelled",
"expired"
]
},
"plan_url": {
"type": "string",
"format": "uri"
},
"organiser_url": {
"type": "string",
"format": "uri"
},
"organiser_link": {
"type": "string",
"format": "uri"
},
"expires_at": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
},
"candidate_count": {
"type": "integer",
"minimum": 1,
"maximum": 3
},
"mode": {
"type": "string",
"const": "choose_one"
},
"guest_url": {
"type": "string",
"format": "uri"
},
"guest_link": {
"type": "string",
"format": "uri"
}
},
"required": [
"public_id",
"status",
"plan_url",
"organiser_url",
"organiser_link",
"expires_at",
"candidate_count",
"mode",
"guest_url",
"guest_link"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"public_id": {
"type": "string",
"minLength": 1
},
"status": {
"type": "string",
"enum": [
"draft",
"collecting",
"ready",
"awaiting_booking",
"confirmed",
"cancelled",
"expired"
]
},
"plan_url": {
"type": "string",
"format": "uri"
},
"organiser_url": {
"type": "string",
"format": "uri"
},
"organiser_link": {
"type": "string",
"format": "uri"
},
"expires_at": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
},
"candidate_count": {
"type": "integer",
"minimum": 1,
"maximum": 3
},
"mode": {
"type": "string",
"const": "book_all"
},
"guest_url": {
"type": "string",
"format": "uri"
},
"guest_links": {
"minItems": 1,
"maxItems": 3,
"type": "array",
"items": {
"type": "object",
"properties": {
"slot_id": {
"type": "string",
"minLength": 1
},
"guest_link": {
"type": "string",
"format": "uri"
}
},
"required": [
"slot_id",
"guest_link"
],
"additionalProperties": false
}
}
},
"required": [
"public_id",
"status",
"plan_url",
"organiser_url",
"organiser_link",
"expires_at",
"candidate_count",
"mode",
"guest_url",
"guest_links"
],
"additionalProperties": false
}
]
}🟢get_booking_handoff(slot_id, number_of_players)
Use this directly after the user chooses a slot. It revalidates the provider slot and returns status unavailable with a reason if the slot was taken, or status available with a provider handoff URL and current price. The user completes login, booking, and payment on the provider site; Zarvo does not reserve inventory or complete checkout.
入力スキーマ
{
"type": "object",
"properties": {
"slot_id": {
"type": "string",
"minLength": 1,
"maxLength": 2048
},
"number_of_players": {
"default": 4,
"type": "integer",
"minimum": 1,
"maximum": 4
}
},
"required": [
"slot_id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema"
}出力スキーマ
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"oneOf": [
{
"type": "object",
"properties": {
"slot_id": {
"type": "string",
"minLength": 1
},
"provider": {
"type": "string",
"enum": [
"padelstars",
"playtomic",
"padelmates",
"matchi",
"clubspark",
"matchpoint"
]
},
"venue": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1
},
"name": {
"type": "string",
"minLength": 1
},
"location": {
"type": "string",
"minLength": 1
}
},
"required": [
"id",
"name",
"location"
],
"additionalProperties": false
},
"court": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1
},
"name": {
"type": "string",
"minLength": 1
}
},
"required": [
"id",
"name"
],
"additionalProperties": false
},
"starts_at": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"duration": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"price": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
]
},
"currency": {
"type": "string",
"minLength": 3,
"maxLength": 3
},
"booking_url": {
"type": "string",
"format": "uri"
},
"prepared_at": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"status": {
"type": "string",
"const": "available"
},
"handoff_url": {
"type": "string",
"format": "uri"
},
"current_price": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
]
},
"source": {
"type": "object",
"properties": {
"provider": {
"type": "string",
"minLength": 1
},
"provider_url": {
"type": "string",
"format": "uri"
},
"method": {
"type": "string",
"enum": [
"provider_live_api",
"provider_public_page",
"catalog_snapshot"
]
}
},
"required": [
"provider",
"provider_url",
"method"
],
"additionalProperties": false
},
"checked_at": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"availability": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"available",
"unavailable",
"unknown"
]
},
"confidence": {
"type": "string",
"enum": [
"confirmed_live",
"provider_reported",
"derived",
"unknown"
]
}
},
"required": [
"status",
"confidence"
],
"additionalProperties": false
},
"price_details": {
"type": "object",
"properties": {
"amount": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
]
},
"currency": {
"type": "string",
"minLength": 3,
"maxLength": 3
},
"basis": {
"type": "string",
"enum": [
"whole_court",
"per_player",
"session",
"unknown"
]
},
"number_of_players": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 9007199254740991
},
"calculated_per_player": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
]
}
},
"required": [
"amount",
"currency",
"basis",
"number_of_players",
"calculated_per_player"
],
"additionalProperties": false
},
"revalidation": {
"type": "object",
"properties": {
"required": {
"type": "boolean"
},
"recheck_after": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
{
"type": "null"
}
]
},
"expires_at": {
"anyOf": [
{
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
{
"type": "null"
}
]
},
"semantics": {
"type": "string",
"enum": [
"recheck_before_handoff",
"rechecked_for_handoff"
]
}
},
"required": [
"required",
"recheck_after",
"expires_at",
"semantics"
],
"additionalProperties": false
}
},
"required": [
"slot_id",
"provider",
"venue",
"court",
"starts_at",
"duration",
"price",
"currency",
"booking_url",
"prepared_at",
"status",
"handoff_url",
"current_price",
"source",
"checked_at",
"availability",
"price_details",
"revalidation"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"status": {
"type": "string",
"const": "unavailable"
},
"slot_id": {
"type": "string",
"minLength": 1
},
"checked_at": {
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"current_price": {
"anyOf": [
{
"type": "number",
"minimum": 0
},
{
"type": "null"
}
]
},
"reason": {
"type": "string",
"minLength": 1
}
},
"required": [
"status",
"slot_id",
"checked_at",
"current_price",
"reason"
],
"additionalProperties": false
}
]
}コミュニティ
エビデンス