Documentation Index
Fetch the complete documentation index at: https://docs.ellomas.com/llms.txt
Use this file to discover all available pages before exploring further.
HTTP Requests
The http step type executes HTTP requests and captures the response for extraction and assertion.
Basic Syntax
- name: get-users
type: http
request:
method: GET
url: /users
The url can be a relative path (resolved against config.http.base_url) or an absolute URL.
Request Configuration
Base URL
Set a shared base URL in workflow config:
config:
http:
base_url: https://api.example.com
steps:
- name: health
type: http
request:
method: GET
url: /health # → https://api.example.com/health
- name: external
type: http
request:
method: GET
url: https://other.com/api # absolute URL, ignores base_url
Methods
Replay supports standard HTTP methods:
method: GET
method: POST
method: PUT
method: DELETE
method: PATCH
Set global headers in config (applied to every request):
config:
http:
headers:
Accept: application/json
X-Client: replay
Override or add per-step:
- name: auth
type: http
request:
method: POST
url: /admin
headers:
Authorization: Bearer {{ token }} # per-step header
X-Idempotency-Key: "{{ nowUnix }}"
Step headers take precedence over config headers.
Body
Send JSON bodies as a map:
request:
method: POST
url: /users
body:
name: Alice
email: alice@example.com
Use template variables:
request:
method: POST
url: /users
body:
name: "{{ user_name }}"
email: "{{ email }}"
For raw JSON strings:
request:
method: POST
url: /webhook
body: |
{"event": "user.created", "userId": {{ user_id }}}
Response Structure
The HTTP runner returns a structured result:
{
"status": 200,
"data": { ... },
"header": { ... }
}
status — HTTP status code
data — Parsed JSON response body (or raw string if not JSON)
header — Response headers
Use JSONPath expressions to extract values from the response:
extract:
token: $.data.token # nested field
user_id: data.user.id # shorthand (no $ prefix)
response_status: res.status # explicit res. prefix
first_item: data.items[0] # array index
all_names: data.items[*].name # array wildcard
server_header: res.header.Server[0] # response header
Assertions
Assert on the response:
assert:
- ["$.status", "eq", 200]
- ["$.data.email", "not_null"]
- ["$.data.items", "contains", "expected-value"]
Debug Mode
Enable debug logging to see request/response details:
config:
http:
debug: true
Or pass --debug on the CLI to enable debug for all workflows.
Example: Full Auth Flow
- name: login
type: http
request:
method: POST
url: /auth/login
headers:
Content-Type: application/json
body:
email: admin@example.com
password: "{{ admin_password }}"
extract:
token: $.data.accessToken
refresh: $.data.refreshToken
assert:
- ["$.status", "eq", 200]
- ["$.data.accessToken", "not_null"]
- ["$.data.expiresIn", "gt", 0]
TLS
Replay accepts self-signed certificates in development environments. For production, ensure your servers use valid certificates.
What’s Next?