Hey there, fellow Javascript devs! Ready to supercharge your Affinity integration with webhooks? Let's dive right in and get those real-time updates flowing.
Webhooks are like the cool kids of the API world - they notify you instantly when something interesting happens in Affinity. No more constant polling or outdated data. With the Affinity API, setting up webhooks is a breeze, and I'm here to show you how.
Before we start, make sure you've got:
Got all that? Great! Let's code.
First things first, we need somewhere for Affinity to send those juicy webhook events. Here's a quick Express.js server to get you started:
const express = require('express'); const app = express(); app.use(express.json()); app.post('/webhook', (req, res) => { console.log('Received webhook:', req.body); res.sendStatus(200); }); app.listen(3000, () => console.log('Webhook server running on port 3000'));
This little server listens for POST requests on /webhook
and logs the payload. Simple, right?
Now, let's tell Affinity where to send those events. We'll use axios because, well, it's awesome:
const axios = require('axios'); const createWebhook = async () => { try { const response = await axios.post('https://api.affinity.co/webhooks', { url: 'https://your-server.com/webhook', event_types: ['list.entry.created', 'list.entry.updated'] }, { headers: { 'Authorization': 'Basic ' + Buffer.from(API_KEY + ':').toString('base64') } }); console.log('Webhook created:', response.data); } catch (error) { console.error('Error creating webhook:', error.response.data); } }; createWebhook();
Just replace 'https://your-server.com/webhook'
with your actual endpoint URL, and you're golden.
When those events start rolling in, you'll want to do something useful with them. Here's a starting point:
app.post('/webhook', (req, res) => { const { event_type, payload } = req.body; switch(event_type) { case 'list.entry.created': handleNewEntry(payload); break; case 'list.entry.updated': handleUpdatedEntry(payload); break; // Add more cases as needed } res.sendStatus(200); }); function handleNewEntry(payload) { // Do something awesome with the new entry } function handleUpdatedEntry(payload) { // Update your system with the changes }
Pro tip: For production, consider using a queue to handle events asynchronously. Your webhook endpoint should return quickly to avoid timeouts.
Security is sexy, so let's add some. Affinity sends a signature with each webhook. Here's how to verify it:
const crypto = require('crypto'); app.post('/webhook', (req, res) => { const signature = req.headers['x-affinity-signature']; const body = JSON.stringify(req.body); const hash = crypto.createHmac('sha256', WEBHOOK_SECRET).update(body).digest('hex'); if (hash === signature) { // Process the webhook } else { res.status(403).send('Invalid signature'); } });
Replace WEBHOOK_SECRET
with your actual secret from Affinity. Stay safe out there!
Affinity provides webhook testing tools in their developer portal. Use them! They're great for making sure your endpoint is working correctly before going live.
If you're having issues, check these common culprits:
And there you have it! You're now equipped to implement webhooks like a pro. Remember, webhooks are your friends - they keep your data fresh and your users happy.
For more advanced topics like updating webhooks or handling rate limits, check out the Affinity API docs. They're surprisingly readable!
Happy coding, and may your integrations be ever real-time!
I've put together a complete working example in this GitHub repo. Feel free to clone, fork, or slide into the DMs (aka issues) if you have any questions.
Now go forth and webhook all the things! 🚀