> ## Documentation Index
> Fetch the complete documentation index at: https://developers.hubspot.jp/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# View subscriptions timeline for a portal

> For a given portal, return a time-ordered list of subscription changes. Timeline items will be returned in reverse-chronological order.

export const ScopesList = ({scopes = [], description = "この API には、次のいずれかのスコープが必要です。"}) => {
  if (!scopes || scopes.length === 0) {
    return null;
  }
  const sortedScopes = scopes.sort((a, b) => a.localeCompare(b));
  return <div>
      <div className="text-sm mb-2">{description}</div>
      <div>
        {sortedScopes.map((scope, index) => <div key={index}>
            <code>
              <span className="text-xs">{scope}</span>
            </code>
          </div>)}
      </div>
    </div>;
};

<Accordion title="Scope requirements">
  <ScopesList scopes={['content']} />
</Accordion>


## OpenAPI

````yaml specs/legacy/v1/marketing-subscriptions-v1.json GET /email/public/v1/subscriptions/timeline
openapi: 3.0.0
info:
  title: Subscriptions preferences API - V1
  version: 1.0.0
  description: >-
    The subscription preferences APIs allow you to retrieve and manage data on
    the communications that a contact has opted into.
servers:
  - url: https://api.hubapi.com
    description: HubSpot API Server
security: []
paths:
  /email/public/v1/subscriptions/timeline:
    get:
      summary: View subscriptions timeline for a portal
      description: >-
        For a given portal, return a time-ordered list of subscription changes.
        Timeline items will be returned in reverse-chronological order. Query
        parameters offset and limit are used to paginate results.
      operationId: getSubscriptionsTimeline
      parameters:
        - name: changeType
          in: query
          required: false
          description: Only return timeline changes of the specified type (case-sensitive).
          schema:
            type: string
        - name: startTimestamp
          in: query
          required: false
          description: >-
            Only return timeline items which occurred at or after the given
            timestamp (in milliseconds since epoch).
          schema:
            type: integer
            format: int64
        - name: endTimestamp
          in: query
          required: false
          description: >-
            Only return timeline items which occurred at or before the given
            timestamp (in milliseconds since epoch).
          schema:
            type: integer
            format: int64
        - name: includeSnapshots
          in: query
          required: false
          description: >-
            Include the user's full subscription snapshot with each timeline
            item.
          schema:
            type: boolean
        - name: offset
          in: query
          required: false
          description: An offset token returned by a previous call to this endpoint.
          schema:
            type: string
        - name: limit
          in: query
          required: false
          description: >-
            The maximum number of timeline items to return. If omitted, the
            default value of 10 is used. The maximum allowed value is 1000.
          schema:
            type: integer
            minimum: 1
            maximum: 1000
            default: 10
      responses:
        '200':
          description: Subscriptions timeline retrieved successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TimelineResponse'
              example:
                hasMore: true
                offset: CK_PuKu3KBXr8LqG
                timeline:
                  - timestamp: 1401975207000
                    portalId: 62515
                    recipient: 6d4b537e-c5ac-11e3-a673-00262df65d03@some.email.com
                    changes:
                      - change: BOUNCED
                        source: SOURCE_NON_DELIVERY_REPORT
                        portalId: 62515
                        changeType: PORTAL_BOUNCE
                        causedByEvent:
                          id: 6d72d39c-87da-3ced-bfdf-5f0213363827
                          created: 1401975207000
                  - timestamp: 1400255007763
                    portalId: 62515
                    recipient: tim@opas.com
                    changes:
                      - change: SUBSCRIBED
                        source: SOURCE_RECIPIENT
                        portalId: 62515
                        subscriptionId: 2849
                        changeType: SUBSCRIPTION_STATUS
                        causedByEvent:
                          id: 0d813e2c-ce7f-4510-9250-839cd08c967a
                          created: 1400255007763
                      - change: SUBSCRIBED
                        source: SOURCE_RECIPIENT
                        portalId: 62515
                        subscriptionId: 230318
                        changeType: SUBSCRIPTION_STATUS
                        causedByEvent:
                          id: 0d813e2c-ce7f-4510-9250-839cd08c967a
                          created: 1400255007763
                      - change: SUBSCRIBED
                        source: SOURCE_RECIPIENT
                        portalId: 62515
                        changeType: PORTAL_STATUS
                        causedByEvent:
                          id: 0d813e2c-ce7f-4510-9250-839cd08c967a
                          created: 1400255007763
                  - timestamp: 1399053958000
                    portalId: 62515
                    recipient: testemail+535fe913a51ff@emailtest.com
                    changes:
                      - change: BOUNCED
                        source: SOURCE_NON_DELIVERY_REPORT
                        portalId: 62515
                        changeType: PORTAL_BOUNCE
                        causedByEvent:
                          id: cf568063-f12f-3a94-9c02-faccdc5f9bad
                          created: 1399053958000
        default:
          description: Error response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  schemas:
    TimelineResponse:
      type: object
      properties:
        hasMore:
          type: boolean
          description: Whether there are more timeline items available
        offset:
          type: string
          description: Offset token for pagination
        timeline:
          type: array
          items:
            $ref: '#/components/schemas/TimelineItem'
    Error:
      type: object
      properties:
        status:
          type: string
          description: HTTP status code
        message:
          type: string
          description: Error message
        correlationId:
          type: string
          description: Request correlation ID for debugging
    TimelineItem:
      type: object
      properties:
        timestamp:
          type: integer
          format: int64
          description: Timestamp of the change in milliseconds since epoch
        portalId:
          type: integer
          description: The portal ID
        recipient:
          type: string
          format: email
          description: Email address of the recipient
        changes:
          type: array
          items:
            $ref: '#/components/schemas/SubscriptionChange'
    SubscriptionChange:
      type: object
      properties:
        change:
          type: string
          description: Type of change (e.g., SUBSCRIBED, UNSUBSCRIBED, BOUNCED)
        source:
          type: string
          description: Source of the change
        portalId:
          type: integer
          description: The portal ID
        subscriptionId:
          type: integer
          description: ID of the affected subscription
        changeType:
          type: string
          description: Type of the change
        causedByEvent:
          $ref: '#/components/schemas/CausedByEvent'
    CausedByEvent:
      type: object
      properties:
        id:
          type: string
          description: Event ID that caused the change
        created:
          type: integer
          format: int64
          description: Timestamp when the event was created

````