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 |
|---|---|---|---|
| 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 | |
| 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 | |
| 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 | |
| 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 | |
| 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 | |
| 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 | |
| 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 | |
| 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 | |
| El aceptante puede obtener detalles sobre los términos de un acuerdo en el que haya participado como aceptante. | GetAgreementTerms |
N/A | |
| 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 | |
| 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 | |
| El aceptante puede ver los cargos y los detalles de la orden de compra asociados a ellos para su acuerdo. | ListAgreementCharges |
N/A | |
| 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 | |
| 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 | |
| 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 | |
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 | |
| 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 | |
| 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 | |
| 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 | |
| El aceptante puede aprobar una solicitud de pago iniciada por el vendedor (proponente) para establecer un acuerdo activo. | AcceptAgreementPaymentRequest |
N/A | |
| 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:
agreementProposalIdentifier— elagreementProposalIdde la GetOfferrespuesta.requestedTerms— construido a partir de los términos de la GetOfferTermsrespuesta. Cada término requiere el suyoid, y algunos requieren uno adicionalconfiguration. Consulte Construyendo los términos 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']}")
Construyendo los términos solicitados
Para construirrequestedTerms, necesitas determinar dos cosas:
Qué condiciones incluir, determinadas por el modelo de precios de la oferta. Consulte Términos obligatorios por modelo de precios.
Qué términos necesitan configuración: la mayoría de los términos solo necesitan la configuración
id, 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:
Primer acuerdo: acepta
UsageBasedPricingTermand/orRecurringPaymentTerm(según lo que incluya la oferta) junto con las condiciones obligatorias. Esto otorga derechos de uso del producto.Acuerdos posteriores (opcionales): si la oferta incluye
ConfigurableUpfrontPricingTerm, oPaymentScheduleTermsi 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_APPROVAL — obligatorio |
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' )