AWeber REST API

REST API for managing AWeber accounts, lists, subscribers, broadcasts, campaigns, custom fields, segments, and tags. Authentication uses OAuth 2.0 with personal access tokens or the authorization code flow.

OpenAPI Specification

aweber-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: AWeber REST API
  version: '1.0'
  description: |
    The AWeber REST API provides programmatic access to lists, subscribers,
    broadcasts, campaigns, custom fields, segments, and tags. The API is
    organized around the authenticated account and uses OAuth 2.0 for
    authentication. All requests are made over HTTPS to api.aweber.com and
    return JSON.

    See https://developer.aweber.com/docs/v3 for full reference.
  contact:
    name: AWeber Developer
    url: https://developer.aweber.com/
servers:
  - url: https://api.aweber.com/1.0
    description: AWeber REST API v1.0
tags:
  - name: Accounts
  - name: Lists
  - name: Subscribers
  - name: Broadcasts
  - name: Campaigns
  - name: Custom Fields
  - name: Segments
  - name: Tags
  - name: Web Forms
  - name: Landing Pages
security:
  - OAuth2: []
paths:
  /accounts:
    get:
      tags: [Accounts]
      summary: List the authenticated user's accounts
      operationId: listAccounts
      responses:
        '200':
          description: Collection of accounts
          content:
            application/json:
              schema: { $ref: '#/components/schemas/Collection' }
  /accounts/{accountId}:
    get:
      tags: [Accounts]
      summary: Get an account
      operationId: getAccount
      parameters:
        - $ref: '#/components/parameters/AccountId'
      responses:
        '200':
          description: Account
          content:
            application/json:
              schema: { $ref: '#/components/schemas/Account' }
  /accounts/{accountId}/lists:
    get:
      tags: [Lists]
      summary: List subscriber lists in an account
      operationId: listLists
      parameters:
        - $ref: '#/components/parameters/AccountId'
      responses:
        '200':
          description: Collection of lists
          content:
            application/json:
              schema: { $ref: '#/components/schemas/Collection' }
  /accounts/{accountId}/lists/{listId}:
    get:
      tags: [Lists]
      summary: Get a list
      operationId: getList
      parameters:
        - $ref: '#/components/parameters/AccountId'
        - $ref: '#/components/parameters/ListId'
      responses:
        '200':
          description: List
          content:
            application/json:
              schema: { $ref: '#/components/schemas/List' }
  /accounts/{accountId}/lists/{listId}/subscribers:
    get:
      tags: [Subscribers]
      summary: List subscribers on a list
      operationId: listSubscribers
      parameters:
        - $ref: '#/components/parameters/AccountId'
        - $ref: '#/components/parameters/ListId'
        - name: ws.size
          in: query
          schema: { type: integer }
        - name: ws.start
          in: query
          schema: { type: integer }
        - name: status
          in: query
          schema: { type: string, enum: [subscribed, unsubscribed, unconfirmed] }
      responses:
        '200':
          description: Collection of subscribers
          content:
            application/json:
              schema: { $ref: '#/components/schemas/Collection' }
    post:
      tags: [Subscribers]
      summary: Add a subscriber to a list
      operationId: createSubscriber
      parameters:
        - $ref: '#/components/parameters/AccountId'
        - $ref: '#/components/parameters/ListId'
      requestBody:
        required: true
        content:
          application/json:
            schema: { $ref: '#/components/schemas/SubscriberInput' }
      responses:
        '201':
          description: Subscriber created
  /accounts/{accountId}/lists/{listId}/subscribers/{subscriberId}:
    get:
      tags: [Subscribers]
      summary: Get a subscriber
      operationId: getSubscriber
      parameters:
        - $ref: '#/components/parameters/AccountId'
        - $ref: '#/components/parameters/ListId'
        - $ref: '#/components/parameters/SubscriberId'
      responses:
        '200':
          description: Subscriber
          content:
            application/json:
              schema: { $ref: '#/components/schemas/Subscriber' }
    patch:
      tags: [Subscribers]
      summary: Update a subscriber
      operationId: updateSubscriber
      parameters:
        - $ref: '#/components/parameters/AccountId'
        - $ref: '#/components/parameters/ListId'
        - $ref: '#/components/parameters/SubscriberId'
      requestBody:
        required: true
        content:
          application/json:
            schema: { $ref: '#/components/schemas/SubscriberInput' }
      responses:
        '200':
          description: Updated
    delete:
      tags: [Subscribers]
      summary: Delete a subscriber
      operationId: deleteSubscriber
      parameters:
        - $ref: '#/components/parameters/AccountId'
        - $ref: '#/components/parameters/ListId'
        - $ref: '#/components/parameters/SubscriberId'
      responses:
        '204':
          description: Deleted
  /accounts/{accountId}/lists/{listId}/broadcasts:
    get:
      tags: [Broadcasts]
      summary: List broadcasts for a list
      operationId: listBroadcasts
      parameters:
        - $ref: '#/components/parameters/AccountId'
        - $ref: '#/components/parameters/ListId'
        - name: status
          in: query
          schema: { type: string, enum: [draft, scheduled, sent] }
      responses:
        '200':
          description: Collection of broadcasts
          content:
            application/json:
              schema: { $ref: '#/components/schemas/Collection' }
    post:
      tags: [Broadcasts]
      summary: Create a broadcast
      operationId: createBroadcast
      parameters:
        - $ref: '#/components/parameters/AccountId'
        - $ref: '#/components/parameters/ListId'
      requestBody:
        required: true
        content:
          application/json:
            schema: { $ref: '#/components/schemas/BroadcastInput' }
      responses:
        '201':
          description: Broadcast created
  /accounts/{accountId}/lists/{listId}/broadcasts/{broadcastId}:
    get:
      tags: [Broadcasts]
      summary: Get a broadcast
      operationId: getBroadcast
      parameters:
        - $ref: '#/components/parameters/AccountId'
        - $ref: '#/components/parameters/ListId'
        - $ref: '#/components/parameters/BroadcastId'
      responses:
        '200':
          description: Broadcast
          content:
            application/json:
              schema: { $ref: '#/components/schemas/Broadcast' }
  /accounts/{accountId}/lists/{listId}/campaigns:
    get:
      tags: [Campaigns]
      summary: List campaigns for a list
      operationId: listCampaigns
      parameters:
        - $ref: '#/components/parameters/AccountId'
        - $ref: '#/components/parameters/ListId'
      responses:
        '200':
          description: Collection of campaigns
          content:
            application/json:
              schema: { $ref: '#/components/schemas/Collection' }
  /accounts/{accountId}/lists/{listId}/custom_fields:
    get:
      tags: [Custom Fields]
      summary: List custom fields on a list
      operationId: listCustomFields
      parameters:
        - $ref: '#/components/parameters/AccountId'
        - $ref: '#/components/parameters/ListId'
      responses:
        '200':
          description: Collection of custom fields
          content:
            application/json:
              schema: { $ref: '#/components/schemas/Collection' }
    post:
      tags: [Custom Fields]
      summary: Create a custom field
      operationId: createCustomField
      parameters:
        - $ref: '#/components/parameters/AccountId'
        - $ref: '#/components/parameters/ListId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required: [name]
              properties:
                name: { type: string }
                is_subscriber_updateable: { type: boolean }
      responses:
        '201':
          description: Created
  /accounts/{accountId}/lists/{listId}/segments:
    get:
      tags: [Segments]
      summary: List saved searches/segments
      operationId: listSegments
      parameters:
        - $ref: '#/components/parameters/AccountId'
        - $ref: '#/components/parameters/ListId'
      responses:
        '200':
          description: Collection of segments
          content:
            application/json:
              schema: { $ref: '#/components/schemas/Collection' }
  /accounts/{accountId}/lists/{listId}/web_forms:
    get:
      tags: [Web Forms]
      summary: List web forms on a list
      operationId: listWebForms
      parameters:
        - $ref: '#/components/parameters/AccountId'
        - $ref: '#/components/parameters/ListId'
      responses:
        '200':
          description: Collection of web forms
          content:
            application/json:
              schema: { $ref: '#/components/schemas/Collection' }
  /accounts/{accountId}/landing_pages:
    get:
      tags: [Landing Pages]
      summary: List landing pages
      operationId: listLandingPages
      parameters:
        - $ref: '#/components/parameters/AccountId'
      responses:
        '200':
          description: Collection of landing pages
          content:
            application/json:
              schema: { $ref: '#/components/schemas/Collection' }
