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 |
|---|---|---|---|
| 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 | |
| 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 | |
| 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 | |
| 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 | |
| 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 | |
| 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 | |
| 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 | |
| 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 | |
| O aceitante pode obter detalhes sobre os termos de um contrato do qual participou como aceitante. | GetAgreementTerms |
N/A | |
| 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 | |
| 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 | |
| O aceitante pode visualizar as cobranças e os detalhes do pedido de compra associados a elas em seu contrato. | ListAgreementCharges |
N/A | |
| 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 | |
| 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 | |
| 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 | |
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 | |
| 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 | |
| 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 | |
| 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 | |
| O aceitante pode aprovar uma solicitação de pagamento iniciada pelo vendedor (proponente) para um contrato ativo. | AcceptAgreementPaymentRequest |
N/A | |
| 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:
agreementProposalIdentifier— aagreementProposalIdpartir da GetOfferresposta.requestedTerms— construído a partir dos termos da GetOfferTermsresposta. Cada termo exige seuid, e alguns exigem adicionaisconfiguration. Consulte Construindo os termos solicitados.
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:
Quais termos incluir — determinados pelo modelo de preços da oferta. Consulte Termos exigidos por modelo de preços.
Quais termos precisam de configuração — a maioria dos termos precisa apenas do
id, 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:
Primeiro acordo — Aceite
UsageBasedPricingTermand/orRecurringPaymentTerm(dependendo do que a oferta inclui) junto com os termos obrigatórios. Isso concede direitos de uso do produto.Contratos subsequentes (opcionais) — Se a oferta incluir
ConfigurableUpfrontPricingTerm, 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_APPROVAL — obrigató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' )