> For the complete documentation index, see [llms.txt](https://docs.podplay.app/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.podplay.app/marketing/marketing-integrations/connect-the-podplay-app-in-activecampaign.md).

# Connect the PodPlay App in ActiveCampaign

Use this when a Club connects the PodPlay app inside ActiveCampaign App Studio. This is a different path from the native Deep Data integration (custom objects, ecommerce connections, Segment). Non-enterprise clubs cannot write ActiveCampaign custom objects; App Studio is the product for them. See [ActiveCampaign with Segment](/marketing/marketing-integrations/activecampaign-with-segment.md) for the Deep Data path.

### What the Club enters

* **PodPlay subdomain.** The first label of the Club site. For <https://gotham.podplay.app>, enter gotham.
* **PodPlay API key.** Club staff cannot create API keys in the dashboard. A PodPlay admin creates a **readonly** key on **API keys** and sends it to the person who will connect the app. Do not mint a writeable PodPlay key for App Studio.

ActiveCampaign sends the key as the x-api-key header and requests the Club connection from PodPlay. A successful connect shows the Club display name.

### How ingest works

On Finish, App Studio creates an ingest webhook URL (`${webhook.url}`) and POSTs it to PodPlay:

`POST https://${subdomain}.podplay.app/apis/v2/integrations/activecampaign/webhooks`

Body: `{ "url": "<ActiveCampaign ingest URL>" }`. PodPlay stores that URL and returns `{ id }` as `webhook_id`.

When a booking is created, checked in, or cancelled, PodPlay POSTs `{ "contact": { email, firstName, lastName }, "data": { email, firstName, lastName, …booking fields } }` **to that stored ActiveCampaign URL**. App Studio maps contact email / firstName / lastName, upserts the Contact, then transforms and syncs the Booking object. PodPlay does not poll, and it does not write App Studio objects through the Deep Data custom-object API.

Uninstall calls `DELETE /apis/v2/integrations/activecampaign/webhooks/${webhook_id}`.

### Paste the app in App Studio

* Paste the full app from `applications/api-v2/src/activecampaign/activecampaign-app-studio.app.json`. That file is auth, player Contact, the Booking object, a slim email / firstName / lastName map, a contact/booking `data_pipeline`, and webhook `data_intake` named `booking-webhook`.
* Auth-only slice: `applications/api-v2/src/activecampaign/activecampaign-app-studio.auth.json`. `api.base_url` is the club host, `https://${subdomain}.podplay.app`. Connection and webhook calls add `/apis/v2`.

### Check the connection

1. Create or reuse a readonly API key for the Club.
2. In the App Studio sandbox, connect with the Club subdomain and that key.
3. Connect should succeed and show the Club display name.
4. Finish mapping so App Studio registers `${webhook.url}` with PodPlay.
5. A wrong key or subdomain must fail.
6. A booking should POST to the stored ActiveCampaign ingest URL. Identify events do not POST: the pipeline syncs a Booking for every POST, so a contact-only POST would show up as a blank Booking row. Players are added as contacts when they book.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.podplay.app/marketing/marketing-integrations/connect-the-podplay-app-in-activecampaign.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
