View a markdown version of this page

Trabaja con la API de acuerdos como comprador - AWS Marketplace

Se reestructuró la referencia de la API de AWS Marketplace. Para obtener más información sobre las operaciones de API compatibles, consulte la referencia de API de AWS Marketplace.

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Trabaja con la API de acuerdos como comprador

Un acuerdo es un documento que vincula a dos partes, incluido el proponente y el aceptante (normalmente, el comprador), y en el que se definen los términos y condiciones aplicables entre ellas.

El comprador crea un AgreementRequest, que genera un presupuesto. Este presupuesto incluye toda la información relevante, como los gastos estimados en los que incurrirá durante la vigencia del acuerdo, lo cual es fundamental para la decisión de compra del comprador. Si el comprador está satisfecho con el presupuesto, puede aceptarlo AgreementRequest antes de que caduque. El Acuerdo se crea tras la aceptación del AgreementRequest. Durante este proceso, el administrador del comprador o la persona compradora pueden asociar la orden de compra a los cargos. Por último, según los términos y condiciones del acuerdo activo, se factura al comprador y se le concede una licencia de uso del producto.

Requisitos previos: Descubra productos y ofertas

Antes de crear un acuerdo, utilice la API AWS Marketplace Discovery para descubrir el producto y obtener los agreementProposalId detalles y condiciones necesarios para crear un CreateAgreementRequest acuerdo. pricingModel

Paso Acción de la API de descubrimiento Output Utilizado para
1 ListPurchaseOptions offerId Buscar ofertas disponibles para un producto
2 GetOffer agreementProposalId, pricingModel Construyendo agreementProposalIdentifier
3 GetOfferTerms Identificadores de plazos y detalles de precios Construyendo requestedTerms

Para obtener información detallada sobre cómo descubrir productos y precios, consulteDescubra los productos y los precios.

Un aceptador puede realizar las siguientes tareas mediante esta API:

Tarea Description (Descripción) Acción (es) Intención

Genera una cotización

El aceptante puede generar un presupuesto que incluya toda la información relevante, como los cargos en los que incurrirá durante la vigencia del acuerdo, lo cual es fundamental para la decisión de compra del comprador. CreateAgreementRequest NUEVO

Acepta una oferta

El aceptante puede aceptar las condiciones propuestas por el proponente, lo que crea un nuevo acuerdo. Esta aceptación puede implicar la aprobación de parámetros para determinados plazos, como la selección de la cantidad o la duración, la adición de una orden de compra, etc. El aceptador también puede crear un nuevo acuerdo en el que el uso del producto comience en una fecha futura. La fecha de firma del acuerdo será cuando se acepte la oferta y cuando se cree el acuerdo. La fecha de inicio del Acuerdo es la fecha futura en la que comience a utilizarse el producto. Esta es la fecha en la license/entitlement que se activa. Para obtener el estado más reciente de tus derechos de uso, consulta la GetAgreementEntitlementsAPI. CreateAgreementRequest, AcceptAgreementRequest NUEVO

Sustituya un acuerdo existente

El aceptante puede actualizar su contrato a medio plazo para optar por condiciones más favorables o cambiar de vendedor para sus contratos. Esta acción rescinde el acuerdo vigente aprobado como entrada y crea un nuevo acuerdo neto. Esta acción equivale lógicamente a una CANCELACIÓN seguida de un NUEVO acuerdo, pero garantiza la continuidad de los derechos para el Aceptador y en ningún momento el Aceptador se queda sin derechos. CreateAgreementRequest, AcceptAgreementRequest REPLACE

Modificar un acuerdo existente

El aceptante solo puede modificar la configuración de las condiciones aceptadas. Por ejemplo, pueden activar o desactivar la renovación automática o modificar la cantidad comprada, siempre que el cambio de precio posterior a la modificación no dé lugar a reembolsos. Solo admitiremos la modificación del cargo si el acuerdo no se ha iniciado. Nota: El proponente puede modificar los precios según el plazo de pago por uso. Cualquier aumento en los precios de pago por uso tarda 90 días en entrar en vigor después de que se notifique al comprador sobre el aumento de precio. Cualquier disminución en los precios de pago por uso entrará en vigor inmediatamente. CreateAgreementRequest, AcceptAgreementRequest ENMENDAR

Activar o desactivar la renovación automática

El aceptante puede activar ON/Off la opción de renovación automática en su acuerdo si el vendedor ha habilitado los términos de la oferta de renovación. Si está habilitada, el servicio de contratos creará el acuerdo de renovación en la fecha de vencimiento del acuerdo original utilizando la última revisión de la oferta. La fecha de inicio de la creación de este Acuerdo será la misma que la fecha de finalización del acuerdo original. CreateAgreementRequest, AcceptAgreementRequest ENMENDAR

