Listrak Email REST API

Manage contacts, opt-in status, and contact profiles; execute email campaigns including marketing and transactional messages; and retrieve performance metrics for email programs.

OpenAPI Specification

listrak-email-openapi.yml Raw ↑
openapi: 3.0.0
info:
  version: v1
  title: Listrak Email REST API
  description: "# Introduction\r\nWelcome to the Listrak Email <a href='https://en.wikipedia.org/wiki/Representational_state_transfer'>REST\
    \ API</a>!\r\n\r\nOur API allows developers to integrate with Listrak's application.\
    \ It enables the seamless automation of a broad set of functionality, ranging\
    \ from basic tasks to complex processes.\r\n\r\nWe aim to provide comprehensive\
    \ documentation coverage of our API's capabilities. Each resource and method is\
    \ described in detail with implementation notes, descriptions of parameters, headers,\
    \ return values, and code samples to aid in development.\r\n\n# Versioning\r\n\
    \r\nThe API version is denoted in the URI. This API's base URI is:\r\n\r\n`https://api.listrak.com/email/v1`\r\
    \n\r\n<br />\r\n\r\nThe API version will be incremented if breaking changes are\
    \ introduced. Breaking changes may include:\r\n\r\n- Addition of required headers,\
    \ parameters, or model fields to a current route\r\n- Alterations that would result\
    \ in currently valid requests failing, or performing unexpectedly\r\n\r\n<br />\r\
    \n\r\nChanges that are not considered breaking may include:\r\n\r\n- Addition\
    \ of new model fields\r\n- Addition of new routes\r\n- Addition of new response\
    \ headers\r\n- Any alteration to a route that is marked as <span class=\"inDev\"\
    >In Development</span>\r\n# Usage\r\n\r\n## External Libraries\r\n\r\nThe C# code\
    \ examples featured on this site require the following packages:\r\n\r\n- <a href=\"\
    https://www.nuget.org/packages/Microsoft.AspNet.WebApi.Client/\">Microsoft.AspNet.WebApi.Client</a>\r\
    \n- <a href=\"https://www.nuget.org/packages/Newtonsoft.Json/\">Newtonsoft.Json</a>\r\
    \n\r\nThe Php code examples require the following package:\r\n- <a href=\"http://docs.guzzlephp.org/en/stable/#\"\
    >Guzzle 6</a>\n# Feedback\r\n\r\nWe are actively seeking feedback in the following\
    \ areas:\r\n- Code samples\r\n- Response examples\r\n- Resource and field descriptions\r\
    \n\r\n<br />\r\n\r\nPlease provide your feedback to us at [email protected].\n\
    # Integration Setup\r\nTo enable API access, **you must create an _Integration_**\
    \ on the _Integrations_ page. In the Listrak application left menu, go to: Integrations\
    \ &rarr; Integration Management.\r\n\r\nPlease specify integration type `Email`\
    \ for your integration. You must also specify which areas of the API should be\
    \ made accessible. Available areas include:\r\n- Contact\r\n- Event\r\n- List\r\
    \n- Message\r\n- Reporting\r\n- Segmentation\r\n\r\nMake sure to securely store\
    \ a copy of your _Client ID_ and _Client Secret_. These values will be needed\
    \ to authenticate with the API. For your security, the _Client Secret_ cannot\
    \ be retrieved if it is lost.\r\n\n# Status Codes\r\n\r\n| Status Code | Status\
    \ | Description |\r\n|-|-|-|\r\n| 200 | OK | The request succeeded. |\r\n| 201\
    \ | Created | A new resource has been created. |\r\n| 400 | Bad Request | Your\
    \ request is malformed or invalid. |\r\n| 401 | Unauthorized | Authentication\
    \ is required. |\r\n| 404 | Not Found | The resource does not exist. |\r\n| 405\
    \ | Method Not Allowed | The route does not support the requested method. |\r\n\
    | 415 | Unsupported Media Type | Please use a `Content-Type` of `application/json`.\
    \ |\r\n| 500 | Internal Server Error | An unexpected error occurred. Our development\
    \ team has been notified. |\r\n\n# Error Codes\r\n## General\r\n| Error Code |\
    \ Possible Causes |\r\n|-|-|\r\n| ERROR_INVALID_CREDENTIALS | Invalid client credentials,\
    \ inactive integration, unauthorized IP address |\r\n| ERROR_INVALID_PARAMETER\
    \ | Null or invalid value for a parameter, non-unique value for a parameter (if\
    \ the property is required to be unique for all resources in the collection) |\r\
    \n| ERROR_MALFORMED_REQUEST_BODY | Invalid JSON body was supplied |\r\n| ERROR_RESOURCE_DEPENDENCY\
    \ | Trying to delete a resource that is in use |\r\n| ERROR_UNABLE_TO_LOCATE_RESOURCE\
    \ | Valid route was supplied with invalid resource IDs |\r\n| ERROR_UNAUTHORIZED\
    \ | Invalid access token, inactive integration, insufficient access level, unauthorized\
    \ IP address |\r\n| ERROR_UNHANDLED_EXCEPTION | Unexpected error during execution\
    \ of the request |\r\n| ERROR_UNKNOWN_ROUTE | Invalid route was supplied |\r\n\
    | ERROR_UNSAFE_ROUTE | Invalid character was supplied in the route ('&' outside\
    \ of query string, '<', '>', etc.) |\r\n| ERROR_UNSUPPORTED_CONTENT_TYPE | Invalid\
    \ `Content-Type` header was supplied (must be `application/json`), missing `Content-Type`\
    \ header |\r\n| ERROR_UNSUPPORTED_METHOD | Valid route supplied with an invalid\
    \ HTTP method |\r\n| ERROR_UNSUPPORTED_PROTOCOL | Request was not made over HTTPS\
    \ |\r\n| ERROR_INTEGRATION_CANNOT_ACCESS_BETA_ROUTE | This route is in Beta and\
    \ not yet generally available for all integrations. |\r\n\r\n## Contact\r\n\r\n\
    | Error Code | Possible Causes |\r\n|-|-|\r\n| ERROR_BANNED_EMAIL_ADDRESS | Subscribing\
    \ a contact that has been banned |\r\n| ERROR_BANNED_NEW_EMAIL_ADDRESS | Changing\
    \ `emailAddress` to one that has been banned |\r\n| ERROR_CHANGE_ADDRESS_CONTACT_UNSUBSCRIBED\
    \ | Changing `emailAddress` to one that has unsubscribed from the list |\r\n|\
    \ ERROR_CHANGE_ADDRESS_WITH_EVENTS | Changing `emailAddress` with a list of events\
    \ |\r\n| ERROR_CHANGE_ADDRESS_WITH_SEGMENTATION_DATA | Changing `emailAddress`\
    \ with profile data |\r\n| ERROR_CONVERSION_ANALYTICS_NOT_ENABLED | Conversion\
    \ analytics not enabled |\r\n| ERROR_NOT_SUBSCRIBED_EMAIL_ADDRESS | Unsubscribing\
    \ a contact that is not a subscriber for the list |\r\n| ERROR_PENDING_EMAIL_ADDRESS\
    \ | Already pending subscription through double opt-in |\r\n| ERROR_PENDING_NEW_EMAIL_ADDRESS\
    \ | Changing `emailAddress` to one that is already pending subscription through\
    \ double opt-in |\r\n| ERROR_SUBSCRIBED_EMAIL_ADDRESS | Subscribing a contact\
    \ that has already been subscribed to the list |\r\n| ERROR_SUBSCRIBED_NEW_EMAIL_ADDRESS\
    \ | Changing `emailAddress` to one that is already subscribed to the list |\r\n\
    | ERROR_SUPPRESSED_EMAIL | Subscribing an `emailAddress` that has already been\
    \ suppressed |\r\n| ERROR_SUPPRESSED_NEW_EMAIL | Changing `emailAddress` to one\
    \ that has already been suppressed |\r\n| ERROR_TOO_MANY_SEGMENTATION_FIELDS |\
    \ Number of requested profile fields exceeds the limit |\r\n| ERROR_UNSUBSCRIBE_WITH_EVENTS\
    \ | Unsubscribing a contact with a list of events |\r\n| ERROR_UNSUBSCRIBE_WITH_SEGMENTATION_DATA\
    \ | Unsubscribing a contact with profile data |\r\n| ERROR_UNSUBSCRIBED_EMAIL_ADDRESS\
    \ | Unsubscribing a contact that has already been unsubscribed from the list |\r\
    \n| ERROR_UNSUBSCRIBED_NEW_EMAIL_ADDRESS | Changing an `emailAddress` to one that\
    \ has already been unsubscribed from the list |\r\n| ERROR_UPDATE_UNSUBSCRIBE_WITH_EVENTS\
    \ | Updating a contact that is unsubscribed with a list of events |\r\n\r\n##\
    \ List\r\n| Error Code | Possible Causes |\r\n|-|-|\r\n| ERROR_GOOGLE_TRACKING_DOMAIN_LIMIT_MET\
    \ | Maximum number of Google tracking domains have already been set for the list\
    \ |\r\n| ERROR_DOMAIN_ALIAS_INVALID | The provided domain alias is not a valid\
    \ domain |\r\n| ERROR_DOMAIN_ALIAS_MISCONFIGURED_DNS | The DNS record for the\
    \ provided domain alias does not point to the correct endpoint |\r\n| ERROR_DOMAIN_ALIAS_INVALID_HSTS\
    \ | The provided domain alias has HSTS enabled for either all sub-domains, or\
    \ a domain alias type we are unable to secure |\r\n| ERROR_DOMAIN_ALIAS_PROXY_CERTIFICATE_GENEREATION_FAILED\
    \ | We were unable to secure the specfied domain alias |\r\n\r\n## Message\r\n\
    | Error Code | Possible Causes |\r\n|-|-|\r\n| ERROR_REVIEW_FLAG_AND_SEND_DATE_SET\
    \ | `sendReviewMessage` set to true and `sendDate` is set |\r\n| ERROR_TEST_FLAG_AND_REVIEW_FLAG_SET\
    \ | `sendReviewMessage` and `sendTestMessage` set to true |\r\n| ERROR_TEST_FLAG_AND_SEND_DATE_SET\
    \ | `sendTestMessage` set to true and `sendDate` is set |\r\n\r\n## Segmentation\
    \ Field Group\r\n| Error Code | Possible Causes |\r\n|-|-| \r\n| ERROR_SEGMENTATION_FIELD_GROUP_LIMIT_MET\
    \ | Maximum number of profile field groups have already been created for the list\
    \ |\r\n\r\n## Transactional Message\r\n| Error Code | Possible Causes |\r\n|-|-|\r\
    \n| ERROR_SEGMENTATION_FIELD_DEFINED_TWICE | Two or more values were supplied\
    \ for the same `segmentationFieldId` |\r\n| ERROR_TRANSACTIONAL_MESSAGE_EXTERNAL_CONTENT\
    \ | Contains external content tags |\r\n| ERROR_TRANSACTIONAL_MESSAGE_SYSTEM_LINK\
    \ | Contains system link tags |\r\n\n# Parameters\r\n## Route Parameters\r\n\r\
    \nResource identifiers are specified in the route. For example, in the route `/Resource/{resourceId}`,\
    \ `resourceId` is a route parameter. In this example, if you wish to interact\
    \ with Resource #123, its route would be `/Resource/123`.\r\n\r\n## Query Parameters\r\
    \n\r\nSome routes support additional query parameters; for example, some resources\
    \ support query parameters relating to paging. Supported query parameters are\
    \ described in their respective documentation areas.\r\n\r\n## Request Body\r\n\
    \r\nRequest bodies are required for most `POST` and `PUT` requests. Please use\
    \ a `Content-Type` of `application/json` and provide a JSON object in your request\
    \ body.\n"
  x-logo:
    url: /Email/Resources/Images/Logo.png
