Skip to main content
Coming Soon - Webhook functionality is currently in development. This page documents the planned implementation.

Available Events

Webhooks will be available for these event types:
Event TypeDescriptionWhen It Fires
transaction.createdNew donation or purchase madeWhen a supporter completes a transaction
transaction.updatedTransaction details changedWhen a transaction is modified
transaction.refundedTransaction was refundedWhen a refund is processed
campaign.createdNew campaign createdWhen you create a new fundraising campaign
campaign.updatedCampaign details changedWhen campaign info is updated
campaign.publishedCampaign goes liveWhen a draft campaign is published
contact.createdNew supporter addedWhen a new contact is created
contact.updatedSupporter info changedWhen contact details are updated
ticket.purchasedEvent ticket purchasedWhen someone buys a ticket
plan.createdRecurring plan startedWhen someone sets up recurring giving
plan.cancelledRecurring plan endedWhen a recurring plan is cancelled

Webhook Payload

All webhook events will follow this structure:
{
  "id": "evt_abc123def456",
  "type": "transaction.created",
  "created_at": "2024-01-15T10:30:00Z",
  "data": {
    // Event-specific data
  },
  "account_id": "acct_xyz789"
}

Webhook Events Reference

Transactions

  • transaction.created - transaction.updated - transaction.refunded

Campaigns

  • campaign.created - campaign.updated - campaign.published

Contacts

  • contact.created - contact.updated

Tickets

  • ticket.purchased

Plans

  • plan.created - plan.cancelled

Retry Behavior

If your endpoint doesn’t respond with a 200 status code, Givebutter will retry:
AttemptDelay
1st retry1 minute
2nd retry5 minutes
3rd retry30 minutes
4th retry2 hours
5th retry12 hours
After 5 failed attempts, the webhook will be disabled and you’ll receive an email notification.

Troubleshooting

Check:
  • Endpoint URL is correct and publicly accessible
  • Endpoint uses HTTPS (not HTTP)
  • Firewall allows incoming requests from Givebutter
  • Endpoint responds within 10 seconds
  • Selected event types are enabled in Dashboard
Check: - Using the correct webhook secret from Dashboard - Computing signature on raw request body (not parsed JSON) - Using HMAC SHA-256 algorithm - Comparing signatures with timing-safe equality
Solution: Use the event id to track processed events and skip duplicates:
const processedEvents = new Set();

function processWebhook(event) {
  if (processedEvents.has(event.id)) {
    console.log('Duplicate event, skipping');
    return;
  }

  processedEvents.add(event.id);
  // Process event...
}
Solution: Respond immediately and process asynchronously:
app.post('/webhooks/givebutter', (req, res) => {
  // Respond first (< 10 seconds)
  res.status(200).json({ received: true });

  // Process later
  queueJob('process-webhook', req.body);
});

Event-Specific Details

Transaction Events

Transaction webhooks include full transaction details:
{
  "type": "transaction.created",
  "data": {
    "id": "txn_123456789",
    "amount": 5000,
    "currency": "USD",
    "status": "completed",
    "donor": {
      "id": "cont_987654321",
      "first_name": "Jane",
      "last_name": "Doe",
      "email": "[email protected]"
    },
    "campaign": {
      "id": "camp_abc123",
      "title": "Annual Gala 2024"
    },
    "payment_method": "card",
    "fee_covered": true,
    "created_at": "2024-01-15T10:30:00Z"
  }
}

Campaign Events

Campaign webhooks include campaign state changes:
{
  "type": "campaign.updated",
  "data": {
    "id": "camp_abc123",
    "title": "Annual Gala 2024",
    "goal": 50000,
    "total_raised": 12500,
    "status": "active",
    "url": "https://givebutter.com/annual-gala-2024",
    "updated_fields": ["title", "goal"]
  }
}

Contact Events

Contact webhooks include supporter information:
{
  "type": "contact.created",
  "data": {
    "id": "cont_987654321",
    "first_name": "Jane",
    "last_name": "Doe",
    "email": "[email protected]",
    "phone": "+1234567890",
    "created_at": "2024-01-15T10:30:00Z"
  }
}

Ticket Events

Ticket webhooks include purchase and ticket details:
{
  "type": "ticket.purchased",
  "data": {
    "id": "tkt_456789",
    "campaign_id": "camp_abc123",
    "quantity": 2,
    "price": 10000,
    "attendee": {
      "name": "Jane Doe",
      "email": "[email protected]"
    },
    "created_at": "2024-01-15T10:30:00Z"
  }
}

Plan Events

Plan webhooks include recurring giving details:
{
  "type": "plan.created",
  "data": {
    "id": "plan_789012",
    "campaign_id": "camp_abc123",
    "amount": 2500,
    "frequency": "monthly",
    "status": "active",
    "donor": {
      "id": "cont_987654321",
      "first_name": "Jane",
      "last_name": "Doe",
      "email": "[email protected]"
    },
    "created_at": "2024-01-15T10:30:00Z"
  }
}

Need Help?

Webhook support is coming soon. For early access or questions:
  • Email: [email protected]
  • Subject: “Webhook Early Access Request”
  • Include: Your use case and expected webhook volume

Next Steps