
## Prepare {#prerequisites}

Create an account and an [API token](/en/docs/common/account-api-tokens). Prepare an HTTPS recipient under your control, reachable from the selected region, returning `2xx` and a safe demonstration response. No incoming Server or CLI is required.

In Bash, set these variables:

- `ADAL_API_URL`: `https://api.adal.cloud`, without a trailing slash.
- `ADAL_API_TOKEN`: the API token secret.
- `ADAL_IDEMPOTENCY_KEY`: a key chosen once for this operation, such as `docs-first-send-1`. A new operation needs a new key; an uncertain submission retry keeps the original key.

Keep real token values out of Git, screenshots and logs. The public API uses HTTPS.

## Get a region {#regions}

```bash
curl --fail-with-body --silent --show-error \
  --header "Authorization: Bearer $ADAL_API_TOKEN" \
  "$ADAL_API_URL/outbound/regions"
```

Select an `ID` from `regions` (uppercase, as returned by the API) and set it as `ADAL_REGION_ID`. Do not invent a UUID or substitute a country name.

## Submit a job {#submit}

Replace `https://receiver.example/webhook` with your final test recipient URL. `aGVsbG8=` encodes `hello`. Response storage is **explicitly enabled** here for the next step; stored response bytes will count toward traffic usage.

```bash
curl --fail-with-body --silent --show-error \
  --request POST "$ADAL_API_URL/outbound/requests" \
  --header "Authorization: Bearer $ADAL_API_TOKEN" \
  --header 'Content-Type: application/json' \
  --data-binary @- <<JSON
{
  "region_id": "$ADAL_REGION_ID",
  "method": "POST",
  "url": "https://receiver.example/webhook",
  "headers": {"Content-Type": ["text/plain"]},
  "body": "aGVsbG8=",
  "idempotency_key": "$ADAL_IDEMPOTENCY_KEY",
  "save_response_body": true
}
JSON
```

A successful `202` contains `request_id` and `received_at`. Save the actual ID as `ADAL_REQUEST_ID`. `202` does not yet establish an HTTP call or its success.

## Read the outcome {#result}

```bash
curl --fail-with-body --silent --show-error \
  --header "Authorization: Bearer $ADAL_API_TOKEN" \
  "$ADAL_API_URL/outbound/requests/$ADAL_REQUEST_ID"
```

Check the API journal or **Outbound → Requests** in the dashboard. For `received`/`delivering`, read again later; do not create another job to refresh a status. If the record has not appeared, verify the ID and retry reading. Open the card's summary and inspect the attempt and actual test-recipient result. HTTP success does not prove completion of its business transaction.

## Retrieve a stored response {#response}

```bash
curl --fail-with-body --silent --show-error \
  --header "Authorization: Bearer $ADAL_API_TOKEN" \
  "$ADAL_API_URL/outbound/requests/$ADAL_REQUEST_ID/http"
```

When the summary is available, select a finished attempt from `snapshot.attempts`, set its `attempt_id` as `ADAL_ATTEMPT_ID`, then download the body:

```bash
curl --fail --silent --show-error \
  --header "Authorization: Bearer $ADAL_API_TOKEN" \
  --output response-body.bin \
  "$ADAL_API_URL/outbound/requests/$ADAL_REQUEST_ID/attempts/$ADAL_ATTEMPT_ID/response/body"
```

Check curl completion, the expected test response bytes and summary flags `read_complete`/`body_truncated`. File availability does not mean the original response was read completely.

## If the submission response is lost {#duplicate}

Repeat the same POST with the same `ADAL_IDEMPOTENCY_KEY`. The repeat can receive a new ID and become `duplicate`, pointing to the original through `duplicate_of`. Continue investigating the original; the duplicate has no new HTTP execution of its own.

## Next {#related-pages}

[Submission reference](/en/docs/outbound/sending), [journal and statuses](/en/docs/outbound/history), [diagnostics](/en/docs/outbound/diagnostics), [HTTP data and download errors](/en/docs/outbound/http-data).
