BetSlip Doctor
Read, grade, and track a subscriber's betslips with preserved truth and no wager placement.
사용해야 할까요
품질 및 안전성
발견 사항 (3)
- HIGH
- MEDIUMtail_read에서
- LOWprice_shop_slip에서
도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.
컨텍스트 비용
이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.
설치
원클릭 설치
`claude_desktop_config.json` 파일에 다음을 추가하세요:
{
"mcpServers": {
"mcp": {
"url": "https://api.betslipdoctor.ai/api/mcp"
}
}
}원격 엔드포인트
https://api.betslipdoctor.ai/api/mcpstreamable-http할 수 있는 일
도구 목록
도구 (32)
🟢get_tracked_slips(limit, view, search, cursor)
Read the authenticated user's tracked ticket trees and tracking lifecycle. Set view: app to read the current app saved-ticket library instead. Provider placement ids and sportsbook deep links are never returned.
입력 스키마
{
"type": "object",
"properties": {
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"description": "Legacy tracked trees: max 50. Current app view: max 20."
},
"view": {
"type": "string",
"enum": [
"app"
],
"description": "Use current app saved-ticket library; omit for tracked trees."
},
"search": {
"type": "string",
"maxLength": 128,
"description": "Current app view only."
},
"cursor": {
"type": "string",
"maxLength": 1000,
"description": "Current app view only."
}
},
"additionalProperties": false
}🔴track_slip(client_mutation_id, ticket_id, expected_revision, ticket)
Create or revise one of the authenticated user's ticket trees. This stores truth state only; it never places, prepares, or hands off a wager.
입력 스키마
{
"type": "object",
"properties": {
"client_mutation_id": {
"type": "string",
"minLength": 1,
"maxLength": 160,
"description": "Caller-generated idempotency key."
},
"ticket_id": {
"type": "string",
"description": "Server ticket id when revising an existing tracked slip."
},
"expected_revision": {
"type": "integer",
"minimum": 1,
"description": "Required with ticket_id; stale writes fail with a conflict."
},
"ticket": {
"type": "object",
"description": "BSD two-level BetTicketContract. SGP children stay nested under one outer pick."
}
},
"required": [
"client_mutation_id",
"ticket"
],
"additionalProperties": false
}🔴get_todays_board(leagues, limit, offset, view, category, ...)
Live sports board: upcoming and in-play games with main-market prices (moneyline, spread, total) and the best posted price per selection across connected books. Decision support; never a guarantee and never a wager. The default board may reserve/spend odds-refresh units under the app rules; retries deduplicate only within the existing 60-second usage bucket. Set view: app for the current app Live board and its provider, filters and cursor.
입력 스키마
{
"type": "object",
"properties": {
"leagues": {
"type": "array",
"items": {
"type": "string"
},
"description": "League labels to filter by, e.g. ['MLB','NFL']. Omit for all leagues."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"description": "Legacy main-market board: max 50. Current app games view: max 20."
},
"offset": {
"type": "integer",
"minimum": 0,
"description": "Window offset for paging (default 0)."
},
"view": {
"type": "string",
"enum": [
"app"
],
"description": "Use the current app Live board; omit for the legacy main-market board."
},
"category": {
"type": "string",
"enum": [
"games"
],
"description": "Current app games board only; current event prices are a separate app read."
},
"league": {
"type": "string",
"description": "Current app view only."
},
"cursor": {
"type": "string",
"maxLength": 800,
"description": "Current app view only."
}
},
"additionalProperties": false
}🔴grade_slip(version, action, commandKey, depth, funding, ...)
Use version bsd-agent-grade-v1 and a unique commandKey (16-120 characters) for every action. quote requires depth plus exactly one of ticketId (saved UUID) or ticket (exact confirmed manual ticket); funding is optional. start requires quoteId. cancel requires jobId. A quote discloses the allowance; start reserves it and returns a durable job. Use get_saved_reports for progress and the saved result. Text and legacy SGP inputs return migration_required.
입력 스키마
{
"type": "object",
"properties": {
"version": {
"type": "string",
"const": "bsd-agent-grade-v1"
},
"action": {
"type": "string",
"enum": [
"quote",
"start",
"cancel"
]
},
"commandKey": {
"type": "string",
"minLength": 16,
"maxLength": 120,
"pattern": "^[a-zA-Z0-9_-]+$"
},
"depth": {
"type": "string",
"enum": [
"fast",
"smart",
"deep",
"elite"
]
},
"funding": {
"default": "auto",
"type": "string",
"enum": [
"auto",
"weekly",
"bug_bounty"
]
},
"ticketId": {
"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)$"
},
"ticket": {
"type": "object",
"properties": {
"clientSlipId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"pattern": "^[a-zA-Z0-9_.:@/-]+$"
},
"clientRevision": {
"type": "integer",
"minimum": 0,
"maximum": 1000000000
},
"parentTicketId": {
"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)$"
},
"source": {
"type": "string",
"const": "manual"
},
"intent": {
"type": "string",
"enum": [
"singles",
"parlay"
]
},
"bookId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"pattern": "^[a-zA-Z0-9_.:@/-]+$"
},
"bookLabel": {
"type": "string",
"minLength": 1,
"maxLength": 80
},
"currency": {
"type": "string",
"pattern": "^[A-Z]{3}$"
},
"stakeMinor": {
"type": "integer",
"minimum": 0,
"maximum": 1000000000000
},
"selections": {
"minItems": 1,
"maxItems": 25,
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"pattern": "^[a-zA-Z0-9_.:@/-]+$"
},
"eventId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"pattern": "^[a-zA-Z0-9_.:@/-]+$"
},
"entityId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"pattern": "^[a-zA-Z0-9_.:@/-]+$"
},
"provider": {
"type": "string",
"const": "manual"
},
"sport": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"pattern": "^[a-zA-Z0-9_.:@/-]+$"
},
"league": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 200,
"pattern": "^[a-zA-Z0-9_.:@/-]+$"
},
{
"type": "null"
}
]
},
"market": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"pattern": "^[a-zA-Z0-9_.:@/-]+$"
},
"period": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 200,
"pattern": "^[a-zA-Z0-9_.:@/-]+$"
},
{
"type": "null"
}
]
},
"side": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"pattern": "^[a-zA-Z0-9_.:@/-]+$"
},
"line": {
"anyOf": [
{
"type": "string",
"pattern": "^-?\\d{1,8}(\\.\\d{1,4})?$"
},
{
"type": "null"
}
]
},
"label": {
"type": "string",
"minLength": 1,
"maxLength": 300
},
"startsAt": {
"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"
}
]
},
"future": {
"type": "boolean",
"const": true
},
"bookId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"pattern": "^[a-zA-Z0-9_.:@/-]+$"
},
"jurisdiction": {
"type": "string",
"minLength": 2,
"maxLength": 32
},
"oddsAmerican": {
"type": "integer",
"minimum": -1000000,
"maximum": 1000000
},
"observedAt": {
"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"
}
]
},
"quoteVersion": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 200,
"pattern": "^[a-zA-Z0-9_.:@/-]+$"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"eventId",
"entityId",
"provider",
"sport",
"league",
"market",
"period",
"side",
"line",
"label",
"startsAt",
"bookId",
"jurisdiction",
"oddsAmerican",
"observedAt",
"quoteVersion"
],
"additionalProperties": false
}
},
"confirmation": {
"type": "string",
"const": "exact_fields_confirmed"
},
"offeredReturnMinor": {
"anyOf": [
{
"type": "integer",
"minimum": 0,
"maximum": 1000000000000
},
{
"type": "null"
}
]
},
"acceptedReturnMinor": {
"anyOf": [
{
"type": "integer",
"minimum": 0,
"maximum": 1000000000000
},
{
"type": "null"
}
]
},
"settlementTerms": {
"type": "object",
"properties": {
"source": {
"type": "string",
"enum": [
"provider",
"book_document",
"user_reported",
"unknown"
]
},
"cashSingle": {
"type": "string",
"const": "win_loss_refund"
},
"reference": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 500
},
{
"type": "null"
}
]
},
"version": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 200,
"pattern": "^[a-zA-Z0-9_.:@/-]+$"
},
{
"type": "null"
}
]
},
"pushes": {
"type": "string",
"enum": [
"refund",
"reprice",
"lose",
"unknown"
]
},
"voids": {
"type": "string",
"enum": [
"refund",
"reprice",
"unknown"
]
}
},
"required": [
"source",
"reference",
"version",
"pushes",
"voids"
],
"additionalProperties": false
}
},
"required": [
"clientSlipId",
"clientRevision",
"source",
"intent",
"bookId",
"currency",
"stakeMinor",
"selections",
"confirmation",
"offeredReturnMinor",
"acceptedReturnMinor",
"settlementTerms"
],
"additionalProperties": false
},
"quoteId": {
"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)$"
},
"jobId": {
"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)$"
}
},
"required": [
"version",
"action",
"commandKey"
],
"additionalProperties": false
}🟢get_saved_reports(version, action, limit, cursor, jobId, ...)
For current Grade, send version bsd-agent-grade-v1 and action: list (optional limit 1-20 and cursor), job or report (jobId UUID required), or progress (jobId UUID required; optional after 0-1000000 and limit 1-100). Readiness requires a readable saved report. For legacy reports only, omit version/action and send optional report_id and limit 1-25. Never mix current and legacy fields.
입력 스키마
{
"type": "object",
"properties": {
"version": {
"type": "string",
"const": "bsd-agent-grade-v1"
},
"action": {
"type": "string",
"enum": [
"list",
"job",
"progress",
"report"
]
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100
},
"cursor": {
"type": "string",
"minLength": 1,
"maxLength": 2000
},
"jobId": {
"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)$"
},
"after": {
"default": 0,
"type": "integer",
"minimum": 0,
"maximum": 1000000
},
"report_id": {
"type": "string",
"description": "Legacy saved report ID; omit version and action."
}
},
"required": [],
"additionalProperties": false
}🟢get_history_summary(recent, view, range, recordKind, currency)
The authenticated user's imported betting-history ledger: W-L record, stake and net over lifetime/30d/7d windows, sync freshness, and their most recent bets. Numbers come only from the user's own imported slips; nothing is fabricated. Set view: app for the current app History summary with its source, currency and limitation rules.
입력 스키마
{
"type": "object",
"properties": {
"recent": {
"type": "integer",
"minimum": 0,
"maximum": 20,
"description": "Legacy-only: how many recent bets to include (default 5). Do not send with view: app."
},
"view": {
"type": "string",
"enum": [
"app"
],
"description": "Use the current app History summary; omit for legacy imported history."
},
"range": {
"type": "string",
"enum": [
"1w",
"1m",
"3m",
"ytd",
"all"
],
"description": "Current app view only."
},
"recordKind": {
"type": "string",
"enum": [
"all",
"import",
"manual"
],
"description": "Current app view only."
},
"currency": {
"type": "string",
"description": "Current app view only; ISO 4217 code."
}
},
"additionalProperties": false
}🔴price_shop_slip(legs)
Compare posted prices across books for each leg of a slip (main markets). Reports every book's quote, the best price for the bettor, and how much the user's own line gives up. Only describes books with real posted data; never places a wager. May reserve/spend odds-refresh units under the app rules; retries deduplicate only within the existing 60-second usage bucket.
입력 스키마
{
"type": "object",
"properties": {
"legs": {
"type": "array",
"minItems": 1,
"maxItems": 12,
"items": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Leg description, e.g. 'Yankees moneyline' or 'Brewers -1.5'."
},
"odds": {
"type": "number",
"description": "The american odds the user is on (e.g. -120), if known."
},
"book": {
"type": "string",
"description": "The book the user is on (e.g. 'draftkings'), if known."
}
},
"required": [
"query"
],
"additionalProperties": false
}
}
},
"required": [
"legs"
],
"additionalProperties": false
}🔴doctor_conversation(version, action, commandKey, threadId, ticketId, ...)
The app Doctor conversation. Send version bsd-agent-doctor-v1 and one action: open (commandKey, optional owned subject), threads, conversation (threadId), quota, quote (commandKey, threadId, current sequence, text), start (commandKey, quoteId), job or events (jobId), or cancel (commandKey, jobId). Keep each write commandKey stable on retry. Show the quote before start; a succeeded job carries the saved Doctor answer and the conversation stores it. The app enforces AI consent, tier, allowance, cost cap and worker admission. Do not claim an answer until the saved result is readable.
입력 스키마
{
"type": "object",
"properties": {
"version": {
"type": "string",
"const": "bsd-agent-doctor-v1"
},
"action": {
"type": "string",
"enum": [
"open",
"threads",
"conversation",
"quota",
"quote",
"start",
"job",
"events",
"cancel"
]
},
"commandKey": {
"type": "string",
"minLength": 16,
"maxLength": 120,
"description": "Stable key for one write action and all its retries."
},
"threadId": {
"type": "string",
"format": "uuid"
},
"ticketId": {
"type": [
"string",
"null"
],
"format": "uuid"
},
"reportId": {
"type": [
"string",
"null"
],
"format": "uuid"
},
"history": {
"type": "object",
"properties": {
"kind": {
"type": "string",
"enum": [
"import",
"manual"
]
},
"id": {
"type": "string",
"format": "uuid"
}
},
"required": [
"kind",
"id"
],
"additionalProperties": false
},
"sequence": {
"type": "integer",
"minimum": 0,
"maximum": 1998,
"description": "Current thread sequence from conversation."
},
"text": {
"type": "string",
"minLength": 1,
"maxLength": 4000
},
"quoteId": {
"type": "string",
"format": "uuid"
},
"jobId": {
"type": "string",
"format": "uuid"
},
"before": {
"type": "integer",
"minimum": 1,
"maximum": 2001
},
"after": {
"type": "integer",
"minimum": 0,
"maximum": 1000000
}
},
"required": [
"version",
"action"
],
"additionalProperties": false
}🟢tail_read(version, action, feed, profileId, listId, ...)
Send version bsd-agent-tail-v1 and action feed (optional feed/profileId/listId/search/limit/cursor) or post (postId). Read the same account-filtered Tail feed or one visible post as the BSD app. Moderation, follows, mutes, private lists and cursor binding use the app service.
입력 스키마
{
"type": "object",
"properties": {
"version": {
"type": "string",
"const": "bsd-agent-tail-v1"
},
"action": {
"type": "string",
"enum": [
"feed",
"post"
]
},
"feed": {
"type": "string",
"enum": [
"community",
"for_you",
"following",
"own",
"profile",
"bookmarks",
"list"
]
},
"profileId": {
"type": "string",
"format": "uuid"
},
"listId": {
"type": "string",
"format": "uuid"
},
"search": {
"type": "string",
"maxLength": 100
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 25
},
"cursor": {
"type": "string",
"maxLength": 1500
},
"postId": {
"type": "string",
"format": "uuid"
}
},
"required": [
"version",
"action"
],
"additionalProperties": false
}🔴tail_post(version, action, commandKey, confirmation, draft, ...)
Send version bsd-agent-tail-v1. Preview a draft from either an owned saved Grade report (reportId, text, showStake, placement) or saved Doctor exchange (source doctor_exchange, threadId, messageId, text) through the app service. Publish only after showing the exact preview and getting the customer’s confirmation. For action publish reuse the same draft and previewBinding, pass confirmation PUBLISH_POST, placementConfirmation, fWarning and a stable commandKey. Publishing enters the app moderation queue; it is not a wager.
입력 스키마
{
"type": "object",
"properties": {
"version": {
"type": "string",
"const": "bsd-agent-tail-v1"
},
"action": {
"type": "string",
"enum": [
"preview",
"publish"
]
},
"commandKey": {
"type": "string",
"minLength": 16,
"maxLength": 120
},
"confirmation": {
"type": "string",
"const": "PUBLISH_POST"
},
"draft": {
"type": "object",
"description": "The exact app post draft: either a saved Grade report or a saved Doctor exchange.",
"properties": {
"reportId": {
"type": "string",
"format": "uuid",
"description": "Owned saved Grade job ID for a ticket post."
},
"source": {
"type": "string",
"const": "doctor_exchange"
},
"threadId": {
"type": "string",
"format": "uuid",
"description": "Owned Doctor thread for an exchange post."
},
"messageId": {
"type": "string",
"format": "uuid",
"description": "Saved Doctor reply in that thread."
},
"text": {
"type": "string",
"maxLength": 280
},
"showStake": {
"type": "boolean",
"description": "Ticket post only."
},
"placement": {
"type": "string",
"enum": [
"asking",
"self_reported_placed"
],
"description": "Ticket post only."
},
"pollOptions": {
"type": "array",
"minItems": 2,
"maxItems": 4,
"items": {
"type": "string",
"minLength": 1,
"maxLength": 50
}
}
},
"required": [
"text"
],
"additionalProperties": false
},
"previewBinding": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"placementConfirmation": {
"type": "string",
"enum": [
"NOT_PLACED",
"SELF_REPORTED_PLACED"
]
},
"fWarning": {
"type": [
"string",
"null"
],
"enum": [
"acknowledge",
"dont_ask_again",
null
]
}
},
"required": [
"version",
"action",
"draft"
],
"additionalProperties": false
}🟡quote_grade(commandKey, depth, funding, ticketId, ticket)
Persist a Grade quote for an owned saved ticketId or exactly one confirmed manual ticket, with the requested depth and optional funding. May save that manual ticket. Returns the app allowance quote; does not start work. Show the quote before requesting a start. Keep the caller-generated commandKey (16-120 characters) stable for this action and all retries. Action and version are fixed by this tool; do not supply them.
입력 스키마
{
"type": "object",
"properties": {
"commandKey": {
"type": "string",
"minLength": 16,
"maxLength": 120,
"pattern": "^[a-zA-Z0-9_-]+$"
},
"depth": {
"type": "string",
"enum": [
"fast",
"smart",
"deep",
"elite"
]
},
"funding": {
"default": "auto",
"type": "string",
"enum": [
"auto",
"weekly",
"bug_bounty"
]
},
"ticketId": {
"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)$"
},
"ticket": {
"type": "object",
"properties": {
"clientSlipId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"pattern": "^[a-zA-Z0-9_.:@/-]+$"
},
"clientRevision": {
"type": "integer",
"minimum": 0,
"maximum": 1000000000
},
"parentTicketId": {
"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)$"
},
"source": {
"type": "string",
"const": "manual"
},
"intent": {
"type": "string",
"enum": [
"singles",
"parlay"
]
},
"bookId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"pattern": "^[a-zA-Z0-9_.:@/-]+$"
},
"bookLabel": {
"type": "string",
"minLength": 1,
"maxLength": 80
},
"currency": {
"type": "string",
"pattern": "^[A-Z]{3}$"
},
"stakeMinor": {
"type": "integer",
"minimum": 0,
"maximum": 1000000000000
},
"selections": {
"minItems": 1,
"maxItems": 25,
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"pattern": "^[a-zA-Z0-9_.:@/-]+$"
},
"eventId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"pattern": "^[a-zA-Z0-9_.:@/-]+$"
},
"entityId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"pattern": "^[a-zA-Z0-9_.:@/-]+$"
},
"provider": {
"type": "string",
"const": "manual"
},
"sport": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"pattern": "^[a-zA-Z0-9_.:@/-]+$"
},
"league": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 200,
"pattern": "^[a-zA-Z0-9_.:@/-]+$"
},
{
"type": "null"
}
]
},
"market": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"pattern": "^[a-zA-Z0-9_.:@/-]+$"
},
"period": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 200,
"pattern": "^[a-zA-Z0-9_.:@/-]+$"
},
{
"type": "null"
}
]
},
"side": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"pattern": "^[a-zA-Z0-9_.:@/-]+$"
},
"line": {
"anyOf": [
{
"type": "string",
"pattern": "^-?\\d{1,8}(\\.\\d{1,4})?$"
},
{
"type": "null"
}
]
},
"label": {
"type": "string",
"minLength": 1,
"maxLength": 300
},
"startsAt": {
"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"
}
]
},
"future": {
"type": "boolean",
"const": true
},
"bookId": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"pattern": "^[a-zA-Z0-9_.:@/-]+$"
},
"jurisdiction": {
"type": "string",
"minLength": 2,
"maxLength": 32
},
"oddsAmerican": {
"type": "integer",
"minimum": -1000000,
"maximum": 1000000
},
"observedAt": {
"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"
}
]
},
"quoteVersion": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 200,
"pattern": "^[a-zA-Z0-9_.:@/-]+$"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"eventId",
"entityId",
"provider",
"sport",
"league",
"market",
"period",
"side",
"line",
"label",
"startsAt",
"bookId",
"jurisdiction",
"oddsAmerican",
"observedAt",
"quoteVersion"
],
"additionalProperties": false
}
},
"confirmation": {
"type": "string",
"const": "exact_fields_confirmed"
},
"offeredReturnMinor": {
"anyOf": [
{
"type": "integer",
"minimum": 0,
"maximum": 1000000000000
},
{
"type": "null"
}
]
},
"acceptedReturnMinor": {
"anyOf": [
{
"type": "integer",
"minimum": 0,
"maximum": 1000000000000
},
{
"type": "null"
}
]
},
"settlementTerms": {
"type": "object",
"properties": {
"source": {
"type": "string",
"enum": [
"provider",
"book_document",
"user_reported",
"unknown"
]
},
"cashSingle": {
"type": "string",
"const": "win_loss_refund"
},
"reference": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 500
},
{
"type": "null"
}
]
},
"version": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"maxLength": 200,
"pattern": "^[a-zA-Z0-9_.:@/-]+$"
},
{
"type": "null"
}
]
},
"pushes": {
"type": "string",
"enum": [
"refund",
"reprice",
"lose",
"unknown"
]
},
"voids": {
"type": "string",
"enum": [
"refund",
"reprice",
"unknown"
]
}
},
"required": [
"source",
"reference",
"version",
"pushes",
"voids"
],
"additionalProperties": false
}
},
"required": [
"clientSlipId",
"clientRevision",
"source",
"intent",
"bookId",
"currency",
"stakeMinor",
"selections",
"confirmation",
"offeredReturnMinor",
"acceptedReturnMinor",
"settlementTerms"
],
"additionalProperties": false
}
},
"required": [
"commandKey",
"depth"
],
"additionalProperties": false
}🔴start_grade(commandKey, quoteId)
Start the owned Grade quoteId after the customer has seen and accepted its allowance quote. Reserves app allowance and queues the same durable Grade job; consent, tier, credit and admission rules apply. Returns a job, not a completed answer. Keep the caller-generated commandKey (16-120 characters) stable for this action and all retries. Action and version are fixed by this tool; do not supply them.
입력 스키마
{
"type": "object",
"properties": {
"commandKey": {
"type": "string",
"minLength": 16,
"maxLength": 120,
"pattern": "^[a-zA-Z0-9_-]+$"
},
"quoteId": {
"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)$"
}
},
"required": [
"commandKey",
"quoteId"
],
"additionalProperties": false
}🔴cancel_grade(commandKey, jobId)
Cancel an owned Grade jobId through the app service. Stops eligible work and releases its remaining reservation under the existing app rules; cannot undo provider work already performed. Keep the caller-generated commandKey (16-120 characters) stable for this action and all retries. Action and version are fixed by this tool; do not supply them.
입력 스키마
{
"type": "object",
"properties": {
"commandKey": {
"type": "string",
"minLength": 16,
"maxLength": 120,
"pattern": "^[a-zA-Z0-9_-]+$"
},
"jobId": {
"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)$"
}
},
"required": [
"commandKey",
"jobId"
],
"additionalProperties": false
}🟢list_grade_jobs(limit, cursor)
Read the authenticated account’s current Grade library, with optional limit 1-20 and account-bound cursor. Never starts research. Action and version are fixed by this tool; do not supply them.
입력 스키마
{
"type": "object",
"properties": {
"limit": {
"default": 10,
"type": "integer",
"minimum": 1,
"maximum": 20
},
"cursor": {
"type": "string",
"minLength": 1,
"maxLength": 2000
}
},
"required": [],
"additionalProperties": false
}🟢get_grade_job(jobId)
Read the owned Grade jobId and its current durable status. Never starts or resumes work. Action and version are fixed by this tool; do not supply them.
입력 스키마
{
"type": "object",
"properties": {
"jobId": {
"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)$"
}
},
"required": [
"jobId"
],
"additionalProperties": false
}🟢get_grade_progress(jobId, after, limit)
Read saved progress for the owned Grade jobId, with optional after sequence and limit 1-100. Progress is not proof that a saved report is ready; never starts work. Action and version are fixed by this tool; do not supply them.
입력 스키마
{
"type": "object",
"properties": {
"jobId": {
"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)$"
},
"after": {
"default": 0,
"type": "integer",
"minimum": 0,
"maximum": 1000000
},
"limit": {
"default": 100,
"type": "integer",
"minimum": 1,
"maximum": 100
}
},
"required": [
"jobId"
],
"additionalProperties": false
}🟢get_grade_report(jobId)
Return the verified immutable saved report for an owned completed Grade jobId. Returns unavailable until the real saved report is readable; never grades again. Action and version are fixed by this tool; do not supply them.
입력 스키마
{
"type": "object",
"properties": {
"jobId": {
"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)$"
}
},
"required": [
"jobId"
],
"additionalProperties": false
}⚪open_doctor_conversation(commandKey, ticketId, reportId, history)
Persist an app Doctor thread, optionally attached to an owned ticket, report or history item. Does not start a reply or spend a consult allowance. Keep the caller-generated commandKey (16-120 characters) stable for this action and all retries. Action and version are fixed by this tool; do not supply them.
입력 스키마
{
"type": "object",
"properties": {
"commandKey": {
"type": "string",
"minLength": 16,
"maxLength": 120,
"pattern": "^[a-zA-Z0-9_-]+$"
},
"ticketId": {
"anyOf": [
{
"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)$"
},
{
"type": "null"
}
]
},
"reportId": {
"anyOf": [
{
"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)$"
},
{
"type": "null"
}
]
},
"history": {
"type": "object",
"properties": {
"kind": {
"type": "string",
"enum": [
"import",
"manual"
]
},
"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)$"
}
},
"required": [
"kind",
"id"
],
"additionalProperties": false
}
},
"required": [
"commandKey"
],
"additionalProperties": false
}🟢list_doctor_conversations
Read this account’s saved app Doctor threads. Does not generate an answer. Action and version are fixed by this tool; do not supply them.
입력 스키마
{
"type": "object",
"properties": {},
"required": [],
"additionalProperties": false
}🟢get_doctor_conversation(threadId, before)
Read the owned threadId, saved user messages, Doctor answers and jobs; optional before pages older messages. Does not generate a new answer. Action and version are fixed by this tool; do not supply them.
입력 스키마
{
"type": "object",
"properties": {
"threadId": {
"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)$"
},
"before": {
"type": "integer",
"minimum": 1,
"maximum": 2001
}
},
"required": [
"threadId"
],
"additionalProperties": false
}🟢get_doctor_quota
Read this account’s current app consult allowance, held and used amounts, and reset information. Does not reserve a consult. Action and version are fixed by this tool; do not supply them.
입력 스키마
{
"type": "object",
"properties": {},
"required": [],
"additionalProperties": false
}🟢quote_doctor_reply(commandKey, threadId, sequence, text)
Persist an app consult quote for text in the owned threadId at its current sequence. Returns the allowance quote without starting a reply. Show the quote before requesting a start. Keep the caller-generated commandKey (16-120 characters) stable for this action and all retries. Action and version are fixed by this tool; do not supply them.
입력 스키마
{
"type": "object",
"properties": {
"commandKey": {
"type": "string",
"minLength": 16,
"maxLength": 120,
"pattern": "^[a-zA-Z0-9_-]+$"
},
"threadId": {
"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)$"
},
"sequence": {
"type": "integer",
"minimum": 0,
"maximum": 1998
},
"text": {
"type": "string",
"minLength": 1,
"maxLength": 4000
}
},
"required": [
"commandKey",
"threadId",
"sequence",
"text"
],
"additionalProperties": false
}🔴start_doctor_reply(commandKey, quoteId)
Start the owned consult quoteId after the customer has seen and accepted the quote. Reserves app allowance and queues the existing Doctor job; app AI consent, tier, credit, cost cap and admission rules apply. Does not return an answer before it is saved. Keep the caller-generated commandKey (16-120 characters) stable for this action and all retries. Action and version are fixed by this tool; do not supply them.
입력 스키마
{
"type": "object",
"properties": {
"commandKey": {
"type": "string",
"minLength": 16,
"maxLength": 120,
"pattern": "^[a-zA-Z0-9_-]+$"
},
"quoteId": {
"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)$"
}
},
"required": [
"commandKey",
"quoteId"
],
"additionalProperties": false
}🟢get_doctor_job(jobId)
Read the owned Doctor jobId, including its real saved answer when available. Never generates or restarts a reply. Action and version are fixed by this tool; do not supply them.
입력 스키마
{
"type": "object",
"properties": {
"jobId": {
"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)$"
}
},
"required": [
"jobId"
],
"additionalProperties": false
}🟢get_doctor_events(jobId, after)
Read saved events for the owned Doctor jobId, optionally after a sequence. Never starts a consult. Action and version are fixed by this tool; do not supply them.
입력 스키마
{
"type": "object",
"properties": {
"jobId": {
"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)$"
},
"after": {
"type": "integer",
"minimum": 0,
"maximum": 1000000
}
},
"required": [
"jobId"
],
"additionalProperties": false
}🔴cancel_doctor_reply(commandKey, jobId)
Cancel an owned Doctor jobId under the app cancellation and reservation rules. Cannot undo a reply or provider work already completed. Keep the caller-generated commandKey (16-120 characters) stable for this action and all retries. Action and version are fixed by this tool; do not supply them.
입력 스키마
{
"type": "object",
"properties": {
"commandKey": {
"type": "string",
"minLength": 16,
"maxLength": 120,
"pattern": "^[a-zA-Z0-9_-]+$"
},
"jobId": {
"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)$"
}
},
"required": [
"commandKey",
"jobId"
],
"additionalProperties": false
}🟢get_tail_feed(feed, profileId, listId, search, limit, ...)
Read the app Tail feed with its account-filtered community, following, own, profile, bookmark or private-list visibility. Uses app moderation, mutes and account-bound cursor rules; does not post. Action and version are fixed by this tool; do not supply them.
입력 스키마
{
"type": "object",
"properties": {
"feed": {
"type": "string",
"enum": [
"community",
"for_you",
"following",
"own",
"profile",
"bookmarks",
"list"
]
},
"profileId": {
"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)$"
},
"listId": {
"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)$"
},
"search": {
"type": "string",
"maxLength": 100
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 25
},
"cursor": {
"type": "string",
"minLength": 1,
"maxLength": 1500
}
},
"required": [],
"additionalProperties": false
}🟢get_tail_post(postId)
Read one app Tail postId visible to this account under the same moderation and privacy rules. May contain another community member’s published content; does not post. Action and version are fixed by this tool; do not supply them.
입력 스키마
{
"type": "object",
"properties": {
"postId": {
"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)$"
}
},
"required": [
"postId"
],
"additionalProperties": false
}🟢preview_tail_post(draft)
Compute the exact app sharing preview and binding from an owned saved Grade report or Doctor exchange draft. Does not publish. Show the returned preview to the customer before requesting publication. Action and version are fixed by this tool; do not supply them.
입력 스키마
{
"type": "object",
"properties": {
"draft": {
"anyOf": [
{
"type": "object",
"properties": {
"source": {
"type": "string",
"const": "doctor_exchange"
},
"threadId": {
"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)$"
},
"messageId": {
"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)$"
},
"text": {
"type": "string",
"maxLength": 280
},
"pollOptions": {
"minItems": 2,
"maxItems": 4,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 50
}
}
},
"required": [
"source",
"threadId",
"messageId",
"text"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"reportId": {
"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)$"
},
"text": {
"type": "string",
"maxLength": 280
},
"showStake": {
"type": "boolean"
},
"placement": {
"type": "string",
"enum": [
"asking",
"self_reported_placed"
]
},
"pollOptions": {
"minItems": 2,
"maxItems": 4,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 50
}
}
},
"required": [
"reportId",
"text",
"showStake",
"placement"
],
"additionalProperties": false
}
]
}
},
"required": [
"draft"
],
"additionalProperties": false
}🔴publish_tail_post(commandKey, confirmation, draft, previewBinding, placementConfirmation, ...)
Submit the exact customer-approved draft and previewBinding to the app moderation queue. Requires confirmation PUBLISH_POST, placementConfirmation and fWarning. Shares approved content with the Tail community when moderation allows; this irreversible send never places a wager. Keep the caller-generated commandKey (16-120 characters) stable for this action and all retries. Action and version are fixed by this tool; do not supply them.
입력 스키마
{
"type": "object",
"properties": {
"commandKey": {
"type": "string",
"minLength": 16,
"maxLength": 120,
"pattern": "^[a-zA-Z0-9_-]+$"
},
"confirmation": {
"type": "string",
"const": "PUBLISH_POST"
},
"draft": {
"anyOf": [
{
"type": "object",
"properties": {
"source": {
"type": "string",
"const": "doctor_exchange"
},
"threadId": {
"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)$"
},
"messageId": {
"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)$"
},
"text": {
"type": "string",
"maxLength": 280
},
"pollOptions": {
"minItems": 2,
"maxItems": 4,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 50
}
}
},
"required": [
"source",
"threadId",
"messageId",
"text"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"reportId": {
"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)$"
},
"text": {
"type": "string",
"maxLength": 280
},
"showStake": {
"type": "boolean"
},
"placement": {
"type": "string",
"enum": [
"asking",
"self_reported_placed"
]
},
"pollOptions": {
"minItems": 2,
"maxItems": 4,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 50
}
}
},
"required": [
"reportId",
"text",
"showStake",
"placement"
],
"additionalProperties": false
}
]
},
"previewBinding": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"placementConfirmation": {
"type": "string",
"enum": [
"NOT_PLACED",
"SELF_REPORTED_PLACED"
]
},
"fWarning": {
"anyOf": [
{
"type": "string",
"enum": [
"acknowledge",
"dont_ask_again"
]
},
{
"type": "null"
}
]
}
},
"required": [
"commandKey",
"confirmation",
"draft",
"previewBinding",
"placementConfirmation",
"fWarning"
],
"additionalProperties": false
}🟡create_tracked_slip(client_mutation_id, ticket)
Create an owned ticket tree in building state with a stable client_mutation_id for retries. Stores truth only; never prepares or places a wager. Cannot revise an existing slip.
입력 스키마
{
"type": "object",
"properties": {
"client_mutation_id": {
"type": "string",
"minLength": 1,
"maxLength": 160,
"description": "Caller-generated idempotency key."
},
"ticket": {
"type": "object",
"description": "BSD two-level BetTicketContract. SGP children stay nested under one outer pick."
}
},
"required": [
"client_mutation_id",
"ticket"
],
"additionalProperties": false
}🔴revise_tracked_slip(client_mutation_id, ticket_id, expected_revision, ticket)
Overwrite the owned tracked ticket_id with the supplied ticket tree in building state. Requires expected_revision; stale writes fail with the same app conflict. Keep client_mutation_id stable for retries. Never prepares or places a wager.
입력 스키마
{
"type": "object",
"properties": {
"client_mutation_id": {
"type": "string",
"minLength": 1,
"maxLength": 160,
"description": "Caller-generated idempotency key."
},
"ticket_id": {
"type": "string",
"description": "Server ticket id when revising an existing tracked slip."
},
"expected_revision": {
"type": "integer",
"minimum": 1,
"description": "Required with ticket_id; stale writes fail with a conflict."
},
"ticket": {
"type": "object",
"description": "BSD two-level BetTicketContract. SGP children stay nested under one outer pick."
}
},
"required": [
"client_mutation_id",
"ticket",
"ticket_id",
"expected_revision"
],
"additionalProperties": false
}비교
동종 서버 비교
같은 카테고리의 다른 서버와 이 서버를 비교하세요.
커뮤니티
증거