View a markdown version of this page

Trabalhe com a API do Contrato como comprador - AWS Marketplace

A referência de API do AWS Marketplace foi reestruturada. Para obter mais informações sobre as operações de API suportadas, consulte a Referência de API do AWS Marketplace.

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Trabalhe com a API do Contrato como comprador

Um contrato é um documento que vincula duas partes, incluindo o proponente e o aceitante (geralmente, o comprador) e define os termos e condições aplicáveis entre eles.

O comprador cria um AgreementRequest, que gera uma cotação. Essa cotação inclui todas as informações relevantes, como as cobranças estimadas que serão incorridas durante a vigência do contrato, o que é fundamental para a decisão de compra do comprador. Se o comprador estiver satisfeito com a cotação, ele poderá aceitá-la AgreementRequest antes que ela expire. O Contrato é criado após a aceitação do AgreementRequest. Durante esse processo, o administrador do comprador ou a persona do comprador podem associar o pedido de compra às cobranças. Finalmente, com base nos termos e condições do contrato ativo, o comprador recebe uma fatura e recebe uma Licença para usar o produto.

Pré-requisitos: Descubra produtos e ofertas

Antes de criar um contrato, use a API AWS Marketplace Discovery para descobrir o produto e obter os agreementProposalId detalhes do prazo e do prazo necessários para construir umCreateAgreementRequest. pricingModel

Etapa Ação da API Discovery Output Usado para
1 ListPurchaseOptions offerId Encontrar ofertas disponíveis para um produto
2 GetOffer agreementProposalId, pricingModel Construindo agreementProposalIdentifier
3 GetOfferTerms IDs de prazo e detalhes de preços Construindo requestedTerms

Para obter informações detalhadas sobre como descobrir produtos e preços, consulteDescubra produtos e preços.

Um aceitador pode realizar as seguintes tarefas usando essa API:

Tarefa Description Ação (ões) Intenção

Gere uma cotação

O aceitante pode gerar uma cotação que inclua todas as informações relevantes, como as cobranças que serão incorridas durante a vigência do contrato, o que é fundamental para a decisão de compra do comprador. CreateAgreementRequest NOVO

Aceite uma oferta

O Aceitante pode aceitar os termos propostos pelo proponente que cria um novo contrato. Essa aceitação pode envolver a aprovação de parâmetros para determinados termos, como selecionar a quantidade ou a duração, adicionar um pedido de compra etc. O aceitante também pode criar um novo contrato em que o uso do produto comece em uma data futura. A data de assinatura do contrato será quando a oferta for aceita e quando o contrato for criado. A data de início do Contrato é a data futura em que o uso do produto começa. Esta é a data em que license/entitlement é ativado. Para recuperar o status mais recente do seu direito de uso, consulte a API. GetAgreementEntitlements CreateAgreementRequest, AcceptAgreementRequest NOVO

Substituir um contrato existente

O Aceitante pode realizar uma atualização de médio prazo em seu contrato para mudar para condições mais favoráveis ou trocar de vendedor por seus contratos. Essa ação encerra o Contrato existente aprovado como entrada e cria um novo Contrato líquido. Essa ação é logicamente equivalente a um CANCELAMENTO seguido por um NOVO contrato, mas garante a continuidade dos direitos para o Aceitante e, em nenhum momento, o Aceitante fica sem direitos. CreateAgreementRequest, AcceptAgreementRequest REPLACE

Alterar um acordo existente

O aceitante só tem permissão para modificar a configuração dos termos aceitos. Por exemplo, eles podem ativar ou desativar a renovação automática ou modificar a quantidade comprada, desde que a alteração de preço após a modificação não resulte em reembolsos. Só aceitaremos a cobrança de alteração se o acordo não tiver sido iniciado. Observação: o proponente tem permissão para modificar os preços de acordo com o prazo de pagamento conforme o uso. Qualquer aumento nos preços com pagamento conforme o uso leva 90 dias para entrar em vigor após o comprador ser notificado sobre o aumento de preço. Qualquer redução nos preços de pagamento conforme o uso entra em vigor imediatamente. CreateAgreementRequest, AcceptAgreementRequest EMENDAR

Ativar ou desativar a renovação automática

O aceitante pode ativar ON/Off a bandeira de renovação automática em seu contrato se o vendedor tiver ativado os termos da oferta de renovação. Caso esteja habilitado, o contrato de renovação será criado pelo serviço do Contrato na data de expiração do contrato original usando a última revisão da oferta. A data de início deste Contrato criado será a mesma data de término do contrato original. CreateAgreementRequest, AcceptAgreementRequest EMENDAR

