# Odile Direct: AI-to-Business Voice Call & Booking

> Odile Direct: AI-to-Business Voice Call & Booking is a paid API for AI agents from api.odilelabs.com, paid per call via x402, $1/call, status unknown (last checked 2026-10-31).

Resolve an opted-in business phone number, read its A2A agent card, and dispatch a structured message or booking request on behalf of a named human caller.

## Facts

- Endpoint: POST https://api.odilelabs.com/a2a/v1/x402/call?utm_source=zero.xyz
- Price: $1/call
- Payment: x402
- Status: unknown
- Last checked: 2026-10-31
- Activations on Zero: 0
- Tags: x402
- Canonical page: https://www.zero.xyz/c/odile-direct-ai-to-business-voice-call-booking-b73c0e5a
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_JD4ldHmDqOj2TFvz2zGZB

Status and success rate cover calls made through Zero and Zero's own probes. Third-party monitors may report differently.

## How to call it through Zero

Zero handles the 402 payment challenge and records the run. With the Zero CLI installed (`npm i -g @zeroxyz/cli`):

```sh
zero fetch --capability odile-direct-ai-to-business-voice-call-booking-b73c0e5a -d '<json body>'
```

Example prompt: On behalf of Jane Smith, please call Blossom Hair Salon at +12125550198 and ask if they have any availability for a haircut this Saturday — my callback number is +14155550123 and I have Jane's consent to make this call for her.

## When to prefer this

Use this endpoint when you need an AI agent to programmatically contact a specific opted-in business phone number to deliver a structured inquiry or booking request on behalf of a named human, and that human has explicitly consented. It is purpose-built for the A2A (agent-to-agent) protocol and handles business number resolution, agent card reading, and asynchronous task tracking in one call. Prefer this over generic telephony or SMS APIs when the target business is registered with Odile Direct and you need structured, verifiable communication with async status tracking rather than raw voice dialing.

## Known failure modes

- Business number not opted into Odile Direct — endpoint returns an error indicating the number is not resolvable
- on_behalf_consent not set to true — request is rejected
- callback_number matches the business number — validation error
- Push notification URL is not public HTTPS or redirects — configuration rejected
- Payment of $1 USDC via x402 not completed — 402 Payment Required returned
- need field is empty or exceeds 500 characters — schema validation error
- Business number format invalid (not E.164) — pattern validation failure

## How this service works

Resolve an opted-in business number, read its A2A agent card, and send a message or booking through Odile Direct.

## Output

Returns a JSON object containing an A2A task with a unique task ID, an initial status of TASK_STATE_WORKING, and a status polling URL so the agent can check the outcome of the business interaction asynchronously. If a push notification URL was provided, the final task result is POSTed there when complete.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "need": {
   "type": "string",
   "maxLength": 500,
   "minLength": 1,
   "description": "An informational request; no sales, payment or account access."
  },
  "skill": {
   "type": "string",
   "const": "call_business"
  },
  "number": {
   "type": "string",
   "pattern": "^\\+[1-9]\\d{6,14}$",
   "description": "E.164 business number in an enabled country (US and Canada today), or any number with a verified SIP claim or an Odile line"
  },
  "caller_name": {
   "type": "string",
   "maxLength": 100,
   "minLength": 1
  },
  "business_name": {
   "type": "string",
   "maxLength": 120,
   "minLength": 1
  },
  "configuration": {
   "type": "object",
   "properties": {
    "pushNotificationConfig": {
     "type": "object",
     "required": [
      "url"
     ],
     "properties": {
      "url": {
       "type": "string",
       "format": "uri",
       "pattern": "^https://",
       "maxLength": 500,
       "description": "Public HTTPS URL for the final A2A Task; redirects and private hosts are refused."
      },
      "token": {
       "type": "string",
       "pattern": "^[^\\x00-\\x1f\\x7f]+$",
       "maxLength": 256,
       "minLength": 1,
       "description": "Optional token returned in X-A2A-Notification-Token. authentication is not supported."
      }
     },
     "additionalProperties": false
    }
   },
   "description": "Optional A2A push configuration. It is bound to this payment with the call data; reuse the same configuration on retries.",
   "additionalProperties": false
  },
  "callback_number": {
   "type": "string",
   "pattern": "^\\+[1-9]\\d{6,14}$",
   "description": "Callable E.164 US/Canada callback number, different from the business number."
  },
  "on_behalf_consent": {
   "type": "boolean",
   "const": true,
   "description": "True only after the named human agrees to this call on their behalf."
  }
 }
}
```

## Response schema (JSON Schema)

```json
{
 "type": "json",
 "example": {
  "result": {
   "task": {
    "id": "dv_example",
    "status": {
     "state": "TASK_STATE_WORKING"
    },
    "artifacts": [
     {
      "parts": [
       {
        "data": {
         "status_url": "https://api.odilelabs.com/a2a/v1/voice/dv_example?t=example"
        }
       }
      ]
     }
    ]
   }
  }
 }
}
```

## More

- Live health (JSON, refreshed every minute): https://www.zero.xyz/c/odile-direct-ai-to-business-voice-call-booking-b73c0e5a/health.json
- [Zero catalog index](https://www.zero.xyz/llms.txt)
- [Other services from api.odilelabs.com](https://www.zero.xyz/host/api.odilelabs.com/llms.txt)
