MockServer supports two complementary approaches to contract testing:

  • OpenAPI contract testing — send example requests derived from an OpenAPI spec to a live service and validate each response against the spec.
  • Pact consumer-driven contract testing — import a Pact v3 contract to create stub expectations, export active expectations as a Pact contract, and verify that existing expectations satisfy a contract.

For Pact import, export and verify details see also Pact Import / Export / Verify.

 

OpenAPI Contract Testing

Send a PUT request to /mockserver/contractTest to run a contract test suite against a live service. MockServer builds one representative example request per operation in your OpenAPI spec, sends each request to the target service, and validates every response against the spec's defined response schemas. The result is a structured pass/fail report.

This is useful for quickly verifying that a running service conforms to its published API contract — without writing per-operation test code.

Request body fields

Field Required Description
spec Yes A URL, file path, or inline JSON/YAML OpenAPI v3 spec. Also accepted as specUrlOrPayload. When a file path is given, it is resolved on the MockServer server's filesystem, not the client machine.
baseUrl Yes The base URL of the service under test, e.g. http://localhost:8080. The same SSRF policy enforced on proxy/forward paths applies here.
operationId No Restrict the test run to a single operation by its operationId. Omit to test all operations in the spec.

How example requests are built

For each operation, MockServer resolves path parameters, query parameters, required headers, and a request body from the spec's example / examples values and schema defaults. When no example is present, values are generated from the schema type. Path parameters without an example are substituted with the literal string example.

Response validation

Each response is validated against the operation's declared responses in the spec. An operation passes if the response status code and body match a declared response schema. Validation errors are returned verbatim in the report.

Response codes

HTTP status Meaning
200 OK The test run completed. Check allPassed in the response body.
400 Bad Request Missing or invalid spec or baseUrl, or the spec could not be parsed.
403 Forbidden The baseUrl host was blocked by the SSRF policy.
501 Not Implemented No HTTP client has been wired into this MockServer instance (embedded use only).

Report format

The response body is a JSON report:

{
  "baseUrl" : "http://localhost:8080",
  "totalOperations" : 3,
  "passed" : 2,
  "failed" : 1,
  "allPassed" : false,
  "results" : [ {
    "operationId" : "getUsers",
    "method" : "GET",
    "path" : "/api/users",
    "statusCodeReceived" : 200,
    "passed" : true,
    "validationErrors" : [ ]
  }, {
    "operationId" : "createUser",
    "method" : "POST",
    "path" : "/api/users",
    "statusCodeReceived" : 422,
    "passed" : false,
    "validationErrors" : [
      "Response status 422 is not declared for operation createUser"
    ]
  } ]
}

Note on error field names: the REST JSON report returns a single combined validationErrors array per result, whereas the typed Java client splits the same errors into requestErrors() and responseErrors() on ContractResult (request-side errors first, then response-side).

Use the typed contractTest helper on MockServerClient — it builds the request, parses the response, and returns a structured ContractReport:

MockServerClient client = new MockServerClient("localhost", 1080);

// Run contract test against a live service
MockServerClient.ContractReport report = client.contractTest(
    "https://petstore3.swagger.io/api/v3/openapi.json",
    "https://petstore3.swagger.io"
);

System.out.println("All passed: " + report.allPassed());
System.out.println("Passed: " + report.passed() + " / " + report.total());
for (MockServerClient.ContractResult result : report.results()) {
    System.out.printf("  %s %s — %s%n",
        result.method(), result.path(),
        result.passed() ? "PASS" : "FAIL");
    result.requestErrors().forEach(e -> System.out.println("    request: " + e));
    result.responseErrors().forEach(e -> System.out.println("    response: " + e));
}

// Optionally filter to a single operation by operationId
MockServerClient.ContractReport singleOp = client.contractTest(
    "https://petstore3.swagger.io/api/v3/openapi.json",
    "https://petstore3.swagger.io",
    "getUsers"
);

To validate recorded traffic against a spec instead of driving live requests, use trafficValidate:

// Validate traffic already recorded by MockServer against an OpenAPI spec
MockServerClient.ContractReport trafficReport = client.trafficValidate(
    "https://petstore3.swagger.io/api/v3/openapi.json"
);
System.out.println("Traffic valid: " + trafficReport.allPassed());

