View a markdown version of this page

購入者として契約 API を使用する - AWS Marketplace

AWS Marketplace API リファレンスが再構築されました。サポートされている API オペレーションの詳細については、AWS Marketplace API リファレンスを参照してください。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

購入者として契約 API を使用する

契約は、提案者とアクセプタ (通常は購入者) を含む 2 つの当事者を拘束し、両者間で適用される条件を定義するドキュメントです。

購入者は、見積りを生成する AgreementRequest を作成します。この見積りには、購入者の購入決定に不可欠な、契約期間中に発生する推定請求額など、すべての関連情報が含まれます。購入者が見積りに満足している場合は、有効期限が切れる前に AgreementRequest を受け入れることができます。契約は、 AgreementRequest の承諾時に作成されます。このプロセス中、購入者管理者または購入者ペルソナは発注書を請求に関連付けることができます。最後に、有効な契約の条項に基づいて、購入者に請求され、製品を使用するライセンスが付与されます。

前提条件: 製品とオファーを確認する

契約を作成する前に、 AWS Marketplace Discovery API を使用して製品を検出し、 の構築に必要な agreementProposalIdpricingModel、および用語の詳細を取得しますCreateAgreementRequest

Step Discovery API アクション Output 次の用途に使用されます。
1 ListPurchaseOptions offerId 製品の利用可能なオファーの検索
2 GetOffer agreementProposalId, pricingModel 構築 agreementProposalIdentifier
3 GetOfferTerms 期間 IDsと料金の詳細 構築 requestedTerms

製品と料金の詳細については、「」を参照してください製品と料金を確認する

アクセプタは、この API を使用して次のタスクを実行できます。

タスク 説明 アクション (複数可) Intent

見積りを生成する

アクセプタは、購入者の購入決定に不可欠な契約期間中に発生する料金など、すべての関連情報を含む見積りを生成できます。 CreateAgreementRequest 新規

オファーを受け入れる

アクセプタは、新しい契約を作成する提案者によって提案された条件を受け入れることができます。この承諾には、数量や期間の選択、発注書の追加など、特定の条件のパラメータを渡すことが含まれる場合があります。アクセプタは、将来の日付に製品の使用が開始される新しい契約を作成することもできます。契約の署名日は、オファーが承諾され、契約が作成された日になります。契約開始日は、製品の使用が開始される将来の日付です。これは、ライセンス/使用権限がアクティブ化された日付です。使用権限の最新のステータスを取得するには、GetAgreementEntitlements API を参照してください。 CreateAgreementRequest, AcceptAgreementRequest 新規

既存の契約を置き換える

アクセプタは、契約の中間アップグレードを実行して、より有利な条件に切り替えるか、契約の販売者を切り替えることができます。このアクションは、入力として渡された既存の契約を終了し、新しい契約を作成します。このアクションは、CANCEL の後に新しい契約が続くのと論理的に同等ですが、アクセプターの使用権限の継続性が保証され、使用権限のないアクセプターは決して残されません。 CreateAgreementRequest, AcceptAgreementRequest REPLACE

既存の契約の修正

アクセプタは、承諾された条件の設定を変更することのみが許可されます。たとえば、自動更新を有効または無効にしたり、購入数量を変更したりできます。ただし、変更後の価格変更によって返金が行われない限りです。料金の修正は、契約が開始されていない場合にのみサポートされます。注: 提案者は従pay-as-you-go期間の料金を変更することができます。従量制料金の引き上げは、購入者に引き上げについて通知されてから 90 日かかります。従量制料金の引き下げはすぐに有効になります。 CreateAgreementRequest, AcceptAgreementRequest 修正

自動更新を有効または無効にする

販売者が更新オファー条件を有効にしている場合、アクセプタは契約の自動更新フラグをオン/オフにできます。が有効になっている場合、更新契約は、最新のオファーリビジョンを使用した元の契約の有効期限日に契約サービスによって作成されます。作成された契約の開始日は、元の契約の終了日と同じになります。 CreateAgreementRequest, AcceptAgreementRequest 修正

