Subscriptions
User subscription preferences and email verification (Inbox service)
Retrieves the subscription preferences for the authenticated user, including confirmed email, unconfirmed email (if any), and detailed notification preferences for each notification type. If no subscription exists, returns default preferences with all notifications enabled.
Signed fetch authentication using @dcl/platform-crypto-middleware implementing Decentraland's ADR-44.
Requirements:
- Authentication chain headers:
x-identity,x-signature,x-timestamp - Token expiration: 5 minutes
- Metadata validation: Rejects requests with
signer: "decentraland-kernel-scene" - The user's Ethereum address is extracted from the auth chain
Example:
Authorization: Bearer <signed-fetch-token>
x-identity: <auth-chain-json>
x-signature: <signature>
x-timestamp: <timestamp>
User subscription preferences retrieved successfully
Unauthorized - invalid or missing signed fetch headers
Forbidden - signed fetch metadata validation failed
Updates the subscription preferences for the authenticated user. Allows configuring global email/in-app preferences and per-notification-type preferences. The request is validated against the SubscriptionDetails schema. Sends an analytics event to the data warehouse.
Signed fetch authentication using @dcl/platform-crypto-middleware implementing Decentraland's ADR-44.
Requirements:
- Authentication chain headers:
x-identity,x-signature,x-timestamp - Token expiration: 5 minutes
- Metadata validation: Rejects requests with
signer: "decentraland-kernel-scene" - The user's Ethereum address is extracted from the auth chain
Example:
Authorization: Bearer <signed-fetch-token>
x-identity: <auth-chain-json>
x-signature: <signature>
x-timestamp: <timestamp>
If true, user will not receive any email notifications
If true, user will not receive any in-app notifications
Subscription preferences updated successfully
Invalid request - validation error in subscription details
Unauthorized - invalid or missing signed fetch headers
Forbidden - signed fetch metadata validation failed
No content
Unsubscribes a user from all email notifications by setting ignore_all_email to true. The URL must be signed with HMAC-SHA256 using the service's signing key. Returns an HTML confirmation page. This endpoint is typically accessed via links in notification emails.
Ethereum address of the user
0xb5D7D1A05f553b5098D9274Df6B292e4e8222314Pattern: ^0x[a-fA-F0-9]{40}$HMAC-SHA256 signature of the URL path and query parameters
Unix timestamp when the signature was generated
Successfully unsubscribed from all email notifications - returns HTML page
HTML confirmation page
Invalid signature or expired link
Unsubscribes a user from email notifications for a specific notification type. The URL must be signed with HMAC-SHA256 using the service's signing key. Returns an HTML confirmation page. This endpoint is typically accessed via links in notification emails.
Ethereum address of the user
0xb5D7D1A05f553b5098D9274Df6B292e4e8222314Pattern: ^0x[a-fA-F0-9]{40}$Notification type to unsubscribe from (must be a valid NotificationType enum value)
bid_acceptedHMAC-SHA256 signature of the URL path and query parameters
Unix timestamp when the signature was generated
Successfully unsubscribed from notification type - returns HTML page
HTML confirmation page
Invalid signature, expired link, or invalid notification type
Initiates email verification process by storing an unconfirmed email and sending a confirmation email.
If email is an empty string, removes the current email and disables email notifications
If email already exists for another address, returns an error
If email matches the currently confirmed email, skips verification
Otherwise, generates a 32-character code and sends verification email via SendGrid
The confirmation email contains a link that may include Turnstile challenge if the feature flag is enabled.
Signed fetch authentication using @dcl/platform-crypto-middleware implementing Decentraland's ADR-44.
Requirements:
- Authentication chain headers:
x-identity,x-signature,x-timestamp - Token expiration: 5 minutes
- Metadata validation: Rejects requests with
signer: "decentraland-kernel-scene" - The user's Ethereum address is extracted from the auth chain
Example:
Authorization: Bearer <signed-fetch-token>
x-identity: <auth-chain-json>
x-signature: <signature>
x-timestamp: <timestamp>
Email address to set (provide empty string to remove email and disable notifications)
Optional redirect URL for email confirmation flow
Whether this is part of the credits workflow (affects confirmation URL and email template)
falseEmail verification process initiated successfully (or email removed if empty string provided)
Invalid email format or email already registered to another account or domain blacklisted
Unauthorized - invalid or missing signed fetch headers
Forbidden - signed fetch metadata validation failed
No content
Confirms an email address using the verification code sent via email. Validates the code against the stored unconfirmed email entry. If Turnstile verification is enabled, also validates the captcha token. Upon success, moves the email to the confirmed subscriptions table and deletes the unconfirmed entry.
Ethereum address of the user confirming the email
^0x[a-fA-F0-9]{40}$32-character verification code sent via email
Cloudflare Turnstile captcha token (required when Turnstile verification is enabled)
Source of the email confirmation (used for analytics)
Email confirmed successfully
Invalid or missing confirmation code, address, or email domain blacklisted
Invalid captcha token (when Turnstile verification is enabled)
No content
Returns whether the authenticated user has opted out from the provided scope and scope identifier. The user address is extracted from the signed fetch authentication chain.
Signed fetch authentication using @dcl/platform-crypto-middleware implementing Decentraland's ADR-44.
Requirements:
- Authentication chain headers:
x-identity,x-signature,x-timestamp - Token expiration: 5 minutes
- Metadata validation: Rejects requests with
signer: "decentraland-kernel-scene" - The user's Ethereum address is extracted from the auth chain
Example:
Authorization: Bearer <signed-fetch-token>
x-identity: <auth-chain-json>
x-signature: <signature>
x-timestamp: <timestamp>
Scope type for the opt-out
Identifier scoped to the scope (e.g., community ID)
Notification opt-out status retrieved successfully
Unauthorized - invalid or missing signed fetch headers
Forbidden - signed fetch metadata validation failed
Removes the opt-out configuration for the specified scope and scope identifier.
Signed fetch authentication using @dcl/platform-crypto-middleware implementing Decentraland's ADR-44.
Requirements:
- Authentication chain headers:
x-identity,x-signature,x-timestamp - Token expiration: 5 minutes
- Metadata validation: Rejects requests with
signer: "decentraland-kernel-scene" - The user's Ethereum address is extracted from the auth chain
Example:
Authorization: Bearer <signed-fetch-token>
x-identity: <auth-chain-json>
x-signature: <signature>
x-timestamp: <timestamp>
Scope type for the opt-out
Identifier scoped to the scope (e.g., community ID)
Notification opt-out deleted successfully
Unauthorized - invalid or missing signed fetch headers
Forbidden - signed fetch metadata validation failed
No content
Creates an opt-out configuration for the authenticated user based on a scope and scope identifier pair. Each scope maps to a canonical metadata configuration that determines which notifications are filtered.
Signed fetch authentication using @dcl/platform-crypto-middleware implementing Decentraland's ADR-44.
Requirements:
- Authentication chain headers:
x-identity,x-signature,x-timestamp - Token expiration: 5 minutes
- Metadata validation: Rejects requests with
signer: "decentraland-kernel-scene" - The user's Ethereum address is extracted from the auth chain
Example:
Authorization: Bearer <signed-fetch-token>
x-identity: <auth-chain-json>
x-signature: <signature>
x-timestamp: <timestamp>
Scope type to opt out from
Identifier scoped to the scope (e.g., community ID)
Notification opt-out created successfully
Invalid request - validation error
Unauthorized - invalid or missing signed fetch headers
Forbidden - signed fetch metadata validation failed
Last updated