Skip to content
LinqCopy agent prompt

Phone Numbers

Phone Numbers represent the phone numbers assigned to your partner account.

Use the list phone numbers endpoint to discover which phone numbers are available for sending messages.

When creating chats, listing chats, or sending a voice memo, use one of your assigned phone numbers in the from field.

Ineligible numbers. A number can temporarily lose the ability to deliver messages. While it is in that state, requests that would produce new activity on it — sending a message, creating a chat, reacting, typing, group actions — are rejected with 403 (error code 2027) before anything is created. Reads keep working, so your existing chats, messages, and history stay available. Omit from on POST /v3/messages and we pick an eligible number for you, skipping ineligible ones; if none of your assigned numbers are eligible, you get 409 (no from number was ever chosen, so there’s no specific number to blame with a 403).

List phone numbers
phone_numbers.list() -> PhoneNumberListResponse
GET/v3/phone_numbers
Update a phone number
phone_numbers.update(strphone_number_id, PhoneNumberUpdateParams**kwargs) -> PhoneNumberUpdateResponse
PUT/v3/phone_numbers/{phoneNumberId}
Start a line reputation audit
phone_numbers.start_reputation_audit(strphone_number) -> ReputationAuditStarted
POST/v3/phone_numbers/{phoneNumber}/reputation_audit
Get a line reputation audit
phone_numbers.get_reputation_audit(straudit_id, PhoneNumberGetReputationAuditParams**kwargs) -> ReputationAudit
GET/v3/phone_numbers/{phoneNumber}/reputation_audit/{auditId}
ModelsExpand Collapse
class ReputationActionItem:
detail: Optional[str]
expected_impact: Optional[Literal["high", "medium", "low"]]
One of the following:
"high"
"medium"
"low"
priority: Optional[int]

1 = do first

title: Optional[str]
class ReputationAudit:
audit_id: str
status: Literal["pending", "complete", "error"]

pending until the report is ready — poll until complete or error.

One of the following:
"pending"
"complete"
"error"
error: Optional[str]

Present only when status is error. Short, generic reason safe to display.

generated_at: Optional[datetime]

When the report was generated; signals reflect the line at this moment.

formatdate-time
phone: Optional[str]

The line audited, E.164.

report: Optional[ReputationReport]

Present only when status is complete.

action_items: Optional[List[ReputationActionItem]]

Ordered by priority; 1 = do first.

detail: Optional[str]
expected_impact: Optional[Literal["high", "medium", "low"]]
One of the following:
"high"
"medium"
"low"
priority: Optional[int]

1 = do first

title: Optional[str]
drivers: Optional[List[ReputationDriver]]

Ranked, highest impact first.

key: Optional[ReputationDriverKey]

Stable driver-category identifier — what is dragging the line, or one of its conversations, down.

  • low_engagement — The conversation is one-sided: several messages sent, few or no replies back. Pause or rework outreach where recipients are not replying, and lead with messages that invite a response. Conversation-level: it appears on evidence.unhealthy_chats[].driver_keys, never in drivers.
  • overall_conversation_health — A large share of the line’s active conversations are trending unhealthy. Fix the unhealthy conversations first — review their content and timing, and whether recipients are engaging.
  • volume_spike — The line’s daily sending volume jumped far above its own normal level while few recipients were replying, or exceeded the recommended daily volume for a single line. Ramp volume gradually instead of spiking, prioritize people who have already engaged with you, and spread sustained high volume across additional lines.
  • new_conversation_rate — The line is starting too many brand-new conversations in a single day. Spread new conversations out over time instead of starting many at once.
  • opt_out_handling — Recipients asked this line to stop. Honor every stop request immediately: send nothing further to that recipient unless they opt back in. Every send to them is rejected with 403 (error code 2024), including a final courtesy message — to send one telling them they can reply to resume, set override_optout: true on that single request.
  • flagged — The line is currently restricted and its messages may not be reaching recipients. Move active traffic to a healthy line now, and let this one recover before sending more.
  • other — Fallback for a signal without dedicated partner copy.
One of the following:
"low_engagement"
"overall_conversation_health"
"volume_spike"
"new_conversation_rate"
"opt_out_handling"
"flagged"
"other"
metric: Optional[str]

A specific observed figure when available; otherwise a short qualitative note.

summary: Optional[str]

One plain-English sentence.

evidence: Optional[ReputationEvidence]

The specific conversations behind the drivers, so partners can verify every claim against their own send logs. Each chat_id can be fetched via GET /v3/chats/{chatId} — its current health appears there.

opt_out_chats: Optional[List[ReputationOptOutChat]]

