---
title: phone.connectTwilio | Doing Work API
description: Connect the shop's own Twilio account. Give an API key (SID and secret) for sending and the account's Auth Token, which Doing Work only uses to check that 
url: https://doingwork.work/docs/reference/phone-connecttwilio/
---

# phone.connectTwilio

Connect the shop's own Twilio account. Give an API key (SID and secret) for sending and the account's Auth Token, which Doing Work only uses to check that webhooks really come from Twilio. Neither is ever shown again. Owner only.

|  |  |
|---|---|
| Who | Agents can call this |
| REST | `POST /v1/phone/connect-twilio` |
| MCP tool | `phone_connectTwilio` |
| Writes | yes, send an Idempotency-Key |
| Area | [Shop](https://doingwork.work/docs/reference/#shop) |

## When to use it

Connect the shop's own Twilio account. Give an API key (SID and secret) for sending and the account's Auth Token, which Doing Work only uses to check that webhooks really come from Twilio.

## What to tell the owner

Say what you did in plain words and what happens next.

## Input

| Field | Type | Required |
|---|---|---|
| `shop_id` | string (uuid) | yes |
| `account_sid` | string | yes |
| `api_key_sid` | string | yes |
| `api_key_secret` | string | yes |
| `auth_token` | string | yes |

## Example

```http
POST https://doingwork.work/v1/phone/connect-twilio
content-type: application/json
Idempotency-Key: 3f1c...

{
  "shop_id": "00000000-0000-4000-8000-000000000000",
  "account_sid": "...",
  "api_key_sid": "...",
  "api_key_secret": "...",
  "auth_token": "..."
}
```

## Output

JSON. The response shape isn't published yet; read the fields you need and ignore the rest. Errors are `{code, message, status}`.

## Errors

| Code | Status | What to do |
|---|---|---|
| `invalid_input`, `invalid_token`, `rate_limited` |  | Can happen on any call. See [errors](https://doingwork.work/docs/errors/). |
