Overview
The Twilio integration syncs your communications-platform configuration into LowerPlane: account settings, phone numbers, TwiML applications, SIP domains, and API keys. LowerPlane authenticates with a Twilio API key to collect compliance evidence automatically and run continuous checks on how that traffic is protected in transit and how your API credentials are managed. LowerPlane deliberately does not collect message or call traffic, recordings, queues, emergency addresses, or billing usage. None of it evidences a control, and aggregate volume counts are not something an auditor accepts — so it is not worth the data-handling exposure on a platform holding customer PII.Prerequisites
How to Get Your Credentials
Sign in to the Twilio Console
Log in at console.twilio.com.
Copy the Account SID
On the Console dashboard, find the Account Info panel and copy the Account SID. It always begins with
AC. This identifies which account LowerPlane reads from.Create an API key
Go to Account → API keys & tokens, then click Create API key. Name it something identifiable such as
LowerPlane.Pick the key type using the table below — it determines which checks can run.Which key type to choose
Twilio permits only Main API keys to read the Account and Keys resources. A Standard or Restricted key returns401 on those two endpoints while every other endpoint works normally.
| Key type | Webhook + SIP checks | API key rotation check | Account evidence |
|---|---|---|---|
| Main | ✅ | ✅ | ✅ |
| Standard | ✅ | ⚠️ no data — reports not applicable | ⚠️ skipped |
| Restricted | ✅ with read access granted | ⚠️ not grantable | ⚠️ skipped |
403 on that collector; LowerPlane skips it and continues, so a narrow key still yields partial coverage.
Using a subaccount? Connect it with that subaccount’s own Account SID and an API key created under that subaccount. LowerPlane collects only the resources belonging to the account you connect.
Connecting in LowerPlane
To disconnect completely, delete the key in the Twilio Console — that revokes LowerPlane’s access immediately and without affecting any other integration. This is why LowerPlane asks for an API key rather than your Auth Token: revocation is scoped to us alone.
What LowerPlane Monitors
Phone Numbers
Every number, its capabilities, and whether its voice and messaging webhooks use HTTPS.
TwiML Applications
Application callbacks — request, fallback, and status callback URLs — and their transport security.
SIP Domains
Elastic SIP Trunking domains and whether secure media (TLS + SRTP) is required.
API Keys
Key inventory with creation dates, so stale credentials surface for rotation.
Automated Checks
| Check | What it verifies | Controls |
|---|---|---|
| Phone number webhooks should use HTTPS | Every configured voice and messaging webhook on a number uses https:// | SOC 2 CC6.7 · ISO 27001 A.8.24 |
| Application webhooks should use HTTPS | Every callback on a TwiML application — including the status callback — uses https:// | SOC 2 CC6.7 · ISO 27001 A.8.24 |
| SIP domains should require TLS | Secure media is enabled, requiring SIP over TLS and SRTP | SOC 2 CC6.6, CC6.7 · ISO 27001 A.8.20, A.8.24 |
| API keys should be rotated at least yearly | No API key is older than 365 days | SOC 2 CC6.1 · ISO 27001 A.5.17 |
A phone number or application with no webhook configured passes the transport checks. An unused number is not a transport-security finding, and failing it would bury the real ones.
Data Handling
- Phone numbers are hashed before storage. LowerPlane keeps a one-way hash for correlation, never the number itself.
- Message and call data is never touched. LowerPlane does not read the Messages, Calls, or Recordings endpoints at all — not content, and not aggregate counts.
- API key secrets are never collected. Twilio does not expose a key’s secret after creation; LowerPlane stores only the key SID, friendly name, and creation date.
- Emergency addresses and billing usage are not collected. Those endpoints are never called.
Troubleshooting
Connection failed: credentials rejected
Connection failed: credentials rejected
LowerPlane received a
401 from Twilio. Check that the API Key SID begins with SK (not AC — that would be the Account SID) and that the secret was copied in full. If the key was deleted in the Console, create a new one.Connection failed: resource not found
Connection failed: resource not found
A
404 usually means the Account SID is wrong, or the API key belongs to a different account or subaccount than the Account SID you entered. Both must come from the same account.The API key rotation check says 'not applicable'
The API key rotation check says 'not applicable'
LowerPlane could not list your API keys, which Twilio permits only for Main API keys. Create a Main key and reconnect. The sync log states this directly: “Cannot list Twilio API keys: this requires a Main API Key.”
Account evidence is missing after a successful sync
Account evidence is missing after a successful sync
Same cause: reading the Account resource requires a Main API key. Every other collector is unaffected, and the sync is not marked failed.
A collector returns 403 but the connection succeeded
A collector returns 403 but the connection succeeded
The API key is Restricted and lacks read permission for that resource. Grant it in the Console, or use a Standard or Main key.
All checks report 'not applicable'
All checks report 'not applicable'
The checks evaluate real resources, so an account with no phone numbers, TwiML applications, or SIP domains has nothing to test. This is accurate rather than a failure — the checks begin reporting once those resources exist.
No SIP domain results
No SIP domain results
SIP domains exist only on accounts using Elastic SIP Trunking. If you do not use it, this collector returns nothing and the SIP check has no entities to evaluate — that is expected, not a failure.
An API key check fails but the key looks recent
An API key check fails but the key looks recent
The check reads Twilio’s
date_created, which reflects when the key was created, not when it was last used. Rotating means issuing a replacement key and deleting the old one; editing a key’s friendly name does not reset its age.Results look incomplete on a large account
Results look incomplete on a large account
LowerPlane follows Twilio’s pagination and caps each collector at 50 pages. If that cap is reached it is recorded in the sync log rather than truncating silently — contact support if you see it.