There is no typed contract-test helper, so send the raw PUT /mockserver/contractTest request:

const http = require('http');

const body = JSON.stringify({
    spec: 'https://petstore3.swagger.io/api/v3/openapi.json',
    baseUrl: 'https://petstore3.swagger.io'
});

const req = http.request(
    {host: 'localhost', port: 1080, method: 'PUT', path: '/mockserver/contractTest',
     headers: {'Content-Type': 'application/json'}},
    res => {
        let data = '';
        res.on('data', chunk => data += chunk);
        res.on('end', () => {
            const report = JSON.parse(data);
            console.log('All passed:', report.allPassed);
            report.results.forEach(r => {
                console.log(r.method, r.path, r.passed ? 'PASS' : 'FAIL');
                r.validationErrors.forEach(e => console.log('  ', e));
            });
        });
    });
req.on('error', console.error);
req.write(body);
req.end();

There is no typed contract-test helper, so send the raw PUT /mockserver/contractTest request:

import json
import urllib.request

body = json.dumps({
    "spec": "https://petstore3.swagger.io/api/v3/openapi.json",
    "baseUrl": "https://petstore3.swagger.io"
}).encode("utf-8")

req = urllib.request.Request(
    "http://localhost:1080/mockserver/contractTest",
    data=body,
    method="PUT",
    headers={"Content-Type": "application/json"}
)
with urllib.request.urlopen(req) as response:
    report = json.loads(response.read().decode("utf-8"))

print("All passed:", report["allPassed"])
for result in report["results"]:
    print(result["method"], result["path"], "PASS" if result["passed"] else "FAIL")
    for error in result["validationErrors"]:
        print("  ", error)

There is no typed contract-test helper, so send the raw PUT /mockserver/contractTest request:

require 'net/http'
require 'uri'
require 'json'

uri = URI('http://localhost:1080/mockserver/contractTest')
req = Net::HTTP::Put.new(uri)
req['Content-Type'] = 'application/json'
req.body = {
    spec: 'https://petstore3.swagger.io/api/v3/openapi.json',
    baseUrl: 'https://petstore3.swagger.io'
}.to_json

response = Net::HTTP.start(uri.host, uri.port) { |http| http.request(req) }
report = JSON.parse(response.body)

puts "All passed: #{report['allPassed']}"
report['results'].each do |result|
    puts "#{result['method']} #{result['path']} #{result['passed'] ? 'PASS' : 'FAIL'}"
    result['validationErrors'].each { |error| puts "  #{error}" }
end

There is no typed contract-test helper, so send the raw PUT /mockserver/contractTest request:

package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "io"
    "net/http"
)

func main() {
    body := []byte(`{
    "spec": "https://petstore3.swagger.io/api/v3/openapi.json",
    "baseUrl": "https://petstore3.swagger.io"
}`)
    req, _ := http.NewRequest("PUT",
        "http://localhost:1080/mockserver/contractTest",
        bytes.NewReader(body))
    req.Header.Set("Content-Type", "application/json")
    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()

    raw, _ := io.ReadAll(resp.Body)
    var report struct {
        AllPassed bool `json:"allPassed"`
        Results   []struct {
            Method           string   `json:"method"`
            Path             string   `json:"path"`
            Passed           bool     `json:"passed"`
            ValidationErrors []string `json:"validationErrors"`
        } `json:"results"`
    }
    json.Unmarshal(raw, &report)

    fmt.Println("All passed:", report.AllPassed)
    for _, result := range report.Results {
        status := "FAIL"
        if result.Passed {
            status = "PASS"
        }
        fmt.Println(result.Method, result.Path, status)
    }
}

There is no typed contract-test helper, so send the raw PUT /mockserver/contractTest request:

using System.Net.Http;
using System.Text;
using System.Text.Json;

using var httpClient = new HttpClient();
var json = @"{
    ""spec"": ""https://petstore3.swagger.io/api/v3/openapi.json"",
    ""baseUrl"": ""https://petstore3.swagger.io""
}";
var response = await httpClient.PutAsync(
    "http://localhost:1080/mockserver/contractTest",
    new StringContent(json, Encoding.UTF8, "application/json")
);

