---
updatedAt: 2026-10-09T22:30:00.000Z
---

# Webhooks & Integrations Overview

Solidarity Tech supports several ways to connect with external services. This guide explains how data moves in and out of the platform, which tools to use for each scenario, and how to set them up.

## Overview

There are four main integration paths:

| What you want to do                                                         | Tool to use                                                           | Plan required |
| --------------------------------------------------------------------------- | --------------------------------------------------------------------- | ------------- |
| Push data from other apps into Solidarity Tech (no code)                    | [Zapier Integration](zapier-integration)                              | Standard      |
| Push data in or pull data out programmatically                              | [REST API](https://www.solidarity.tech/reference/solidarity-tech-api) | Professional  |
| Automatically send supporter data to an external URL when something happens | [Automation Webhook Action](automation-actions#webhook)               | Standard      |
| Receive ActBlue donations in real time                                      | [ActBlue Integration](actblue)                                        | Standard      |

<br />

## Sending Data Into Solidarity Tech

### Zapier (No Code)

The Solidarity Tech Zapier app lets you connect with 5,000+ other apps to automatically create or update people in your database. The only action is **Create or Update Person**, which supports contact information, chapter assignments, tags, custom user properties, and donation logging. The app has no triggers.

**Setup:**

1. Go to **Settings → Integrations → Zapier** in the Solidarity Tech dashboard. You need the **Manage All Third-Party Integrations** permission for the root organization.
2. Copy **Your API Key for Zapier**. It is not one of the keys on the API settings page.
3. Visit the [Solidarity Tech Zapier app](https://zapier.com/apps/solidarity-tech/integrations) and connect using that key

When a Zap runs, the Zapier app calls the Solidarity Tech API on your behalf. People created through Zapier are recorded with source "Zapier" so you can identify and filter by them later.

For the full list of supported fields, see the [Zapier Integration](zapier-integration) documentation.

### REST API (For Developers)

The REST API provides programmatic access to your Solidarity Tech data. It is served at `https://api.solidarity.tech/v1/` and supports over 30 resources including people, events, RSVPs, attendance, tasks, agent assignments, texts, emails, custom properties, donation charges, automations, and more.

**Setup:**

1. Go to **Settings → Integrations → API** in the Solidarity Tech dashboard. You need the **Manage All Third-Party Integrations** permission for the root organization.
2. Click **New API key**, give it a name, and select the organization scope
3. Include the key in your requests as `Authorization: Bearer YOUR_API_KEY`

API keys can be scoped to sub-organizations to restrict data access. Full API documentation, with every endpoint and parameter, is available at [solidarity.tech/reference](https://www.solidarity.tech/reference/solidarity-tech-api).

### ActBlue (Donation Webhooks)

ActBlue can push donation data directly into Solidarity Tech in real time via webhooks. Each integration has two webhook URLs, for contributions and cancellations, secured with one username and password (HTTP Basic Authentication).

**Setup:**

1. Go to **Settings**, then click **ActBlue** under **Integrations**. The link shows only when your organization's primary country is the US.
2. Click **New integration**. Enter the **Integration Name** and the **Scope**, then click **Create Integration**.
3. Click the key icon (**View Credentials**) on the integration's row. Copy the **Contributions Webhook URL**, **Cancellations Webhook URL**, **Username**, and **Password**.
4. In your ActBlue Dashboard, under **Tools**, go to **Integrations → Webhooks**. Click **Create a new webhook**.
5. Select webhook type **ActBlue Default**, paste the **Contributions Webhook URL** and your credentials, and submit
6. Repeat steps 4 and 5 with type **ActBlue Default Cancellations** and the **Cancellations Webhook URL**

For the full setup guide, including historical imports and refund webhooks, see the [ActBlue Integration](actblue) documentation.

<br />

## Sending Data Out of Solidarity Tech

### Automation Webhook Action

The automation webhook action lets you send supporter data to any external URL when a person reaches that step in an automation. This is how you push data out of Solidarity Tech to services like Zapier (via Catch Hook), Google Sheets, CRMs, Slack, or any system that accepts HTTP requests.

**How it works:**

1. Create an automation with a trigger (e.g., form submission, RSVP, tag added)
2. Add a **Webhook** action step
3. Enter a URL with Liquid merge tags to pass supporter data
4. Select **GET**, **POST**, or **PATCH** as the HTTP method

**Setup in the dashboard:**

Go to **Automations**, create or edit an automation, and add a Webhook action step. The step has four fields: **URL**, **Method**, **Headers**, and **Body**.

#### Passing Data via URL Parameters

Merge tags work in the URL, in custom header values, and in **Body** field values. When the step runs, each merge tag becomes the person's data. The step encodes each query value in the URL.

**Example URL:**

```
https://hooks.zapier.com/hooks/catch/12345/abcdef/?email={{ user.email }}&first_name={{ user.first-name }}&last_name={{ user.last-name }}&phone={{ user.phone-number }}
```

When this fires for a supporter named Jane Doe with email <jane@example.com>, it becomes:

```
https://hooks.zapier.com/hooks/catch/12345/abcdef/?email=jane%40example.com&first_name=Jane&last_name=Doe&phone=15551234567
```

#### Available Merge Tags

Merge tags can use the person's fields and custom properties, the organization name, and the primary chapter's basic fields. Custom user properties are also available using the property's internal name with hyphens (e.g., `{{ user.volunteer-status }}`). A form answer reaches the webhook only when the form saves it to a person field or a custom property.

For example variables, see the [Webhook action reference](automation-actions#webhook) and [Merge Tags](/docs/merge-tags).

#### Headers, Body, and URL Length

* **Body.** With POST or PATCH, the **Body** fields go out as one JSON object. GET never sends a body.
* **Custom headers.** Use **Add header** to send custom headers, for example an Authorization header with an API key. Header values are never shown again after you save. Do not put an API key in the URL, which anyone who opens the step can see.
* **URL length.** Very long URLs can hit length limits on the receiving server, so send many fields as **Body** fields with POST or PATCH.

#### Error Handling

Webhook failures are not currently visible in the dashboard, so if you suspect a webhook is not firing, check the receiving service's logs for incoming requests.

<br />

## Common Patterns

### Send New Signups to Zapier

Combine an automation trigger with the webhook action to push data to a Zapier Catch Hook:

1. Create an automation triggered by **Form Submission**
2. Add a **Webhook** action step
3. Set the URL to your Zapier Catch Hook URL with merge tags for the fields you need
4. In Zapier, use the **Webhooks by Zapier** trigger (Catch Hook) to receive the data
5. Add any Zapier actions you want (e.g., add a row to Google Sheets, create a HubSpot contact)

### Sync Donations from External Platforms

Use Zapier to automatically import donations from platforms like PayPal, Square, or Stripe:

1. Go to **Settings → Integrations → Zapier** and copy your API key
2. In Zapier, create a new Zap with your payment platform as the trigger
3. Set the action to **Solidarity Tech → Create or Update Person**
4. Map the payment platform's fields, including **Donation Amount**, **External Donation Date**, **External Donation Source**, and **External Donation ID**. The ID stops the same donation from being logged twice.

### Build a Custom Integration with the API

For developers who need full control:

1. Go to **Settings → Integrations → API** and create an API key
2. Use `POST /v1/users` to create or update people
3. Use `GET /v1/users` to pull people out, with pagination and filtering support
4. Use `POST /v1/users/search` to filter people by any combination of criteria
5. See the [full API reference](https://www.solidarity.tech/reference/solidarity-tech-api) for all available endpoints

### Manage Automations via API

You can create, inspect, and manage automations programmatically. See the [full API reference](https://www.solidarity.tech/reference/solidarity-tech-api) for the automation endpoints.

<br />

## Zapier vs. API vs. Automation Webhook

|                     | Zapier                                                         | REST API                                                               | Automation Webhook                                                               |
| ------------------- | -------------------------------------------------------------- | ---------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
| **Direction**       | Into Solidarity Tech                                           | Both directions                                                        | Out of Solidarity Tech                                                           |
| **Requires coding** | No                                                             | Yes                                                                    | No                                                                               |
| **Trigger**         | External event (in connected app)                              | Your code calls the API                                                | Automation trigger (form submission, RSVP, tag added, etc.)                      |
| **Data format**     | Zapier maps fields in their UI                                 | JSON over HTTP                                                         | Liquid merge tags in the URL, headers, and JSON body (POST and PATCH)            |
| **Plan required**   | Standard                                                       | Professional                                                           | Standard (requires Automations feature)                                          |
| **Use when**        | You want to push data in from another app without writing code | You need full programmatic access or are building a custom integration | You want to notify an external service when something happens in Solidarity Tech |