契約をキャンセルする

アクセプタは使用契約をキャンセルできます。それ以外の場合、購入者は販売者に連絡してキャンセルを開始する必要があります。契約をキャンセルすると、ライセンスと使用権限は無効になります。 CancelAgreement 該当なし

契約を検索する

アクセプタは、アクセプタとして参加したすべての契約で検索を実行できます AWS Marketplace。検索は、基本契約情報を含む契約のリストを返します。 SearchAgreements 該当なし

契約の説明

アクセプタは、提案者、アクセプタ、開始日、終了日など、契約に関する詳細を表示できます。 DescribeAgreement 該当なし

契約条件を取得する

アクセプタは、アクセプタとして参加した契約の条件に関する詳細を取得できます。 GetAgreementTerms 該当なし

契約の使用権限を取得する

アクセプタは、契約に関連する使用権限のステータスと詳細の契約レベルのビューを取得できます。たとえば、付与中であるか、拒否されたか (その場合は理由)、顧客に付与されている使用権限は何ですか。 GetAgreementEntitlements 該当なし

登録トークンを取得する

登録トークンは、提案者でアカウントをセットアップするためにアクセプターが必要とする有効期間の短いトークンです。このトークンは、外部計測されたディメンションタイプと権限のあるディメンションタイプの両方に使用されます。トークンは作成後 30 分間のみ有効で、現在は SaaS 購入契約にのみ適用されます。 GetAgreementEntitlements 該当なし

契約料金の一覧表示

アクセプタは、契約に関連する料金と発注書の詳細を表示できます。 ListAgreementCharges 該当なし

発注書の更新

アクセプタは、製品をサブスクライブした後に発注書番号を追加できます。発注書が請求に関連付けられると、その請求に対して生成された請求書に発注書番号が含まれます。 UpdatePurchaseOrders 該当なし

キャンセルリクエストを一覧表示する

アクセプタは、自分が参加する契約のすべてのキャンセルリクエストを一覧表示できます。リストは、契約、ステータス、およびその他の基準でフィルタリングできます。 ListAgreementCancellationRequests 該当なし

キャンセルリクエストの詳細を取得する

アクセプタは、ステータス、タイムスタンプ、理由コードなど、販売者 (提案者) によって開始された特定のキャンセルリクエストに関する詳細情報を取得できます。 GetAgreementCancellationRequest 該当なし

キャンセルリクエストを受け入れる

アクセプタは、有効な契約について販売者 (提案者) によって開始されたキャンセルリクエストを承認できます。承認後、契約キャンセルワークフローは非同期的に実行され、契約ステータスはキャンセル済みに変わります。注: キャンセルリクエストを承認すると契約がキャンセルされるため、ユーザーには アクセスCancelAgreement許可も必要です。 AcceptAgreementCancellationRequest, CancelAgreement 該当なし

キャンセルリクエストを拒否する

アクセプタは、販売者 (提案者) によって開始されたキャンセルリクエストを拒否できます。拒否後、契約はアクティブのままになり、キャンセルリクエストは終了状態になります。販売者は、必要に応じて新しいキャンセルリクエストを作成できます。 RejectAgreementCancellationRequest 該当なし

支払いリクエストを一覧表示する

アクセプタは、自分が参加する契約のすべての支払いリクエストを一覧表示できます。リストは、契約、ステータス、およびその他の基準でフィルタリングできます。 ListAgreementPaymentRequests 該当なし

支払いリクエストの詳細を取得する

アクセプタは、ステータス、タイムスタンプ、関連する料金など、販売者 (提案者) によって開始された特定の支払いリクエストに関する詳細情報を取得できます。 GetAgreementPaymentRequest 該当なし

支払いリクエストを受け入れる

アクセプタは、アクティブな契約について販売者 (提案者) によって開始された支払いリクエストを承認できます。 AcceptAgreementPaymentRequest 該当なし

支払いリクエストを拒否する

