{"uid":"cap_ABKjL2M2GWAXHRkz8UVWY","slug":"odile-direct-a2a-business-messaging-booking-2efa535c","name":"Odile Direct: A2A Business Messaging & Booking","description":"Resolve an opted-in business number, read its A2A agent card, and send a message or booking through Odile Direct.","url":"https://api.odilelabs.com/a2a/v1/x402/b/%7Bbiz%7D?utm_source=zero.xyz","method":"POST","headers":{},"bodySchema":{"type":"object","properties":{"id":{"type":["string","integer"]},"method":{"const":"SendMessage"},"params":{"type":"object","required":["message"],"properties":{"message":{"type":"object","required":["messageId","role","parts"],"properties":{"role":{"const":"ROLE_USER"},"parts":{"type":"array","items":{"type":"object","required":["data"],"properties":{"data":{"type":"object","required":["skill"],"properties":{"need":{"type":"string","maxLength":500,"description":"What the caller needs, in a sentence or two"},"slot":{"type":"string","description":"For book: a slot value returned by check_availability"},"skill":{"enum":["take_message","book","book_first_available","cancel_booking"],"type":"string","description":"take_message ($0.10 when delivered), book or book_first_available ($0.50 when confirmed); cancel_booking is always free, without payment. Use only skills the business card lists."},"reason":{"type":"string","maxLength":300,"description":"Optional cancellation reason."},"booking_id":{"type":"string","pattern":"^[A-Za-z0-9_-]{5,200}$","description":"For cancel_booking: the confirmed booking id."},"caller_name":{"type":"string","maxLength":100,"description":"Who the message is from or who the booking is for"},"cancel_token":{"type":"string","pattern":"^[a-fA-F0-9]{1,200}$","description":"For cancel_booking: the private token returned with the booking id."},"on_behalf_of":{"type":"string","maxLength":100,"description":"The person the agent acts for, when different from caller_name"},"callback_number":{"type":"string","pattern":"^\\+[1-9]\\d{7,14}$","description":"E.164 number the business should call back"}}},"mediaType":{"const":"application/json"}}},"maxItems":1,"minItems":1},"messageId":{"type":"string","description":"One stable id per task, reused on retries"}}}}},"jsonrpc":{"const":"2.0"}}},"responseSchema":{"type":"json","example":{"id":1,"result":{"task":{"status":{"state":"TASK_STATE_COMPLETED"}}},"jsonrpc":"2.0"}},"example":null,"exampleRequest":null,"tags":["x402"],"displayCostAmount":"0.1","displayCostAsset":"USDC","priceDynamic":false,"priceHint":null,"priceStatus":"priced","priceSource":"probe","requiresHandshake":false,"reviewCount":0,"rating":{"score":"0.00","successRate":"0.00","reviews":0,"stars":null,"state":"unrated"},"availabilityStatus":"unknown","priceObserved":null,"sessionDeposit":null,"pricing":{"kind":"static","summary":"$0.1/call","primary":{"kind":"static","protocol":"x402","network":"base","amountUsd":"0.1","per":"call","confidence":"exact"},"accepted":[{"kind":"static","protocol":"x402","network":"base","amountUsd":"0.1","per":"call","confidence":"exact"}]},"paymentMethods":[{"uid":"pm_9SqkrW-Fc6q92mHvwPlqc","protocol":"x402","methodType":"crypto","chain":"base","mode":"charge","costAmount":"0.1","costPer":"request","priority":0,"asset":"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v","unit":"request","depositMicros":null,"planRef":null}],"brandName":null,"brandSlug":null,"brandBaseUrl":null,"brandDocsUrl":null,"whatItDoes":"Send a structured message, booking request, or cancellation to an opted-in business via its A2A agent card using a business phone number as the identifier.","exampleAgentPrompt":"Please send a message to the dental office at +12125550123 from Sarah Johnson — tell them she needs to reschedule her cleaning and to call her back at +12125550199.","exampleUseCases":[{"title":"Leave message at local business","prompt":"Send a message to the hair salon at +13105550177 from Marcus Webb — tell them he'd like a quote on highlights and to call him back at +13105550188."},{"title":"Book first available appointment","prompt":"Book the first available slot at the plumbing company reachable at +14155550234 for me — my name is Dana Reyes, and I need someone to look at a leaky pipe."},{"title":"Cancel existing appointment","prompt":"Cancel my booking at the clinic at +18005550321 — my booking ID is appt_Xk3mR9 and my cancel token is 4a2f8c, I'm cancelling because something came up at work."}],"resultDescription":"Returns a JSON-RPC 2.0 response with a task object whose status.state field indicates the outcome (e.g. TASK_STATE_COMPLETED). On success, the task confirms delivery of the message or booking; booking responses may include a booking ID and cancel token for future use.","failureModes":["Business number not opted into Odile Direct — no agent card found","Invalid or missing required fields (messageId, role, parts, skill)","Skill not supported by the specific business's agent card","Invalid booking slot — slot not returned by check_availability or already taken","Invalid booking_id or cancel_token format for cancel_booking","Payment failure — insufficient USDC balance for paid skills (take_message, book)","Callback number not in valid E.164 format","messageId collision if different tasks share the same ID"],"whenToPreferThis":"Use this endpoint when you need to contact a specific opted-in business by their phone number through a structured A2A protocol — ideal when leaving a message, booking an appointment, or cancelling a booking programmatically without human phone interaction. Prefer this over generic messaging when the business has an Odile Direct agent card and you need confirmed delivery or booking state returned to your agent.","instructions":null,"reviewSummary":null,"reviewSummaryHighlights":null,"reviewSummaryConcerns":null,"reviewSummaryGeneratedAt":null,"activationCount":0,"lastUsedAt":null,"lastSuccessfullyRanAt":null,"lastHealthCheckAt":"2026-10-31T18:30:37.016Z","isFirstParty":false,"canonicalSlug":"odile-direct-a2a-business-messaging-booking-2efa535c"}