# ....
workflows:
  - workflowId: some-test
    steps:
      - stepId: create
        operationId: createUser
        requestBody:
          contentType: application/json
          payload: #....
        successCriteria:
          - condition: $statusCode == 200
          - condition: $response.header.Content-Type == "application/json"
          - condition: $response.body#/email == Trystan_Crooks@hotmail.com
        outputs: # Outputs are a map of an output id to a runtime expression that will be used to populate the output
          id: $response.body#/id # json-pointers are used to reference fields within the response body
          email: $response.body#/email
          age: $response.body#/age
          allergies: $response.body#/metadata/allergies
```

## Success criteria

A step's `successCriteria` field contains a list of [criterion objects](/openapi/arazzo#criterion-object) used to validate the success of the step and form the basis of the test assertions for test generation.

The `successCriteria` may be as simple as a single condition testing the status code of the response or as complex as multiple conditions testing various individual fields within the response body.

Speakeasy's implementation currently only supports `simple` criteria and the use of the equality (`==`) and inequality (`!=`) operators for comparing values and for testing status codes, response headers, and response bodies.

**Note:** While the [Arazzo specification](/openapi/arazzo#operators) defines additional operators like `>`, `<`, `>=`, `<=`, `~`, and `!~`, Speakeasy currently only supports `==` and `!=`.

To test values within the response body, due to the typed nature of the SDKs, you need criteria for testing the status code and content type of the response to help the generator determine which response schema to validate against.

```yaml
arazzo: 1.0.0