アクセプタは、販売者 (提案者) によって開始された支払いリクエストを拒否できます。拒否されると、支払いリクエストは終了状態になります。販売者は、必要に応じて新しい支払いリクエストを作成できます。 RejectAgreementPaymentRequest 該当なし

見積りを生成する

CreateAgreementRequest を使用して見積りを生成します。以下を指定する必要があります。

  • agreementProposalIdentifierGetOffer レスポンスagreementProposalIdの 。

  • requestedTermsGetOfferTerms レスポンスの用語から構築されます。各用語には が必要でありid、一部の用語には追加の が必要ですconfiguration。「requestedTerms の作成」を参照してください。

response = client.create_agreement_request( agreementProposalIdentifier='at-edhtjnbilupjv3xqbphtom77y', intent='NEW', requestedTerms=[ {'id': 'term-legal-abc123'}, {'id': 'term-validity-def456'}, { 'id': 'term-configurable-pricing-789', 'configuration': { 'configurableUpfrontPricingTermConfiguration': { 'selectorValue': 'P12M', 'dimensions': [ {'dimensionKey': 'Users', 'dimensionValue': 50} ] } } }, { 'id': 'term-renewal-012', 'configuration': { 'renewalTermConfiguration': {'enableAutoRenew': True} } } ] ) print(f"Agreement Request ID: {response['agreementRequestId']}") for charge in response['chargeSummary']['expectedCharges']: print(f" Charge ID: {charge['id']}, Amount: ${charge['amount']}")

requestedTerms の作成

を構築するにはrequestedTerms、次の 2 つの要素を決定する必要があります。

  1. 含める条件 — オファーの料金モデルによって決まります。「料金モデル別の必須条件」を参照してください。

  2. どの用語に設定が必要か — ほとんどの用語には のみが必要ですがid、3 つの用語タイプには購入者が提供する追加の設定が必要です。「用語設定」を参照してください。

料金モデル別の必須条件

GetOffer レスポンスの pricingModel.PricingModelフィールドは、 に含める必要がある用語を決定しますCreateAgreementRequest

オファーに含まれるすべての契約には、、LegalTermSupportTermValidityTermおよび の条件を含める必要がありますRenewalTerm

注記

FreeTrialPricingTerm は製品ごとに 1 のみ受け入れられます。購入者が無料トライアルを既に使用している場合、 CreateAgreementRequestはエラーを返します。

契約

GetOfferTerms によって返されるすべての用語は、単一の で必要ですCreateAgreementRequest

の使用

契約の作成は、オファーに含まれる条件によって異なります。

  1. 最初の契約UsageBasedPricingTermおよび/または RecurringPaymentTerm (オファーの内容に応じて) を必須条件とともに承諾します。これにより、製品の使用権限が付与されます。

  2. 後続の契約 (オプション) — オファーに ConfigurableUpfrontPricingTermFixedUpfrontPricingTerm、または が含まれている場合はPaymentScheduleTerm、オプションで年間購入契約を作成して割引料金を取得できます。

注記

両方の契約を作成し、後でキャンセルする場合は、まず後続の契約 ( を使用ConfigurableUpfrontPricingTerm) をキャンセルしてから、最初の契約 ( UsageBasedPricingTerm または を使用) をキャンセルしますRecurringPaymentTerm

BYOL

必須条件ByolPricingTermとともに承諾します。

用語設定

ほとんどの用語では、GetOfferTerms idの のみが必要です。以下の用語タイプには、 configuration に加えて購入者が提供するものが必要ですid

用語タイプ 設定 購入者が提供する内容
ConfigurableUpfrontPricingTerm ConfigurableUpfrontPricingTermConfiguration 契約期間とディメンションあたりのユニット数
RenewalTerm RenewalTermConfiguration 契約の有効期限が切れたときに自動更新するかどうか
VariablePaymentTerm VariablePaymentTermConfiguration 販売者からの支払いリクエストの承認方法

ConfigurableUpfrontPricingTermConfiguration