Cancelar un acuerdo

El aceptor puede cancelar el acuerdo de uso. Para todo lo demás, el comprador debe ponerse en contacto con el vendedor para iniciar la cancelación. Cuando cancelas el acuerdo, se desactivan tu licencia y tus derechos. CancelAgreement N/A

Busca acuerdos

El aceptante puede realizar una búsqueda en todos los acuerdos en los que participó como aceptante. AWS Marketplace La búsqueda devuelve una lista de acuerdos con información básica sobre los acuerdos. SearchAgreements N/A

Describa un acuerdo

El aceptante puede ver los detalles de un acuerdo, como el proponente, el aceptante, la fecha de inicio y la fecha de finalización. DescribeAgreement N/A

Obtenga las condiciones del acuerdo

El aceptante puede obtener detalles sobre los términos de un acuerdo en el que haya participado como aceptante. GetAgreementTerms N/A

Obtenga los derechos de un acuerdo

El aceptante puede obtener una visión a nivel de acuerdo del estado y los detalles de los derechos vinculados a su acuerdo; por ejemplo, si está en proceso de concesión o si ha sido rechazado (y, en caso afirmativo, por qué motivos), cuáles son los derechos que se conceden a los clientes. GetAgreementEntitlements N/A

Obtén un token de registro

El token de registro es un token de corta duración que necesitan los aceptantes para abrir una cuenta con los proponentes. Este token se utiliza tanto para los tipos de dimensiones dosificadas externamente como para los tipos de dimensiones acreditadas. El token solo es válido durante 30 minutos después de su creación y, actualmente, solo se aplica a los acuerdos de compra de SaaS. GetAgreementEntitlements N/A

Enumere los cargos del acuerdo

El aceptante puede ver los cargos y los detalles de la orden de compra asociados a ellos para su acuerdo. ListAgreementCharges N/A

Actualice las órdenes de compra

El aceptante puede añadir un número de orden de compra después de suscribirse a un producto. Una vez que un pedido de compra esté asociado a un cargo, la factura generada para ese cargo incluirá el número de pedido de compra. UpdatePurchaseOrders N/A

Enumere las solicitudes de cancelación

El aceptante puede enumerar todas las solicitudes de cancelación de los acuerdos en los que participa. La lista se puede filtrar por acuerdo, estado y otros criterios. ListAgreementCancellationRequests N/A

Obtén los detalles de la solicitud de cancelación

El aceptador puede obtener información detallada sobre una solicitud de cancelación específica iniciada por el vendedor (proponente), incluidos el estado, las fechas y los códigos de motivo. GetAgreementCancellationRequest N/A

Acepta una solicitud de cancelación

El aceptante puede aprobar una solicitud de cancelación iniciada por el vendedor (proponente) para obtener un acuerdo activo. Tras la aprobación, el flujo de trabajo de cancelación del acuerdo se ejecuta de forma asíncrona y el estado del acuerdo cambia a cancelado. Nota: Los usuarios también necesitan CancelAgreement permiso porque la aprobación de la solicitud de cancelación conlleva la cancelación del acuerdo. AcceptAgreementCancellationRequest, CancelAgreement N/A

Rechazar una solicitud de cancelación

El aceptante puede rechazar una solicitud de cancelación iniciada por el vendedor (proponente). Tras el rechazo, el acuerdo permanece activo y la solicitud de cancelación pasa a un estado terminal. El vendedor puede crear una nueva solicitud de cancelación si es necesario. RejectAgreementCancellationRequest N/A

Enumere las solicitudes de pago

El aceptante puede enumerar todas las solicitudes de pago de los acuerdos en los que participa. La lista se puede filtrar por acuerdo, estado y otros criterios. ListAgreementPaymentRequests N/A

Obtenga los detalles de la solicitud de pago

El aceptante puede obtener información detallada sobre una solicitud de pago específica iniciada por el vendedor (proponente), incluidos el estado, las fechas y los cargos asociados. GetAgreementPaymentRequest N/A

Acepta una solicitud de pago

El aceptante puede aprobar una solicitud de pago iniciada por el vendedor (proponente) para establecer un acuerdo activo. AcceptAgreementPaymentRequest N/A

Rechaza una solicitud de pago

El aceptante puede rechazar una solicitud de pago iniciada por el vendedor (proponente). Tras el rechazo, la solicitud de pago pasa a un estado terminal. El vendedor puede crear una nueva solicitud de pago si es necesario. RejectAgreementPaymentRequest N/A

Genera una cotización

Se utiliza CreateAgreementRequest para generar una cotización. Debe proporcionar:

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

