## 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.

### Parameters

- `message_id: str`

- `reaction_id: str`

- `placement: Placement`

  Optional position, size and rotation of a sticker on the target
  bubble. Only valid when type is "sticker".

  Every field is independent and optional — omit the object entirely,
  or any field within it, to keep the default (centred, default size,
  unrotated).

  - `rotation: Optional[float]`

    Clockwise rotation in degrees.

  - `scale: Optional[float]`

    Size relative to the default, where 1 matches the size a
    sticker gets natively.

    Values outside 0.5–1.5 are clamped rather than rejected. The
    upper bound keeps a sticker within the size range iMessage
    itself displays: its own limit is larger, but that allowance
    assumes the transparent padding Apple's stickers carry, which
    a full-bleed image does not have.

    Scale is linear, so 1.5 is a little over twice the area.

  - `x: Optional[float]`

    Horizontal position on the target bubble, from -1 (far left) to
    1 (far right). 0 is centred.

  - `y: Optional[float]`

    Vertical position on the target bubble, from -1 (top) to
    1 (bottom). 0 is centred.

### Returns

- `class MessageUpdateStickerPlacementResponse: …`

  - `status: Optional[str]`

  - `success: Optional[bool]`

  - `trace_id: Optional[str]`

### Example

```python
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)
```

#### Response

```json
{
  "status": "accepted",
  "success": true,
  "trace_id": "trace_id"
}
```
