> For the complete documentation index, see [llms.txt](https://docs.gameket.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.gameket.io/examples/express.js.md).

# Express.js

### Webhook Handler

{% code expandable="true" %}

```javascript
const express = require('express');
const app = express();

app.use(express.json());

// Webhook endpoint for order notifications
app.post('/webhooks/gameket/order', (req, res) => {
  const { orderId, status, amount, type } = req.body;

  console.log(`Order webhook: ${orderId} -> ${status}`);

  // Process based on status
  switch (status) {
    case 'pending':
      // Generate and deliver codes
      generateAndDeliverCodes(orderId);
      break;

    case 'completed':
      // Order completed, no action needed
      console.log(`Order ${orderId} completed`);
      break;

    case 'refunded':
      // Order refunded, update your system
      handleOrderRefund(orderId, amount);
      break;

    case 'cancelled':
      // Order cancelled
      handleOrderCancellation(orderId);
      break;
  }

  // Acknowledge receipt
  res.json({ success: true, orderId });
});

async function generateAndDeliverCodes(orderId) {
  try {
    const codes = [
      `GAMEKET-${Math.random().toString(36).substr(2, 9).toUpperCase()}`,
      `GAMEKET-${Math.random().toString(36).substr(2, 9).toUpperCase()}`
    ];

    const result = await merchantAPI.deliverCodes(orderId, codes);
    console.log(`Codes delivered to order ${orderId}`);
  } catch (error) {
    console.error(`Failed to deliver codes: ${error.message}`);
  }
}

function handleOrderRefund(orderId, amount) {
  console.log(`Order ${orderId} refunded: $${amount}`);
  // Update your database, logs, etc.
}

function handleOrderCancellation(orderId) {
  console.log(`Order ${orderId} cancelled`);
  // Clean up resources, update inventory, etc.
}

app.listen(3000, () => {
  console.log('Webhook server listening on port 3000');
});
```

{% endcode %}