Construyendo los términos solicitados

Para construirrequestedTerms, necesitas determinar dos cosas:

  1. Qué condiciones incluir, determinadas por el modelo de precios de la oferta. Consulte Términos obligatorios por modelo de precios.

  2. Qué términos necesitan configuración: la mayoría de los términos solo necesitan la configuraciónid, pero tres tipos de términos requieren una configuración adicional proporcionada por el comprador. Consulte Configuraciones de términos.

Términos obligatorios por modelo de precios

El pricingModel.PricingModel campo de la GetOfferrespuesta determina qué términos deben incluirse en suCreateAgreementRequest.

Los siguientes términos deben incluirse en cada acuerdo cuando estén presentes en la oferta: LegalTermSupportTerm,ValidityTerm, yRenewalTerm.

nota

FreeTrialPricingTermsolo se aceptará una vez por producto; CreateAgreementRequest se devolverá un error si el comprador ya ha utilizado una versión de prueba gratuita.

CONTRATO

Todos los términos devueltos por GetOfferTermsson obligatorios en uno soloCreateAgreementRequest.

USO

La creación del acuerdo depende de los términos presentes en la oferta:

  1. Primer acuerdo: acepta UsageBasedPricingTerm and/or RecurringPaymentTerm (según lo que incluya la oferta) junto con las condiciones obligatorias. Esto otorga derechos de uso del producto.

  2. Acuerdos posteriores (opcionales): si la oferta incluyeConfigurableUpfrontPricingTerm, o PaymentScheduleTerm si lo deseaFixedUpfrontPricingTerm, puede crear un acuerdo independiente para realizar compras anuales y obtener descuentos en los precios.

nota

Si creas ambos acuerdos y luego deseas cancelarlos, cancela primero el acuerdo posterior (conConfigurableUpfrontPricingTerm) y, a continuación, cancela el primer acuerdo (con UsageBasedPricingTerm and/or RecurringPaymentTerm).

BYOL

Acepte ByolPricingTerm junto con las condiciones obligatorias.

Configuraciones de términos

La mayoría de los términos solo requieren el id formulario GetOfferTerms. Los siguientes tipos de términos requieren que el comprador los suministre configuration además del: id

Tipo de término Configuración Lo que proporciona el comprador
ConfigurableUpfrontPricingTerm ConfigurableUpfrontPricingTermConfiguration Duración del contrato y número de unidades por dimensión
RenewalTerm RenewalTermConfiguration Si se debe renovar automáticamente cuando venza el acuerdo
VariablePaymentTerm VariablePaymentTermConfiguration Cómo se aprueban las solicitudes de pago del vendedor

ConfigurableUpfrontPricingTermConfiguration

Usa el siguiente ejemplo para localizar los valores necesariosConfigurableUpfrontPricingTermConfiguration.

Ejemplo de GetOfferTerms respuesta:

