【Alteryx One】AlteryxCloudのAPIについて

Alteryx OneのAlteryx CloudのAPIについてご紹介します

AkimasaKajitaniです。今回はAlteryxOneのAlteryx One PlatformのAPIについてご紹介していきたいと思います。

 

Alteryx Cloud(Alteryx One)のAPI概要

SaaSシステムにおいて、APIは運用の自動化や他システムとの連携などを行うための重要な機能となります。

 

2026年2月4日時点では、AlteryxのCloudAPIは主に5種類のカテゴリで構成されています。

  • Billing・・・請求やアカウント管理について
  • Identity and Access Management(IAM)・・・ユーザー管理に関わるAPI
  • Plans・・・PLANsに関わるAPI
  • Scheduling・・・スケジュールに関わるAPI
  • Trifacta Classic・・・Trifacta用API(レガシー製品の互換用)

これ以外に、認証に関わるAPIもあります。認証のAPIはドキュメントに記載がないので、コミュニティのナレッジベース を参照する必要があります。

 

Cloud API利用の流れ

とりあえずAPIを試してみたい&ドキュメントを見たい

まずは一度APIを使ってみたい、という場合は、Alteryx Cloud Platformの右上の「?」メニューの中にある「Alteryx API」から試すことができます。

 

このAPIのテスト環境はドキュメントも兼ねています。

 

本格的にAPIを使いたい

ざっくりとしたCloud API利用の流れは以下のとおりです。

  1. アクセストークン、リフレッシュトークンをAlteryx Cloudで生成
  2. 実際のAPIを利用する
    1. 認証を行う(AccessTokenの取得)
    2. Refresh_tokenを更新(次回の認証はこのrefresh_tokenを使う)
    3. 各エンドポイントのAPIを利用する

※2-bを行うのがポイントです。2-bを行わないとAlteryxCloudで生成したトークンが無効になります。

 

アクセストークン、リフレッシュトークンの取得について

アクセストークン、リフレッシュトークンの取得は、Alteryx Oneのユーザー設定から行います。

まずは、ユーザー設定の画面に行きましょう。右上のアイコンから「User Preferences」を開きます。

以下の画面で、「OAuth2.0 APIトークン」タブを選択します。

 

ここで、青い「生成」ボタンをクリックします。適当に名前をつけて、有効期間を入力し、有効期限を設定してください。

 

最後に、生成ボタンをクリックします。

 

ここで、それぞれコピーボタンをクリックすると、アクセストークン、リフレッシュトークンが入手可能です。

さらに、クライアントIDとトークンエンドポイントURLをメモしておきます(一度トークンを作らないと表示されません)。

 

 

なお、クラウドの配置場所がオーストラリアの場合は以下のようになります。

トークンエンドポイントURL:https://pingauth-au1.alteryxcloud.com/as

Refresh Endpoint URL:https://pingauth-au1.alteryxcloud.com/as/token

※トークンエンドポイントURLにtokenをつける(ハマりポイント)

 

認証について

認証系は結構癖があります。

認証を行うためには、AlteryxCloudにてアクセストークン・リフレッシュトークンを事前に取得する必要があります。アクセストークンは発行して5分すると期限切れになります。そのため、リフレッシュトークンを用いてアクセストークンを都度発行する必要があります。リフレッシュトークンは、Alteryx Cloudで作成した時に期限を自分で決めることが可能です(最大365日)。また、リフレッシュトークンを使ってアクセストークンを取得すると、使用したリフレッシュトークンが無効になるのが要注意ポイントです。次回使用するリフレッシュトークンをどこから調達するのか、ということですが、アクセストークン更新時に一緒に取得できるので、このリフレッシュトークンを保管しておいて、また次回使うという必要があります。

このような性質を持っているため、都度アクセストークン、リフレッシュトークンは随時更新をかけていく必要があります。

つまり、以下のような形で動きます。

常に、リフレッシュトークンは更新された新しいものを使う必要がある、ということになります。そのため、固定的にしかトークンを保持できないツールやシステムからAlteryx OneのAPIを使うのは難しい、ということになります。

 

APIを使う上で知っておくべきこと

ドキュメントが説明不足なのでわかりにくいところが多々としてあるのですが、以下は知っておいたほうがスムーズな内容です。

  • ワークスペースID

/iam/v1/workspaces/current で現在のワークスペースのIDを取得可能

  • 各ユーザーのID

/iam/v1/workspaces/{id}/people で{id}で指定したワークスペース所属のメンバーリストを取得可能(つまり、ワークスペースのIDを知っておく必要があります)

  • 各ユーザーの詳細情報

/iam/v1/people/{id} 各ユーザーのIDはpersonID

  • ユーザー削除するとどうなるか?

接続、データセット、OAuth2.0トークンはすべて削除されます。作成したアセット(ワークフローなど)は所有者不明となります。UIからユーザーを削除した場合は、他のユーザーへ移し替えることを促されますが、APIの場合は問答無用なので気をつけましょう。実際以下のようになってしまいます。

