# Integration points

Integration points are pre-built journey elements for common third-party destinations, published by Pushwoosh as Point templates. Instead of building a raw [Webhook](/product/customer-journey/journey-elements/channels/webhook/) request yourself, drag one onto the canvas from the **Integrations** section of the left panel and fill in its fields — Pushwoosh sends the request to the destination for you.

A template that reads its credential from your account's [3rd-party integrations](/product/integrations/) (like Google Sheets) needs that service connected first. A template that takes its own token as a field (like HubSpot, Airtable, Slack, and LLM: generate text) needs no separate connection: configure the point and it's ready to use.

<Aside type="note">
These Point templates aren't turned on for every account by default. If you don't see the **Integrations** section in the left panel, [contact Pushwoosh Support](https://help.pushwoosh.com/hc/en-us/requests/new/) to request access.
</Aside>

## Available Point templates

<CardGrid>
  <LinkCard title="Google Sheets: add row" href="/product/customer-journey/journey-elements/integrations/google-sheets-add-row/" />
  <LinkCard title="HubSpot: create or update contact" href="/product/customer-journey/journey-elements/integrations/hubspot-create-or-update-contact/" />
  <LinkCard title="Airtable: create record" href="/product/customer-journey/journey-elements/integrations/airtable-create-record/" />
  <LinkCard title="Slack: post message" href="/product/customer-journey/journey-elements/integrations/slack-post-message/" />
  <LinkCard title="LLM: generate text" href="/product/customer-journey/journey-elements/integrations/llm-generate-text/" />
</CardGrid>

## Configuring list and key/value fields

Point templates can take a variable number of values instead of a fixed set of fields. Depending on what the destination expects, a field takes one of two shapes:

- A list of values, for example **Columns** in Google Sheets: add row. Add a row for each additional value, and remove a row you no longer need. The order of your rows is what gets sent to the destination, for example the column order in the sheet. At least one row with a value is required, and a single blank row does not pass validation.
- A table of name/value pairs, for example **Properties** in HubSpot: create or update contact, or **Fields** in Airtable: create record. Add a row per property or field, with a name and its value. Names must be non-empty and unique within the table.

In either field, a row can hold a value from the current traveler instead of a fixed one, the same macros available in a [Webhook](/product/customer-journey/journey-elements/channels/webhook/#use-dynamic-data-and-macros) body: `{{device:hwid}}`, `{{device:user_id}}`, `{{tag:Name}}`.

<Aside type="note">
If you configured one of these points before it supported a variable number of values (Google Sheets with fixed **Column 1**/**Column 2**/**Column 3** fields, or HubSpot/Airtable with a single name/value pair), opening the point pre-fills your old values into the new field. Save the point once to move it onto the current template version — until you do, it keeps running with the version it was configured against.
</Aside>

## Errors and failed requests

Every Point template on this page sends its request the same way as [Webhook](/product/customer-journey/journey-elements/channels/webhook/), with the same [timeouts, retries, rate limits, and endpoint cooldown](/product/customer-journey/journey-elements/channels/webhook/#timeout-retries-and-failed-requests). A failed request drops the traveler from the journey at this step — see [Request error](/product/troubleshooting/drop-offs-in-customer-journey/#request-error).