components:
  parameters:
    AccountId:
      name: accountId
      in: path
      required: true
      schema: { type: integer }
    ListId:
      name: listId
      in: path
      required: true
      schema: { type: integer }
    SubscriberId:
      name: subscriberId
      in: path
      required: true
      schema: { type: integer }
    BroadcastId:
      name: broadcastId
      in: path
      required: true
      schema: { type: integer }
  schemas:
    Collection:
      type: object
      properties:
        entries:
          type: array
          items: { type: object }
        total_size: { type: integer }
        next_collection_link: { type: string, format: uri }
    Account:
      type: object
      properties:
        id: { type: integer }
        self_link: { type: string, format: uri }
        business_name: { type: string }
        primary_email: { type: string }
    List:
      type: object
      properties:
        id: { type: integer }
        name: { type: string }
        self_link: { type: string, format: uri }
        total_subscribers: { type: integer }
    Subscriber:
      type: object
      properties:
        id: { type: integer }
        email: { type: string, format: email }
        name: { type: string }
        status: { type: string, enum: [subscribed, unsubscribed, unconfirmed] }
        tags:
          type: array
          items: { type: string }
        custom_fields:
          type: object
          additionalProperties: true
    SubscriberInput:
      type: object
      required: [email]
      properties:
        email: { type: string, format: email }
        name: { type: string }
        ad_tracking: { type: string }
        custom_fields:
          type: object
          additionalProperties: true
        tags:
          type: array
          items: { type: string }
    Broadcast:
      type: object
      properties:
        id: { type: integer }
        subject: { type: string }
        body_html: { type: string }
        body_text: { type: string }
        status: { type: string }
    BroadcastInput:
      type: object
      required: [subject]
      properties:
        subject: { type: string }
        body_html: { type: string }
        body_text: { type: string }
  securitySchemes:
    OAuth2:
      type: oauth2
      flows:
        authorizationCode:
          authorizationUrl: https://auth.aweber.com/oauth2/authorize
          tokenUrl: https://auth.aweber.com/oauth2/token
          scopes:
            account.read: Read account information
            list.read: Read lists
            list.write: Manage lists
            subscriber.read: Read subscribers
            subscriber.write: Manage subscribers
            email.read: Read broadcasts and campaigns
            email.write: Manage broadcasts and campaigns
            landing-page.read: Read landing pages
            landing-page.write: Manage landing pages