paths:
  /v1/List/{listId}/Campaign:
    get:
      operationId: Campaign_GetCampaignCollection
      summary: Get all Campaigns
      description: Returns the campaigns associated with the specified list.
      tags:
      - Campaign
      parameters:
      - name: listId
        in: path
        description: Identifier used to locate the list.
        required: true
        format: int32
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/definitions/Collection[Campaign]'
        '400':
          description: BadRequest
          content:
            application/json:
              schema:
                $ref: '#/definitions/Error'
        '404':
          description: NotFound
          content:
            application/json:
              schema:
                $ref: '#/definitions/Error'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/definitions/Error'
      security:
      - OAuth 2:
        - List
        - Message
    post:
      operationId: Campaign_PostCampaignResource
      summary: Create a Campaign
      description: Creates a new campaign on the specified list.
      tags:
      - Campaign
      parameters:
      - name: listId
        in: path
        description: Identifier used to locate the list.
        required: true
        format: int32
        schema:
          type: integer
          format: int32
      responses:
        '400':
          description: BadRequest
          content:
            application/json:
              schema:
                $ref: '#/definitions/Error'
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/definitions/ResourceCreated'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/definitions/Error'
        '404':
          description: NotFound
          content:
            application/json:
              schema:
                $ref: '#/definitions/Error'
      security:
      - OAuth 2:
        - List
        - Message
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/definitions/Campaign'
  /v1/List/{listId}/Campaign/{campaignId}:
    get:
      operationId: Campaign_GetCampaignResource
      summary: Get a Campaign
      description: Returns the specified campaign on the specified list.
      tags:
      - Campaign
      parameters:
      - name: listId
        in: path
        description: Identifier used to locate the list.
        required: true
        format: int32
        schema:
          type: integer
          format: int32
      - name: campaignId
        in: path
        description: Identifier used to locate the campaign.
        required: true
        format: int32
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/definitions/Resource[Campaign]'
        '400':
          description: BadRequest
          content:
            application/json:
              schema:
                $ref: '#/definitions/Error'
        '404':
          description: NotFound
          content:
            application/json:
              schema:
                $ref: '#/definitions/Error'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/definitions/Error'
      security:
      - OAuth 2:
        - List
        - Message
    put:
      operationId: Campaign_PutCampaignResource
      summary: Update a Campaign
      description: Updates an existing campaign.
      tags:
      - Campaign
      parameters:
      - name: listId
        in: path
        description: Identifier used to locate the list.
        required: true
        format: int32
        schema:
          type: integer
          format: int32
      - name: campaignId
        in: path
        description: Identifier used to locate the campaign.
        required: true
        format: int32
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/definitions/ResourceUpdated'
        '400':
          description: BadRequest
          content:
            application/json:
              schema:
                $ref: '#/definitions/Error'
        '404':
          description: NotFound
          content:
            application/json:
              schema:
                $ref: '#/definitions/Error'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/definitions/Error'
      security:
      - OAuth 2:
        - List
        - Message
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/definitions/Campaign'
    delete:
      operationId: Campaign_DeleteCampaignResource
      summary: Delete a Campaign
      description: Deletes the specified campaign.
      tags:
      - Campaign
      parameters:
      - name: listId
        in: path
        description: Identifier used to locate the list.
        required: true
        format: int32
        schema:
          type: integer
          format: int32
      - name: campaignId
        in: path
        description: Identifier used to locate the campaign.
        required: true
        format: int32
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/definitions/ResourceDeleted'
        '400':
          description: BadRequest
          content:
            application/json:
              schema:
                $ref: '#/definitions/Error'
        '404':
          description: NotFound
          content:
            application/json:
              schema:
                $ref: '#/definitions/Error'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/definitions/Error'
      security:
      - OAuth 2:
        - List
        - Message
  /v1/List/{listId}/Contact:
    get:
      operationId: Contact_GetContactCollection
      summary: Get all Contacts
      description: Returns the collection of contacts associated with the specified
        list.
      tags:
      - Contact
      parameters:
      - name: listId
        in: path
        description: Identifier used to locate the list.
        required: true
        format: int32
        schema:
          type: integer
          format: int32
      - name: subscriptionState
        in: query
        description: Identifier used to specify subscription state of the contacts
          to retrieve. Allowed values are `Subscribed` and `Unsubscribed`. The default
          value is `Subscribed`.
        required: false
        schema:
          type: string
      - name: externalContactId
        in: query
        description: External contact ID provided by the client. If provided, only
          returns contacts with a matching external contact ID.
        required: false
        schema:
          type: string
      - name: segmentationFieldIds
        in: query
        description: Comma-separated list of profile field IDs to retrieve. Up to
          30 fields may be included.
        required: false
        schema:
          type: string
      - name: cursor
        in: query
        description: Value indicating the page of data that's being retrieved. The
          default value is `Start`.
        required: false
        schema:
          type: string
      - name: count
        in: query
        description: Number of data members to be displayed per page. The default
          value is `1000` and the maximum value is `5000`.
        required: false
        schema:
          type: string
      - name: startDate
        in: query
        description: Inclusive start date that's being used to filter the data members.
          This applies to subscribe date when retrieving subscribed contacts. Applies
          to unsubscribe date when retrieving unsubscribed contacts.
        required: false
        schema:
          type: string
      - name: endDate
        in: query
        description: Inclusive (exclusive when `useOriginalSubscribeDate` is `false`)
          end date that's being used to filter the data members. This applies to subscribe
          date when retrieving subscribed contacts. Applies to unsubscribe date when
          retrieving unsubscribed contacts.
        required: false
        schema:
          type: string
      - name: useOriginalSubscribeDate
        in: query
        description: Whether the `startDate` and `endDate` use the contact's original
          subscribe date or the contact's most recent subscribe date. Only applies
          when `subscriptionState` is `Subscribed`. The default value is `true`.
        required: false
        schema:
          type: boolean
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/definitions/CollectionPaged[Contact]'
        '400':
          description: BadRequest
          content:
            application/json:
              schema:
                $ref: '#/definitions/Error'
        '404':
          description: NotFound
          content:
            application/json:
              schema:
                $ref: '#/definitions/Error'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/definitions/Error'
      security:
      - OAuth 2: []
    post:
      operationId: Contact_PostContactResource
      summary: Create or update a Contact
      description: Creates or updates a contact on the specified list.
      tags:
      - Contact
      parameters:
      - name: listId
        in: path
        description: Identifier used to locate the list.
        required: true
        format: int32
        schema:
          type: integer
          format: int32
      - name: eventIds
        in: query
        description: Comma-separated list of event identifiers that should be raised
          after the contact is created or updated.
        required: false
        schema:
          type: string
      - name: overrideUnsubscribe
        in: query
        description: Whether a contact in an unsubscribed state should be forced to
          a subscribed state. The default value is `false`.
        required: false
        schema:
          type: boolean
      - name: subscribedByContact
        in: query
        description: Whether the subscribe was initiated by the contact. The default
          value is `false`.
        required: false
        schema:
          type: boolean
      - name: sendDoubleOptIn
        in: query
        description: Whether a double opt-in email should be sent if a new contact
          is being created. The default value is `false`.
        required: false
        schema:
          type: boolean
      - name: updateType
        in: query
        description: If updating an existing contact, the type of update that will
          be performed on any submitted profile fields. Allowed values are `Update`,
          `Append`, and `Overwrite`. The default value is `Update`.
        required: false
        schema:
          type: string
      - name: newEmailAddress
        in: query
        description: If updating an existing contact, the contact's email address
          will be changed to this value. Provide the original email address in the
          `emailAddress` body field to select the existing contact.
        required: false
        schema:
          type: string
      responses:
        '400':
          description: BadRequest
          content:
            application/json:
              schema:
                $ref: '#/definitions/Error'
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/definitions/ResourceCreated'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/definitions/Error'
        '404':
          description: NotFound
          content:
            application/json:
              schema:
                $ref: '#/definitions/Error'
      security:
      - OAuth 2: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/definitions/Contact'
  /v1/List/{listId}/Contact/{contactIdentifier}:
    get:
      operationId: Contact_GetContactResourceByIdentifier
      summary: Get a Contact
      description: Returns a contact by email address or by Listrak email key.
      tags:
      - Contact
      parameters:
      - name: listId
        in: path
        description: Identifier used to locate the list.
        required: true
        format: int32
        schema:
          type: integer
          format: int32
      - name: contactIdentifier
        in: path
        description: Identifier used to locate the contact. You may specify either
          an email address or a Listrak email key.
        required: true
        schema:
          type: string
      - name: segmentationFieldIds
        in: query
        description: Comma-separated list of profile field IDs to retrieve. Up to
          30 fields may be included.
        required: false
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/definitions/Resource[Contact]'
        '400':
          description: BadRequest
          content:
            application/json:
              schema:
                $ref: '#/definitions/Error'
        '404':
          description: NotFound
          content:
            application/json:
              schema:
                $ref: '#/definitions/Error'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/definitions/Error'
      security:
      - OAuth 2: []
  /v1/List/{listId}/Contact/SegmentationField:
    post:
      operationId: ContactSegmentationField_PostContactSegmentationFieldValuesResource
      summary: Start a list import to update one or more contact profile fields
      description: This route is in Beta and not yet generally available for all integrations.
        One or more list imports will be started to update the specified contact profile
        fields on the specified list.
      tags:
      - ContactSegmentationField
      parameters:
      - name: listId
        in: path
        description: Identifier used to locate the list.
        required: true
        format: int32
        schema:
          type: integer
          format: int32
      responses:
        '400':
          description: BadRequest
          content:
            application/json:
              schema:
                $ref: '#/definitions/Error'
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/definitions/ResourceCreated'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/definitions/Error'
        '404':
          description: NotFound
          content:
            application/json:
              schema:
                $ref: '#/definitions/Error'
      security:
      - OAuth 2: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/definitions/ContactSegmentationFieldValues'
  /v1/Content:
    get:
      operationId: Content_GetContentCollection
      summary: Get all Content
      description: Returns the collection of content blocks associated with the account.
      tags:
      - Content
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/definitions/Collection[Content]'
        '400':
          description: BadRequest
          content:
            application/json:
              schema:
                $ref: '#/definitions/Error'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/definitions/Error'
      security:
      - OAuth 2:
        - Message
    post:
      operationId: Content_PostCreateContent
      summary: Create Content
      description: Creates a new content block in the content library.
      tags:
      - Content
      responses:
        '400':
          description: BadRequest
          content:
            application/json:
              schema:
                $ref: '#/definitions/Error'
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/definitions/ResourceCreated'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/definitions/Error'
      security:
      - OAuth 2:
        - Message
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/definitions/ContentCreate'
  /v1/Content/{contentId}:
    get:
      operationId: Content_GetContentResource
      summary: Get a Content
      description: Returns the specified content block.
      tags:
      - Content
      parameters:
      - name: contentId
        in: path
        description: Identifier used to locate the content.
        required: true
        format: int32
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/definitions/Resource[Content]'
        '400':
          description: BadRequest
          content:
            application/json:
              schema:
                $ref: '#/definitions/Error'
        '404':
          description: NotFound
          content:
            application/json:
              schema:
                $ref: '#/definitions/Error'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/definitions/Error'
      security:
      - OAuth 2:
        - Message
    put:
      operationId: Content_PutUpdateContent
      summary: Update a Content
      description: Updates an existing content block. Content used in a live dynamic
        content block cannot be modified.
      tags:
      - Content
      parameters:
      - name: contentId
        in: path
        description: Identifier used to locate the content.
        required: true
        format: int32
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/definitions/Resource[Content]'
        '400':
          description: BadRequest
          content:
            application/json:
              schema:
                $ref: '#/definitions/Error'
        '404':
          description: NotFound
          content:
            application/json:
              schema:
                $ref: '#/definitions/Error'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/definitions/Error'
      security:
      - OAuth 2:
        - Message
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/definitions/ContentUpdate'
  /v1/ContentFolder:
    get:
      operationId: ContentFolder_GetContentFolderCollection
      summary: Get all Content Folders
      description: Returns the collection of content library folders associated with
        the account.
      tags:
      - ContentFolder
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/definitions/Collection[ContentFolder]'
        '400':
          description: BadRequest
          content:
            application/json:
              schema:
                $ref: '#/definitions/Error'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/definitions/Error'
      security:
      - OAuth 2:
        - Message
  /v1/List/{listId}/Conversation:
    get:
      operationId: Conversation_GetConversationCollection
      summary: Get all Conversations
      description: Returns the collection of conversations associated with the specified
        list.
      tags:
      - Conversation
      parameters:
      - name: listId
        in: path
        description: Identifier used to locate the list.
        required: true
        format: int32
        schema:
          type: integer
          format: int32
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/definitions/Collection[Conversation]'
        '400':
          description: BadRequest
          content:
            application/json:
              schema:
                $ref: '#/definitions/Error'
        '404':
          description: NotFound
          content:
            application/json:
              schema:
                $ref: '#/definitions/Error'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/definitions/Error'
      security:
      - OAuth 2:
        - List
  /v1/List/{listId}/

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