> ## Documentation Index
> Fetch the complete documentation index at: https://developers.hubspot.es/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# API de CRM | Cotizaciones

export const ScopesList = ({scopes = [], description = "Esta API requiere uno de los siguientes ámbitos:"}) => {
  if (!scopes || scopes.length === 0) {
    return null;
  }
  const sortedScopes = scopes.sort((a, b) => a.localeCompare(b));
  return <div>
      <div className="text-sm mb-2">{description}</div>
      <div>
        {sortedScopes.map((scope, index) => <div key={index}>
            <code>
              <span className="text-xs">{scope}</span>
            </code>
          </div>)}
      </div>
    </div>;
};

<RelatedApiLink />

<Accordion title="Requisitos de ámbito">
  <ScopesList
    scopes={[
  'crm.objects.quotes.read',
  'crm.objects.quotes.write'
]}
  />
</Accordion>

Utiliza la API de cotizaciones para crear, gestionar y obtener cotizaciones de ventas, y así compartir información sobre precios con posibles compradores. Una vez configurada, una cotización se puede compartir con un comprador, ya sea en una URL especificada o a través de un PDF. Los usuarios también pueden [gestionar cotizaciones en HubSpot](https://knowledge.hubspot.com/es/quotes/set-up-legacy-quotes-legacy#manage-quotes) para agregar detalles, actualizar asociaciones y mucho más.

Si has configurado los [pagos de HubSpot](https://knowledge.hubspot.com/es/payment-processing/set-up-payments) o el [procesamiento de pagos con Stripe](https://knowledge.hubspot.com/es/payment-processing/connect-your-stripe-account-as-a-payment-processor-in-hubspot), puedes configurar una cotización para que se pague a través de esta API. Obtén más información sobre las [cotizaciones por pagar](https://developers.hubspot.es/docs/api-reference/crm-quotes-v3/guide#enable-payments).

<Frame>
  <img src="https://www.hubspot.es/hubfs/Knowledge_Base_2023/example-quote-api.png" alt="example-quote-api" />
</Frame>

**Ejemplo de uso:** necesitas crear una propuesta de contrato para un cliente interesado en adquirir uno de tus paquetes anuales de servicios de auditoría SEO.

A continuación, aprende cómo crear una cotización a través de la API y configurar sus diversas propiedades, asociaciones, estados y mucho más.

## Resumen

El proceso de creación de cotizaciones se puede dividir en los siguientes pasos:

1. **Crear una cotización:** crea una cotización con algunos detalles, como el nombre y la fecha de vencimiento. También puedes configurar la cotización para [habilitar las firmas electrónicas](https://developers.hubspot.es/docs/api-reference/crm-quotes-v3/guide#enable-e-signatures) y [los pagos](https://developers.hubspot.es/docs/api-reference/crm-quotes-v3/guide#enable-payments)[](https://knowledge.hubspot.com/es/quotes/use-e-signatures-with-quotes).
2. **Configurar asociaciones:** asocia la cotización con otros tipos de objetos del CRM, como elementos de pedido, plantillas de cotización, un negocio, entre otros. Durante el siguiente paso, la cotización heredará los valores de propiedad de algunos de estos registros asociados, así como la configuración de la cuenta.
3. **Establecer el estado de la cotización:** establece el estado de la cotización para que refleje que está lista para ser compartida con los compradores. Al establecer el estado de la cotización, como convertirla en un borrador editable o en una cotización publicada y accesible de forma pública, [heredará ciertas propiedades](#properties-set-by-quote-state) de los registros de CRM asociados y de la configuración de la cuenta.
4. **Compartir la cotización:** una vez que se ha publicado una cotización, puedes compartirla con tus compradores.

## Crear una cotización

Para crear una cotización, primero debes configurar sus detalles básicos realizando una solicitud `POST` a `/crm/v3/objects/quotes`. Luego, deberás hacer una llamada separada para asociar la cotización con otros objetos, como la plantilla de cotización, los elementos de pedido o un negocio.

<Info>
  Dependiendo de tu flujo de trabajo preferido, puedes [crear una cotización con asociaciones a través de una solicitud POST](#create-a-quote-with-associations-single-request).
</Info>

En el cuerpo de la solicitud, incluye las siguientes propiedades obligatorias para configurar los detalles básicos:

```json theme={null}
{
  "properties": {
    "hs_title": "CustomerName - annual SEO audit",
    "hs_expiration_date": "2023-12-10"
  }
}
```

| Parámetro | Tipo | Descripción |
| - | - | - |
| `hs_title` | Cadena | El nombre de la cotización. |
| `hs_expiration_date` | Cadena | La fecha en la que vence la cotización. |

Las anteriores son solo las propiedades mínimas requeridas para comenzar una cotización, pero se necesitan [otras propiedades](https://developers.hubspot.es/docs/api-reference/crm-quotes-v3/guide#adding-associations) para publicar una cotización. Para ver todas las propiedades disponibles para las cotizaciones, haz una solicitud `GET` a `crm/v3/properties/quotes`. Más información sobre la [API de propiedades](/docs/api-reference/crm-properties-v3/guide).

La respuesta incluirá un `id`, que utilizarás para seguir configurando la cotización. Puedes actualizar las propiedades de la cotización en cualquier momento realizando una solicitud `PATCH` a `/crm/v3/objects/quotes/{quoteId}`.

### Propietario de la cotización

Establecer la propiedad `hubspot_owner_id` manualmente no es posible debido a que es una propiedad calculada, y cualquier valor será anulado. Cuando se utilizan cotizaciones, la propiedad funciona del siguiente modo:

* Si hay un [negocio asociado a la cotización](#adding-associations), la propiedad `hubspot_owner_id` reflejará la propiedad `hs_associated_deal_owner_id` (`hs_associated_deal_owner_id` es una propiedad calculada).
* Si no hay una cotización asociada a un negocio, la propiedad `hubspot_owner_id` mostrará la propiedad `hs_quote_owner_id`.

### Habilitar firmas electrónicas

Para habilitar las firmas electrónicas en la cotización, incluye la propiedad booleana `hs_esign_enabled` en el cuerpo de la solicitud con un valor de `true`. Ten en cuenta que no podrás agregar firmantes adicionales a través de la API, por lo que deberán agregarse en HubSpot antes de publicar la cotización. Tampoco puedes publicar una cotización con firma electrónica si has [excedido tu límite mensual de firmas electrónicas](https://knowledge.hubspot.com/es/quotes/use-e-signatures-with-quotes#monitor-e-signature-usage).

```json theme={null}
{
  "properties": {
    "hs_title": "CustomerName - annual SEO audit",
    "hs_expiration_date": "2023-12-10",
    "hs_esign_enabled": "true"
  }
}
```

Más adelante, podrás asociar la cotización con todos sus firmantes. Si bien los contactos que firman la cotización existen como contactos en HubSpot, se almacenan como un tipo de asociación independiente de los contactos. Más información sobre cómo [asociar cotizaciones con los firmantes de la cotización](#associating-quote-signers).

### Habilitar los pagos

Para activar los pagos en una cotización, incluye la propiedad booleana `hs_payment_enabled` en el cuerpo de la solicitud con un valor de `true`. Dependiendo del procesador de pagos que utilices y de los métodos de pago aceptados, también tendrás que establecer `hs_payment_type` y `hs_allowed_payment_methods`.

<Warning>
  ### Nota:

  La cuenta de HubSpot debe tener configurados los [Pagos de HubSpot](https://knowledge.hubspot.com/es/payment-processing/set-up-payments) o el [Procesamiento de pagos con Stripe](https://knowledge.hubspot.com/es/payment-processing/connect-your-stripe-account-as-a-payment-processor-in-hubspot) antes de utilizar esta función.
</Warning>

| Parámetro | Tipo | Descripción |
| - | - | - |
| `hs_payment_enabled` | Booleano | Cuando se establece como `true`, permite que la cotización pueda procesar el pago utilizando los pagos de HubSpot o el procesamiento de pagos con Stripe. Por opción predeterminada es `false`. |
| `hs_payment_type` | Enumeración | Determina qué procesador de pagos se va a utilizar. El valor puede ser `HUBSPOT` o `BYO_STRIPE`. |
| `hs_allowed_payment_methods` | Enumeración | Los métodos de pago que se utilizarán (por ejemplo, tarjeta de crédito). |
| `hs_collect_billing_address` | Booleano | Cuando se establece como `true`, le permite al comprador introducir su dirección de facturación durante el proceso de pago. |
| `hs_collect_shipping_address` | Booleano | Cuando se establece como `true`, le permite al comprador introducir su dirección de envío durante el proceso de pago. |

Por ejemplo, para crear una cotización y habilitar los pagos de HubSpot con tarjeta de crédito, débito o ACH, tu solicitud sería la siguiente:

```json theme={null}
{
  "properties": {
    "hs_title": "CustomerName - annual SEO audit",
    "hs_expiration_date": "2023-12-10",
    "hs_payment_enabled": "true",
    "hs_payment_type": "HUBSPOT",
    "hs_allowed_payment_methods": "CREDIT_OR_DEBIT_CARD;ACH"
  }
}
```

Para hacer seguimiento del pago, HubSpot actualizará automáticamente las propiedades `hs_payment_status` y `hs_payment_date`:

* Cuando publiques una cotización con los pagos habilitados, HubSpot establecerá automáticamente la propiedad `hs_payment_status` como `PENDING`.
* Si utilizas ACH, cuando se procese el pago, HubSpot establecerá automáticamente la propiedad `hs_payment_status` a `PROCESSING`.
* Cuando se confirme el pago, HubSpot establecerá automáticamente la propiedad `hs_payment_status` como `PAID`.
* Una vez que se pague la cotización, HubSpot establecerá automáticamente `hs_payment_date` en la fecha y hora en que se confirmó el pago.
* Una vez confirmado el pago, este se asocia automáticamente a la cotización. Si deseas obtener más información sobre los pagos, consulta la [API de pagos](/docs/api-reference/crm-commerce-payments-v3/guide).

## Agregar asociaciones

Para crear una cotización completa, deberás asociarla con otros registros de CRM, como elementos de pedido, utilizando la [API de asociaciones](/docs/api-reference/crm-associations-v4/guide). La siguiente tabla muestra qué asociaciones de registros de CRM se requieren para que una cotización esté completa y cuáles son opcionales. Sigue leyendo para obtener más información sobre cómo buscar los ID de registros y usarlos para crear las asociaciones necesarias.

| Tipo de objeto | Requerido | Descripción |
| - | - | - |
| [Elementos de pedido](https://developers.hubspot.es/docs/api-reference/crm-line-items-v3/guide) | Sí | Los bienes o servicios que se venden a través de la cotización. Puedes crear elementos de pedido a partir de los [productos de tu biblioteca de productos](https://developers.hubspot.es/docs/api-reference/crm-products-v3/guide) o crear elementos de pedido personalizados. |
| [Plantilla de cotización](https://knowledge.hubspot.com/es/quotes/set-up-legacy-quotes-legacy) | Sí | La plantilla que representa la cotización, además de proporcionar algunos ajustes de configuración predeterminados para la cotización, como el idioma. Cada cotización se puede asociar con una plantilla. |
| [Negocio](/docs/api-reference/crm-deals-v3/guide) | Sí | El registro del negocio para el seguimiento de los ingresos y el ciclo de vida de las ventas. Una cotización hereda los valores del negocio asociado, incluidos el usuario responsable y la divisa. Cada cotización se puede asociar a un negocio. |
| [Contacto](/docs/api-reference/crm-contacts-v3/guide) | No | Compradores específicos a los que te estás dirigiendo en la cotización. |
| [Empresa](/docs/api-reference/crm-companies-v3/guide) | No | Una empresa específica a la que te estás dirigiendo en la cotización. Cada cotización se puede asociar a una empresa. |
| [Descuentos](/docs/api-reference/crm-discounts-v3/guide), [tarifas](/docs/api-reference/crm-fees-v3/guide) e [impuestos](/docs/api-reference/crm-taxes-v3/guide) | No | Todos los descuentos, tarifas e impuestos que se apliquen al momento de pagar. Al determinar la cantidad total de la cotización, HubSpot aplica primero los descuentos, seguidos de las tarifas y luego los impuestos. Puedes usar el campo `hs_sort_order` para reordenar los objetos del mismo tipo. Se pueden establecer en valores o porcentajes fijos en el campo `hs_type` en `FIXED` o en `PERCENT`. |

### Buscar ID para asociaciones

Para realizar cada asociación, primero tendrás que buscar el ID de cada objeto que quieras asociar. Para obtenerr cada ID, debes realizar una solicitud `GET` al endpoiny del objeto correspondiente, el cual sigue el mismo patrón en cada objeto del CRM. Al realizar cada solicitud, también puedes incluir un parámetro de consulta de `properties` para obtener propiedades específicas cuando sea necesario. A continuación se muestran ejemplos de solicitudes `GET` para cada tipo de objeto.

<CodeGroup>
  ```text hubl.txt theme={null}
  GET request for line items
  /crm/v3/objects/line_items?properties=name

  GET request for quote templates
  /crm/v3/objects/quote_template?properties=hs_name

  GET request for deals
  /crm/v3/objects/deals?properties=dealname

  GET request for contacts
  /crm/v3/objects/contacts?properties=email

  GET request for companies
  /crm/v3/objects/companies?properties=name

  GET request for discounts
  crm/v3/objects/discounts?properties=hs_type,hs_value

  GET request for fees
  crm/v3/objects/fees?properties=hs_type,hs_value

  GET request for taxes
  crm/v3/objects/taxes?properties=hs_type,hs_value
  ```

  ```bash example.sh theme={null}
  #GET request for line items
  curl --request GET \
  --url 'https://api.hubapi.com/crm/v3/properties/line_items?archived=false' \
  --header 'authorization: Bearer YOUR_ACCESS_TOKEN'

  #GET request for quote templates
  curl --request GET \
  --url 'https://api.hubapi.com/crm/v3/properties/quote_templates?archived=false' \
  --header 'authorization: Bearer YOUR_ACCESS_TOKEN'

  #GET request for deals
  curl --request GET \
  --url 'https://api.hubapi.com/crm/v3/properties/deals?archived=false' \
  --header 'authorization: Bearer YOUR_ACCESS_TOKEN'

  #GET request for contacts
  curl --request GET \
  --url 'https://api.hubapi.com/crm/v3/properties/contacts?archived=false' \
  --header 'authorization: Bearer YOUR_ACCESS_TOKEN'

  #GET request for companies
  curl --request GET \
  --url 'https://api.hubapi.com/crm/v3/properties/companies?archived=false' \
  --header 'authorization: Bearer YOUR_ACCESS_TOKEN'

  #GET request for discounts
  curl --request GET \
  --url 'https://api.hubapi.com/crm/v3/properties/discounts?archived=false' \
  --header 'authorization: Bearer YOUR_ACCESS_TOKEN'

  #GET request for fees
  curl --request GET \
  --url 'https://api.hubapi.com/crm/v3/properties/fees?archived=false' \
  --header 'authorization: Bearer YOUR_ACCESS_TOKEN'

  #GET request for taxes
  curl --request GET \
  --url 'https://api.hubapi.com/crm/v3/properties/taxes?archived=false' \
  --header 'authorization: Bearer YOUR_ACCESS_TOKEN'
  ```
</CodeGroup>

Cada llamada exitosa devolverá una respuesta `200` con detalles para cada tipo de objeto obtenido. Usarás el valor en el campo `id` para establecer asociaciones en el siguiente paso.

```json theme={null}
{
  "results": [
    {
      "id": "235425923863",
      "properties": {
        "hs_createdate": "2023-06-12T16:27:32.794Z",
        "hs_lastmodifieddate": "2023-06-12T16:27:32.794Z",
        "hs_name": "Default Basic",
        "hs_object_id": "235425923863"
      },
      "createdAt": "2023-06-12T16:27:32.794Z",
      "updatedAt": "2023-06-12T16:27:32.794Z",
      "archived": false
    },
    {
      "id": "235425923864",
      "properties": {
        "hs_createdate": "2023-06-12T16:27:32.794Z",
        "hs_lastmodifieddate": "2023-06-12T16:27:32.794Z",
        "hs_name": "Default Modern",
        "hs_object_id": "235425923864"
      },
      "createdAt": "2023-06-12T16:27:32.794Z",
      "updatedAt": "2023-06-12T16:27:32.794Z",
      "archived": false
    },
    {
      "id": "235425923865",
      "properties": {
        "hs_createdate": "2023-06-12T16:27:32.794Z",
        "hs_lastmodifieddate": "2023-06-12T16:27:32.794Z",
        "hs_name": "Default Original",
        "hs_object_id": "235425923865"
      },
      "createdAt": "2023-06-12T16:27:32.794Z",
      "updatedAt": "2023-06-12T16:27:32.794Z",
      "archived": false
    }
  ]
}
```

### Crear asociaciones

Una vez tengas los ID, ahora puedes realizar llamadas a la [API de asociaciones](/docs/api-reference/crm-associations-v4/guide) para crear las asociaciones.

Para cada tipo de objeto que quieras asociar con una cotización, deberás realizar una llamada por separado haciendo una solicitud `PUT` utilizando la siguiente estructura de URL:

`/crm/v4/objects/quotes/{fromObjectId}/associations/default/{toObjectType}/{toObjectId}`

| Parámetro | Descripción |
| - | - |
| `fromObjectId` | El ID de la cotización. |
| `toObjectType` | El tipo de objeto con el que se está asociando. Por ejemplo, `line_items`, `deals` y `quote_template`. |
| `toObjectId` | El ID del objeto con el que asocias la cotización. |

A continuación se muestran ejemplos de solicitudes `PUT` para cada tipo de objeto.

<CodeGroup>
  ```text hubl.txt theme={null}
  PUT request to associate a line item
  /crm/v4/objects/quotes/{quoteId}/associations/default/line_items/{lineItemId}

  PUT request to associate a quote template
  /crm/v4/objects/quotes/{quoteId}/associations/default/quote_template/{quoteTemplateId}

  PUT request to associate a deal
  /crm/v4/objects/quotes/{quoteId}/associations/default/deals/{dealId}

  PUT request to associate contacts
  /crm/v4/objects/quotes/{quoteId}/associations/default/contacts/{contactId}

  PUT request to associate companies
  /crm/v4/objects/quotes/{quoteId}/associations/default/companies/{companyId}

  PUT request to associate discounts
  /crm/v4/objects/quotes/{quoteId}/associations/default/discounts/{discountId}

  PUT request to associate fees
  /crm/v4/objects/quotes/{quoteId}/associations/default/fees/{feeId}

  PUT request to associate taxes
  /crm/v4/objects/quotes/{quoteId}/associations/default/taxes/{taxId}
  ```

  ```bash example.sh theme={null}
  #PUT request to associate line items
  curl --request PUT \
  --url https://api.hubapi.com/crm/v4/objects/quotes/{quoteId}/associations/default/line_items/{lineItemId} \
  --header 'authorization: Bearer YOUR_ACCESS_TOKEN'

  #PUT request to associate a quote template
  curl --request PUT \
  --url https://api.hubapi.com/crm/v4/objects/quotes/{quote_ID}/associations/default/quote_template/{quoteTemplateId} \
  --header 'authorization: Bearer YOUR_ACCESS_TOKEN'

  #PUT request to associate a deal
  curl --request PUT \
  --url https://api.hubapi.com/crm/v4/objects/quotes/{quoteId}/associations/default/deals/{dealId} \
  --header 'authorization: Bearer YOUR_ACCESS_TOKEN'

  #PUT request to associate contacts
  curl --request PUT \
  --url https://api.hubapi.com/crm/v4/objects/quotes/{quoteId}/associations/default/contacts/{contactId} \
  --header 'authorization: Bearer YOUR_ACCESS_TOKEN'

  #PUT request to associate a company
  curl --request PUT \
  --url https://api.hubapi.com/crm/v4/objects/quotes/{quoteId}/associations/default/companies/{companyId} \
  --header 'authorization: Bearer YOUR_ACCESS_TOKEN'

  #PUT request to associate discounts
  curl --request PUT \
  --url https://api.hubapi.com/crm/v4/objects/quotes/{quoteId}/associations/default/discounts/{discountId} \
  --header 'authorization: Bearer YOUR_ACCESS_TOKEN'

  #PUT request to associate fees
  curl --request PUT \
  --url https://api.hubapi.com/crm/v4/objects/quotes/{quoteId}/associations/default/fees/{feeId} \
  --header 'authorization: Bearer YOUR_ACCESS_TOKEN'

  #PUT request to associate taxes
  curl --request PUT \
  --url https://api.hubapi.com/crm/v4/objects/quotes/{quoteId}/associations/default/line_items/{taxId} \
  --header 'authorization: Bearer YOUR_ACCESS_TOKEN'
  ```
</CodeGroup>

Por ejemplo, si tu cotización tiene el ID `123456`, las solicitudes para asociar la cotización podrían incluir lo siguiente:

* **Elementos de pedido (ID: `55555`, `66666`):**
  * `/crm/v4/objects/quotes/123456/associations/default/line_items/55555`
  * `/crm/v4/objects/quotes/123456/associations/default/line_items/66666`
* **Plantilla de cotización (ID:** `987654`**):** `/crm/v4/objects/quotes/123456/associations/default/quote_template/987654`
* **Negocio (ID: `345345`):** `/crm/v4/objects/quotes/123456/associations/default/deals/345345`

Cada asociación exitosa devolverá una respuesta `200` con detalles sobre la asociación. Las llamadas anteriores asociarán los objetos en ambas direcciones, con cada dirección teniendo su propio ID. Por ejemplo, si asocias la cotización con una plantilla de cotización, la respuesta describirá la asociación desde ambos lados. En la respuesta del ejemplo a continuación, `286` es el ID del tipo de asociación de cotización a la plantilla de cotización, y `285` es el ID del tipo de asociación de la plantilla de cotización a cotización.

```json theme={null}
{
  "status": "COMPLETE",
  "results": [
    {
      "from": {
        "id": "115045534742"
      },
      "to": {
        "id": "102848290"
      },
      "associationSpec": {
        "associationCategory": "HUBSPOT_DEFINED",
        "associationTypeId": 285
      }
    },
    {
      "from": {
        "id": "102848290"
      },
      "to": {
        "id": "115045534742"
      },
      "associationSpec": {
        "associationCategory": "HUBSPOT_DEFINED",
        "associationTypeId": 286
      }
    }
  ],
  "startedAt": "2023-10-12T16:48:40.624Z",
  "completedAt": "2023-10-12T16:48:40.712Z"
}
```

<Warning>
  ### Ten en cuenta los siguientes límites al asociar una cotización a una plantilla de cotización:

  * Las plantillas de cotizaciones deben [crearse](https://knowledge.hubspot.com/es/quotes/set-up-legacy-quotes-legacy) antes de que puedan asociarse con una cotización.
  * Una cotización solo se puede asociar con una plantilla de cotización.
  * Esta API no admite cotizaciones preexistentes o propuestas. Solo se puede usar el tipo de plantilla `CUSTOMIZABLE_QUOTE_TEMPLATE`.
</Warning>

### Asociar firmantes de cotizaciones

Si [habilitaste la cotización para firmas electrónicas](#enable-e-signatures), también deberás crear una asociación entre la cotización y los contactos que están firmando mediante el uso de una [etiqueta de asociación](/docs/api-reference/crm-associations-v4/guide#associate-records-with-a-label) específica de cotización a contacto.

En lugar de utilizar los endpoints de asociación predeterminados que se muestran arriba, deberás realizar una solicitud `PUT` a la siguiente URL:

`/crm/v4/objects/quote/{quoteId}/associations/contact/{contactId}`

En el cuerpo de la solicitud, deberás especificar `associationCategory` y `associationTypeId`, como se muestra a continuación:

```json theme={null}
[
  {
    "associationCategory": "HUBSPOT_DEFINED",
    "associationTypeId": 702
  }
]
```

## Crear una cotización con asociaciones (solicitud única)

El siguiente cuerpo de solicitud creará una nueva cotización con asociaciones a una plantilla de cotización, un negocio, dos elementos de pedido y un contacto.

<Info>
  Para que el cuerpo de la solicitud que aparece a continuación cree correctamente una cotización en la cuenta, tendrás que actualizar los ID de objeto en el campo `associations` para que coincidan con los datos existentes en el CRM. Revisa la sección [buscar ID para asociaciones](#retrieving-ids-for-associations) para obtener más información.
</Info>

`POST` `/crm/v3/objects/quote`

```json theme={null}
{
  "properties": {
    "hs_title": "CustomerName - annual SEO audit",
    "hs_expiration_date": "2023-09-30"
  },
  "associations": [
    {
      "to": {
        "id": 115045534742
      },
      "types": [
        {
          "associationCategory": "HUBSPOT_DEFINED",
          "associationTypeId": 286
        }
      ]
    },
    {
      "to": {
        "id": 14795354663
      },
      "types": [
        {
          "associationCategory": "HUBSPOT_DEFINED",
          "associationTypeId": 64
        }
      ]
    },
    {
      "to": {
        "id": 75895447
      },
      "types": [
        {
          "associationCategory": "HUBSPOT_DEFINED",
          "associationTypeId": 67
        }
      ]
    },
    {
      "to": {
        "id": 256143985
      },
      "types": [
        {
          "associationCategory": "HUBSPOT_DEFINED",
          "associationTypeId": 67
        }
      ]
    }
  ]
}
```

| Parámetro | Tipo | Descripción |
| - | - | - |
| `properties` | Objeto | Valores de propiedad para definir los detalles de la cotización. Las propiedades requeridas son `hs_title` y `hs_expiration_date`: <ul><li>`hs_title`: el nombre de la cotización.</li><li>`hs_expiration_date`: la fecha de caducidad de la cotización.</li><li>`hs_status`: el [estado de la cotización](#update-quote-state). Si no se proporciona en el momento de la creación, los usuarios no podrán editar la cotización en HubSpot.</li></ul> |
| `associations` | Matriz | Los demás registros y objetos del CRM asociados a la cotización. Para que una cotización se pueda publicar, debe tener un negocio asociado y una plantilla de cotización. Los elementos de pedido asociados a una cotización deben ser distintos de los elementos de pedido asociados a la cotización del negocio (es decir, debes crear copias de los elementos de pedido).<br /><br />Para establecer cada asociación, incluye un objeto independiente en esta matriz con los siguientes campos:<ul><li>`to`: el ID del registro u objeto que se va a asociar a la cotización.</li><li>`associationCategory`: la [categoría de etiqueta](/docs/api-reference/crm-associations-v4/guide#associate-records-with-a-label) del tipo de asociación, ya sea `"HUBSPOT_DEFINED"` (etiqueta predeterminada) o `"USER_DEFINED"` (etiqueta personalizada).</li><li>`associationTypeId`: el [ID del tipo de asociación](/docs/api-reference/crm-associations-v4/guide#association-type-id-values) que se está realizando. Por ejemplo:<ul><li>`286`: plantilla de cotización a cotización</li><li>`64`: cotización a negocio</li><li>`67`: cotización a elemento de pedido</li></ul></li></ul> |

<Warning>
  ### Nota:

  Estos elementos de pedido deben ser diferentes a los elementos de pedido de otros objetos, incluso si están asociados (por ejemplo, asociar una cotización a un negocio). Consulta la [documentación de la API de elementos de pedido](https://developers.hubspot.es/docs/api-reference/crm-line-items-v3/guide) para obtener más información.
</Warning>

## Actualizar el estado de la cotización

El estado de una cotización describe qué tan avanzado está en el proceso de creación, desde la configuración inicial hasta su publicación y el acceso público. El estado de la cotización también puede reflejar el [proceso de aprobación de la cotización](https://knowledge.hubspot.com/es/quotes/set-up-legacy-quotes), si las aprobaciones de cotizaciones están habilitadas para la cuenta. Al establecer el estado de una cotización, HubSpot completará [automáticamente ciertas propiedades](#properties-set-by-quote-state).

Puedes actualizar el estado de una cotización haciendo una solicitud `PATCH` a `/crm/v3/objects/quote/{quoteId}`.

El estado de una cotización se basa en el campo `hs_status`. Ciertos estados de cotización permiten a los usuarios editar, publicar y usar la cotización en los flujos de trabajo de aprobación de cotizaciones. A continuación se muestran los estados de cotización disponibles.

* **Sin estado:** si no se proporciona ningún valor para el campo `hs_status`, la cotización estará en el estado *Mínimo*. La cotización aparecerá en la página de índice de la herramienta cotizaciones, pero no se podrá editar directamente. Las cotizaciones en este estado todavía se pueden usar en la automatización, como la herramienta de secuencias y también están disponibles para analizar dentro de la herramienta de informes.
* `DRAFT`: permite editar la cotización en HubSpot. Este estado puede ser útil cuando la cotización no está completamente configurada o si prefieres permitir que los representantes de ventas completen el proceso de configuración de la cotización en HubSpot.
* `APPROVAL_NOT_NEEDED`: publica la cotización en una URL de acceso público (`hs_quote_link`) sin necesidad de [aprobación](https://knowledge.hubspot.com/es/quotes/set-up-legacy-quotes).
* `PENDING_APPROVAL`: indica que la cotización está a la [espera de ser aprobada](https://knowledge.hubspot.com/es/quotes/set-up-legacy-quotes) antes de que pueda ser publicada.
* `APPROVED`: la cotización ha sido [aprobada](https://knowledge.hubspot.com/es/quotes/set-up-legacy-quotes) y ahora está publicada en una URL de acceso público (`hs_quote_link`).
* `REJECTED`: indica que la cotización ha sido configurada pero no ha sido [aprobada](https://knowledge.hubspot.com/es/quotes/set-up-legacy-quotes) para su publicación y debe editarse antes de que pueda enviarse de nuevo para su aprobación.

<Warning>
  ### Nota:

  Si [habilitas las firmas electrónicas](#enabling-e-signatures) en la cotización, no podrás publicarla si has superado el [límite mensual de firmas electrónicas](https://knowledge.hubspot.com/es/quotes/use-e-signatures-with-quotes#monitor-e-signature-usage).
</Warning>

Por ejemplo, la siguiente solicitud publicaría la cotización en una URL de acceso público.

```json theme={null}
{
  "properties": {
    "hs_status": "APPROVAL_NOT_NEEDED"
  }
}
```

<Warning>
  ### Nota:

  Por opción predeterminada, HubSpot establecerá la propiedad `hs_template_type` de la cotización en `CUSTOMIZABLE_QUOTE_TEMPLATE` después de que [actualices el estado de la cotización](https://developers.hubspot.es/docs/api-reference/crm-quotes-v3/guide#update-quote-state). Este tipo de plantilla es compatible con la API v3, mientras que los siguientes tipos de plantilla son plantillas preexistentes que ya no son compatibles:

  * `QUOTE`
  * `PROPOSAL`
</Warning>

### Propiedades establecidas por el estado de la cotización

Actualizar el estado de la cotización actualizará las siguientes propiedades:

* `hs_quote_amount`: se calcula en función de cualquier elemento de pedido asociado, impuesto, descuento y tarifa.
* `hs_domain`: se establece a partir de la plantilla de cotización asociada.
* `hs_slug`: se genera de forma aleatoria si no se proporciona un valor.
* `hs_quote_total_preference`: se establece en función de la configuración de tu cuenta. Si no has configurado este ajuste, por opción predeterminada será el valor del campo total\_first\_payment.
* `hs_timezone`: es la zona horaria predeterminada de tu cuenta de HubSpot.
* `hs_locale`: se establece a partir de la plantilla de cotización asociada.
* `hs_quote_number`: se establece en función de la fecha y hora actuales, a menos que se proporcione una.
* `hs_language`: se establece a partir de la plantilla de cotización asociada.
* `hs_currency`: se establece en función del negocio asociado. Si no has asociado un negocio con la cotización, esta cambiará por opción predeterminada a la divisa predeterminada de tu cuenta de HubSpot.

Además, las propiedades a continuación se calcularán cuando la cotización esté en un estado publicado:

* `hs_pdf_download_link`: se rellena con una URL de un PDF para la cotización.
* `hs_locked`: se establece en `true`. Para modificar cualquier propiedad después de haber publicado una cotización, primero debes actualizar el `hs_status` de la cotización a `DRAFT`, `PENDING_APPROVAL` o `REJECTED`.
* `hs_quote_link`: la URL de acceso público de la cotización. Esta es una propiedad de solo lectura y no se puede configurar a través de la API después de la publicación.
* `hs_esign_num_signers_required`: si has [habilitado las firmas electrónicas](#enable-e-signatures), muestra el número de firmas necesarias.
* `hs_payment_status`: el estado de cobro del pago, si habilitaste los pagos. Al publicar con los pagos habilitados, esta propiedad se establecerá en PENDING. Una vez que el comprador envíe el pago a través de la cotización, el estado se actualizará automáticamente. Más información sobre cómo [habilitar los pagos](https://developers.hubspot.es/docs/api-reference/crm-quotes-v3/guide#enable-payments).

## Buscar cotizaciones

Puedes buscar cotizaciones individualmente o en lotes.

* Para buscar una cotización individual, haz una solicitud `GET` a `/crm/v3/objects/quotes/{quoteID}`.
* Para solicitar una lista de todas las cotizaciones, envía una solicitud `GET` a `/crm/v3/objects/quotes`.

En estos endpoints, puedes incluir los siguientes parámetros de consulta en la URL de la solicitud:

| Parámetro | Descripción |
| - | - |
| `properties` | Una lista separada con comas de las propiedades que se devolverán en la respuesta. Si el contacto de la cotización solicitada no tiene un valor para una propiedad, no aparecerá en la respuesta. |
| `propertiesWithHistory` | Una lista separada con comas de las propiedades actuales y anteriores que se devolverán en la respuesta. Si la cotización solicitada no tiene un valor para una propiedad, no aparecerá en la respuesta. |
| `associations` | Una lista separada con comas de los objetos para los que se deben obtener los ID asociados. No se devolverán en la respuesta las asociaciones especificadas que no existan. Encuentra más información sobre la [API de asociaciones.](/docs/api-reference/crm-associations-v4/guide) |

Para obtener un lote de cotizaciones específicas por sus ID, haz una solicitud `POST` a `crm/v3/objects/quotes/batch/read` e incluye los ID en el cuerpo de la solicitud. También puedes incluir una matriz de `properties` para especificar qué propiedades devolver. El endpoint por lotes no puede obtener asociaciones. Encuentra más información sobre cómo leer asociaciones en bloques con la [API de asociaciones](/docs/api-reference/crm-associations-v4/guide).

```json theme={null}
{
  "inputs": [
    {
      "id": "342007287"
    },
    {
      "id": "81204505203"
    }
  ],
  "properties": ["hs_content", "hs_sentiment", "hs_submission_timestamp"]
}
```

## Permisos

Se requieren los siguientes permisos para que una aplicación cree una cotización que sea válida para publicar:

* `crm.objects.quotes.write`, `crm.objects.quotes.read`, `crm.objects.line_items.write`, `crm.objects.line_items.read`, `crm.objects.owners.read`, `crm.objects.contacts.write`, `crm.objects.contacts.read`, `crm.objects.deals.write`, `crm.objects.deals.read`, `crm.objects.companies.write`, `crm.objects.companies.read`
* `crm.schemas.quote.read`, `crm.schemas.line_items.read`, `crm.schemas.contacts.read`, `crm.schemas.deals.read`, `crm.schemas.companies.read`
