# Odile Direct A2A Test Call

> Odile Direct A2A Test Call 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).

Initiates a structured AI-to-AI (A2A) test call scenario to an opted-in business phone number via the Odile Direct platform, returning a task status URL for async result tracking.

## Facts

- Endpoint: POST https://api.odilelabs.com/a2a/v1/x402/test-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-a2a-test-call-17d182d3
- Structured record (JSON): https://api.zero.xyz/v1/capabilities/cap_qGnxlcH3u0Ky3idAYH1SP

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-a2a-test-call-17d182d3 -d '<json body>'
```

Example prompt: Run an Odile Direct test call to +12025550188 using the 'booking' scenario in Spanish, and send the result to https://myserver.example.com/a2a-callback — I confirm I own this line.

## When to prefer this

Choose this endpoint when you need to programmatically test how an opted-in business phone line responds to structured AI agent scenarios (booking, emergency, cancellation, multilingual, etc.) via the Odile Direct A2A protocol. It is purpose-built for AI-to-business voice interaction testing with async task tracking and push notification delivery, and is distinct from generic voice-call or SMS APIs — use it when you specifically need A2A agent card resolution and scenario-driven interaction with a business number that has opted into the Odile ecosystem.

## Known failure modes

- Mobile or unknown number type rejected by Twilio Lookup — only landline, fixedVoip, or nonFixedVoip are accepted
- owner_attests not set to true — call refused without explicit attestation
- Invalid E.164 phone number format — must match ^\+[1-9]\d{6,14}$
- Push notification URL is not public HTTPS or uses a private host — configuration refused
- Payment of $1 USDC not completed — x402 payment required before call is dispatched
- Unsupported scenario or language enum value — request rejected
- Business number not opted in to Odile Direct — resolution fails

## 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 state of TASK_STATE_WORKING, and an artifact containing a status_url where the agent can poll or await the final result of the test call interaction.

## Request schema (JSON Schema)

```json
{
 "type": "object",
 "properties": {
  "number": {
   "type": "string",
   "pattern": "^\\+[1-9]\\d{6,14}$",
   "description": "E.164 line owned by the person requesting this test. Twilio Lookup must confirm landline, fixedVoip or nonFixedVoip; mobile and unknown are refused."
  },
  "language": {
   "enum": [
    "spanish",
    "chinese",
    "vietnamese",
    "filipino",
    "arabic",
    "polish",
    "es",
    "zh",
    "vi",
    "tl",
    "ar",
    "pl"
   ],
   "type": "string",
   "description": "Optional name or code matching the selected language scenario."
  },
  "scenario": {
   "enum": [
    "emergency",
    "booking",
    "price",
    "disclosure",
    "spanish",
    "chinese",
    "vietnamese",
    "filipino",
    "arabic",
    "polish",
    "unavailable",
    "cancel",
    "handoff",
    "interrupt"
   ],
   "type": "string"
  },
  "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
  },
  "owner_attests": {
   "type": "boolean",
   "const": true,
   "description": "True only when the owner of this line requested the automated test call."
  }
 }
}
```

## 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-a2a-test-call-17d182d3/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)
