Skip to main content
Fluxomail supports one‑click unsubscribe (RFC 8058) and token‑based preference management. You can also manage subscriptions via API. To add a custom unsubscribe page, set the HTTP URL in the app under Settings → Organization → Footer & Unsubscribe. Unsubscribe (public)
POST /api/unsubscribe
Linked in headers/footer; verifies a secure token and records suppression. Preferences API — GET Endpoint: GET /api/v1/preferences Headers
HeaderTypeRequiredDescription
AuthorizationstringnoBearer <api_key> (optional; enables scope checks)
Query
ParameterTypeRequiredDescription
tokenstringnoSecure token for contact lookup
emailstringnoEmail address to look up
Get current preferences by token or email
BASE=https://api.fluxomail.com
curl -X GET "$BASE/api/v1/preferences?token=$TOKEN" \
  -H "Authorization: Bearer $API_KEY"  # optional, if you want to use scopes
Response
{
  "contact": { "id": "contacts_...", "email": "user@example.com" },
  "categories": [ { "key": "product", "name": "Product updates" } ],
  "subscriptions": [ { "categoryKey": "product", "subscribed": true } ]
}
Status codes
  • 200 success
  • 401 invalid API key (when provided)
  • 403 missing preferences_read scope (when authenticated)
  • 404 contact not found
Preferences API — POST Endpoint: POST /api/v1/preferences Headers
HeaderTypeRequiredDescription
Content-Typestringyesapplication/json
AuthorizationstringnoRequired when using scopes on an API key
Body
ParameterTypeRequiredDescription
tokenstringnoSecure token issued for the contact
emailstringnoEmail address to update
subscriptionsarray of objectsyes{ categoryKey: string, subscribed: boolean } pairs
Update subscriptions (token or email). Requires preferences_manage when using a key:
curl -X POST "$BASE/api/v1/preferences" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $API_KEY" \
  -d '{
    "token": "...",
    "subscriptions": [
      { "categoryKey": "product", "subscribed": false },
      { "categoryKey": "newsletters", "subscribed": true }
    ]
  }'
Response
{ "ok": true }
Status codes
  • 200 success
  • 401 invalid API key (when provided)
  • 403 missing preferences_manage scope (when authenticated)
  • 404 contact not found
  • 400/500 invalid payload/server error
Scopes: preferences_read, preferences_manage