
## Before you start {#create-account}

Create an account, confirm your email and sign in. Prepare a test HTTPS recipient under your control, reachable from the region and returning `2xx`. Do not use customer data or production side effects. For a local application, use [CLI](/en/docs/inbound/adal-cli) instead of Direct.

## Create a Server {#create-server}

Open creation under **Inbound → Servers**, enter a name, select a region and allow `POST`. For the first JSON example, leave IP and Content-Type unrestricted. Choose **Create server** and copy the address from its details. Use the full URL and check response settings; the default status is `202`.

## Connect a Direct recipient {#create-destination}

1. Under **Inbound → Channels**, create a **Direct** Channel.
2. In its details, choose **Add endpoint** and enter your test base URL without query parameters. Base `https://receiver.example/adal` requires handler `/adal/demo` below; replace it with your actual address.
3. Keep the Endpoint **Enabled** and choose **Save endpoints**.
4. Under **Inbound → Routers**, create an enabled Router: **Add server** for your Server, **Add channel** for the new Channel, then **Create router**.

Creating a Channel without an Endpoint or Router does not finish delivery setup.

## If the recipient is local {#run-cli}

Direct cannot reach your computer's `localhost`. Create a CLI Channel, configure a local Endpoint, connect it through a Router and run the client using that Channel's token. See the [CLI guide](/en/docs/inbound/adal-cli) for commands and current connection constraints. Direct does not require the client.

## Send a new request {#send-test-webhook}

Set `ADAL_SERVER_URL` to the copied full Server URL without a trailing slash. In Bash:

```bash
curl --silent --show-error --include \
  --request POST "$ADAL_SERVER_URL/demo?source=docs" \
  --header 'Content-Type: application/json' \
  --data-binary '{"event":"docs.first-webhook","value":1}'
```

Documentation URLs and the JSON above are illustrative. A Server response confirms the intake path, not the recipient result.

## Verify both stages {#inspect-request}

1. Open **Inbound → Requests**, filter by Server and find the new request.
2. Check method, path/query and JSON. A request without recipients can remain `received`.
3. Open your Channel under **Deliveries** and inspect the Endpoint attempt and HTTP success.
4. Confirm receipt of `docs.first-webhook` at the test handler. HTTP success does not prove completion of a business transaction.

For a missing record, check URL, region and intake filters. If intake exists but no recipient appears, check the Router and Endpoint. Recipient HTTP failures follow [automatic retries](/en/docs/common/retries); refreshing the report does not start an attempt.

## Next {#next-steps}

[Server settings](/en/docs/inbound/servers), [Channels](/en/docs/inbound/destinations), [Routers](/en/docs/inbound/routers), [Direct and controlled failure](/en/docs/inbound/direct), [request history](/en/docs/inbound/requests), [storage](/en/docs/common/storage).
