---
description: The Webhook implementation needs to support the following scheme
---

# Request Schema

```typescript
type WebhookRequest = {
  reason:
    | "SubscriptionCreated"
    | "SubscriptionCancelled"
    | "SubscriptionEnded"
    | "Payment"
    | "PaymentFailure"
    | "DynamicPaymentRequestRejected";
  link: string;
  version: "v1";
  home: "https://debitllama.com";
};
```

### reason

You can receive a webhook request for the following reasons

1. SubscriptionCreated - A new subscription was approved for one of your items
2. SubscriptionCancelled - An existing subscription was cancelled
3. Payment - A successful payment
4. PaymentFailure - Payment failed, could be due to missing relayer or account balance!
5. DynamicPaymentRequestRejected - The Request to make a direct debit with a custom amount was rejected during relaying. Payment can't be processed.

### link

A link to the payment intent using APIV1

```
https://debitllama.com/api/v1/payment_intents/[paymentIntent]
```

You can fetch the details of the payment intent using the link via GET request

{% content-ref url="../api-v1-payment_intents-slug" %}
[api-v1-payment\_intents-slug](../api-v1-payment_intents-slug)
{% endcontent-ref %}

### version and home

The version and home keys store meta data  The API version and the URL of the service.

### Example Webhook code

```typescript
Deno.serve(async (req) => {
  const wr: WebhookRequest = await req.json();
  
  //You can fetch the Payment Intent details using the link
  const piRes = await fetch(wr.link, { method: "GET" });
  const paymentIntent : PaymentIntent_ApiV1 = await piRes.json();

  switch (wr.reason) {
    //Add your Business Logic
    case "SubscriptionCreated":
      break;
    case "SubscriptionCancelled":
      break;
    case "SubscriptionEnded":
      break;
    case "Payment":
      break;
    case "PaymentFailure":
      break;
    case "DynamicPaymentRequestRejected":
      break;
    default:
      break;
  }

  return new Response(
    null,
    { status: 200, headers: { "Content-Type": "application/json" } },
  );
});

```



