---
title: "Edit one gift link's welcome or sender branding"
method: POST
path: "/sends/{id}/gift-link/message"
tags: ["Gift links"]
---

# Edit one gift link's welcome or sender branding

`POST /sends/{id}/gift-link/message`

## Request

- Base URL: `https://gtmswag.com/api/v1`
- URL: `https://gtmswag.com/api/v1/sends/{id}/gift-link/message`
- Auth: HTTP bearer

Changes the welcome shown on one unused link (`{{firstName}}` and `{{company}}` allowed, 500 characters after expansion; empty restores the default) and optionally its sender branding. Send the link's current `generation` and `messageVersion` (as `expectedMessageVersion`); a stale value returns 409 GIFT_LINK_CONFLICT. Does not change the printed note or email anyone.

## Path parameters

- `id` string, required

## Request body

- object
  - `generation` integer, required: The gift link's current generation.
  - `expectedMessageVersion` integer, required: The gift link's current messageVersion.
  - `message` string: Link welcome message; empty restores default. Not the printed note.
  - `branding` GiftLinkBranding: Recipient-facing sender details. Omit to preserve; applies to all selected links.
    - `senderName` string, required: Gift sender's name.
    - `senderCompany` string, required: Gift sender's company.
    - `contactEmail` union: An email address, or an empty string for none. Both variants are strings, so the union has no discriminator.
      - ''
      - string, email
    - `logoAssetId` string: Owned PNG/JPEG/WebP logo asset ID; empty hides it. Never a recipient portrait.

## Response `200`

Success: `{"data": GiftLink}`.

- GiftLinkResponse: The success body: `{"data": GiftLink}`.
  - `data` GiftLink, required: A private claim link: its state, value and the `generation` and `messageVersion` edits need.
    - `sendId` string, required
    - `recipient` Recipient, required
      - `recipientId` string, required
      - `name` string, required
      - `email` string, required
      - `company` string, required
      - `sourceSystem` string
      - `externalId` string
      - `profileUrl` string
      - `importId` string
      - `importRowId` string
      - `addressMode` 'known' | 'confirm'
    - `generation` integer, required
    - `messageVersion` integer, required
    - `state` 'unclaimed' | 'redeemed' | 'revoked' | 'expired' | 'declined' | 'cancelled', required
    - `canRegift` boolean, required
    - `valueCents` integer, required

## Other responses

- `400`: Bad request: `VALIDATION_ERROR`, `INVALID_REQUEST`, `MESSAGE_TOO_LONG`, `INVALID_JSON`. Each example says when.
- `401`: Not authenticated: `AUTH_REQUIRED`. no credentials, or an OAuth token on a route that only takes workspace keys; the key is malformed, unknown or revoked.
- `403`: Forbidden: `ARTWORK_UNAVAILABLE`. Each example says when.
- `404`: Not found: `NOT_FOUND`. Each example says when.
- `409`: Conflict: `GIFT_LINK_CONFLICT`. Each example says when.
- `413`: Request too large: `INVALID_REQUEST`. the body exceeds 1 MiB.
- `415`: Unsupported media type: `INVALID_REQUEST`. Each example says when.
- `429`: Too many requests: `RATE_LIMIT`. more than 240 requests in the current minute for this workspace (REST and MCP share the limit); wait `retryAfterMs`.
- `default`: Any other refusal or failure, such as 403 CSRF (a cross-origin `Origin` header), 403 HTTPS_REQUIRED or 500 INTERNAL_ERROR, with what to do next.

---

[API](https://skmtc.dev/gtmswag/apis/gtm-swag-api.md) · [All operations](https://skmtc.dev/gtmswag/apis/gtm-swag-api/llms.txt) · [OpenAPI document](https://skmtc.dev/gtmswag/apis/gtm-swag-api/revisions/9ff86fa99afe?raw)
