Back to documentation

Outbound quickstart

Your first HTTP job through the API: token, region, submission, outcome and stored response.

View as Markdown
On this page

Prepare

Create an account and an API token. 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

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

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.

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

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

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:

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

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.

Submission reference, journal and statuses, diagnostics, HTTP data and download errors.

Related documentation