{ "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/fuente
ConfigurableUpfrontPricingTermConfiguration.selectorValue offerTerms[].configurableUpfrontPricingTerm.rateCards[].selector.value
Dimension.dimensionKey offerTerms[].configurableUpfrontPricingTerm.rateCards[].rateCard[].dimensionKey
Dimension.dimensionValue Buyer-supplied entero (número de unidades que se van a comprar para esa dimensión)
nota

El constraints campo de la tabla de tarifas determina la forma en que puede ConfigurableUpfrontPricingTermConfiguration crearlas, por ejemplo, si puede seleccionar varias dimensiones o solo una. Consulte el tipo de datos Restricciones para obtener más información.

Ejemplo de RequestedTerm carga útil paraConfigurableUpfrontPricingTerm:

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

RenewalTermConfiguration

Campo Valor/fuente
enableAutoRenew Buyer-supplied booleano (trueofalse): obligatorio

Ejemplo de carga RequestedTerm útil para: RenewalTerm

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

VariablePaymentTermConfiguration

Campo Valor/fuente
RequestedTerm.configuration.variablePaymentTermConfiguration.paymentRequestApprovalStrategy Buyer-supplied: AUTO_APPROVE_ON_EXPIRATION o WAIT_FOR_APPROVALobligatorio
RequestedTerm.configuration.variablePaymentTermConfiguration.expirationDuration Buyer-supplied duración (por ejemplo,P10D); se requiere solo cuando la estrategia es AUTO_APPROVE_ON_EXPIRATION

Ejemplo de RequestedTerm carga útil paraVariablePaymentTerm:

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

Acepta una oferta

En primer lugar, genere una cotización como se describe enGenera una cotización. A continuación, utilice AcceptAgreementRequest para aceptar la cotización y crear el acuerdo. Debe llamar AcceptAgreementRequest antes de que caduque la solicitud de acuerdo. Si lo desea, puede asociar un número de pedido de compra durante la aceptación.

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

Sustituya un acuerdo existente

Cree un acuerdo CreateAgreementRequest como se describe enGenera una cotización, pero intent configúrelo REPLACE e sourceAgreementIdentifier indíquelo junto con el acuerdo que desee reemplazar. Luego llame AcceptAgreementRequest para completar el reemplazo.

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

Modificar un acuerdo existente

Para modificar la configuración temporal de un acuerdo existente, intent configúrelo en AMEND y proporcionesourceAgreementIdentifier. A diferencia de un acuerdo nuevo, no agreementProposalIdentifier es necesario. Incluya únicamente los términos cuya configuración desee cambiar. A continuación, llame AcceptAgreementRequest para aplicar la modificación.

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

Activar o desactivar la renovación automática

Úselo CreateAgreementRequest con la AMEND intención de activar la renovación 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 un acuerdo

Se utiliza CancelAgreement para cancelar un acuerdo de uso. Para otros tipos de acuerdos, el comprador debe ponerse en contacto con el vendedor para iniciar la cancelación.

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

Busca acuerdos

Úselo SearchAgreements para buscar en todos los acuerdos en los que participe como aceptante. La búsqueda devuelve una lista de acuerdos con información básica sobre los acuerdos.

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

Describa un acuerdo

Se utiliza DescribeAgreement para ver los detalles de un acuerdo, como el proponente, el aceptante, la fecha de inicio y la fecha de finalización.

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

Obtenga las condiciones del acuerdo

Úselo GetAgreementTerms para obtener detalles sobre los términos de un acuerdo en el que participe como aceptante.

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

Obtenga los derechos de un acuerdo

Úselo GetAgreementEntitlements para obtener una visión a nivel de acuerdo del estado y los detalles de los derechos vinculados a su acuerdo.

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

Obtén un token de registro

GetAgreementEntitlementsÚselo para obtener un token de registro. Los aceptadores necesitan este token de corta duración (válido durante 30 minutos) para abrir una cuenta con los proponentes. Actualmente solo se aplica a los acuerdos 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

Enumere los cargos del acuerdo

ListAgreementChargesUtilícelo para ver los cargos y los detalles del pedido de compra asociados a su acuerdo.

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

Actualice las órdenes de compra

Se utiliza UpdatePurchaseOrders para añadir un número de pedido de compra después de suscribirse a un producto. Usa el chargeId y el resultado chargeRevision de la Enumere los cargos del acuerdo respuesta. Una vez que un pedido de compra está asociado a un cargo, la factura generada para ese cargo incluye el número del pedido de compra.

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

Enumere las solicitudes de cancelación

ListAgreementCancellationRequestsUtilícela para enumerar todas las solicitudes de cancelación de los acuerdos en los que participa. Puede filtrar por acuerdo, estado y otros criterios.

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

Obtén los detalles de la solicitud de cancelación

Se usa GetAgreementCancellationRequest para recuperar información detallada sobre una solicitud de cancelación específica, incluidos el estado, las marcas horarias y los 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']}")

Acepta una solicitud de cancelación

Se utiliza AcceptAgreementCancellationRequest para aprobar una solicitud de cancelación iniciada por el vendedor. Tras la aprobación, el flujo de trabajo de cancelación del acuerdo se ejecuta de forma asíncrona. También necesita CancelAgreement permiso porque la aprobación de la solicitud de cancelación implica la cancelación del acuerdo.

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

Rechazar una solicitud de cancelación

Se utiliza RejectAgreementCancellationRequest para rechazar una solicitud de cancelación iniciada por el vendedor. Tras el rechazo, el acuerdo permanece activo y el vendedor puede crear una nueva solicitud de cancelación si es necesario.

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

Enumere las solicitudes de pago

ListAgreementPaymentRequestsUtilícela para enumerar todas las solicitudes de pago de los acuerdos en los que participa. Puede filtrar por acuerdo, estado y otros criterios.

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

Obtenga los detalles de la solicitud de pago

Se usa GetAgreementPaymentRequest para recuperar información detallada sobre una solicitud de pago específica, incluidos el estado, las fechas y los cargos asociados.

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

Acepta una solicitud de pago

Se utiliza AcceptAgreementPaymentRequest para aprobar una solicitud de pago iniciada por el vendedor para un acuerdo activo.

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

Rechaza una solicitud de pago

Se utiliza RejectAgreementPaymentRequest para rechazar una solicitud de pago iniciada por el vendedor. Tras el rechazo, el vendedor puede crear una nueva solicitud de pago si es necesario.

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