Texting (sms)
Text the signed-in person's own verified phone from your app with the sms provider.
The sms provider sends a text from Northlight's number to the verified phone of the person who signed in to your app. It has no recipient argument, so an app cannot text anyone else.
Scopes
| Scope | Consent sentence | Gates |
|---|---|---|
sms:send | Send you text messages from Northlight's number | send, react |
sms:status | Not captured | status |
Add them under What it asks for → Add permissions (provider sms). Without sms:send the consent page does not offer it and providers.call for sms is refused with scope_missing.
Send a text
await runtime.providers.call({provider: 'sms', tool: 'send', arguments: {body: 'Your summary is ready.'}});body is required. The text goes from Northlight's number to the person's verified phone, and each person can receive at most 50 texts from your app per UTC day. These limits are the provider's documented behavior (the 50-per-day limit is not yet checked on production).
Tools
Captured 2026-10-16 from GET /v1/providers/sms/tools on a joined runtime (provider major version 1). * marks a required parameter.
| Tool | Group (scope) | Parameters | What it does |
|---|---|---|---|
send | send (sms:send) | body*, file, reply-to | Send a text to your verified phone. file is a signed URL of at most 5 MiB sent after the text. reply-to is the label of a message in the conversation, such as m3, to send a threaded reply. Answers message_id. |
react | send (sms:send) | label*, emoji* | React to a text in the conversation with a tapback or any emoji. |
status | status (sms:status) | message-id* | Check the delivery state of a text. |
Parameter names are the provider's own. In a providers.call, arguments is an object keyed by those names, such as {body, file}. Run runtime.providers.tools('sms') for the current list.