ですので、ユーザーを削除する際は、各アセットをtransferエンドポイントで所有権を他の人に移してから削除してください。

 

なお、ワークフローなどは所有権の移転が可能に見えますが、メニューから所有権の移転をしてもできません。また、データセットは所有権の移転はできません。

ワークフローの場合:

データセットの場合:

※データセット自体は項目としては残っているようですが、共有しようとすると見つからないと出るので、実質削除されている可能性が高いです

※UIから削除する際は、所有権の移転を行ってから削除されるフローになっていますが、APIでは直接削除が可能なのでご注意ください。

 

トークン更新コード

以下コードでトークンの更新が可能です。事前にjson(ファイル名:credential.json)に取得したトークンを書き込んでおく必要があります。

 

credential.json:

{
  "access_token": "",
  "refresh_token": ""
}

 

以下が実際のコードです。


import urllib.parse
import urllib.request
import json

# ============= 使い方 =============================================
# 外部JSONファイルにCloudで取得したOAuth2.0 APIトークンのアクセストークン、リフレッシュトークンを貼り付けて保存

# 設定
# ★環境に合わせて要変更★(Cloudの[ユーザー設定]-[OAuth 2.0 APIトークン]から取得)
REFRESH_URL = "https://pingauth-au1.alteryxcloud.com/as/token"
OAUTH_CLIENT_ID = "" # 実際のOAUTH CLIENT IDを入力してください
# 固定値
JSON_FILE_PATH = "credential.json"

# ============= 関数 =============================================
# JSONファイルの読み込み
def read_tokens(json_file):
    try:
        with open(json_file, 'r', encoding='utf-8') as f:
            data = json.load(f)
            access_token = data.get('access_token')
            refresh_token = data.get('refresh_token')
            return access_token, refresh_token
    except FileNotFoundError:
        print(f"{json_file}が見つかりません")
        return None, None
    except json.JSONDecodeError:
        print("JSONの読み込みに失敗しました")
        return None, None

# JSONファイルへのトークンの書き込み
def write_tokens(json_file, access_token, refresh_token):
    data = {
        'access_token': access_token,
        'refresh_token': refresh_token
    }
    with open(json_file, 'w', encoding='utf-8') as f:
        json.dump(data, f, ensure_ascii=False, indent=2)
    print("トークンを保存しました")

# トークンの更新
def refresh_tokens(refresh_token):
  headers = {
    "Content-Type": "application/x-www-form-urlencoded"
  }
  body = {
    'grant_type': 'refresh_token',
    'refresh_token': refresh_token,
    'client_id': OAUTH_CLIENT_ID
  }
 
  # URL encode the body for the refresh request
  encoded_body = urllib.parse.urlencode(body).encode()

  # Make the refresh request
  request = urllib.request.Request(REFRESH_URL, data=encoded_body, method='POST')
  with urllib.request.urlopen(request) as response:
    return json.load(response)

# ============= メイン =============================================
# アクセストークン更新
access_token_json, refresh_token_json = read_tokens(JSON_FILE_PATH)

new_tokens = refresh_tokens(refresh_token_json)
# 更新されたトークンを保存
write_tokens(JSON_FILE_PATH,new_tokens['access_token'],new_tokens['refresh_token'])

#print("New Access Token:", new_tokens['access_token'])
#print("New Refresh Token:", new_tokens['refresh_token'])


 

上のコードのあとに、実際のAPIの呼び出しコードを書いていきます。例えば、以下のような現在のワークスペースの情報を取得するようなことが可能です。

 

def get_current_workspace(aac_url, access_token):
    headers = {
        'Authorization': f'Bearer {access_token}',
        'User-Agent': USER_AGENT,
    }
    print(headers)
    request = urllib.request.Request(f'{aac_url}/iam/v1/workspaces/current', headers=headers)
    with urllib.request.urlopen(request) as response:
        return json.load(response)

 

ユースケース

ワークスペースIDの取得

GET /billing/v1/my/billing-accounts/current

https://api-docs.au1.alteryxcloud.com/docs/managed-billing-v1/1/routes/billing/v1/my/billing-accounts/current/get

のworkspacesという項目にリスト形式で格納されます。

ただし、どのワークスペースIDがなんという名称なのかを取得する方法がなさそうですので、各ワークスペースでOAuth2.0 APIトークンを取って「/iam/v1/workspaces/current」を使って現在のワークスペース情報を取得して確認するしかありません。

 

ロールの一括割当

PUT /iam/v1/authorization/roles/{id}/people

https://api-docs.au1.alteryxcloud.com/docs/managed-iam-v1/1/routes/iam/v1/authorization/roles/{id}/people/put

リクエストパラメータの{id}は、各ロールのpolicyIdです。PolicyIdは、ワークスペースによって異なるため、誰かに全部割り当ててPolicyIdをGET /iam/v1/people/{id}を使って取得するのが早いかもしれません。

Request Bodyは、割り当てたいユーザーのIDをカンマ区切りで指定します。

 

ロールの一括解除

