Create Your First Endpoint
By the end of this guide you will have a working ingest URL that routes webhook events from an external service to your server.
Prerequisites: You have a FirmHook account and are logged in. If not, see Platform Setup first.
What you're building
External service → FirmHook ingest URL → Your server
(Source) + (Routing Rule) + (Endpoint)Three objects connect together:
- Source — the ingest URL you give to the external service
- Endpoint — your server's destination URL
- Routing rule — wires a source to an endpoint
Step 1 — Create a source
A source is the public URL where FirmHook accepts incoming webhooks on behalf of an external service.
- 1Go to Sources in the sidebar
- 2Click + Create Source
- 3Give it a name (e.g.
Stripe,GitHub,My App) - 4Leave all other settings at their defaults for now
- 5Click Create Source
Copy the ingest URL shown after creation — you'll give this to the external service:
https://{org_slug}.firmhook.com/{source_id}Step 2 — Create an endpoint
An endpoint is a destination on your server that receives the forwarded webhook.
- 1Go to Endpoints in the sidebar
- 2Click + Create Endpoint
- 3Fill in:
| Field | Value |
|---|---|
| Name | A label, e.g. Production |
| Destination URL | Your server's webhook URL, e.g. https://api.example.com/webhooks |
| Max retries | How many times to retry on failure (default 5) |
- 1Click Create Endpoint
Step 3 — Create a routing rule
A routing rule connects a source to an endpoint. Without one, events arrive at the ingest URL but have nowhere to go.
- 1Go to Routing Rules in the sidebar
- 2Click + Create Rule
- 3Select the Source and Endpoint you just created
- 4Leave filters empty to route all events (you can add filters later)
- 5Click Create Rule
Step 4 — Configure the external service
Give the external service your ingest URL and API key:
- Webhook URL — the ingest URL from Step 1
- Header —
X-API-Key: <your-api-key>(create a key under Settings → API Keys if you don't have one)
The external service will POST to your ingest URL. FirmHook evaluates your routing rules and forwards the event to your endpoint automatically.
Verify it works
Send a test request to your ingest URL:
bashcurl -X POST https://{org_slug}.firmhook.com/{source_id} \ -H "X-API-Key: fhk_your_api_key_here" \ -H "Content-Type: application/json" \ -d '{"event": "test.created", "data": {}}'
Then go to Events in the dashboard — you should see the event with a delivered status.
What's next?
- Understanding Retries — how FirmHook handles delivery failures
- Local Development — test endpoint changes locally without deploying
- Production Deployment — harden your pipeline for production