以下の例を使用して、 に必要な値を見つけますConfigurableUpfrontPricingTermConfiguration

GetOfferTerms レスポンスの例:

{ "offerTerms": [ { "configurableUpfrontPricingTerm": { "id": "term-34dfb665ebd38eb2d0269a4af454c4f33cd90292ecc7b0f71058175594f67394", "currencyCode": "USD", "rateCards": [ { "constraints": { "multipleDimensionSelection": "Allowed", "quantityConfiguration": "Allowed" }, "selector": { "type": "Duration", "value": "P1M" }, "rateCard": [ { "dimensionKey": "BasicService", "displayName": "Basic Service", "price": "0", "unit": "Units" }, { "dimensionKey": "PremiumService", "displayName": "Premium Service", "price": "0", "unit": "Units" } ] } ], "type": "ConfigurableUpfrontPricingTerm" } } ] }
フィールド 値/ソース
ConfigurableUpfrontPricingTermConfiguration.selectorValue offerTerms[].configurableUpfrontPricingTerm.rateCards[].selector.value
Dimension.dimensionKey offerTerms[].configurableUpfrontPricingTerm.rateCards[].rateCard[].dimensionKey
Dimension.dimensionValue 購入者提供の整数 (そのディメンションで購入するユニット数)
注記

レートカードの constraintsフィールドは、複数のディメンションを選択するか、1 ConfigurableUpfrontPricingTermConfiguration つのディメンションのみを選択するかなど、 の作成方法を制御します。詳細については、「制約データ型」を参照してください。

RequestedTermペイロードの例ConfigurableUpfrontPricingTerm:

{ "id": "term-43ab7a2445f89dfcb7e1a6a81c92fe08c124125ffad126bea5e5b7915c065166", "configuration": { "configurableUpfrontPricingTermConfiguration": { "selectorValue": "P12M", "dimensions": [ { "dimensionKey": "AdminUsers", "dimensionValue": 5 }, { "dimensionKey": "ReadOnlyUsers", "dimensionValue": 10 } ] } } }

RenewalTermConfiguration

フィールド 値/ソース
enableAutoRenew 購入者提供のブール値 (true または false) — 必須

RequestedTermペイロードの例RenewalTerm:

{ "id": "term-ffcc0100ce0c5468426dc07d0b05cff09ab8447640108d9c95ce1591f0949738", "configuration": { "renewalTermConfiguration": { "enableAutoRenew": false } } }

VariablePaymentTermConfiguration

フィールド 値/ソース
RequestedTerm.configuration.variablePaymentTermConfiguration.paymentRequestApprovalStrategy 購入者提供: AUTO_APPROVE_ON_EXPIRATIONまたは WAIT_FOR_APPROVAL必須
RequestedTerm.configuration.variablePaymentTermConfiguration.expirationDuration 購入者が提供する期間 (例: P10D)。戦略が の場合にのみ必要 AUTO_APPROVE_ON_EXPIRATION

RequestedTermペイロードの例VariablePaymentTerm:

{ "id": "term-9ab34376c51cd5b4dc995aa0f410b657d58bd577b3f09b34d38afb6964aaaf12", "configuration": { "variablePaymentTermConfiguration": { "paymentRequestApprovalStrategy": "AUTO_APPROVE_ON_EXPIRATION", "expirationDuration": "P10D" } } }

オファーを受け入れる

まず、「」の説明に従って引用符を生成します見積りを生成する。次に、 AcceptAgreementRequest を使用して見積りを承諾し、契約を作成します。契約リクエストの有効期限が切れAcceptAgreementRequestる前に、 を呼び出す必要があります。オプションで、承認中に発注書番号を関連付けることができます。

# Use chargeId from CreateAgreementRequest response response = client.accept_agreement_request( agreementRequestId='agrq-abc123', purchaseOrders=[ { 'chargeId': 'charge-xyz', # From chargeSummary.expectedCharges[].id 'purchaseOrderReference': 'PO-2024-001' } ] ) print(f"Agreement ID: {response['agreementId']}")