using var report = JsonDocument.Parse(await response.Content.ReadAsStringAsync());
Console.WriteLine("All passed: " + report.RootElement.GetProperty("allPassed").GetBoolean());
foreach (var result in report.RootElement.GetProperty("results").EnumerateArray())
{
    Console.WriteLine(
        result.GetProperty("method").GetString() + " " +
        result.GetProperty("path").GetString() + " " +
        (result.GetProperty("passed").GetBoolean() ? "PASS" : "FAIL"));
}

There is no typed contract-test helper, so send the raw PUT /mockserver/contractTest request:

use reqwest::blocking::Client;
use serde_json::Value;

let client = Client::new();
let body = r#"{
    "spec": "https://petstore3.swagger.io/api/v3/openapi.json",
    "baseUrl": "https://petstore3.swagger.io"
}"#;
let report: Value = client
    .put("http://localhost:1080/mockserver/contractTest")
    .header("Content-Type", "application/json")
    .body(body.to_string())
    .send()
    .unwrap()
    .json()
    .unwrap();

println!("All passed: {}", report["allPassed"]);
for result in report["results"].as_array().unwrap() {
    let status = if result["passed"].as_bool().unwrap() { "PASS" } else { "FAIL" };
    println!("{} {} {}", result["method"], result["path"], status);
}

There is no typed contract-test helper, so send the raw PUT /mockserver/contractTest request:

$json = <<<'JSON'
{
    "spec": "https://petstore3.swagger.io/api/v3/openapi.json",
    "baseUrl": "https://petstore3.swagger.io"
}
JSON;

$ch = curl_init('http://localhost:1080/mockserver/contractTest');
curl_setopt_array($ch, [
    CURLOPT_CUSTOMREQUEST  => 'PUT',
    CURLOPT_POSTFIELDS     => $json,
    CURLOPT_HTTPHEADER     => ['Content-Type: application/json; charset=utf-8'],
    CURLOPT_RETURNTRANSFER => true,
]);
$report = json_decode(curl_exec($ch), true);
curl_close($ch);

echo 'All passed: ' . ($report['allPassed'] ? 'true' : 'false') . "\n";
foreach ($report['results'] as $result) {
    echo $result['method'] . ' ' . $result['path'] . ' ' . ($result['passed'] ? 'PASS' : 'FAIL') . "\n";
}

Test all operations in a spec hosted at a URL:

curl -v -X PUT "http://localhost:1080/mockserver/contractTest" \
  -H "Content-Type: application/json" \
  -d '{
    "spec": "https://petstore3.swagger.io/api/v3/openapi.json",
    "baseUrl": "https://petstore3.swagger.io"
  }'

Test a single operation using an inline spec:

curl -v -X PUT "http://localhost:1080/mockserver/contractTest" \
  -H "Content-Type: application/json" \
  -d '{
    "spec": {
      "openapi": "3.0.0",
      "info": {"title": "Users API", "version": "1.0.0"},
      "paths": {
        "/api/users": {
          "get": {
            "operationId": "getUsers",
            "responses": {
              "200": {
                "description": "list of users",
                "content": {
                  "application/json": {
                    "schema": {"type": "array", "items": {"type": "object"}}
                  }
                }
              }
            }
          }
        }
      }
    },
    "baseUrl": "http://localhost:8080",
    "operationId": "getUsers"
  }'
 

Pact Consumer-Driven Contract Testing

MockServer supports the complete Pact v3 contract-testing loop. The three endpoints work together:

Endpoint Method Purpose
/mockserver/pact/import PUT Import a Pact v3 contract and create one expectation per interaction.
/mockserver/pact PUT Export active expectations as a Pact v3 consumer contract.
/mockserver/pact/verify PUT Verify that active expectations satisfy every interaction in a Pact contract.

Response codes — /pact/import

HTTP status Meaning
201 Created Import succeeded. The response body is a JSON array of the generated expectations.
400 Bad Request The request body was empty, not valid JSON, or could not be parsed as a Pact contract. Inspect the plain-text response body for the error message.

Response codes — /pact/verify

HTTP status Meaning
202 Accepted All interactions verified successfully. The response body is a JSON object with "verified": true and a per-interaction breakdown.
406 Not Acceptable One or more interactions failed verification. The response body is a JSON object with "verified": false and per-interaction failure reasons.
400 Bad Request The request body was empty, not valid JSON, or the contract could not be parsed. Inspect the JSON error field in the response body for details.