Worst first — most messages sent after the stop request; honor these immediately.

chat_id: Optional[str]
messages_after_stop: Optional[int]

Outbound messages sent after the recipient asked to stop.

unhealthy_chats: Optional[List[ReputationUnhealthyChat]]

Up to 15, worst first.

chat_id: Optional[str]
driver_keys: Optional[List[ReputationDriverKey]]

What is dragging this conversation down, in the same vocabulary as the report’s drivers. Each key’s meaning and the fix for it are documented on ReputationDriverKey.

One of the following:
"low_engagement"
"overall_conversation_health"
"volume_spike"
"new_conversation_rate"
"opt_out_handling"
"flagged"
"other"
status: Optional[Literal["AT_RISK", "CRITICAL", "OPTED_OUT"]]

The conversation’s current health — the same value GET /v3/chats/{chatId} reports for it.

One of the following:
"AT_RISK"
"CRITICAL"
"OPTED_OUT"
primary_driver: Optional[str]

The key of the most important driver. Empty string when the line has nothing to act on — the report then carries a single reassurance action item. Its values are the ReputationDriverKey vocabulary — see that schema for what each means and what to do about it.

severity: Optional[Literal["HEALTHY", "AT_RISK", "CRITICAL"]]

Current reputation of this phone line.

  • HEALTHY — The line is in good standing. Send normally.
  • AT_RISK — Warning signs on the line: engagement is low across many of its conversations, or it’s starting too many brand-new conversations in a single day — and a spike in send volume can add to either. Slow the line’s send pace, avoid opening many new conversations at once, and review your messaging patterns.
  • CRITICAL — Strong signals that messages from this line aren’t landing well. Pause outbound on the line until it recovers.

Defaults to HEALTHY for lines that have not yet been scored.

One of the following:
"HEALTHY"
"AT_RISK"
"CRITICAL"
summary_markdown: Optional[str]

Deterministic markdown rendering of this report, suitable for feeding directly to automated systems and AI agents as investigation context. Rendered from the structured fields above, which remain the source of truth.

class ReputationAuditStarted:
audit_id: str

Identifier for this audit. Poll GET /v3/phone_numbers/{phoneNumber}/reputation_audit/{auditId} until status is complete or error.

status: Literal["pending", "complete", "error"]

A newly started audit is pending.

One of the following:
"pending"
"complete"
"error"
class ReputationDriver:
key: Optional[ReputationDriverKey]

Stable driver-category identifier — what is dragging the line, or one of its conversations, down.

  • low_engagement — The conversation is one-sided: several messages sent, few or no replies back. Pause or rework outreach where recipients are not replying, and lead with messages that invite a response. Conversation-level: it appears on evidence.unhealthy_chats[].driver_keys, never in drivers.
  • overall_conversation_health — A large share of the line’s active conversations are trending unhealthy. Fix the unhealthy conversations first — review their content and timing, and whether recipients are engaging.
  • volume_spike — The line’s daily sending volume jumped far above its own normal level while few recipients were replying, or exceeded the recommended daily volume for a single line. Ramp volume gradually instead of spiking, prioritize people who have already engaged with you, and spread sustained high volume across additional lines.
  • new_conversation_rate — The line is starting too many brand-new conversations in a single day. Spread new conversations out over time instead of starting many at once.
  • opt_out_handling — Recipients asked this line to stop. Honor every stop request immediately: send nothing further to that recipient unless they opt back in. Every send to them is rejected with 403 (error code 2024), including a final courtesy message — to send one telling them they can reply to resume, set override_optout: true on that single request.
  • flagged — The line is currently restricted and its messages may not be reaching recipients. Move active traffic to a healthy line now, and let this one recover before sending more.
  • other — Fallback for a signal without dedicated partner copy.
One of the following:
"low_engagement"
"overall_conversation_health"
"volume_spike"
"new_conversation_rate"
"opt_out_handling"
"flagged"
"other"
metric: Optional[str]

A specific observed figure when available; otherwise a short qualitative note.

summary: Optional[str]

One plain-English sentence.

Literal["low_engagement", "overall_conversation_health", "volume_spike", 4 more]

