---
title: "Create a new webhook relay app"
method: POST
path: "/api/v1/apps"
---

# Create a new webhook relay app

`POST /api/v1/apps`

## Request

- Base URL: `https://anyhook.net`
- URL: `https://anyhook.net/api/v1/apps`
- Auth: HTTP bearer

Creates a webhook relay app and returns its inbound URL, to paste into the sender's webhook settings.
Required: name (string). Optional: destination_url (your server endpoint; without one the app logs events without forwarding them), source (default 'auto').

## Request body

- object
  - `name` string, required: Human-readable name for this app.
  - `destination_url` string, uri: Your server's endpoint URL that will receive forwarded webhooks.
  - `source` 'auto' | 'stripe' | 'github' | 'shopify' | 'lemonsqueezy' | 'paddle' | 'sentry' | 'sendgrid' | 'svix' | 'clerk' | 'resend' | 'slack' | 'line' | 'twilio' | 'intercom' | 'linear' | 'vercel' | 'discord' | 'hubspot' | 'woocommerce' | 'paypal' | 'generic'

## Response `201`

App created

- object
  - `app` App: An app as the API returns it. Destination signing secrets appear only at creation or rotation.
    - `id` string
    - `name` string
    - `slug` string
    - `source` string
    - `sourceSecret` boolean: Whether a sender signing secret is set.
    - `isActive` boolean
    - `inboundUrl` string
    - `inboxAddress` string
    - `destinations` object[]
      - `url` string
      - `enabled` boolean
      - `headers` object
      - `has_signing_secret` boolean
      - `signing_secret_hint` string
      - `event_types` string[]
      - `rate_limit` integer
      - `delay_seconds` integer
    - `eventsThisMonth` integer
    - `createdAt` string, date-time
    - `previousSlugs` string[]

## Other responses

- `401`: Unauthorized
- `429`: Plan limit reached (app count or daily event cap)

---

[API](https://skmtc.dev/anyhook/apis/anyhook-api.md) · [All operations](https://skmtc.dev/anyhook/apis/anyhook-api/llms.txt) · [OpenAPI document](https://skmtc.dev/anyhook/apis/anyhook-api/revisions/ddf038fb32fc?raw)