Full documentation of these endpoints — including matching-rule translation, provider state handling, export filtering, and full result schemas — is on the Pact Import / Export / Verify page.

 

Consumer-driven contract workflow

A typical team workflow using MockServer with Pact:

  1. Consumer team — create expectations in MockServer for each API call the consumer makes, then run the consumer test suite against MockServer. Tests pass because MockServer returns the expected responses.
  2. Export the contract — call PUT /mockserver/pact?consumer=my-app&provider=users-service to get a Pact v3 JSON document from the active expectations.
  3. Publish the contract — push the exported JSON to a Pact Broker or PactFlow instance so the provider team can verify against it.
  4. Provider team — either:
    • Import the contract (PUT /mockserver/pact/import) to stub the provider and run provider tests against it, or
    • Verify the contract (PUT /mockserver/pact/verify) to assert that the provider's existing expectations satisfy every interaction.

Use the typed Pact helpers on MockServerClientpactImport, pactExport, and pactVerify — instead of constructing raw PUT requests:

Step 1 — Consumer: create expectations and export the contract

MockServerClient client = new MockServerClient("localhost", 1080);

// Create an expectation
client.when(
    request().withMethod("GET").withPath("/api/users")
).respond(
    response()
        .withStatusCode(200)
        .withHeader("content-type", "application/json")
        .withBody("{\"users\":[{\"id\":1,\"name\":\"Alice\"}]}")
);

// Export active expectations as a Pact v3 contract
String pactJson = client.pactExport("frontend", "users-service");
// pactJson is a Pact v3 JSON string — save it or send it to a Pact Broker

Step 2 — Provider: verify the contract

// Verify that the provider's active expectations satisfy every Pact interaction
String verificationReport = client.pactVerify(pactJson);
// 202 = all interactions verified; 406 = one or more failed
System.out.println(verificationReport);

Alternative — Provider: import a contract and stub from it

// Import a Pact contract; returns a JSON array of the generated expectations
String expectations = client.pactImport(pactJson);
System.out.println("Created expectations: " + expectations);

Use the typed Pact helpers on the client — pactExport, pactVerify, and pactImport — alongside the typed expectation API:

Step 1 — Consumer: create expectations and export the contract

const mockServerClient = require('mockserver-client').mockServerClient;

const client = mockServerClient('localhost', 1080);

// Create an expectation with the typed client
await client.mockAnyResponse({
    httpRequest: {method: 'GET', path: '/api/users'},
    httpResponse: {
        statusCode: 200,
        headers: {'content-type': ['application/json']},
        body: {users: [{id: 1, name: 'Alice'}]}
    }
});

// Export active expectations as a Pact v3 contract (resolves to the parsed contract object)
const pactContract = await client.pactExport('frontend', 'users-service');

Step 2 — Provider: verify the contract

// Resolves with the parsed report for both pass (202) and fail (406) —
// inspect report.verified to tell them apart
const report = await client.pactVerify(pactContract);
console.log('verified:', report.verified);

Alternative — Provider: import a contract and stub from it

// Resolves to the array of generated expectations
const expectations = await client.pactImport(pactContract);
console.log('Created expectations:', expectations);

Use the typed Pact helpers on MockServerClientpact_export, pact_verify, and pact_import — alongside the typed expectation API:

Step 1 — Consumer: create expectations and export the contract

from mockserver.client import MockServerClient
from mockserver.models import HttpRequest, HttpResponse

client = MockServerClient("localhost", 1080)

# Create an expectation with the typed client
client.when(
    HttpRequest.request("/api/users").with_method("GET")
).respond(
    HttpResponse(
        status_code=200,
        headers={"content-type": ["application/json"]},
        body='{"users":[{"id":1,"name":"Alice"}]}'
    )
)

# Export active expectations as a Pact v3 contract (returns the contract JSON)
pact_json = client.pact_export("frontend", "users-service")

Step 2 — Provider: verify the contract

# Returns the verification report for both a pass (202) and a fail (406);
# only a genuinely bad request (400) raises
report = client.pact_verify(pact_json)
print("report:", report)

Alternative — Provider: import a contract and stub from it

# Returns the upserted expectations JSON
expectations = client.pact_import(pact_json)
print("Created expectations:", expectations)

Use the typed Pact helpers on the client — pact_export, pact_verify, and pact_import — alongside the typed expectation API:

