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

# Connect Givebutter to PlayaOS for automatic dues sync

> Set up Givebutter for dues collection, configure the webhook so payment status auto-updates in PlayaOS, and map dues tiers to membership levels.

PlayaOS integrates with [Givebutter](https://givebutter.com) to handle dues collection. When a member pays through your Givebutter campaign, a webhook notifies PlayaOS and automatically updates their payment status — no manual data entry required. This guide walks you through setting up the integration from start to finish.

<Warning>
  The webhook must be configured correctly for payment status to update automatically. Without it, Givebutter transactions won't be reflected in PlayaOS — you'd have to update member payment status by hand. Complete the webhook setup before directing members to pay.
</Warning>

## Set up the integration

<Steps>
  <Step title="Create or log in to your Givebutter account">
    Go to [givebutter.com](https://givebutter.com) and sign in, or create a new account for your camp if you don't have one yet. Use an email address your admin team has access to — this is where Givebutter sends payout notifications and campaign reports.
  </Step>

  <Step title="Create a campaign or fund for dues">
    Inside Givebutter, create a new **Campaign** or **Fund** specifically for camp dues. Name it something clear — for example, `2026 Camp Dues` — so it's easy to identify in your dashboard.

    Set up your dues amounts as suggested donation options or required tiers. If your camp has multiple dues levels (base dues, RV fees, etc.), add each as a separate option.

    <Tip>
      Use the **Details** field in Givebutter to label each tier with a consistent value — for example, `Base Dues`, `30 Amp RV Fee`, `50 Amp RV Fee`. PlayaOS reads this field to map payments to the correct membership tier. See [Map dues tiers](#map-dues-tiers) below for details.
    </Tip>
  </Step>

  <Step title="Copy your campaign URL into PlayaOS">
    Once your campaign is created, copy its public URL from Givebutter. Then in PlayaOS, go to **Settings → Branding** and paste the URL into the **Givebutter URL** field. Save your settings.

    This is the link members see when they click **Pay dues** in the portal. They're taken directly to your Givebutter campaign to complete payment.
  </Step>

  <Step title="Set up the Givebutter webhook">
    The webhook is what tells PlayaOS when a payment succeeds.

    In Givebutter, go to **Settings → Webhooks** and click **Add endpoint**. Enter the following URL, replacing `your-slug` with your actual camp slug:

    ```
    https://your-slug.playaos.app/api/webhooks/givebutter
    ```

    For the event type, select **`transaction.succeeded`**. This fires whenever a payment completes successfully.

    After saving, Givebutter will show you a **webhook secret**. Copy it — you'll need it in the next step.
  </Step>

  <Step title="Save the webhook secret in PlayaOS">
    In PlayaOS, go to **Settings → Integrations** and paste the webhook secret into the **Givebutter webhook secret** field. Save.

    PlayaOS uses this secret to verify that incoming webhook requests actually came from Givebutter. Without it, the webhook endpoint will reject all incoming payloads.
  </Step>

  <Step title="Test the integration">
    Make a small test transaction through your Givebutter campaign — even \$1 is fine — using a real or test card. Wait a few seconds, then check the relevant member record in PlayaOS.

    If the integration is working, the member's payment status should update to **paid** automatically. If it doesn't, double-check that the webhook URL is correct and the secret matches what Givebutter shows.
  </Step>
</Steps>

## Map dues tiers

PlayaOS identifies which membership tier a payment belongs to by reading the **Details** field value from the Givebutter transaction. To make this work, the label you set in Givebutter needs to match your tier configuration in PlayaOS.

In your Givebutter campaign, make sure each dues option has a **Details** value that clearly identifies the tier:

| Dues level          | Suggested Givebutter "Details" value |
| ------------------- | ------------------------------------ |
| Standard membership | `Base Dues`                          |
| 30-amp RV fee       | `30 Amp RV Fee`                      |
| 50-amp RV fee       | `50 Amp RV Fee`                      |
| Scholarship         | Handle separately — see below        |

Then in PlayaOS, go to **Settings → Dues tiers** and confirm that your fee tier names match what you've set in Givebutter. When a `transaction.succeeded` webhook arrives, PlayaOS parses the Details field and assigns the payment to the right tier automatically.

## Frequently asked questions

<AccordionGroup>
  <Accordion title="What if a member pays but their status doesn't update?">
    First, confirm the webhook is configured with the correct endpoint URL and that the webhook secret in PlayaOS matches the one shown in Givebutter. Then check **Settings → Integrations → Webhook logs** (if available) to see whether the webhook fired and what response it received.

    Common causes: a typo in the endpoint URL, a mismatched or missing webhook secret, or the webhook not being saved in Givebutter.
  </Accordion>

  <Accordion title="Can I use Zapier instead of the Givebutter webhook?">
    Yes. PlayaOS also supports a Zapier-based payment workflow. Set up a Zap that triggers on a Givebutter transaction and posts to `https://your-slug.playaos.app/api/webhooks/zapier-payment`. This approach gives you more flexibility to transform data before it reaches PlayaOS, but requires a Zapier account and additional setup.

    The native Givebutter webhook is simpler and recommended for most camps.
  </Accordion>

  <Accordion title="How do scholarship payments work?">
    Scholarships are assigned directly in PlayaOS by an admin — they're not processed through Givebutter. When you assign a scholarship to a member, their dues obligation is reduced or waived in the portal. No Givebutter transaction is needed for a full scholarship. For partial scholarships, the member pays the remaining balance through Givebutter as normal.
  </Accordion>

  <Accordion title="Can one Givebutter account serve multiple camps?">
    Yes. You can create separate campaigns or funds within a single Givebutter account for each camp. Each PlayaOS camp configures its own Givebutter URL and webhook endpoint independently. There's no conflict between camps sharing a Givebutter account.
  </Accordion>

  <Accordion title="What Givebutter transaction data does PlayaOS store?">
    When a webhook fires, PlayaOS records the transaction ID, amount, payment date, and the tier parsed from the Details field. It links the payment to a member profile by matching the email address on the Givebutter transaction to a member record in your camp.

    If no matching member is found, the payment is logged but not linked to a profile. You can manually associate it from **Admins → Payments**.
  </Accordion>

  <Accordion title="What if I need to issue a refund?">
    Process the money movement in Givebutter, then record the refund in PlayaOS from **Admins → Transactions → Record Refund** so the ledger and member balance stay in sync. The refund dialog lets you decide whether to revert the member's status from **active** back to **approved** when the refund leaves them no longer fully paid. See [Recording a refund](/admins/payments-and-dues#recording-a-refund) for details.
  </Accordion>
</AccordionGroup>
