Outputs & assertions
Request nodes can do two things with a response: extract values into named outputs for later nodes, and assert that values match what you expect. Both are built on the same extractors.
Extractors
Section titled “Extractors”| Extractor | Reads | Example |
|---|---|---|
jsonPath | A value from a JSON body, using RFC 9535 JSONPath | $.id, $.data[0].status |
xmlPath | A value from an XML body, using XPath | /order/status |
statusCode | The HTTP status code | 201 |
header | A named response header | Content-Type |
body | The raw response body | full text |
Outputs
Section titled “Outputs”An output gives an extracted value a name that later nodes can reference with {{double_brace}} syntax. Extract the payment ID after POST /payments, then use {{payment_id}} in the next request:
echopoint flows node output add <flow-id> <node-id> \ --name payment_id --extractor jsonPath --path "$.id"
# Status code and header outputs work the same wayechopoint flows node output add <flow-id> <node-id> \ --name status --extractor statusCodeechopoint flows node output add <flow-id> <node-id> \ --name content_type --extractor header --header-name "Content-Type"Assertion operators
Section titled “Assertion operators”An assertion pairs an extractor with one of 14 operators and an expected value:
| Operator | Passes when the actual value… |
|---|---|
equals | exactly equals the expected value |
notEquals | differs from the expected value |
contains | contains the expected value as a substring |
notContains | does not contain the expected value |
startsWith | begins with the expected value |
endsWith | ends with the expected value |
regex | matches the expected regular expression |
empty | is empty (no expected value needed) |
notEmpty | is not empty (no expected value needed) |
greaterThan | is numerically greater than the expected value |
lessThan | is numerically less than the expected value |
greaterThanOrEqual | is numerically greater than or equal |
lessThanOrEqual | is numerically less than or equal |
between | falls within the expected numeric range |
Add assertions from the CLI with flows node assertion add:
# Assert the payment was createdechopoint flows node assertion add <flow-id> <node-id> \ --extractor statusCode --operator equals --value "201"
# Assert the payment succeededechopoint flows node assertion add <flow-id> <node-id> \ --extractor jsonPath --path "$.status" --operator equals --value "succeeded"
# Assert the body mentions the currencyechopoint flows node assertion add <flow-id> <node-id> \ --extractor body --operator contains --value "eur"Every assertion is recorded — pass or fail
Section titled “Every assertion is recorded — pass or fail”Each assertion result is stored with three fields: expected, actual, and passed. This happens on passing runs too, not just failures. When a run goes green you can still open any node and confirm what the API actually returned — useful when an equals assertion passes for the wrong reason, or when you are reviewing a run someone else launched.
Where results show up
Section titled “Where results show up”- On the canvas: after a run, each node shows its result. Open a node to see its assertion results with expected vs actual values side by side.
- In run history: every execution keeps the full set of per-node assertion results, so you can compare what a flow returned across runs.
Next steps
Section titled “Next steps”- Building flows — nodes, edges, and the canvas
- Dynamic variables — generate test data for request bodies
- Executions & live runs — reading node results and run history
- CLI — full command reference