Step 1 — Consumer: create expectations and export the contract

require 'mockserver-client'

client = MockServer::Client.new('localhost', 1080)

# Create an expectation with the typed client
client.when(
    MockServer::HttpRequest.new(method: 'GET', path: '/api/users')
).respond(
    MockServer::HttpResponse.new(
        status_code: 200,
        headers: {'content-type' => ['application/json']},
        body: '{"users":[{"id":1,"name":"Alice"}]}'
    )
)

# Export active expectations as a Pact v3 contract (returns the contract JSON)
pact_json = client.pact_export(consumer: 'frontend', provider: 'users-service')

Step 2 — Provider: verify the contract

# Returns the verification report for both a pass (202) and a fail (406);
# only a genuinely bad request raises MockServer::Error
report = client.pact_verify(pact_json)
puts "report: #{report}"

Alternative — Provider: import a contract and stub from it

# Returns the upserted expectations JSON
expectations = client.pact_import(pact_json)
puts "Created expectations: #{expectations}"

Use the typed Pact helpers on the client — PactExport, PactVerify, and PactImport — alongside the typed expectation API:

Step 1 — Consumer: create expectations and export the contract

import (
    "fmt"

    mockserver "github.com/mock-server/mockserver-monorepo/mockserver-client-go"
)

client := mockserver.New("localhost", 1080)

// Create an expectation with the typed client
client.When(
    mockserver.Request().Method("GET").Path("/api/users"),
).Respond(
    mockserver.Response().
        StatusCode(200).
        Header("content-type", "application/json").
        Body(`{"users":[{"id":1,"name":"Alice"}]}`),
)

// Export active expectations as a Pact v3 contract (returns the contract JSON)
pactJson, err := client.PactExport("frontend", "users-service")

Step 2 — Provider: verify the contract

// passed = true when every interaction verified (202), false on a fail (406);
// report carries the verification report JSON in both cases
passed, report, err := client.PactVerify(pactJson)
fmt.Println("verified:", passed, report)

Alternative — Provider: import a contract and stub from it

// Returns the slice of generated expectations
expectations, err := client.PactImport(pactJson)
fmt.Println("Created expectations:", expectations)

Use the typed Pact helpers on MockServerClientPactExport, PactVerify, and PactImport — alongside the typed expectation API:

Step 1 — Consumer: create expectations and export the contract

using MockServer.Client;
using MockServer.Client.Models;

using var client = new MockServerClient("localhost", 1080);

// Create an expectation with the typed client
client.When(
    HttpRequest.Request().WithMethod("GET").WithPath("/api/users")
).Respond(
    HttpResponse.Response()
        .WithStatusCode(200)
        .WithHeader("content-type", "application/json")
        .WithBody("{\"users\":[{\"id\":1,\"name\":\"Alice\"}]}")
);

// Export active expectations as a Pact v3 contract (returns the contract JSON)
var pactJson = client.PactExport("frontend", "users-service");

Step 2 — Provider: verify the contract

// Returns true when every interaction verified (202), false on a fail (406);
// a verification failure does not throw
bool verified = client.PactVerify(pactJson);
Console.WriteLine("verified: " + verified);

Alternative — Provider: import a contract and stub from it

// Returns the list of generated expectations
var expectations = client.PactImport(pactJson);
Console.WriteLine("Created expectations: " + expectations.Count);

Use the typed Pact helpers on the client — pact_export, pact_verify, and pact_import — alongside the typed expectation API:

Step 1 — Consumer: create expectations and export the contract

use mockserver_client::{ClientBuilder, HttpRequest, HttpResponse};

let client = ClientBuilder::new("localhost", 1080).build().unwrap();