Stable driver-category identifier — what is dragging the line, or one of its conversations, down.

  • low_engagement — The conversation is one-sided: several messages sent, few or no replies back. Pause or rework outreach where recipients are not replying, and lead with messages that invite a response. Conversation-level: it appears on evidence.unhealthy_chats[].driver_keys, never in drivers.
  • overall_conversation_health — A large share of the line’s active conversations are trending unhealthy. Fix the unhealthy conversations first — review their content and timing, and whether recipients are engaging.
  • volume_spike — The line’s daily sending volume jumped far above its own normal level while few recipients were replying, or exceeded the recommended daily volume for a single line. Ramp volume gradually instead of spiking, prioritize people who have already engaged with you, and spread sustained high volume across additional lines.
  • new_conversation_rate — The line is starting too many brand-new conversations in a single day. Spread new conversations out over time instead of starting many at once.
  • opt_out_handling — Recipients asked this line to stop. Honor every stop request immediately: send nothing further to that recipient unless they opt back in. Every send to them is rejected with 403 (error code 2024), including a final courtesy message — to send one telling them they can reply to resume, set override_optout: true on that single request.
  • flagged — The line is currently restricted and its messages may not be reaching recipients. Move active traffic to a healthy line now, and let this one recover before sending more.
  • other — Fallback for a signal without dedicated partner copy.
One of the following:
"low_engagement"
"overall_conversation_health"
"volume_spike"
"new_conversation_rate"
"opt_out_handling"
"flagged"
"other"
class ReputationEvidence:

The specific conversations behind the drivers, so partners can verify every claim against their own send logs. Each chat_id can be fetched via GET /v3/chats/{chatId} — its current health appears there.

opt_out_chats: Optional[List[ReputationOptOutChat]]

Worst first — most messages sent after the stop request; honor these immediately.

chat_id: Optional[str]
messages_after_stop: Optional[int]

Outbound messages sent after the recipient asked to stop.

unhealthy_chats: Optional[List[ReputationUnhealthyChat]]

Up to 15, worst first.

chat_id: Optional[str]
driver_keys: Optional[List[ReputationDriverKey]]

What is dragging this conversation down, in the same vocabulary as the report’s drivers. Each key’s meaning and the fix for it are documented on ReputationDriverKey.

One of the following:
"low_engagement"
"overall_conversation_health"
"volume_spike"
"new_conversation_rate"
"opt_out_handling"
"flagged"
"other"
status: Optional[Literal["AT_RISK", "CRITICAL", "OPTED_OUT"]]

The conversation’s current health — the same value GET /v3/chats/{chatId} reports for it.

One of the following:
"AT_RISK"
"CRITICAL"
"OPTED_OUT"
class ReputationOptOutChat:
chat_id: Optional[str]
messages_after_stop: Optional[int]

Outbound messages sent after the recipient asked to stop.

class ReputationReport:
action_items: Optional[List[ReputationActionItem]]

Ordered by priority; 1 = do first.

detail: Optional[str]
expected_impact: Optional[Literal["high", "medium", "low"]]
One of the following:
"high"
"medium"
"low"
priority: Optional[int]

1 = do first

title: Optional[str]
drivers: Optional[List[ReputationDriver]]

Ranked, highest impact first.

key: Optional[ReputationDriverKey]

Stable driver-category identifier — what is dragging the line, or one of its conversations, down.

  • low_engagement — The conversation is one-sided: several messages sent, few or no replies back. Pause or rework outreach where recipients are not replying, and lead with messages that invite a response. Conversation-level: it appears on evidence.unhealthy_chats[].driver_keys, never in drivers.
  • overall_conversation_health — A large share of the line’s active conversations are trending unhealthy. Fix the unhealthy conversations first — review their content and timing, and whether recipients are engaging.
  • volume_spike — The line’s daily sending volume jumped far above its own normal level while few recipients were replying, or exceeded the recommended daily volume for a single line. Ramp volume gradually instead of spiking, prioritize people who have already engaged with you, and spread sustained high volume across additional lines.
  • new_conversation_rate — The line is starting too many brand-new conversations in a single day. Spread new conversations out over time instead of starting many at once.
  • opt_out_handling — Recipients asked this line to stop. Honor every stop request immediately: send nothing further to that recipient unless they opt back in. Every send to them is rejected with 403 (error code 2024), including a final courtesy message — to send one telling them they can reply to resume, set override_optout: true on that single request.
  • flagged — The line is currently restricted and its messages may not be reaching recipients. Move active traffic to a healthy line now, and let this one recover before sending more.
  • other — Fallback for a signal without dedicated partner copy.
One of the following:
"low_engagement"
"overall_conversation_health"
"volume_spike"
"new_conversation_rate"
"opt_out_handling"
"flagged"
"other"
metric: Optional[str]

A specific observed figure when available; otherwise a short qualitative note.

summary: Optional[str]

One plain-English sentence.

evidence: Optional[ReputationEvidence]