既存の契約を置き換える

「」で説明CreateAgreementRequestされているように を構築しますが見積りを生成するintentを に設定REPLACEし、置き換える契約sourceAgreementIdentifierを提供します。次に、 AcceptAgreementRequestを呼び出して置き換えを完了します。

response = client.create_agreement_request( agreementProposalIdentifier='at-edhtjnbilupjv3xqbphtom77y', intent='REPLACE', sourceAgreementIdentifier='agmt-existing123' ) print(f"Agreement Request ID: {response['agreementRequestId']}")

既存の契約の修正

既存の契約の期間設定を変更するには、 intentを に設定AMENDし、 を指定しますsourceAgreementIdentifier。新しい契約とは異なり、 agreementProposalIdentifierは必要ありません。設定を変更する用語のみを含めます。次に、 を呼び出しAcceptAgreementRequestて修正を適用します。

response = client.create_agreement_request( intent='AMEND', sourceAgreementIdentifier='agmt-existing123', requestedTerms=[ { 'id': 'term-configurable-pricing-789', 'configuration': { 'configurableUpfrontPricingTermConfiguration': { 'selectorValue': 'P12M', 'dimensions': [ {'dimensionKey': 'Users', 'dimensionValue': 100} ] } } } ] ) print(f"Agreement Request ID: {response['agreementRequestId']}")

自動更新を有効または無効にする

自動更新を切り替えるには、 インAMENDテントCreateAgreementRequestで を使用します。

response = client.create_agreement_request( intent='AMEND', sourceAgreementIdentifier='agmt-existing123', requestedTerms=[ { 'id': 'term-renewal-456', 'configuration': { 'renewalTermConfiguration': {'enableAutoRenew': True} } } ] ) print(f"Agreement Request ID: {response['agreementRequestId']}")

契約をキャンセルする

使用契約をキャンセルCancelAgreementするには、 を使用します。その他の契約タイプの場合、購入者は販売者に連絡してキャンセルを開始する必要があります。

client.cancel_agreement( agreementId='agmt-abc123' )

契約を検索する

を使用してSearchAgreements、アクセプターとして参加するすべての契約を検索します。検索では、基本契約情報を含む契約のリストが返されます。

response = client.search_agreements( catalog='AWSMarketplace', filters=[ {'name': 'PartyType', 'values': ['Acceptor']}, {'name': 'AgreementType', 'values': ['PurchaseAgreement']}, {'name': 'Status', 'values': ['ACTIVE']} ] ) for agmt in response['agreementViewSummaries']: print(f" {agmt['agreementId']}: {agmt['status']}")

契約の説明

DescribeAgreement を使用して、提案者、アクセプター、開始日、終了日など、契約に関する詳細を表示します。

response = client.describe_agreement( agreementId='agmt-abc123' ) print(f"Status: {response['status']}") print(f"Start: {response['startTime']}") print(f"End: {response['endTime']}")

契約条件を取得する

を使用してGetAgreementTerms、アクセプターとして参加する契約の条件に関する詳細を取得します。

response = client.get_agreement_terms( agreementId='agmt-abc123' ) for term in response['acceptedTerms']: print(f" Term: {term}")

契約の使用権限を取得する

GetAgreementEntitlements を使用して、契約に関連付けられた使用権限のステータスと詳細の契約レベルのビューを取得します。

response = client.get_agreement_entitlements( agreementId='agmt-abc123' ) for ent in response['agreementEntitlements']: print(f" {ent['resource']}: {ent['status']}")

登録トークンを取得する

GetAgreementEntitlements を使用して登録トークンを取得します。この有効期間の短いトークン (30 分間有効) は、提案者でアカウントをセットアップするためにアクセプターによって必要です。現在、SaaS 購入契約にのみ適用されます。

response = client.get_agreement_entitlements( agreementId='agmt-abc123' ) for ent in response['agreementEntitlements']: if 'registrationToken' in ent: print(f"Registration Token: {ent['registrationToken']}") # Token is valid for 30 minutes

