---
title: "Update Marketing Consent"
method: PUT
path: "/api/v1/user/marketing-consent"
tags: ["User"]
---

# Update Marketing Consent

`PUT /api/v1/user/marketing-consent`

## Request

- Base URL: `https://www.endlesstravelplans.com`
- URL: `https://www.endlesstravelplans.com/api/v1/user/marketing-consent`
- Auth: HTTP bearer

Idempotent: sending the state the user is already in re-records the
source/timestamp and re-runs the Kit sync, which is itself idempotent.

## Request body

- object
  - `marketing_consent` boolean, required: true to opt in, false to withdraw.
  - `timezone` string, nullable: IANA timezone, used to record the consent region.
  - `source` string, nullable: Where in the app the choice was made (settings, results_prompt).

## Response `200`

- object
  - `marketing_consent` boolean
  - `source` string
  - `region` string
  - `consent_at` string
  - `declined_at` string, nullable

## Other responses

- `401`: unauthenticated: No valid bearer token was sent.
- `422`: validation_failed: The request body failed validation; field messages are in `errors`.
- `429`: rate_limited: A throttle or a per-account allowance refused the request; `retry_after` or `remaining` may be present.
- `500`: server_error: Unhandled failure; quote `request_id` to support.

---

[API](https://skmtc.dev/endlesstravelplans/apis/endless-travel-plans-api.md) · [All operations](https://skmtc.dev/endlesstravelplans/apis/endless-travel-plans-api/llms.txt) · [OpenAPI document](https://skmtc.dev/endlesstravelplans/apis/endless-travel-plans-api/revisions/ae82ed3e4a8f?raw)
