Set a message's status
AI agents: read /llms.txt; add .md to any page URL. This page as Markdown: /reference/messages/v2-messages-status.md. Index of every page and the rules for every call: /llms.txt. Guides and concepts in one file: /llms-full.txt. OpenAPI: /openapi.json.
PUT/
Sets your team's own status on a message, such as "Need to Respond" or "Completed", for sorting your inbox. It does not change delivery and does not notify the customer.
Use a status id from your team's message statuses (GET /v1/api/store/{team_slug}/setting/status/customer_message). Returns the message with previous_status_id and previous_message_status.
Business rules
status_idis required and must be one of your team's statuses. Use a message status: other kinds of status are accepted too, but they are not meant for messages.
Side effects
- Fires the
message.status_changedwebhook, every time, even if the status was already set to this value. - Records the change in the status history when the message had a different status before.
- People with the inbox open see the change live.
Path parameters
Your team slug, shown as Team ID next to your API key in Profile.
- Example
your-team
- Example
The message's
id, from the message list. A hash id; unique keys and document numbers are refused with 404.- Example
u7HKhdhT6tkEUy
- Example
Request body
application/json, required.
One of your team's message status ids.
notify_customerbooleanAccepted but ignored: no notification is sent.
Response
200Successful response.
Child fields (37)
actor_namestring | nullThe writer's name, by
actor_type: your team's name forsystem, the team member, the contact, the order's customer, the purchase order's vendor, the participant, or the name aguestgave. Null when YoPrint can't find the writer's record.actor_typestringWho wrote it:
user,customer,vendor,contact(written in the customer or vendor portal),participant,guest(someone who is not a contact) orsystem.attachmentsarray of objectsFiles attached to it, in the same shape as an upload (
id,name,file_name,mime_type,size,url).contactobject | nullThe contact who wrote it, when
contact_idis set:first_name,last_name,email,phoneand more.contact_idstring | nullcreated_atstring (date-time)delivery_summaryobject | nullOutbound messages: how delivery went across all recipients. Null for inbound messages.
Child fields (12)
acceptedintegercompletebooleandeliveredintegerfailedintegerreasonstring | nullWhy the state is not final, or why nothing was sent, for example
no_recipientsordelivery_evidence_unavailable. Usually null.retryablebooleanTrue when the retry operation accepts this message. When false, it answers 422.
skippedintegerstatestringsent: the provider took it, delivery not confirmed yet.partial: recipients are in different states.not_sent: there were no recipients.- One of:
"pending","sending","sent","delivered","failed","partial","unknown","not_sent"
- One of:
submittingintegertotalintegerunknownintegerwaitinginteger
display_typestringHow the web app draws it, for example
default_v2, orsystem_v2for automatic messages.driverstring | nullemail,sms, orwebfor a message written in YoPrint.emailstring | nullThe sender's email address.
has_messagebooleanhas_original_messagebooleanidstringmessagestring | nullThe message as it was written, without the email layout.
message_participant_idstring | nullThe author, as a message participant.
message_statusobject | nullThe status named by
status_id:id,role(customer_message),type,label,customer_label,color,position,trashed.namestring | nullThe sender's name.
order_idstring | nullThe sales order or quote it is on.
order_object_typestring | nullsales_orderorquote. Null without an order.order_quoteboolean | nullorder_scoped_idstring | nullThe order's number, such as
SO1001. An empty string""(not null) without an order.original_messagestring | nullThe whole message as HTML: for a reply, the email as it arrived, with any quoted text; for a message you sent, the full message YoPrint rendered.
participantobject | nullThe author, as a message participant, when
message_participant_idis set. Itsdelivery_*fields are null.Child fields (24)
can_receive_mailbooleancan_receive_smsbooleancontactobject | nullThe contact, for
typecontact:first_name,last_name,email,phoneand more.contact_idstring | nulldelivery_channelstring | null- One of:
"email","sms"
- One of:
delivery_created_atstring (date-time) | nulldelivery_destinationstring | nullThe email address or phone number it went to.
delivery_destination_namestring | nulldelivery_idstring | nullThe recipient id: the id the recipient operations take. Null on
participant.delivery_latest_error_reasonstring | nulldelivery_message_idstring | nulldelivery_participant_idstring | nulldelivery_statestring | nullFrom the provider's report. Null for older messages and on
participant.- One of:
"pending","sending","sent","delivered","failed","unknown"
- One of:
delivery_statusstring | null- One of:
"pending","dispatched","dispatch_failed","delivered","delivery_failed"
- One of:
delivery_updated_atstring (date-time) | nullemailstring | nullidstringThe participant id. The recipient operations take
delivery_id, not this.namestring | nullorder_idstring | nullphonestring | nullpurchase_order_idstring | nullstatusstringWhat they receive:
message,notification,allordisabled.trashedbooleantypestringuser: a team member.contact: one of the customer's or vendor's contacts.guest: just a name and email.- One of:
"user","contact","guest"
- One of:
preview_messagestring | nullA short plain-text preview.
previous_message_statusobject | nullThat status, in the same shape as
message_status:id,role,type,label,customer_label,color,position,trashed.previous_status_idstring | nullThe status before this change. Null when none was set.
purchase_order_idstring | nullThe purchase order it is on.
purchase_scoped_idstring | nullThe purchase order's number. Null when it is not on a purchase order.
recipientsarray of objectsWho it was sent to: each participant with its delivery (
delivery_status,delivery_channel,delivery_destination).delivery_idis the id the recipient operations take.Fields of each item (24)
can_receive_mailbooleancan_receive_smsbooleancontactobject | nullThe contact, for
typecontact:first_name,last_name,email,phoneand more.contact_idstring | nulldelivery_channelstring | null- One of:
"email","sms"
- One of:
delivery_created_atstring (date-time) | nulldelivery_destinationstring | nullThe email address or phone number it went to.
delivery_destination_namestring | nulldelivery_idstring | nullThe recipient id: the id the recipient operations take. Null on
participant.delivery_latest_error_reasonstring | nulldelivery_message_idstring | nulldelivery_participant_idstring | nulldelivery_statestring | nullFrom the provider's report. Null for older messages and on
participant.- One of:
"pending","sending","sent","delivered","failed","unknown"
- One of:
delivery_statusstring | null- One of:
"pending","dispatched","dispatch_failed","delivered","delivery_failed"
- One of:
delivery_updated_atstring (date-time) | nullemailstring | nullidstringThe participant id. The recipient operations take
delivery_id, not this.namestring | nullorder_idstring | nullphonestring | nullpurchase_order_idstring | nullstatusstringWhat they receive:
message,notification,allordisabled.trashedbooleantypestringuser: a team member.contact: one of the customer's or vendor's contacts.guest: just a name and email.- One of:
"user","contact","guest"
- One of:
rendered_attachmentsarray of objectsEverything attached when it was sent: the files (
attachment_typemedia, upload shape) and generated documents such as the order PDF (attachment_typeinternal_attachment, withnameandurl).retryablebooleanFor outbound messages, the same as
delivery_summary.retryable.statusstring | nullOlder delivery status word, such as
pending,dispatched,partial_delivered,delivery_failed,delivered, orreceivedfor a reply. Preferdelivery_summary.status_idstring | nullYour team's message status (for example "Needs reply"), set with the status operation. Null when none is set.
systembooleanTrue for messages YoPrint sent automatically.
typestringoutbound: sent by your team.inbound: a reply received.- One of:
"outbound","inbound"
- One of:
userobject | nullThe team member who wrote it, when
user_idis set.Child fields (5)
avatar_urlstring | nullemailstringidstringnamestringtimezonestring | null
user_idstring | null
Errors
401The API key is missing or wrong (
unauthenticated).403You are not allowed to do this.
api_access_not_in_plan: your team's plan doesn't include API access (Pro and above, with an active subscription or trial), so every request answers this until the team upgrades. When your role lacks the permission the operation needs, the body is only{"message": "Insufficient Permission"}. Other refusals use the error envelope, withunauthorizedoruser_is_not_authorized.- When
- The message is on a sales order or quote you can't message (
user_is_not_authorized). - Fix
- Ask a team admin for permission to message that order.
404Not found.
page_not_found: the team slug is unknown, you are not a member of the team, or an id in the path is not one of this team's.code: null, with a message that starts "No query results for": there is no record with that id.- When
- The message or the status does not exist on this team.
- Fix
- Use ids from the API.
422The request was refused and changed nothing.
validation_failedlists what to fix inerror.fields; other codes name a business rule, explained inerror.message. A few checks answer with only{"message": "..."}. An operation that calls another service (a payment provider, a carrier, an accounting app) can answerconnect_timeout("Please retry again") when that service does not answer in time: the change may or may not have happened there, so read the record back before you retry.- When
status_idis missing or not an id, ornotify_customeris not a boolean (validation_failed;error.fieldsnames the field).- Fix
- Send a status id.
Related
- GETList message thread statuses
/v1/ api/ store/ {team_slug}/ setting/ status/ customer_message - POSTFilter messages
/v2/ api/ store/ {team_slug}/ messages/ filter
