Each user should be assigned to one line, and the assignment should be
stable: the same user always lands on the same line so their
conversation history stays continuous.How you assign users is up to you. The send API requires you to specify
from on every call, so the routing decision lives in your code:
import { createClient } from "@messages-dev/sdk";const client = createClient();// Pick a line for this user. Whatever logic you use, keep it stable// so the same user always ends up on the same line.const line = pickLineForUser(userId);await client.sendMessage({ from: line, to: userPhone, text: "Hey!",});
A few practical notes:
Keep traffic balanced. If one line carries 80% of users, you’ve still
only got the throughput of that one line.
Monitor each line independently. The outbound:inbound ratio, daily
volume, and unanswered-message counts from Limits
apply per line, not aggregated across your account.
Treat new lines as new lines. A line that’s been in use for 6 months
isn’t comparable to one provisioned yesterday. Ramp new ones up gradually.
You can scope an API key to specific lines using the lineIds field when
creating the key. This is useful if different parts of your stack should
only be able to send from a subset of lines.
A contact card can carry more than one phone number. If you deliver a
vCard with both your primary line and a backup line, the user saves
both to their contacts. If your primary line is ever throttled,
unreachable, or being warmed back up, the user already has the backup
saved and can text it directly:
Send this once during onboarding (or any other moment where it’s natural
for the user to save your contact). From then on, both numbers live in
their address book and they can fall back to the backup if your primary
line goes quiet.See Contact cards for the full vCard reference.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"messages.dev","description":"messages.dev is the iMessage API for agents. Send and receive iMessages, attachments, audio messages, reactions, typing indicators, and read receipts. The recommended integration is the TypeScript SDK (`@messages-dev/sdk`) which wraps every endpoint, handles pagination, throws typed errors, and verifies webhook signatures correctly; a plain REST API is available for any other language. Outbound messages follow a contact-first model: the recipient (or group chat) must message your line before you can send to them.","colors":{"primary":"#0f0f0f","light":"#888888","dark":"#0f0f0f"},"favicon":"https://mintcdn.com/messagesdev/nx6wLw9rGEUwuOP_/favicon.png?fit=max\u0026auto=format\u0026n=nx6wLw9rGEUwuOP_\u0026q=85\u0026s=4a10c69e91e0f913ef7431dd5a6f29f9","api":{"openapi":"openapi.yaml","mdx":{"auth":{"method":"bearer"},"server":"https://api.messages.dev"}},"appearance":{"default":"dark","strict":true},"navbar":{"primary":{"type":"button","label":"Dashboard","href":"https://app.messages.dev"}},"seo":{"metatags":{"canonical":"https://www.messages.dev/docs"}},"fonts":{"heading":{"family":"Geist Pixel","weight":500,"source":"fonts/GeistPixel-Square.woff2","format":"woff2"}},"styling":{"codeblocks":{"theme":{"light":"github-light","dark":"github-dark-high-contrast"}},"latex":false},"contextual":{"options":["copy","view","chatgpt","claude","cursor","vscode","mcp"],"display":"header"},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"messagesdev","hasAudioNarration":false,"actualSubdomain":"messagesdev","customDomains":["messages.dev"],"gitSource":{"type":"github","owner":"messages-dev","repo":"messages-dev","deployBranch":"main","contentDirectory":"apps/docs","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6a21dc526513352c9695ffbe","collectionId":"158fe9ee-91be-4232-94aa-c7d347708bd9","schemaVersion":"v2"},"entitlements":{},"buildId":"6ae952f1ae8d0278471930bb:success","clientVersion":"0.0.4076","searchFilterCounts":[{"language":"default","tag":"API Reference","count":19},{"language":"default","tag":"Docs","count":19},{"language":"default","tag":"Guides","count":9},{"language":"default","tag":"Getting Started","count":4},{"language":"default","tag":"Concepts","count":4},{"language":"default","tag":"Webhooks","count":3},{"language":"default","tag":"Files","count":2},{"language":"default","tag":"Messages","count":2},{"language":"default","tag":"Reactions","count":2},{"language":"default","tag":"Read Receipts","count":2}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"/docs","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"custom.css","content":"html.dark .code-block-background{--shiki-dark-bg: transparent !important}.nav-logo,.nav-logo *{font-family:\"Geist Pixel\", monospace!important;font-weight:500!important;font-size:1.25rem!important}#navbar .max-w-8xl .border-b{border-bottom-width:0}"}],"page":{"pagePath":"scaling/multiple-lines","slug":"/scaling/multiple-lines","pageMetadata":{"title":"Multiple lines","description":"Scale by adding lines and spreading users across them","icon":"network-wired","href":"/scaling/multiple-lines"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Scale by adding lines and spreading users across them\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Tip}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Tip)_missingMdxReference(`Tip`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`A single line has a ceiling (see `,_jsx(_components.a,{href:`/scaling/limits`,children:`Limits`}),`). The way to\nscale beyond it is to add more lines and spread your users across them.`]}),`\n`,_jsx(Heading,{level:`2`,id:`when-to-add-a-line`,children:`When to add a line`}),`\n`,_jsx(_components.p,{children:`Add a second (or third, or tenth) line when:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Sustained traffic on an existing line is approaching the per-line numbers.`}),`\n`,_jsx(_components.li,{children:`A single-line outage would be unacceptable — you want a line that can take\nover if one gets flagged or its underlying Apple ID needs to re-auth.`}),`\n`,_jsx(_components.li,{children:`You’re running multiple distinct products or brands and want clean\nseparation between them.`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`spread-users-across-lines`,children:`Spread users across lines`}),`\n`,_jsxs(_components.p,{children:[`Each user should be assigned to one line, and the assignment should be\n`,_jsx(_components.strong,{children:`stable`}),`: the same user always lands on the same line so their\nconversation history stays continuous.`]}),`\n`,_jsxs(_components.p,{children:[`How you assign users is up to you. The send API requires you to specify\n`,_jsx(_components.code,{children:`from`}),` on every call, so the routing decision lives in your code:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`13`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark-high-contrast`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#0a0c10`,color:`#24292e`,\"--shiki-dark\":`#f0f3f6`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`13`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#FF9492`},children:`import`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#F0F3F6`},children:` { createClient } `}),_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#FF9492`},children:`from`}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#ADDCFF`},children:` \"@messages-dev/sdk\"`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#F0F3F6`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#FF9492`},children:`const`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#91CBFF`},children:` client`}),_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#FF9492`},children:` =`}),_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#DBB7FF`},children:` createClient`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#F0F3F6`},children:`();`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A737D`,\"--shiki-dark\":`#BDC4CC`},children:`// Pick a line for this user. Whatever logic you use, keep it stable`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6A737D`,\"--shiki-dark\":`#BDC4CC`},children:`// so the same user always ends up on the same line.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#FF9492`},children:`const`}),_jsx(_components.span,{style:{color:`#005CC5`,\"--shiki-dark\":`#91CBFF`},children:` line`}),_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#FF9492`},children:` =`}),_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#DBB7FF`},children:` pickLineForUser`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#F0F3F6`},children:`(userId);`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#FF9492`},children:`await`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#F0F3F6`},children:` client.`}),_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#DBB7FF`},children:`sendMessage`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#F0F3F6`},children:`({`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#F0F3F6`},children:` from: line,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#F0F3F6`},children:` to: userPhone,`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#F0F3F6`},children:` text: `}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#ADDCFF`},children:`\"Hey!\"`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#F0F3F6`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#F0F3F6`},children:`});`})}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`A few practical notes:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Keep traffic balanced.`}),` If one line carries 80% of users, you’ve still\nonly got the throughput of that one line.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Monitor each line independently.`}),` The outbound:inbound ratio, daily\nvolume, and unanswered-message counts from `,_jsx(_components.a,{href:`/scaling/limits`,children:`Limits`}),`\napply per line, not aggregated across your account.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Treat new lines as new lines.`}),` A line that’s been in use for 6 months\nisn’t comparable to one provisioned yesterday. Ramp new ones up gradually.`]}),`\n`]}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[`You can scope an API key to specific lines using the `,_jsx(_components.code,{children:`lineIds`}),` field when\ncreating the key. This is useful if different parts of your stack should\nonly be able to send from a subset of lines.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`backup-lines-via-contact-cards`,children:`Backup lines via contact cards`}),`\n`,_jsxs(_components.p,{children:[`A contact card can carry more than one phone number. If you deliver a\nvCard with both your primary line and a backup line, the user saves\n`,_jsx(_components.strong,{children:`both`}),` to their contacts. If your primary line is ever throttled,\nunreachable, or being warmed back up, the user already has the backup\nsaved and can text it directly:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`10`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light github-dark-high-contrast`,style:{backgroundColor:`#fff`,\"--shiki-dark-bg\":`#0a0c10`,color:`#24292e`,\"--shiki-dark\":`#f0f3f6`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`10`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#D73A49`,\"--shiki-dark\":`#FF9492`},children:`await`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#F0F3F6`},children:` client.`}),_jsx(_components.span,{style:{color:`#6F42C1`,\"--shiki-dark\":`#DBB7FF`},children:`sendContactCard`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#F0F3F6`},children:`({`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#F0F3F6`},children:` from: `}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#ADDCFF`},children:`\"+15550000001\"`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#F0F3F6`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#F0F3F6`},children:` to: userPhone,`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#F0F3F6`},children:` firstName: `}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#ADDCFF`},children:`\"Acme\"`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#F0F3F6`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#F0F3F6`},children:` lastName: `}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#ADDCFF`},children:`\"Support\"`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#F0F3F6`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#F0F3F6`},children:` phones: [`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#F0F3F6`},children:` { type: `}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#ADDCFF`},children:`\"cell\"`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#F0F3F6`},children:`, value: `}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#ADDCFF`},children:`\"+15550000001\"`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#F0F3F6`},children:` }, `}),_jsx(_components.span,{style:{color:`#6A737D`,\"--shiki-dark\":`#BDC4CC`},children:`// primary`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#F0F3F6`},children:` { type: `}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#ADDCFF`},children:`\"main\"`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#F0F3F6`},children:`, value: `}),_jsx(_components.span,{style:{color:`#032F62`,\"--shiki-dark\":`#ADDCFF`},children:`\"+15550000002\"`}),_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#F0F3F6`},children:` }, `}),_jsx(_components.span,{style:{color:`#6A737D`,\"--shiki-dark\":`#BDC4CC`},children:`// backup`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#F0F3F6`},children:` ],`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#24292E`,\"--shiki-dark\":`#F0F3F6`},children:`});`})}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Send this once during onboarding (or any other moment where it’s natural\nfor the user to save your contact). From then on, both numbers live in\ntheir address book and they can fall back to the backup if your primary\nline goes quiet.`}),`\n`,_jsxs(_components.p,{children:[`See `,_jsx(_components.a,{href:`/guides/contact-cards`,children:`Contact cards`}),` for the full vCard reference.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"codeStyling":{"theme":{"light":"github-light","dark":"github-dark-high-contrast"}},"config":{},"pageMetadata":{"title":"Multiple lines","description":"Scale by adding lines and spreading users across them","icon":"network-wired","href":"/scaling/multiple-lines"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"When to add a line","slug":"when-to-add-a-line","depth":2,"children":[]},{"title":"Spread users across lines","slug":"spread-users-across-lines","depth":2,"children":[]},{"title":"Backup lines via contact cards","slug":"backup-lines-via-contact-cards","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"messagesdev","siteName":"messages.dev","title":"Multiple lines - messages.dev","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-04-26T20:45:59.909Z","originalFileLocation":"scaling/multiple-lines.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=\"dark\";if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"dark\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Scale by adding lines and spreading users across them\">\u003cmeta data-mint-head name=\"application-name\" content=\"messages.dev\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/messagesdev/Eft53BDO9cb1P--w/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/docs/mintlify-assets/_mintlify/favicons/messagesdev/Eft53BDO9cb1P--w/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/messagesdev/Eft53BDO9cb1P--w/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/messagesdev/Eft53BDO9cb1P--w/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/messagesdev/Eft53BDO9cb1P--w/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/messagesdev/Eft53BDO9cb1P--w/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/messagesdev/Eft53BDO9cb1P--w/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/messagesdev/Eft53BDO9cb1P--w/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/messagesdev/Eft53BDO9cb1P--w/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Multiple lines - messages.dev\">\u003cmeta data-mint-head property=\"og:description\" content=\"Scale by adding lines and spreading users across them\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"messages.dev\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://www.messages.dev/docs/scaling/multiple-lines\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://messagesdev.mintlify.site/docs/_mintlify/api/og/v2?division=Scaling\u0026amp;title=Multiple+lines\u0026amp;description=Scale+by+adding+lines+and+spreading+users+across+them\u0026amp;theme=1da8cc3754c58833b77b420a\u0026amp;signature=9661661393461e940604483a61252658053a7c19907fe5f7906e7f0216a6f44a\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Multiple lines - messages.dev\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Scale by adding lines and spreading users across them\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://messagesdev.mintlify.site/docs/_mintlify/api/og/v2?division=Scaling\u0026amp;title=Multiple+lines\u0026amp;description=Scale+by+adding+lines+and+spreading+users+across+them\u0026amp;theme=1da8cc3754c58833b77b420a\u0026amp;signature=9661661393461e940604483a61252658053a7c19907fe5f7906e7f0216a6f44a\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/docs/mintlify-assets/_mintlify/favicons/messagesdev/Eft53BDO9cb1P--w/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"messages.dev\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0f0f0f\">\u003clink data-mint-head rel=\"canonical\" href=\"https://www.messages.dev/docs/scaling/multiple-lines\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/scaling/multiple-lines.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://www.messages.dev/#organization\",\"name\":\"messages.dev\",\"url\":\"https://www.messages.dev\"},{\"@type\":\"WebSite\",\"@id\":\"https://www.messages.dev/docs#website\",\"name\":\"messages.dev\",\"url\":\"https://www.messages.dev/docs\",\"publisher\":{\"@id\":\"https://www.messages.dev/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://www.messages.dev/docs/scaling/multiple-lines#webpage\",\"url\":\"https://www.messages.dev/docs/scaling/multiple-lines\",\"name\":\"Multiple lines\",\"description\":\"Scale by adding lines and spreading users across them\",\"dateModified\":\"2026-04-26T20:45:59.909Z\",\"isPartOf\":{\"@id\":\"https://www.messages.dev/docs#website\"},\"breadcrumb\":{\"@id\":\"https://www.messages.dev/docs/scaling/multiple-lines#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://www.messages.dev/docs/scaling/multiple-lines#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Scaling\",\"item\":\"https://www.messages.dev/docs/scaling/limits\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Multiple lines\",\"item\":\"https://www.messages.dev/docs/scaling/multiple-lines\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://www.messages.dev/docs/scaling/multiple-lines#article\",\"headline\":\"Multiple lines\",\"name\":\"Multiple lines\",\"description\":\"Scale by adding lines and spreading users across them\",\"url\":\"https://www.messages.dev/docs/scaling/multiple-lines\",\"mainEntityOfPage\":{\"@id\":\"https://www.messages.dev/docs/scaling/multiple-lines#webpage\"},\"dateModified\":\"2026-04-26T20:45:59.909Z\",\"publisher\":{\"@id\":\"https://www.messages.dev/#organization\"},\"isPartOf\":{\"@id\":\"https://www.messages.dev/docs#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"messages.dev\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"messages.dev","nav":{"global":null,"tabs":[{"tab":"Docs","groups":[{"group":"Getting Started","pages":[{"title":"Introduction","icon":"house","href":"/introduction"},{"title":"Quickstart","icon":"rocket","href":"/quickstart"},{"title":"TypeScript SDK","icon":"js","href":"/sdk"},{"title":"CLI","icon":"terminal","href":"/cli"}]},{"group":"Guides","pages":[{"title":"Send a Message","icon":"paper-plane","href":"/guides/send-message"},{"title":"Receive Messages","icon":"inbox","href":"/guides/receive-messages"},{"title":"Contact Cards","icon":"address-card","href":"/guides/contact-cards"},{"title":"Typing Indicators","icon":"ellipsis","href":"/guides/typing-indicators"},{"title":"Read Receipts","icon":"check-double","href":"/guides/read-receipts"},{"title":"Reactions","icon":"heart","href":"/guides/reactions"},{"title":"Audio Messages","icon":"microphone","href":"/guides/audio-messages"},{"title":"Attachments","icon":"paperclip","href":"/guides/attachments"},{"title":"Group Chats","icon":"users","href":"/guides/group-chats"}]},{"group":"Concepts","pages":[{"title":"Sandbox","icon":"flask-vial","href":"/concepts/sandbox"},{"title":"Webhooks","icon":"webhook","href":"/concepts/webhooks"},{"title":"Authentication","icon":"key","href":"/concepts/authentication"},{"title":"Errors","icon":"triangle-exclamation","href":"/concepts/errors"}]},{"group":"Scaling","pages":[{"title":"Limits","description":"Per-line throughput and daily volume guidance","icon":"gauge","href":"/scaling/limits"},{"title":"Multiple lines","icon":"network-wired","href":"/scaling/multiple-lines"}]}]},{"tab":"API Reference","pages":[{"title":"API Reference","href":"/api-reference/overview"}]}]},"basePath":"","title":"Multiple lines - messages.dev","buildId":"dpl_ATnXPMW25DMPUr9VBw6kL6MfBt6T","deploymentId":"dpl_ATnXPMW25DMPUr9VBw6kL6MfBt6T","dynamics":[],"chunks":[]}