X
Connect your client's X with a sign-in, and call its API through Operate As.
- Website
- x.com
- Connects by
- Signing in with X
- Category
- Social and video
- Services
- 1
- Tools
- 230
| Service | Key | Base URL |
|---|---|---|
| X | x | https://api.x.com/2 |
Connecting
Your client presses Connect on their link and approves on X's own screen. Operate As never sees their password.
curl https://api.operate.as/v1/me/clients \ -H "Authorization: Bearer $OPERATE_AS_API_KEY"[ { "id": "6f1c2a7e-...", "name": "Miller Dental", "services": [ "x" ] }]Permissions
| What the client reads | Permission it asks for |
|---|---|
| See posts | tweet.read |
| Post as you | tweet.write |
| See your profile and other accounts | users.read |
Tools
Install X's typed package for your language:
pip install operate-as-xx.accept_chat_message_requestcurl -X POST https://api.operate.as/v1/actions/x.accept_chat_message_request \ -H "Authorization: Bearer $OPERATE_AS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "clientId": "6f1c2a7e-...", "input": { "id": "<id>" } }'Shows the required inputs. Every input, with its JSON Schema: GET /v1/actions/x.accept_chat_message_request
{ "status": 200, "data": { "…": "the service's own response" }, "encoding": "json"}Pass-through
Paths continue from https://api.x.com/2. Your Operate As key goes in Authorization; the client's access is added for you.
See Pass-through requests for the full request and response format.
curl "https://api.operate.as/v1/clients/6f1c2a7e-.../x/..." \ -H "Authorization: Bearer $OPERATE_AS_API_KEY"{ "status": 200, "data": { "…": "the service's own response" }, "encoding": "json"}When access ends
Operate As renews the sign-in before it runs out and checks it daily. If X refuses to renew it, the service shows Expired, you're alerted, and your client reconnects from the same link.
See Keeping access alive and Removing access.
HTTP/1.1 409 ConflictContent-Type: application/json{ "detail": "Miller Dental's X access ended. Send them their link to reconnect."}{ "id": "evt_3f9a1c…", "type": "connection.expired", "createdAt": "2026-10-16T08:00:00+00:00", "data": { "clientId": "6f1c2a7e-...", "clientName": "Miller Dental", "provider": "x", "services": [ "x" ], "reconnectUrl": "https://…" }}