// Create an expectation with the typed client
client.when(HttpRequest::new().method("GET").path("/api/users"))
    .respond(
        HttpResponse::new()
            .status_code(200)
            .header("content-type", "application/json")
            .body(r#"{"users":[{"id":1,"name":"Alice"}]}"#)
    )
    .unwrap();

// Export active expectations as a Pact v3 contract (returns the contract JSON)
let pact_json = client.pact_export("frontend", "users-service").unwrap();

Step 2 — Provider: verify the contract

// passed = true when every interaction verified (202), false on a fail (406);
// the report is carried in both cases (a fail does not error)
let verification = client.pact_verify(&pact_json).unwrap();
println!("verified: {} {}", verification.passed, verification.report);

Alternative — Provider: import a contract and stub from it

// Returns the Vec of generated expectations
let expectations = client.pact_import(&pact_json).unwrap();
println!("Created expectations: {}", expectations.len());

Use the typed Pact helpers on MockServerClientpactExport, pactVerify, and pactImport — alongside the typed expectation API:

Step 1 — Consumer: create expectations and export the contract

use MockServer\MockServerClient;
use MockServer\HttpRequest;
use MockServer\HttpResponse;

$client = new MockServerClient('localhost', 1080);

// Create an expectation with the typed client
$client->when(
    HttpRequest::request()
        ->method('GET')
        ->path('/api/users')
)->respond(
    HttpResponse::response()
        ->statusCode(200)
        ->header('content-type', 'application/json')
        ->body('{"users":[{"id":1,"name":"Alice"}]}')
);

// Export active expectations as a Pact v3 contract (returns the contract JSON)
$pactJson = $client->pactExport('frontend', 'users-service');

Step 2 — Provider: verify the contract

// Returns true when every interaction verified (202), false on a fail (406);
// a verification failure does not throw
$verified = $client->pactVerify($pactJson);
echo 'verified: ' . ($verified ? 'true' : 'false') . "\n";

Alternative — Provider: import a contract and stub from it

// Returns the upserted expectations JSON
$expectations = $client->pactImport($pactJson);
echo 'Created expectations: ' . $expectations . "\n";

Step 1 — Consumer: create expectations and export the contract

# Create an expectation
curl -X PUT "http://localhost:1080/mockserver/expectation" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "get-users",
    "httpRequest": {"method": "GET", "path": "/api/users"},
    "httpResponse": {
      "statusCode": 200,
      "headers": {"content-type": ["application/json"]},
      "body": {"users": [{"id": 1, "name": "Alice"}]}
    }
  }'

# Export the Pact contract
curl -X PUT "http://localhost:1080/mockserver/pact?consumer=frontend&provider=users-service" \
  -o contract.json

Step 2 — Provider: verify the contract

curl -v -X PUT "http://localhost:1080/mockserver/pact/verify" \
  -H "Content-Type: application/json" \
  -d @contract.json

A 202 Accepted response means all interactions verified. A 406 Not Acceptable response means one or more failed — check the JSON body for per-interaction reasons.

Alternative — Provider: import and stub from the contract

curl -X PUT "http://localhost:1080/mockserver/pact/import" \
  -H "Content-Type: application/json" \
  -d @contract.json
 

Validate recorded traffic against a spec

Send a PUT request to /mockserver/trafficValidate to validate the request/response traffic MockServer has already recorded against an OpenAPI spec. Unlike /contractTest — which actively drives a live service — this endpoint validates the traffic that has flowed through MockServer (for example while it was acting as a proxy or serving mocks), so you can confirm that real exchanges conform to the contract without re-issuing any requests.

For every recorded request/response pair, MockServer locates the matching spec operation, validates the request against the operation's parameters and request body schema, and validates the response against the operation's declared response schemas. The result is a structured pass/fail report.

Request body fields

Field Required Description
spec Yes A URL, file path, or inline JSON/YAML OpenAPI v3 spec. Also accepted as specUrlOrPayload. When a spec URL is fetched, the same SSRF policy enforced on proxy/forward paths applies to the spec host. When a file path is given, it is resolved on the MockServer server's filesystem, not the client machine.

Report shape

The report mirrors the /contractTest report: top-level totalRequests, passed, failed, and allPassed counts, plus a results array with one entry per recorded request. Each result carries the method, path, the matched spec matchedOperation (or null when no operation matched), a passed flag, and any requestErrors and responseErrors.

curl -v -X PUT "http://localhost:1080/mockserver/trafficValidate" \
  -H "content-type: application/json" \
  -d '{ "spec": "https://example.com/openapi.json" }'
 

OpenAPI traffic validation (request-time)

MockServer can also validate incoming requests against an OpenAPI spec at the point a request arrives, by using an OpenAPI request matcher in an expectation. This is distinct from the /contractTest and /trafficValidate endpoints — it validates live traffic in-band rather than running a batch test. See OpenAPI & WSDL for details.