Cancelar um contrato

O aceitante pode cancelar o contrato de uso. Para todo o resto, o comprador deve entrar em contato com o vendedor para iniciar o cancelamento. Quando você cancela seu contrato, sua licença e seus direitos são desativados. CancelAgreement N/A

Contratos de pesquisa

O aceitante pode realizar uma pesquisa em todos os contratos dos quais participou como aceitante. AWS Marketplace A pesquisa retorna uma lista de contratos com informações básicas do contrato. SearchAgreements N/A

Descreva um contrato

O aceitante pode ver detalhes sobre um contrato, como o proponente, o aceitante, a data de início e a data de término. DescribeAgreement N/A

Obtenha os termos do contrato

O aceitante pode obter detalhes sobre os termos de um contrato do qual participou como aceitante. GetAgreementTerms N/A

Obtenha direitos de contrato

O aceitante pode obter uma visão em nível de contrato do status e dos detalhes dos direitos vinculados ao contrato — por exemplo, se ele está em processo de concessão ou se foi rejeitado (e, em caso afirmativo, por quais motivos), quais são os direitos concedidos aos clientes. GetAgreementEntitlements N/A

Obtenha um token de registro

O token de registro é um token de curta duração exigido pelos aceitantes para configurar uma conta com os proponentes. Esse token é usado tanto para tipos de dimensões medidos externamente quanto para tipos de dimensões intituladas. O token só é válido por 30 minutos após a criação e, atualmente, só é aplicável aos contratos de compra de SaaS. GetAgreementEntitlements N/A

Listar cobranças do contrato

O aceitante pode visualizar as cobranças e os detalhes do pedido de compra associados a elas em seu contrato. ListAgreementCharges N/A

Atualizar pedidos de compra

O aceitante pode adicionar um número de pedido de compra após assinar um produto. Quando uma ordem de compra é associada a uma cobrança, a fatura gerada para essa cobrança incluirá o número da ordem de compra. UpdatePurchaseOrders N/A

Listar solicitações de cancelamento

O aceitante pode listar todas as solicitações de cancelamento dos contratos dos quais participa. A lista pode ser filtrada por contrato, status e outros critérios. ListAgreementCancellationRequests N/A

Obtenha detalhes da solicitação de cancelamento

O aceitante pode recuperar informações detalhadas sobre uma solicitação de cancelamento específica iniciada pelo vendedor (proponente), incluindo status, registros de data e hora e códigos de motivo. GetAgreementCancellationRequest N/A

Aceitar uma solicitação de cancelamento

O aceitante pode aprovar uma solicitação de cancelamento iniciada pelo vendedor (proponente) para um contrato ativo. Após a aprovação, o fluxo de trabalho de cancelamento do contrato é executado de forma assíncrona e o status do contrato muda para cancelado. Observação: os usuários também precisam de CancelAgreement permissão porque a aprovação da solicitação de cancelamento leva ao cancelamento do contrato. AcceptAgreementCancellationRequest, CancelAgreement N/A

Rejeitar uma solicitação de cancelamento

O aceitante pode rejeitar uma solicitação de cancelamento iniciada pelo vendedor (proponente). Após a rejeição, o contrato permanece ativo e a solicitação de cancelamento entra em um estado terminal. O vendedor pode criar uma nova solicitação de cancelamento, se necessário. RejectAgreementCancellationRequest N/A

Listar solicitações de pagamento

O aceitante pode listar todas as solicitações de pagamento dos contratos dos quais participa. A lista pode ser filtrada por contrato, status e outros critérios. ListAgreementPaymentRequests N/A

Obtenha detalhes da solicitação de pagamento

O aceitante pode recuperar informações detalhadas sobre uma solicitação de pagamento específica iniciada pelo vendedor (proponente), incluindo status, data e hora e cobranças associadas. GetAgreementPaymentRequest N/A

Aceitar uma solicitação de pagamento

O aceitante pode aprovar uma solicitação de pagamento iniciada pelo vendedor (proponente) para um contrato ativo. AcceptAgreementPaymentRequest N/A

Rejeitar uma solicitação de pagamento

O aceitante pode rejeitar uma solicitação de pagamento iniciada pelo vendedor (proponente). Após a rejeição, a solicitação de pagamento entra em um estado terminal. O vendedor pode criar uma nova solicitação de pagamento, se necessário. RejectAgreementPaymentRequest N/A

Gere uma cotação

Use CreateAgreementRequest para gerar uma cotação. É necessário fornecer:

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']}")