ロールの解除は一括ではできないため、以下のエンドポイントで一つずつ実行する必要があるようです。

DELETE /iam/v1/authorization/roles/{id}/people/{subjectId}

id=各ロールのpolicyId

subjectId=ユーザーのpersonId

 

注意事項

  • BaseURLがクラウド環境のあるリージョンごとに異なるので、間違えるとアクセストークンが取れていてもHTTP Error 401: Unauthorizedとなります。

 

 

各カテゴリのエンドポイントについて

以下は各カテゴリのエンドポイントのリストになります。あまりリアルタイムで更新できないと思いますので、なるべく最新のドキュメントを見るようにしてください。

Billing

Lv1 Lv2 Method 説明 必要ロール
/billing/v1 /my/billing-accounts/current GET 認証済みユーザーの現在の認証コンテキストにおける請求先アカウントを取得する
/usage/export GET 集計使用状況の取得 このAPIを使用するには、次のいずれかのロールが必要です: アカウント管理者 アカウント管理者

 

Identity and Access Management(IAM)

Lv1 Lv2 Lv3 Lv4 Lv5 Method 説明 必要ロール
/iam/v1 /authorization/roles/{id}/people PUT 複数のユーザーにロールを割り当てる ワークスペース管理者
/{subjectId} DELETE ある特定のユーザーからロールを削除する ワークスペース管理者
/people/{id} GET 既存のユーザーの詳細情報を取得する
/workspaces /{id} /configuration GET ワークスペースの設定を取得する
/invitationLink GET ある特定のユーザーの招待リンクを取得する
/people GET 指定されたワークスペースのユーザーを一覧表示する
/{personId} DELETE ワークスペースからユーザーを削除する。
/batch POST ワークスペースにユーザーを一括招待する。
PATCH 指定されたワークスペースにユーザーを再度招待します。
/suspend POST 指定されたワークスペースのユーザーを停止します。
/unsuspend POST 指定されたワークスペースのユーザーの停止を解除します。
/transfer PATCH Alteryx One アセットをワークスペース内の別のユーザーに譲渡します。
/{workspaceId}/admins GET 指定されたワークスペースの管理者を一覧表示する
/current GET 現在のワークスペースに関する情報を取得する

 

Plans

Lv1 Lv2 Lv3 Lv4 Lv5 Method 説明
/plans/v1 /planEdges POST planId と追加のパラメータを指定して、新しいPLANエッジを作成する
/planNodes POST planId と追加のパラメータを指定して、新しいPLANノードを作成する
/{id} DELETE 特定のPLANノードを削除
/runParameters GET PLANノードの実行パラメータのリストを取得する。
/planOverrides POST planNodeId と追加のパラメータを指定して、新しいPLANオーバーライドを作成する
/{id} PUT 特定のプランのオーバーライド構成を更新する
/plans GET クエリ パラメータを使用して結果をフィルター処理し、既存のすべてのプランとその詳細を取得する
POST プランの名前とその他のオプション パラメータを定義して、新しいプランを作成する
/{id} PATCH 名前や説明など、特定のプランのプロパティを更新する
DELETE 特定のプランを削除し、それに関連付けられたスケジュールも削除する
/full GET すべてのノード、タスク、エッジを含む完全なプランを取得する
/package GET 指定されたプランの定義を含むパッケージを取得する。
/permissions GET プランを共有しているユーザーのリストを取得する。
POST 他のユーザーとプランを共有し、特定のロールとポリシーを割り当てる。
/{subjectId} DELETE 特定のプランから権限を削除する
/run POST 特定のプランを実行する。必要に応じて新しいスナップショットが作成される。
/runParameters GET 特定のプランの実行パラメータのリストを、プランノードごとにグループ化して取得する。
/schedules GET 特定のプランに設定されているすべてのスケジュールを取得する。
/count GET 指定されたクエリ パラメータに基づいて、既存のプランの合計数を取得する
/package POST 提供されたパッケージからプランと関連フローをインポートする。

 

Scheduling

Lv1 Lv2 Lv3 Lv4 Method 説明
/scheduling/v1 /schedules GET 現在のユーザーが所有する詳細とともにスケジュールのリストを管理および取得する
POST スケジュールの名前、トリガー、タスクを定義して、新しいスケジュールを作成する
/{id} GET 特定のスケジュールの詳細を取得する
PUT 特定のスケジュールの詳細を更新する
DELETE 特定のスケジュールを削除する
/disable POST 特定のスケジュールを無効にする
/enable POST 現在無効になっているスケジュールを有効にする
/count GET 現在のユーザーが所有するスケジュールの合計数を取得する

 

Trifacta Classic

レガシープロダクトのため今回は省略します

 

 

参考

Alteryx社が公開しているサンプルコード

 

本ブログの筆者が個人的に公開しているサンプルコード。一部はライブラリ化しています。

ユーザーのリスト取得などのサンプルコードがあるので、そのままお使いいただけます。

 

※2026/02/04時点の情報です

 

おすすめの記事