{"openapi":"3.0.0","servers":[{"url":"http://localhost:1080/"},{"url":"https://localhost:1080/"}],"info":{"title":"Mock Server API","version":"5.8.x","description":"MockServer enables easy mocking of any system you integrate with via HTTP or HTTPS with clients written in Java, JavaScript and Ruby and a simple REST API (as shown below).\n\nMockServer Proxy is a proxy that introspects all proxied traffic including encrypted SSL traffic and supports Port Forwarding, Web Proxying (i.e. HTTP proxy), HTTPS Tunneling Proxying (using HTTP CONNECT) and SOCKS Proxying (i.e. dynamic port forwarding).\n\nBoth MockServer and the MockServer Proxy record all received requests so that it is possible to verify exactly what requests have been sent by the system under test.","license":{"url":"https://github.com/mock-server/mockserver/blob/master/LICENSE.md","name":"Apache 2.0"}},"tags":[{"name":"expectation","description":"Create expectations (only supported by MockServer)"},{"name":"verify","description":"Verify requests (both MockServer & MockServer Proxy)"},{"name":"control","description":"Manage state or process (both MockServer & MockServer Proxy)"}],"paths":{"/expectation":{"put":{"tags":["expectation"],"summary":"create expectation","responses":{"201":{"description":"expectation created"},"400":{"description":"incorrect request format"},"406":{"description":"invalid expectation"}},"requestBody":{"content":{"application/json":{"schema":{"title":"list of expectations","type":"array","additionalProperties":false,"items":{"$ref":"#/components/schemas/Expectations"}}}},"description":"expectation to create","required":true}}},"/clear":{"put":{"tags":["control"],"summary":"clears expectations and recorded requests that match the request matcher","responses":{"200":{"description":"expectations and recorded requests cleared"},"400":{"description":"incorrect request format"}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpRequest"}}},"description":"request used to match expectations and recored requests to clear"}}},"/reset":{"put":{"tags":["control"],"summary":"clears all expectations and recorded requests","responses":{"200":{"description":"expectations and recorded requests cleared"}}}},"/retrieve":{"put":{"tags":["control"],"summary":"retrieve recorded requests, active expectations, recorded expectations or log messages","parameters":[{"in":"query","name":"format","schema":{"type":"string","enum":["java","json","log_entries"]},"description":"changes response format, default if not specificed is \"json\", supported values are \"java\", \"json\", \"log_entries\""},{"in":"query","name":"type","schema":{"type":"string","enum":["logs","requests","request_responses","recorded_expectations","active_expectations"]},"description":"specifies the type of object that is retrieve, default if not specified is \"requests\", supported values are \"logs\", \"requests\", \"recorded_expectations\", \"active_expectations\""}],"responses":{"200":{"description":"recorded requests or active expectations returned","content":{"application/json":{"schema":{"oneOf":[{"type":"array","additionalProperties":false,"items":{"$ref":"#/components/schemas/Expectation"}},{"type":"array","additionalProperties":false,"items":{"$ref":"#/components/schemas/HttpResponse"}}]}},"application/java":{"schema":{"type":"string","description":"Java code for the list of either Expectations or HttpResponses"}},"text/plain":{"schema":{"type":"string","description":"List of recorded log messages"}}}},"400":{"description":"incorrect request format"}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HttpRequest"}}},"description":"request used to match which recorded requests, expectations or log messages to return, an empty body matches all requests, expectations or log messages"}}},"/verify":{"put":{"tags":["verify"],"summary":"verify a request has been received a specific number of times","responses":{"202":{"description":"matching request has been received specified number of times"},"400":{"description":"incorrect request format"},"406":{"description":"request has not been received specified numbers of times","content":{"text/plain":{"schema":{"type":"string","description":"JUnit expected:<...> but was:<...> format"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Verification"}}},"description":"request matcher and the number of times to match","required":true}}},"/verifySequence":{"put":{"tags":["verify"],"summary":"verify a sequence of request has been received in the specific order","responses":{"202":{"description":"request sequence has been received in specified order"},"400":{"description":"incorrect request format"},"406":{"description":"request sequence has not been received in specified order","content":{"text/plain":{"schema":{"type":"string","description":"JUnit expected:<...> but was:<...> format"}}}}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerificationSequence"}}},"description":"the sequence of requests matchers","required":true}}},"/status":{"put":{"tags":["control"],"summary":"return listening ports","responses":{"200":{"description":"MockServer is running and listening on the listed ports","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Ports"}}}}}}},"/bind":{"put":{"tags":["control"],"summary":"bind additional listening ports","description":"only supported on Netty version","responses":{"200":{"description":"listening on additional requested ports, note: the response ony contains ports added for the request, to list all ports use /status","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Ports"}}}},"400":{"description":"incorrect request format"},"406":{"description":"unable to bind to ports (i.e. already bound or JVM process doesn't have permission)"}},"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Ports"}}},"description":"list of ports to bind to, where 0 indicates dynamically bind to any available port","required":true}}},"/stop":{"put":{"tags":["control"],"summary":"stop running process","description":"only supported on Netty version","responses":{"200":{"description":"MockServer process is stopping"}}}}},"components":{"schemas":{"Expectations":{"title":"list of expectations","oneOf":[{"$ref":"#/components/schemas/Expectation"},{"type":"array","additionalProperties":false,"items":{"$ref":"#/components/schemas/Expectation"}}]},"Expectation":{"title":"expectation","type":"object","additionalProperties":false,"properties":{"httpRequest":{"$ref":"#/components/schemas/HttpRequest"},"httpResponse":{"$ref":"#/components/schemas/HttpResponse"},"httpResponseTemplate":{"$ref":"#/components/schemas/HttpTemplate"},"httpResponseClassCallback":{"$ref":"#/components/schemas/HttpClassCallback"},"httpResponseObjectCallback":{"$ref":"#/components/schemas/HttpObjectCallback"},"httpForward":{"$ref":"#/components/schemas/HttpForward"},"httpForwardTemplate":{"$ref":"#/components/schemas/HttpTemplate"},"httpForwardClassCallback":{"$ref":"#/components/schemas/HttpClassCallback"},"httpForwardObjectCallback":{"$ref":"#/components/schemas/HttpObjectCallback"},"httpOverrideForwardedRequest":{"$ref":"#/components/schemas/HttpOverrideForwardedRequest"},"httpError":{"$ref":"#/components/schemas/HttpError"},"times":{"$ref":"#/components/schemas/Times"},"timeToLive":{"$ref":"#/components/schemas/TimeToLive"}},"oneOf":[{"required":["httpResponse"]},{"required":["httpResponseTemplate"]},{"required":["httpResponseClassCallback"]},{"required":["httpResponseObjectCallback"]},{"required":["httpForward"]},{"required":["httpForwardTemplate"]},{"required":["httpForwardClassCallback"]},{"required":["httpForwardObjectCallback"]},{"required":["httpOverrideForwardedRequest"]},{"required":["httpError"]}]},"HttpRequest":{"title":"request matcher","type":"object","additionalProperties":false,"properties":{"body":{"$ref":"#/components/schemas/Body"},"headers":{"$ref":"#/components/schemas/KeyToMultiValue"},"cookies":{"$ref":"#/components/schemas/KeyToValue"},"queryStringParameters":{"$ref":"#/components/schemas/KeyToMultiValue"},"path":{"type":"string"},"method":{"type":"string"},"secure":{"type":"boolean"},"keepAlive":{"type":"boolean"},"socketAddress":{"$ref":"#/components/schemas/SocketAddress"}}},"HttpResponse":{"title":"response to return","type":"object","additionalProperties":false,"properties":{"delay":{"$ref":"#/components/schemas/Delay"},"body":{"$ref":"#/components/schemas/BodyWithContentType"},"cookies":{"$ref":"#/components/schemas/KeyToValue"},"connectionOptions":{"$ref":"#/components/schemas/ConnectionOptions"},"headers":{"$ref":"#/components/schemas/KeyToMultiValue"},"statusCode":{"type":"integer"},"reasonPhrase":{"type":"string"}}},"HttpTemplate":{"title":"template to generate response / request","type":"object","additionalProperties":false,"properties":{"delay":{"$ref":"#/components/schemas/Delay"},"templateType":{"enum":["JAVASCRIPT","VELOCITY"]},"template":{"type":"string"}}},"HttpForward":{"title":"host and port to forward to","type":"object","additionalProperties":false,"properties":{"delay":{"$ref":"#/components/schemas/Delay"},"host":{"type":"string"},"port":{"type":"integer"},"scheme":{"enum":["HTTP","HTTPS"]}}},"HttpClassCallback":{"title":"class callback","type":"object","additionalProperties":false,"properties":{"delay":{"$ref":"#/components/schemas/Delay"},"callbackClass":{"type":"string"}}},"HttpObjectCallback":{"title":"object / method callback","type":"object","additionalProperties":false,"properties":{"delay":{"$ref":"#/components/schemas/Delay"},"clientId":{"type":"string"},"responseCallback":{"type":"boolean"}}},"HttpOverrideForwardedRequest":{"title":"override forwarded request","type":"object","additionalProperties":false,"properties":{"delay":{"$ref":"#/components/schemas/Delay"},"httpRequest":{"$ref":"#/components/schemas/HttpRequest"},"httpResponse":{"$ref":"#/components/schemas/HttpResponse"}}},"HttpError":{"title":"error behaviour","type":"object","additionalProperties":false,"properties":{"delay":{"$ref":"#/components/schemas/Delay"},"dropConnection":{"type":"boolean"},"responseBytes":{"type":"string"}}},"Times":{"title":"number of responses","type":"object","additionalProperties":false,"properties":{"remainingTimes":{"type":"integer"},"unlimited":{"type":"boolean"}}},"TimeToLive":{"title":"time expectation is valid for","type":"object","additionalProperties":false,"properties":{"timeUnit":{"enum":["DAYS","HOURS","MINUTES","SECONDS","MILLISECONDS","MICROSECONDS","NANOSECONDS"]},"timeToLive":{"type":"integer"},"unlimited":{"type":"boolean"}}},"KeyToMultiValue":{"oneOf":[{"type":"array","additionalProperties":false,"items":{"type":"object","properties":{"name":{"type":"string"},"values":{"type":"array","items":{"type":"string"}}}}},{"type":"object"}]},"KeyToValue":{"oneOf":[{"type":"array","additionalProperties":false,"items":{"type":"object","properties":{"name":{"type":"string"},"value":{"type":"string"}}}},{"type":"object"}]},"SocketAddress":{"title":"remote address to send request to","type":"object","additionalProperties":false,"properties":{"host":{"type":"string"},"port":{"type":"integer"},"scheme":{"enum":["HTTP","HTTPS"]}}},"Body":{"description":"request body matcher","anyOf":[{"type":"object","description":"binary body matcher","additionalProperties":false,"properties":{"not":{"type":"boolean"},"type":{"enum":["BINARY"]},"base64Bytes":{"type":"string"},"contentType":{"type":"string"}}},{"type":"object","description":"json body matcher","additionalProperties":false,"properties":{"not":{"type":"boolean"},"type":{"enum":["JSON"]},"json":{"type":"string"},"contentType":{"type":"string"},"matchType":{"enum":["STRICT","ONLY_MATCHING_FIELDS"]}}},{"type":"object","description":"json matching fields body matcher","additionalProperties":true},{"type":"object","description":"json schema body matcher","additionalProperties":false,"properties":{"not":{"type":"boolean"},"type":{"enum":["JSON_SCHEMA"]},"jsonSchema":{"type":"string"}}},{"type":"object","description":"json path body matcher","additionalProperties":false,"properties":{"not":{"type":"boolean"},"type":{"enum":["JSON_PATH"]},"jsonPath":{"type":"string"}}},{"type":"object","description":"parameter body matcher","additionalProperties":false,"properties":{"not":{"type":"boolean"},"type":{"enum":["PARAMETERS"]},"parameters":{"$ref":"#/components/schemas/KeyToMultiValue"}}},{"type":"object","description":"regex body matcher","additionalProperties":false,"properties":{"not":{"type":"boolean"},"type":{"enum":["REGEX"]},"regex":{"type":"string"}}},{"type":"object","description":"string body matcher","additionalProperties":false,"properties":{"not":{"type":"boolean"},"type":{"enum":["STRING"]},"string":{"type":"string"},"contentType":{"type":"string"},"subString":{"type":"boolean"}}},{"type":"string","description":"substring body matcher"},{"type":"object","description":"xml body matcher","additionalProperties":false,"properties":{"not":{"type":"boolean"},"type":{"enum":["XML"]},"xml":{"type":"string"},"contentType":{"type":"string"}}},{"type":"object","description":"xml schema body matcher","additionalProperties":false,"properties":{"not":{"type":"boolean"},"type":{"enum":["XML_SCHEMA"]},"xmlSchema":{"type":"string"}}},{"type":"object","description":"xpath body matcher","additionalProperties":false,"properties":{"not":{"type":"boolean"},"type":{"enum":["XPATH"]},"xpath":{"type":"string"}}}]},"BodyWithContentType":{"description":"response body","anyOf":[{"type":"object","description":"binary response body","additionalProperties":false,"properties":{"not":{"type":"boolean"},"type":{"enum":["BINARY"]},"base64Bytes":{"type":"string"},"contentType":{"type":"string"}}},{"type":"object","description":"json response body","additionalProperties":false,"properties":{"not":{"type":"boolean"},"type":{"enum":["JSON"]},"json":{"type":"string"},"contentType":{"type":"string"}}},{"type":"object","description":"json response body","additionalProperties":true},{"type":"object","description":"parameters response body","additionalProperties":false,"properties":{"not":{"type":"boolean"},"type":{"enum":["PARAMETERS"]},"parameters":{"$ref":"#/components/schemas/KeyToMultiValue"}}},{"type":"object","description":"string response body","additionalProperties":false,"properties":{"not":{"type":"boolean"},"type":{"enum":["STRING"]},"string":{"type":"string"},"contentType":{"type":"string"}}},{"type":"string","description":"string response body"},{"type":"object","description":"xml response body","additionalProperties":false,"properties":{"not":{"type":"boolean"},"type":{"enum":["XML"]},"xml":{"type":"string"},"contentType":{"type":"string"}}}]},"Delay":{"description":"response delay","type":"object","additionalProperties":false,"properties":{"timeUnit":{"type":"string"},"value":{"type":"integer"}}},"ConnectionOptions":{"description":"connection options","type":"object","additionalProperties":false,"properties":{"closeSocket":{"type":"boolean"},"contentLengthHeaderOverride":{"type":"integer"},"suppressContentLengthHeader":{"type":"boolean"},"suppressConnectionHeader":{"type":"boolean"},"keepAliveOverride":{"type":"boolean"}}},"Verification":{"description":"verification","type":"object","additionalProperties":false,"properties":{"httpRequest":{"$ref":"#/components/schemas/HttpRequest"},"times":{"$ref":"#/components/schemas/VerificationTimes"}}},"VerificationTimes":{"description":"number of request to verify","type":"object","additionalProperties":false,"properties":{"atLeast":{"type":"integer"},"atMost":{"type":"integer"}}},"VerificationSequence":{"description":"verification sequence","type":"object","additionalProperties":false,"properties":{"httpRequests":{"type":"array","items":{"$ref":"#/components/schemas/HttpRequest"}}}},"Ports":{"description":"list of ports","type":"object","additionalProperties":false,"properties":{"ports":{"items":{"type":"number"},"type":"array"}}}}}}