Construindo os termos solicitados

Para construirrequestedTerms, você precisa determinar duas coisas:

  1. Quais termos incluir — determinados pelo modelo de preços da oferta. Consulte Termos exigidos por modelo de preços.

  2. Quais termos precisam de configuração — a maioria dos termos precisa apenas doid, mas três tipos de termos exigem configuração adicional fornecida pelo comprador. Consulte Configurações de termos.

Termos exigidos por modelo de preços

O pricingModel.PricingModel campo na GetOfferresposta determina quais termos devem ser incluídos em suaCreateAgreementRequest.

Os seguintes termos devem ser incluídos em cada contrato quando presentes na oferta: LegalTermSupportTerm,ValidityTerm,, RenewalTerm e.

nota

FreeTrialPricingTermsó pode ser aceito uma vez por produto — CreateAgreementRequest retornará um erro se o comprador já tiver usado um teste gratuito.

CONTRATO

Todos os termos devolvidos por GetOfferTermssão exigidos em um únicoCreateAgreementRequest.

USO

A criação do contrato depende dos termos presentes na oferta:

  1. Primeiro acordo — Aceite UsageBasedPricingTerm and/or RecurringPaymentTerm (dependendo do que a oferta inclui) junto com os termos obrigatórios. Isso concede direitos de uso do produto.

  2. Contratos subsequentes (opcionais) — Se a oferta incluirConfigurableUpfrontPricingTerm, ouFixedUpfrontPricingTerm, você podePaymentScheduleTerm, opcionalmente, criar um contrato separado para comprar anualmente e obter preços com desconto.

nota

Se você criar os dois contratos e depois quiser cancelar, cancele primeiro o contrato subsequente (comConfigurableUpfrontPricingTerm) e depois cancele o primeiro contrato (com UsageBasedPricingTerm and/or RecurringPaymentTerm).

BYOL

Aceite ByolPricingTerm junto com os termos obrigatórios.

Configurações de termos

A maioria dos termos exige apenas o id formulário GetOfferTerms. Os seguintes tipos de termos exigem um fornecimento pelo comprador, configuration além do: id

Tipo de termo Configuração O que o comprador fornece
ConfigurableUpfrontPricingTerm ConfigurableUpfrontPricingTermConfiguration Duração do contrato e número de unidades por dimensão
RenewalTerm RenewalTermConfiguration Se a renovação automática deve ser feita quando o contrato expirar
VariablePaymentTerm VariablePaymentTermConfiguration Como as solicitações de pagamento do vendedor são aprovadas

ConfigurableUpfrontPricingTermConfiguration

Use o exemplo abaixo para localizar os valores necessários paraConfigurableUpfrontPricingTermConfiguration.

Exemplo de GetOfferTerms resposta:

{ "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" } } ] }
Campo Valor/ fonte
ConfigurableUpfrontPricingTermConfiguration.selectorValue offerTerms[].configurableUpfrontPricingTerm.rateCards[].selector.value
Dimension.dimensionKey offerTerms[].configurableUpfrontPricingTerm.rateCards[].rateCard[].dimensionKey
Dimension.dimensionValue Buyer-supplied inteiro (número de unidades a serem compradas para essa dimensão)
nota

O constraints campo na tabela de preços determina como você pode criar o ConfigurableUpfrontPricingTermConfiguration — por exemplo, se você pode selecionar várias dimensões ou apenas uma. Consulte o tipo de dados Restrições para obter detalhes.

Exemplo de RequestedTerm carga útil paraConfigurableUpfrontPricingTerm:

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

RenewalTermConfiguration

Campo Valor/ fonte
enableAutoRenew Buyer-supplied booleano (trueoufalse) — obrigatório

Exemplo de RequestedTerm carga útil paraRenewalTerm:

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

VariablePaymentTermConfiguration

Campo Valor/ fonte
RequestedTerm.configuration.variablePaymentTermConfiguration.paymentRequestApprovalStrategy Buyer-supplied: AUTO_APPROVE_ON_EXPIRATION ou WAIT_FOR_APPROVALobrigatório
RequestedTerm.configuration.variablePaymentTermConfiguration.expirationDuration Buyer-supplied duração (por exemplo,P10D); necessário somente quando a estratégia é AUTO_APPROVE_ON_EXPIRATION

Exemplo de RequestedTerm carga útil paraVariablePaymentTerm:

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

Aceite uma oferta

Primeiro, gere uma cotação conforme descrito emGere uma cotação. Em seguida, use AcceptAgreementRequest para aceitar a cotação e criar o contrato. Você deve ligar AcceptAgreementRequest antes que a solicitação de contrato expire. Opcionalmente, você pode associar um número de ordem de compra durante a aceitação.

