# Install Dialyne (instructions for AI agents)

Follow these steps to give yourself a real phone line in France.

## 1. Get an API key (ask your human once)
Your human creates an account at https://app.dialyne.com/app/#/cle (e-mail, password, mobile number verified by SMS), then opens **API keys** and creates a key. The key looks like `tel_…`. Store it as a secret; never print it back in full.

## 2. Connect over MCP (preferred)
- Streamable HTTP endpoint: `https://mcp.dialyne.com/mcp` (server name `dialyne`).
- Claude, ChatGPT, Cursor: paste `https://mcp.dialyne.com/mcp` and choose OAuth — dynamic client registration and PKCE are supported; the human signs in once and clicks "Autoriser" (MCP Authorization 2025-06-18; metadata at `https://mcp.dialyne.com/.well-known/oauth-protected-resource/mcp`).
- Agents without a browser: header `Authorization: Bearer <key>`. Never put the key in the URL.
- Claude Code: `claude mcp add --transport http dialyne https://mcp.dialyne.com/mcp --header "Authorization: Bearer <key>"`
- Cursor (`.cursor/mcp.json`): `{"mcpServers": {"dialyne": {"url": "https://mcp.dialyne.com/mcp", "headers": {"Authorization": "Bearer <key>"}}}}`
- OpenAI Responses API tool: `{"type": "mcp", "server_label": "dialyne", "server_url": "https://mcp.dialyne.com/mcp", "headers": {"Authorization": "Bearer <key>"}, "require_approval": "never"}`

Check the connection: call the `get_account_balance` tool; it returns the minutes of conversation left.

## 3. Or use the REST API
```
curl https://api.dialyne.com/v1/missions \
  -H "Authorization: Bearer $TEL_KEY" -H "Content-Type: application/json" \
  -d '{"numero": "+33142000000", "mission": "Réserver une table pour 4 vendredi à 20 h au nom de Martin"}'
```
Then poll `GET /v1/missions/{id}/direct?apres=<last event id>` or receive signed webhooks.

## 4. Placing a call well
1. Write the task as the goal + facts + limits ("Book for 4 on Friday 8 pm, name Martin; accept 7:30–8:30 pm").
2. `place_phone_call` returns immediately: the call is NOT finished. Loop on `get_call(call_id, wait_seconds=25, after_event_id=<last_event_id>)` until `done=true`.
3. If `pending_question` appears, answer with `answer_call_question` within 45 seconds (otherwise the voice agent offers to call back).
4. Report `outcome` and `summary` to your human. Offer `transfer_call_to_user` if they want to talk themselves.

## Rules
- Calls only to French numbers, at any time the user chooses (automatic retries stay within 08:00–21:00 callee's time).
- Cost (Starter): 0.20 € per minute of conversation, billed per second, from your human's prepaid credit (credits valid 30 days after each top-up); busy and unanswered calls are free; the phone number is free while the account is active. Price list: https://api.dialyne.com/v1/tarifs
- No harassment, threats, impersonation or unsolicited marketing (unlawful in France). Codes, passwords and card details: your human decides; write them as `[secret: value]` so they are masked in what Dialyne stores.
- More: https://api.dialyne.com/llms.txt · https://api.dialyne.com/llms-full.txt · https://api.dialyne.com/docs
