Move a sticker already on a message
messages.update_sticker_placement(strreaction_id, MessageUpdateStickerPlacementParams**kwargs) -> MessageUpdateStickerPlacementResponse
PATCH/v3/messages/{messageId}/reactions/{reactionId}
Move, resize or rotate a sticker that has already been peeled onto a message. The change is sent to every device in the conversation, exactly as dragging the sticker by hand would.
Only stickers can be repositioned — a tapback has no placement, so a non-sticker
reactionId is rejected. Any field omitted from placement keeps its current value.
reactionId is the id from the reaction on the message, or from the
reaction.added webhook. Stickers stack, so this id is what distinguishes one
sticker from another on the same message.
Stickers peeled before this endpoint existed cannot be moved: addressing one requires an identifier that was not recorded at the time, and it returns 404.
Move a sticker already on a message
import os
from linq import LinqAPIV3
client = LinqAPIV3(
api_key=os.environ.get("LINQ_API_V3_API_KEY"), # This is the default and can be omitted
)
response = client.messages.update_sticker_placement(
reaction_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
message_id="182bd5e5-6e1a-4fe4-a799-aa6d9a6ab26e",
placement={
"x": 0.6,
"y": 0.5,
"scale": 0.75,
},
)
print(response.trace_id){
"status": "accepted",
"success": true,
"trace_id": "trace_id"
}{
"error": {
"status": 400,
"code": 1002,
"message": "Phone number must be in E.164 format",
"doc_url": "https://docs.linqapp.com/channel/imessage/error/codes/1xxx/1002/"
},
"success": false
}{
"error": {
"status": 401,
"code": 2004,
"message": "Unauthorized - missing or invalid authentication token",
"doc_url": "https://docs.linqapp.com/channel/imessage/error/codes/2xxx/2004/"
},
"success": false
}{
"error": {
"status": 403,
"code": 2005,
"message": "Access denied - insufficient permissions for this resource",
"doc_url": "https://docs.linqapp.com/channel/imessage/error/codes/2xxx/2005/"
},
"success": false
}{
"error": {
"status": 404,
"code": 2001,
"message": "Resource not found",
"doc_url": "https://docs.linqapp.com/channel/imessage/error/codes/2xxx/2001/"
},
"success": false
}{
"error": {
"status": 500,
"code": 3006,
"message": "Internal server error",
"doc_url": "https://docs.linqapp.com/channel/imessage/error/codes/3xxx/3006/"
},
"success": false
}Returns Examples
{
"status": "accepted",
"success": true,
"trace_id": "trace_id"
}{
"error": {
"status": 400,
"code": 1002,
"message": "Phone number must be in E.164 format",
"doc_url": "https://docs.linqapp.com/channel/imessage/error/codes/1xxx/1002/"
},
"success": false
}{
"error": {
"status": 401,
"code": 2004,
"message": "Unauthorized - missing or invalid authentication token",
"doc_url": "https://docs.linqapp.com/channel/imessage/error/codes/2xxx/2004/"
},
"success": false
}{
"error": {
"status": 403,
"code": 2005,
"message": "Access denied - insufficient permissions for this resource",
"doc_url": "https://docs.linqapp.com/channel/imessage/error/codes/2xxx/2005/"
},
"success": false
}{
"error": {
"status": 404,
"code": 2001,
"message": "Resource not found",
"doc_url": "https://docs.linqapp.com/channel/imessage/error/codes/2xxx/2001/"
},
"success": false
}{
"error": {
"status": 500,
"code": 3006,
"message": "Internal server error",
"doc_url": "https://docs.linqapp.com/channel/imessage/error/codes/3xxx/3006/"
},
"success": false
}