# 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']}")

Substituir um contrato existente

Construa um CreateAgreementRequest conforme descrito emGere uma cotação, mas intent defina REPLACE e sourceAgreementIdentifier forneça o contrato a ser substituído. Em seguida, ligue AcceptAgreementRequest para concluir a substituição.

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

Alterar um acordo existente

Para modificar a configuração do prazo em um contrato existente, intent defina como AMEND e forneçasourceAgreementIdentifier. Ao contrário de um novo acordo, não agreementProposalIdentifier é necessário. Inclua somente os termos cuja configuração você deseja alterar. Em seguida, ligue AcceptAgreementRequest para aplicar a emenda.

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']}")

Ativar ou desativar a renovação automática

Use CreateAgreementRequest com a AMEND intenção de ativar a renovação automática.

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']}")

Cancelar um contrato

Use CancelAgreement para cancelar um contrato de uso. Para outros tipos de contrato, o comprador deve entrar em contato com o vendedor para iniciar o cancelamento.

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

Contratos de pesquisa

Use SearchAgreements para pesquisar todos os contratos dos quais você participa como aceitante. A pesquisa retorna uma lista de contratos com informações básicas do contrato.

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']}")

Descreva um contrato

Use DescribeAgreement para visualizar detalhes sobre um contrato, como o proponente, o aceitante, a data de início e a data de término.

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

Obtenha os termos do contrato

Use GetAgreementTerms para obter detalhes sobre os termos de um contrato do qual você participa como aceitante.

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

Obtenha direitos de contrato

Use GetAgreementEntitlements para obter uma visão em nível de contrato do status e dos detalhes dos direitos vinculados ao seu contrato.

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

Obtenha um token de registro

Use GetAgreementEntitlements para obter um token de registro. Esse token de curta duração (válido por 30 minutos) é exigido pelos aceitantes para configurar uma conta com os proponentes. Atualmente aplicável apenas para contratos de compra de 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

Listar cobranças do contrato

Use ListAgreementCharges para visualizar as cobranças e os detalhes do pedido de compra associados ao seu contrato.

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')}")

Atualizar pedidos de compra

Use UpdatePurchaseOrders para adicionar um número de pedido de compra depois de assinar um produto. Use o chargeId e chargeRevision da Listar cobranças do contrato resposta. Quando uma ordem de compra é associada a uma cobrança, a fatura gerada para essa cobrança inclui o número da ordem de compra.

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

Listar solicitações de cancelamento

Use ListAgreementCancellationRequests para listar todas as solicitações de cancelamento dos contratos dos quais você participa. Você pode filtrar por contrato, status e outros critérios.

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

Obtenha detalhes da solicitação de cancelamento

Use GetAgreementCancellationRequest para recuperar informações detalhadas sobre uma solicitação de cancelamento específica, incluindo status, registros de data e hora e códigos de motivo.

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

Aceitar uma solicitação de cancelamento

Use AcceptAgreementCancellationRequest para aprovar uma solicitação de cancelamento iniciada pelo vendedor. Após a aprovação, o fluxo de trabalho de cancelamento do contrato é executado de forma assíncrona. Você também precisa de CancelAgreement permissão porque a aprovação da solicitação de cancelamento leva ao cancelamento do contrato.

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

Rejeitar uma solicitação de cancelamento

Use RejectAgreementCancellationRequest para rejeitar uma solicitação de cancelamento iniciada pelo vendedor. Após a rejeição, o contrato permanece ativo e o vendedor pode criar uma nova solicitação de cancelamento, se necessário.

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

Listar solicitações de pagamento

Use ListAgreementPaymentRequests para listar todas as solicitações de pagamento dos contratos dos quais você participa. Você pode filtrar por contrato, status e outros critérios.

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

Obtenha detalhes da solicitação de pagamento

Use GetAgreementPaymentRequest para recuperar informações detalhadas sobre uma solicitação de pagamento específica, incluindo status, registros de data e hora e cobranças associadas.

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

Aceitar uma solicitação de pagamento

Use AcceptAgreementPaymentRequest para aprovar uma solicitação de pagamento iniciada pelo vendedor para um contrato ativo.

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

Rejeitar uma solicitação de pagamento

Use RejectAgreementPaymentRequest para rejeitar uma solicitação de pagamento iniciada pelo vendedor. Após a rejeição, o vendedor pode criar uma nova solicitação de pagamento, se necessário.

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