The specific conversations behind the drivers, so partners can verify every claim against their own send logs. Each chat_id can be fetched via GET /v3/chats/{chatId} — its current health appears there.

opt_out_chats: Optional[List[ReputationOptOutChat]]

Worst first — most messages sent after the stop request; honor these immediately.

chat_id: Optional[str]
messages_after_stop: Optional[int]

Outbound messages sent after the recipient asked to stop.

unhealthy_chats: Optional[List[ReputationUnhealthyChat]]

Up to 15, worst first.

chat_id: Optional[str]
driver_keys: Optional[List[ReputationDriverKey]]

What is dragging this conversation down, in the same vocabulary as the report’s drivers. Each key’s meaning and the fix for it are documented on ReputationDriverKey.

One of the following:
"low_engagement"
"overall_conversation_health"
"volume_spike"
"new_conversation_rate"
"opt_out_handling"
"flagged"
"other"
status: Optional[Literal["AT_RISK", "CRITICAL", "OPTED_OUT"]]

The conversation’s current health — the same value GET /v3/chats/{chatId} reports for it.

One of the following:
"AT_RISK"
"CRITICAL"
"OPTED_OUT"
primary_driver: Optional[str]

The key of the most important driver. Empty string when the line has nothing to act on — the report then carries a single reassurance action item. Its values are the ReputationDriverKey vocabulary — see that schema for what each means and what to do about it.

severity: Optional[Literal["HEALTHY", "AT_RISK", "CRITICAL"]]

Current reputation of this phone line.

  • HEALTHY — The line is in good standing. Send normally.
  • AT_RISK — Warning signs on the line: engagement is low across many of its conversations, or it’s starting too many brand-new conversations in a single day — and a spike in send volume can add to either. Slow the line’s send pace, avoid opening many new conversations at once, and review your messaging patterns.
  • CRITICAL — Strong signals that messages from this line aren’t landing well. Pause outbound on the line until it recovers.

Defaults to HEALTHY for lines that have not yet been scored.

One of the following:
"HEALTHY"
"AT_RISK"
"CRITICAL"
summary_markdown: Optional[str]

Deterministic markdown rendering of this report, suitable for feeding directly to automated systems and AI agents as investigation context. Rendered from the structured fields above, which remain the source of truth.

class ReputationUnhealthyChat:
chat_id: Optional[str]
driver_keys: Optional[List[ReputationDriverKey]]

What is dragging this conversation down, in the same vocabulary as the report’s drivers. Each key’s meaning and the fix for it are documented on ReputationDriverKey.

One of the following:
"low_engagement"
"overall_conversation_health"
"volume_spike"
"new_conversation_rate"
"opt_out_handling"
"flagged"
"other"
status: Optional[Literal["AT_RISK", "CRITICAL", "OPTED_OUT"]]

The conversation’s current health — the same value GET /v3/chats/{chatId} reports for it.

One of the following:
"AT_RISK"
"CRITICAL"
"OPTED_OUT"
class PhoneNumberListResponse:
phone_numbers: List[PhoneNumber]

List of phone numbers assigned to the partner

id: str

Unique identifier for the phone number

formatuuid
phone_number: str

Phone number in E.164 format

reputation: PhoneNumberReputation

[BETA] Current reputation for a phone line. Always present — lines start at HEALTHY and may shift based on aggregate engagement and delivery signals across all conversations on the line.

Unlike chat health, line reputation does not include opted_out — opt-out applies to individual recipients, not the whole line.

See the Phone Reputation guide for what each status means and how to react.

doc_url: str

Deep-link to the relevant section of the Phone Reputation guide for this status.

formaturi
status: Literal["HEALTHY", "AT_RISK", "CRITICAL"]

Current reputation of this phone line.

  • HEALTHY — The line is in good standing. Send normally.
  • AT_RISK — Warning signs on the line: engagement is low across many of its conversations, or it’s starting too many brand-new conversations in a single day — and a spike in send volume can add to either. Slow the line’s send pace, avoid opening many new conversations at once, and review your messaging patterns.
  • CRITICAL — Strong signals that messages from this line aren’t landing well. Pause outbound on the line until it recovers.

Defaults to HEALTHY for lines that have not yet been scored.

One of the following:
"HEALTHY"
"AT_RISK"
"CRITICAL"
forwarding_number: Optional[str]

The forwarding number associated with this phone number, in E.164 format. Null when no forwarding number is configured.

class PhoneNumberUpdateResponse:
id: str

Unique identifier for the phone number

formatuuid
forwarding_number: Optional[str]

The forwarding number after the update. Null when cleared.

phone_number: str

Phone number in E.164 format