Buttondown Newsletters API

The Newsletters API from Buttondown — 7 operation(s) covering newsletter settings, branding, locale, and custom sending/hosting domain verification.

Operations 7

GET /newsletters List Newsletters #
POST /newsletters Create Newsletter #
GET /newsletters/{id} Retrieve Newsletter #
PATCH /newsletters/{id} Update Newsletter #
DELETE /newsletters/{id} Delete Newsletter #
GET /newsletters/{id}/sending-domain Retrieve Sending Domain #
GET /newsletters/{id}/hosting-domain Retrieve Hosting Domain #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/buttondown-newsletters-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

buttondown-newsletters-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Buttondown Newsletters API
  version: 1.0.0
  description: The Buttondown API lets you manage newsletters, subscribers, emails, and more. See [the documentation](https://docs.buttondown.com/api-introduction) for guides and examples.
  license:
    name: MIT
    url: https://opensource.org/licenses/MIT
servers:
- url: https://api.buttondown.com/v1
security:
- ApiKeyAuth: []
tags:
- name: Newsletters
paths:
  /newsletters:
    get:
      operationId: list_newsletters
      summary: List Newsletters
      parameters:
      - in: query
        name: page
        required: false
        description: The page number of the paginated response.
        schema:
          type: integer
          title: Page
          description: The page number of the paginated response.
          default: 1
          example: 1
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NewsletterPage'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
        '409':
          description: Conflict
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
        '429':
          description: Too Many Requests
          headers:
            Retry-After:
              description: Seconds to wait before retrying.
              schema:
                type: integer
            X-RateLimit-Limit:
              description: Requests permitted per minute.
              schema:
                type: integer
            X-RateLimit-Remaining:
              description: Requests remaining in the current window.
              schema:
                type: integer
            X-RateLimit-Reset:
              description: Unix timestamp at which the window resets.
              schema:
                type: integer
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
      description: List all newsletters
      tags:
      - Newsletters
      security:
      - ApiKeyAuth: []
    post:
      operationId: create_newsletter
      summary: Create Newsletter
      parameters: []
      responses:
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Newsletter'
          links:
            retrieve_newsletter:
              operationId: retrieve_newsletter
              parameters:
                path.id: $response.body#/id
            update_newsletter:
              operationId: update_newsletter
              parameters:
                path.id: $response.body#/id
            delete_newsletter:
              operationId: delete_newsletter
              parameters:
                path.id: $response.body#/id
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage_CreateNewsletterErrorCode_'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
        '409':
          description: Conflict
        '422':
          description: Unprocessable Entity
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationErrorMessage'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
        '429':
          description: Too Many Requests
          headers:
            Retry-After:
              description: Seconds to wait before retrying.
              schema:
                type: integer
            X-RateLimit-Limit:
              description: Requests permitted per minute.
              schema:
                type: integer
            X-RateLimit-Remaining:
              description: Requests remaining in the current window.
              schema:
                type: integer
            X-RateLimit-Reset:
              description: Unix timestamp at which the window resets.
              schema:
                type: integer
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
      description: Create a new newsletter
      tags:
      - Newsletters
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NewsletterInput'
        required: true
      security:
      - ApiKeyAuth: []
  /newsletters/{id}:
    get:
      operationId: retrieve_newsletter
      summary: Retrieve Newsletter
      parameters:
      - in: path
        name: id
        schema:
          title: Id
          type: string
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Newsletter'
          links:
            update_newsletter:
              operationId: update_newsletter
              parameters:
                path.id: $response.body#/id
            delete_newsletter:
              operationId: delete_newsletter
              parameters:
                path.id: $response.body#/id
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
        '409':
          description: Conflict
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
        '429':
          description: Too Many Requests
          headers:
            Retry-After:
              description: Seconds to wait before retrying.
              schema:
                type: integer
            X-RateLimit-Limit:
              description: Requests permitted per minute.
              schema:
                type: integer
            X-RateLimit-Remaining:
              description: Requests remaining in the current window.
              schema:
                type: integer
            X-RateLimit-Reset:
              description: Unix timestamp at which the window resets.
              schema:
                type: integer
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
      description: Retrieve a specific newsletter by its ID
      tags:
      - Newsletters
      security:
      - ApiKeyAuth: []
    patch:
      operationId: update_newsletter
      summary: Update Newsletter
      parameters:
      - in: path
        name: id
        schema:
          title: Id
          type: string
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Newsletter'
          links:
            retrieve_newsletter:
              operationId: retrieve_newsletter
              parameters:
                path.id: $response.body#/id
            delete_newsletter:
              operationId: delete_newsletter
              parameters:
                path.id: $response.body#/id
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
        '409':
          description: Conflict
        '422':
          description: Unprocessable Entity
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationErrorMessage'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
        '429':
          description: Too Many Requests
          headers:
            Retry-After:
              description: Seconds to wait before retrying.
              schema:
                type: integer
            X-RateLimit-Limit:
              description: Requests permitted per minute.
              schema:
                type: integer
            X-RateLimit-Remaining:
              description: Requests remaining in the current window.
              schema:
                type: integer
            X-RateLimit-Reset:
              description: Unix timestamp at which the window resets.
              schema:
                type: integer
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
      description: Update a newsletter's settings
      tags:
      - Newsletters
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/NewsletterUpdateInput'
        required: true
      security:
      - ApiKeyAuth: []
    delete:
      operationId: delete_newsletter
      summary: Delete Newsletter
      parameters:
      - in: path
        name: id
        schema:
          title: Id
          type: string
        required: true
      responses:
        '204':
          description: No Content
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
        '409':
          description: Conflict
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
        '429':
          description: Too Many Requests
          headers:
            Retry-After:
              description: Seconds to wait before retrying.
              schema:
                type: integer
            X-RateLimit-Limit:
              description: Requests permitted per minute.
              schema:
                type: integer
            X-RateLimit-Remaining:
              description: Requests remaining in the current window.
              schema:
                type: integer
            X-RateLimit-Reset:
              description: Unix timestamp at which the window resets.
              schema:
                type: integer
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
      description: Delete a newsletter
      tags:
      - Newsletters
      security:
      - ApiKeyAuth: []
  /newsletters/{id}/sending-domain:
    get:
      operationId: retrieve_sending_domain
      summary: Retrieve Sending Domain
      parameters:
      - in: path
        name: id
        schema:
          title: Id
          type: string
        required: true
      - in: query
        name: force
        schema:
          default: false
          description: When true, trigger a fresh DNS re-verification instead of serving the last-known record.
          title: Force
          type: boolean
        required: false
        description: When true, trigger a fresh DNS re-verification instead of serving the last-known record.
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SendingDomainRecord'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
        '409':
          description: Conflict
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
        '429':
          description: Too Many Requests
          headers:
            Retry-After:
              description: Seconds to wait before retrying.
              schema:
                type: integer
            X-RateLimit-Limit:
              description: Requests permitted per minute.
              schema:
                type: integer
            X-RateLimit-Remaining:
              description: Requests remaining in the current window.
              schema:
                type: integer
            X-RateLimit-Reset:
              description: Unix timestamp at which the window resets.
              schema:
                type: integer
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
      description: Retrieve the DNS verification status and required records for a newsletter's custom sending domain. While `is_checking` is true, a background re-verification is in flight; poll until it flips to false. Pass `force=true` to trigger a re-check.
      tags:
      - Newsletters
      security:
      - ApiKeyAuth: []
  /newsletters/{id}/hosting-domain:
    get:
      operationId: retrieve_hosting_domain
      summary: Retrieve Hosting Domain
      parameters:
      - in: path
        name: id
        schema:
          title: Id
          type: string
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HostingDomainRecord'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
        '409':
          description: Conflict
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
        '429':
          description: Too Many Requests
          headers:
            Retry-After:
              description: Seconds to wait before retrying.
              schema:
                type: integer
            X-RateLimit-Limit:
              description: Requests permitted per minute.
              schema:
                type: integer
            X-RateLimit-Remaining:
              description: Requests remaining in the current window.
              schema:
                type: integer
            X-RateLimit-Reset:
              description: Unix timestamp at which the window resets.
              schema:
                type: integer
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorMessage'
      description: Retrieve the DNS verification status for a newsletter's custom hosting domain. This synchronously re-verifies the domain's DNS records.
      tags:
      - Newsletters
      security:
      - ApiKeyAuth: []
components:
  schemas:
    SendingDomainStatus:
      description: The DNS verification status of a newsletter's custom sending domain.
      enum:
      - none
      - invalid
      - awaiting_ssl
      - failing
      - deliberately_cold
      - valid
      title: SendingDomainStatus
      type: string
    NewsletterUpdateInput:
      additionalProperties: false
      properties:
        announcement_bar_background_color:
          anyOf:
          - const: ''
            type: string
          - maxLength: 7
            pattern: ^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$
            type: string
          - type: 'null'
          description: The background color for the announcement bar on your archive page. Must be a valid hex color code.
          example: '#FF6600'
          title: Announcement Bar Background Color
        announcement_bar_text:
          anyOf:
          - type: string
          - type: 'null'
          description: Text displayed in the announcement bar on your archive page. Useful for promotions, updates, or calls to action.
          example: Subscribe to get 20% off your first order!
          title: Announcement Bar Text
        announcement_bar_visibility:
          anyOf:
          - $ref: '#/components/schemas/NewsletterAnnouncementBarVisibility'
          - type: 'null'
          description: Controls who sees the announcement bar on your archive page.
          enum:
          - disabled
          - everyone
          - free_only
          - logged_out_only
          - paid_only
          example: everyone
        archive_theme:
          anyOf:
          - $ref: '#/components/schemas/NewsletterArchiveTheme'
          - type: 'null'
          description: The visual theme for your newsletter's archive page. See [archive themes](https://docs.buttondown.com/customizing-web-design) for previews.
          example: modern
        auditing_mode:
          anyOf:
          - $ref: '#/components/schemas/NewsletterAuditingMode'
          - type: 'null'
          description: The auditing mode for your newsletter, which controls spam and abuse protection. See [the Firewall](https://docs.buttondown.com/firewall) for more information.
          example: enabled
        css:
          anyOf:
          - type: string
          - type: 'null'
          description: Custom CSS styling applied to your newsletter emails. See [CSS customization](https://docs.buttondown.com/customizing-email-design#adding-custom-css) for more information.
          example: '.header { color: #000; }'
          title: Css
        custom_churn_email_body:
          anyOf:
          - type: string
          - type: 'null'
          description: Custom body content for the email sent when a paid subscriber cancels. Supports template tags like `{{ subscriber.email }}` and `{{ newsletter.name }}`.
          example: 'Hi {{ subscriber.email }},


            We''re sorry to see you go!'
          title: Custom Churn Email Body
        custom_churn_email_subject:
          anyOf:
          - type: string
          - type: 'null'
          description: Custom subject line for the email sent when a paid subscriber cancels. Supports template tags like `{{ newsletter.name }}`.
          example: You've canceled your premium subscription to {{ newsletter.name }}
          title: Custom Churn Email Subject
        custom_churn_email_template:
          anyOf:
          - $ref: '#/components/schemas/NewsletterEmailTemplate'
          - type: 'null'
          description: The email template to use for churn emails. If not set, uses the newsletter's default template.
          example: modern
        custom_email_template:
          anyOf:
          - type: string
          - type: 'null'
          description: The identifier for a custom email template. See [email templates](https://docs.buttondown.com/customizing-email-design#buttondowns-default-templates) for available options.
          example: modern
          title: Custom Email Template
        custom_expired_trial_notification_body:
          anyOf:
          - type: string
          - type: 'null'
          description: Custom body content for the email sent when a subscriber's free trial expires. Supports template tags.
          title: Custom Expired Trial Notification Body
        custom_expired_trial_notification_subject:
          anyOf:
          - type: string
          - type: 'null'
          description: Custom subject line for the email sent when a subscriber's free trial expires. Supports template tags.
          title: Custom Expired Trial Notification Subject
        custom_expired_trial_notification_template:
          anyOf:
          - $ref: '#/components/schemas/NewsletterEmailTemplate'
          - type: 'null'
          description: The email template to use for expired trial notification emails. If not set, uses the newsletter's default template.
          example: modern
        custom_gift_subscription_email_body:
          anyOf:
          - type: string
          - type: 'null'
          description: Custom body content for the email sent when someone receives a gift subscription. Supports template tags.
          title: Custom Gift Subscription Email Body
        custom_gift_subscription_email_subject:
          anyOf:
          - type: string
          - type: 'null'
          description: Custom subject line for the email sent when someone receives a gift subscription. Supports template tags.
          title: Custom Gift Subscription Email Subject
        custom_gift_subscription_email_template:
          anyOf:
          - $ref: '#/components/schemas/NewsletterEmailTemplate'
          - type: 'null'
          description: The email template to use for gift subscription emails. If not set, uses the newsletter's default template.
          example: modern
        custom_gift_unsubscription_email_body:
          anyOf:
          - type: string
          - type: 'null'
          description: Custom body content for the email sent when a gift subscription ends. Supports template tags.
          title: Custom Gift Unsubscription Email Body
        custom_gift_unsubscription_email_subject:
          anyOf:
          - type: string
          - type: 'null'
          description: Custom subject line for the email sent when a gift subscription ends. Supports template tags.
          title: Custom Gift Unsubscription Email Subject
        custom_gift_unsubscription_email_template:
          anyOf:
          - $ref: '#/components/schemas/NewsletterEmailTemplate'
          - type: 'null'
          description: The email template to use for gift unsubscription emails. If not set, uses the newsletter's default template.
          example: modern
        custom_premium_confirmation_email_body:
          anyOf:
          - type: string
          - type: 'null'
          description: Custom body content for the email sent when a subscriber upgrades to a paid plan. Supports template tags.
          title: Custom Premium Confirmation Email Body
        custom_premium_confirmation_email_subject:
          anyOf:
          - type: string
          - type: 'null'
          description: Custom subject line for the email sent when a subscriber upgrades to a paid plan. Supports template tags.
          title: Custom Premium Confirmation Email Subject
        custom_premium_confirmation_email_template:
          anyOf:
          - $ref: '#/components/schemas/NewsletterEmailTemplate'
          - type: 'null'
          description: The email template to use for premium confirmation emails. If not set, uses the newsletter's default template.
          example: modern
        custom_subscription_confirmation_email_subject:
          anyOf:
          - type: string
          - type: 'null'
          description: Custom subject line for the double opt-in confirmation email sent to new subscribers. Supports template tags.
          title: Custom Subscription Confirmation Email Subject
        custom_subscription_confirmation_email_text:
          anyOf:
          - type: string
          - type: 'null'
          description: Custom body content for the double opt-in confirmation email. Must contain `{{ confirmation_url }}` as an HTML or Markdown link.
          title: Custom Subscription Confirmation Email Text
        custom_subscription_confirmation_email_template:
          anyOf:
          - $ref: '#/components/schemas/NewsletterEmailTemplate'
          - type: 'null'
          description: The email template to use for subscription confirmation emails. If not set, uses the newsletter's default template.
          example: modern
        custom_subscription_confirmation_reminder_email_subject:
          anyOf:
          - type: string
          - type: 'null'
          description: Custom subject line for the reminder email sent to subscribers who haven't confirmed. Supports template tags.
          title: Custom Subscription Confirmation Reminder Email Subject
        custom_subscription_confirmation_reminder_email_text:
          anyOf:
          - type: string
          - type: 'null'
          description: Custom body content for the reminder email sent to subscribers who haven't confirmed. Supports template tags.
          title: Custom Subscription Confirmation Reminder Email Text
        custom_subscription_confirmed_email_subject:
          anyOf:
          - type: string
          - type: 'null'
          description: Custom subject line for the email sent after a subscriber confirms their subscription. Supports template tags.
          title: Custom Subscription Confirmed Email Subject
        custom_subscription_confirmed_email_text:
          anyOf:
          - type: string
          - type: 'null'
          description: Custom body content for the email sent after a subscriber confirms their subscription. Supports template tags.
          title: Custom Subscription Confirmed Email Text
        description:
          anyOf:
          - type: string
          - type: 'null'
          description: A brief description of your newsletter, displayed on your public archive page and used for SEO.
          example: Stay up to date with the latest trends in wigs and hairpieces
          title: Description
        domain:
          anyOf:
          - maxLength: 500
            type: string
          - type: 'null'
          description: The custom domain where your newsletter archives are hosted (e.g., 'newsletter.example.com'). See [custom domains](https://docs.buttondown.com/hosting-on-a-custom-domain) for setup instructions.
          example: sheinhardt.com
          title: Domain
        email_address:
          anyOf:
          - pattern: ^[a-zA-Z0-9.'_%+\-!]+@[a-zA-Z0-9.\-]+\.[a-zA-Z]{2,}$
            type: string
            format: email
          - type: 'null'
          description: The 'From' email address used when sending your newsletter. Must be verified before use.
          example: newsletter@sheinhardt.com
          title: Email Address
        email_domain:
          anyOf:
          - maxLength: 500
            type: string
          - type: 'null'
          description: The custom domain from which your newsletter emails are sent (e.g., 'mail.example.com'). See [sending domains](https://docs.buttondown.com/sending-from-a-custom-domain) for setup instructions.
          example: mail.sheinhardt.com
          title: Email Domain
        email_theme_configuration:
          anyOf:
          - additionalProperties:
              type: string
            type: object
          - type: 'null'
          description: A dictionary of CSS token overrides for the email theme.
          example:
            primary-color: '#0069FF'
          title: Email Theme Configuration
        enabled_features:
          anyOf:
          - items:
              type: string
            type: array
          - type: 'null'
          description: A list of features enabled for your newsletter. Common values include 'archives', 'portal', 'surveys', 'comments', 'paid_subscriptions', 'automations', 'webhooks', 'tracking', and 'referrals'.
          example:
          - archives
          - portal
          - surveys
          title: Enabled Features
        footer:
          anyOf:
          - type: string
          - type: 'null'
          description: HTML content displayed at the bottom of your newsletter emails. Supports [template tags](https://docs.buttondown.com/template-tags).
          example: <p>Thanks for reading!</p>
          title: Footer
        from_name:
          anyOf:
          - type: string
          - type: 'null'
          description: The display name shown in the 'From' field of your emails (e.g., 'Jane from Acme Newsletter').
          example: Sheinhardt Wig Company
          title: From Name
        header:
          anyOf:
          - type: string
          - type: 'null'
          description: HTML content displayed at the top of your newsletter emails. Supports [template tags](https://docs.buttondown.com/template-tags).
          example: <p>Welcome to our newsletter!</p>
          title: Header
        icon:
          anyOf:
          - maxLength: 500
            type: string
          - type: 'null'
          description: URL to your newsletter's icon image, used as a favicon and in various UI contexts.
          example: https://example.com/icon.png
          title: Icon
        icon_alt_text:
          anyOf:
          - maxLength: 500
            type: string
          - type: 'null'
          description: Alt text for the newsletter icon, used by screen readers and shown when the image cannot load.
          title: Icon Alt Text
        image:
          anyOf:
          - maxLength: 500
            type: string
          - type: 'null'
          description: URL to your newsletter's header or branding image, displayed on archive pages and in social previews.
          example: https://example.com/header.jpg
          title: Image
        locale:
          anyOf:
          - $ref: '#/components/schemas/NewsletterLocale'
          - type: 'null'
          description: The language/locale for your newsletter's UI elements (confirmation emails, unsubscribe pages, etc.). See [localization](https://docs.buttondown.com/localization) for supported locales.
          example: en
        metadata:
          anyOf:
          - additionalProperties: true
            type: object
          - type: 'null'
          description: A structured key-value blob that you can use to store arbitrary data on the object. Metadata can be nested — you can store objects and arrays within your metadata. (You can [read more about metadata.](https://docs.buttondown.com/metadata))
          example:
            source: my-app
            tier: pro
          title: Metadata
        name:
          anyOf:
          - type: string
          - type: 'null'
          description: The display name of your newsletter, shown to subscribers and on your archive page.
          example: Sheinhardt Wig Company
          title: Name
        reply_to_address:
          anyOf:
          - pattern: ^[a-zA-Z0-9.'_%+\-!]+@[a-zA-Z0-9.\-]+\.[a-zA-Z]{2,}$
            type: string
            format: email
          - type: 'null'
          description: An alternative email address that receives replies to your newsletter emails, instead of the sending address.
          example: newsletter@sheinhardt.com
          title: Reply To Address
        socials:
          anyOf:
          - items:
              $ref: '#/components/schemas/SocialAccountSchema'
            type: array
          - type: 'null'
          description: A list of social media accounts linked to your newsletter, displayed on your archive page. Each entry has a `type`, `url`, and optional `label`.
          example:
          - label: null
            type: twitter
            url: https://x.com/sheinhardt
          title: Socials
        subscription_confirmation_redirect_url:
          anyOf:
          - type: string
          - type: 'null'
          description: A URL to redirect subscribers to after they 

# --- truncated at 32 KB (75 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/buttondown/refs/heads/main/openapi/buttondown-newsletters-api-openapi.yml