契約料金の一覧表示

を使用してListAgreementCharges、契約に関連する料金と発注書の詳細を表示します。

response = client.list_agreement_charges( agreementId='agmt-abc123' ) for charge in response['items']: print(f" {charge['id']} (rev {charge['revision']}): ${charge['amount']}") print(f" PO: {charge.get('purchaseOrderReference', 'N/A')}")

発注書の更新

UpdatePurchaseOrders を使用して、製品をサブスクライブした後に発注書番号を追加します。契約料金の一覧表示 レスポンスchargeRevisionから chargeIdと を使用します。発注書が請求に関連付けられると、その請求に対して生成された請求書には発注書番号が含まれます。

client.update_purchase_orders( agreementId='agmt-abc123', purchaseOrders=[ { 'chargeId': 'charge-xyz', 'chargeRevision': 1, 'purchaseOrderReference': 'PO-2024-001' } ] )

キャンセルリクエストを一覧表示する

を使用してListAgreementCancellationRequests、参加する契約のすべてのキャンセルリクエストを一覧表示します。契約、ステータス、その他の基準でフィルタリングできます。

response = client.list_agreement_cancellation_requests( partyType='Acceptor', agreementId='agmt-abc123' ) for req in response['agreementCancellationRequests']: print(f" {req['agreementCancellationRequestId']}: {req['status']}")

キャンセルリクエストの詳細を取得する

GetAgreementCancellationRequest を使用して、ステータス、タイムスタンプ、理由コードなど、特定のキャンセルリクエストに関する詳細情報を取得します。

response = client.get_agreement_cancellation_request( agreementId='agmt-abc123', agreementCancellationRequestId='acr-abc123' ) print(f"Status: {response['status']}") print(f"Reason: {response['reasonCode']}")

キャンセルリクエストを受け入れる

を使用してAcceptAgreementCancellationRequest、販売者が開始したキャンセルリクエストを承認します。承認後、契約キャンセルワークフローは非同期的に実行されます。キャンセルリクエストを承認すると契約がキャンセルされるため、 アクセスCancelAgreement許可も必要です。

client.accept_agreement_cancellation_request( agreementId='agmt-abc123', agreementCancellationRequestId='acr-abc123' )

キャンセルリクエストを拒否する

を使用してRejectAgreementCancellationRequest、販売者が開始したキャンセルリクエストを拒否します。拒否後、契約は引き続き有効になり、販売者は必要に応じて新しいキャンセルリクエストを作成できます。

client.reject_agreement_cancellation_request( agreementId='agmt-abc123', agreementCancellationRequestId='acr-abc123' )

支払いリクエストを一覧表示する

を使用してListAgreementPaymentRequests、参加する契約のすべての支払いリクエストを一覧表示します。契約、ステータス、その他の基準でフィルタリングできます。

response = client.list_agreement_payment_requests( partyType='Acceptor', agreementId='agmt-abc123' ) for req in response['agreementPaymentRequests']: print(f" {req['agreementPaymentRequestId']}: {req['status']}")

支払いリクエストの詳細を取得する

GetAgreementPaymentRequest を使用して、ステータス、タイムスタンプ、関連する料金など、特定の支払いリクエストに関する詳細情報を取得します。

response = client.get_agreement_payment_request( paymentRequestId='apr-abc123', agreementId='agmt-abc123' ) print(f"Status: {response['status']}") print(f"Amount: ${response['amount']}")

支払いリクエストを受け入れる

AcceptAgreementPaymentRequest を使用して、アクティブな契約について販売者が開始した支払いリクエストを承認します。

client.accept_agreement_payment_request( paymentRequestId='apr-abc123', agreementId='agmt-abc123' )

支払いリクエストを拒否する

を使用してRejectAgreementPaymentRequest、販売者が開始した支払いリクエストを拒否します。拒否後、販売者は必要に応じて新しい支払いリクエストを作成できます。

client.reject_agreement_payment_request( paymentRequestId='apr-abc123', agreementId='agmt-abc123' )