A computer system comprising: one or more processors; and one or more computer-readable hardware storage devices having stored thereon computer-executable instructions that are executable by the one or more processors to cause the computer system to at least: generate an application programming interface, API, request body for an API of a remote service, the API request body comprising input data; transmit the API request body to the remote service to exercise the remote service in an attempt to identify a programming deficiency of the remote service using the input data; receive an error type response from the remote service, the error type response indicating how the remote service handled the input data; use the error type response to determine an error type response coverage of the remote service; and expand the error type response coverage by repeatedly performing at least the following until a threshold metric associated with the error type response coverage is satisfied: in response to learning how previously-used input data, including said input data, impacted the error type response coverage, selectively generate new input data, the new input data being selectively generated in an attempt to elicit, from the remote service, a new error type response that is nonoverlapping with previous error type responses, including said error type response; transmit a new API request body comprising the new input data to the remote service to exercise the remote service; and receive the new error type response from the remote service, the new error type response indicating how the remote service handled the new input data. one or more processors; and one or more computer-readable hardware storage devices having stored thereon computer-executable instructions that are executable by the one or more processors to cause the computer system to at least: generate an application programming interface, API, request body for an API of a remote service, the API request body comprising input data; transmit the API request body to the remote service to exercise the remote service in an attempt to identify a programming deficiency of the remote service using the input data; receive an error type response from the remote service, the error type response indicating how the remote service handled the input data; use the error type response to determine an error type response coverage of the remote service; and expand the error type response coverage by repeatedly performing at least the following until a threshold metric associated with the error type response coverage is satisfied: in response to learning how previously-used input data, including said input data, impacted the error type response coverage, selectively generate new input data, the new input data being selectively generated in an attempt to elicit, from the remote service, a new error type response that is nonoverlapping with previous error type responses, including said error type response; transmit a new API request body comprising the new input data to the remote service to exercise the remote service; and receive the new error type response from the remote service, the new error type response indicating how the remote service handled the new input data. generate an application programming interface, API, request body for an API of a remote service, the API request body comprising input data; transmit the API request body to the remote service to exercise the remote service in an attempt to identify a programming deficiency of the remote service using the input data; receive an error type response from the remote service, the error type response indicating how the remote service handled the input data; use the error type response to determine an error type response coverage of the remote service; and expand the error type response coverage by repeatedly performing at least the following until a threshold metric associated with the error type response coverage is satisfied: in response to learning how previously-used input data, including said input data, impacted the error type response coverage, selectively generate new input data, the new input data being selectively generated in an attempt to elicit, from the remote service, a new error type response that is nonoverlapping with previous error type responses, including said error type response; transmit a new API request body comprising the new input data to the remote service to exercise the remote service; and receive the new error type response from the remote service, the new error type response indicating how the remote service handled the new input data. in response to learning how previously-used input data, including said input data, impacted the error type response coverage, selectively generate new input data, the new input data being selectively generated in an attempt to elicit, from the remote service, a new error type response that is nonoverlapping with previous error type responses, including said error type response; transmit a new API request body comprising the new input data to the remote service to exercise the remote service; and receive the new error type response from the remote service, the new error type response indicating how the remote service handled the new input data.