Skip to content

SubscriptionItem is different for Tableau Cloud/on-prem: currently only works for Cloud #1627

Open

Description

@kareltv

Describe the bug
When retrieving subscriptions using the TSC API on Tableau Online (Tableau Cloud), the SubscriptionItem.schedule_id field is always None, even for active subscriptions that were created with a valid schedule. This makes it impossible to update these subscriptions (e.g. suspend them), as the schedule ID is required for the update call.

Versions
Tableau: Tableau Online (Cloud)

Python: Python 3.11.10

TSC library: 0.38

To Reproduce

import tableauserverclient as TSC

tableau_auth = TSC.PersonalAccessTokenAuth(
    token_name=TOKEN_NAME,
    personal_access_token=TOKEN_SECRET,
    site_id=SITE_ID
)
server = TSC.Server(SERVER_URL, use_server_version=True)

with server.auth.sign_in(tableau_auth):
    all_subscriptions, pagination_item = server.subscriptions.get()
    for subscription in all_subscriptions:
        print(
            f"Subscription ID: {subscription.id}, "
            f"Name: {subscription.subject}, "
            f"Suspended: {subscription.suspended}, "
            f"Schedule ID: {subscription.schedule_id}, "  # Always None
            f"User ID: {subscription.user_id}"
        )

Outputs:

Subscription ID: abc, Name: test test, suspended: False, Schedule ID: None, user ID: abc

Results
Even though the subscription is active and was created using a valid schedule, the subscription.schedule_id is always None. This causes server.subscriptions.update(subscription) to fail with the following error:

404023: Resource Not Found
Schedule 'null' could not be found.

Activity

  1. jorwoods commented on Jun 25, 2025

    @jorwoods
    Contributor

    The issue is that currently Tableau Online does not have ids for subscription schedule objects as you have noted, and the update request payload inside TSC is explicitly formatted for Tableau Server, not Online.

    if subscription_item.schedule_id is not None:

    This will require some testing of the various Intervals that Online can support. I also view it as related to #1592 since the payloads differ for Server and Cloud.

  2. kareltv commented on Jun 25, 2025

    @kareltv
    Author

    So if I understand this correctly, the only way I could now call subscription.update() for subscription in Tableau Online without changing it's schedule is to keep track of the schedule interval name (for example in the subject of the subscription) and match it with the schedule.id from result of server.schedules.get() and use this schedule.id in the subscription.update()?

  3. jorwoods commented on Jun 25, 2025

    @jorwoods
    Contributor

    No. Subscriptions are not tied to schedule "id"s on cloud the way they are on server. The schedule and its intervals are properties of the subscription instead of a separate element the subscription is linked to.

    For now, it looks to me like the subscriptions.update method is non-functional for cloud until we can change how the request payload gets generated which may take some time to work through.

  4. added
    cloudFunctionality specific to Tableau Cloud
    on Jan 16, 2026
  5. changed the title [-]SubscriptionItem.schedule_id is None after creation in Tableau Cloud[/-] [+]SubscriptionItem is different for Tableau Cloud/on-prem: currently only works for Cloud[/+] on Feb 11, 2026
  6. added
    gapA gap in the library for existing server functionality
    and removed on Feb 11, 2026
  7. github-actions commented on Aug 18, 2026

    @github-actions

    This issue has been automatically marked as stale because it has not had recent activity. It will be closed in 14 days if no further activity occurs. If this is still relevant, please comment to keep it open.

  8. jacalata commented on Aug 25, 2026

    @jacalata
    Contributor

    Rechecked — still broken on Cloud. SubscriptionRequest.update_req (tableauserverclient/server/request_factory.py:1355-1381) still only emits <schedule id=...> and has no branch for the Cloud-shape payload (schedule/frequency/intervals embedded on the subscription), so subscriptions.update continues to 404023 on Tableau Cloud. This needs the request builder split by deployment shape (related to #1592).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Server-Side EnhancementcloudFunctionality specific to Tableau CloudgapA gap in the library for existing server functionalityin-progressIssues that are in-progress of being fixed

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions