diff --git a/core/base-service/base-graphql.js b/core/base-service/base-graphql.js
index 694a2f272012554f4656467e8aeb426005739775..a81bac29f9c9fde874750260b7fd591edbd18886 100644
--- a/core/base-service/base-graphql.js
+++ b/core/base-service/base-graphql.js
@@ -44,6 +44,12 @@ class BaseGraphqlService extends BaseService {
    *    and custom error messages e.g: `{ 404: 'package not found' }`.
    *    This can be used to extend or override the
    *    [default](https://github.com/badges/shields/blob/master/core/base-service/check-error-response.js#L5)
+   * @param {object} [attrs.systemErrors={}] Key-value map of got network exception codes
+   *    and an object of params to pass when we construct an Inaccessible exception object
+   *    e.g: `{ ECONNRESET: { prettyMessage: 'connection reset' } }`.
+   *    See {@link https://github.com/sindresorhus/got/blob/main/documentation/7-retry.md#errorcodes got error codes}
+   *    for allowed keys
+   *    and {@link module:core/base-service/errors~RuntimeErrorProps} for allowed values
    * @param {Function} [attrs.transformJson=data => data] Function which takes the raw json and transforms it before
    * further procesing. In case of multiple query in a single graphql call and few of them
    * throw error, partial data might be used ignoring the error.
@@ -62,6 +68,7 @@ class BaseGraphqlService extends BaseService {
     variables = {},
     options = {},
     httpErrorMessages = {},
+    systemErrors = {},
     transformJson = data => data,
     transformErrors = defaultTransformErrors,
   }) {
@@ -74,7 +81,8 @@ class BaseGraphqlService extends BaseService {
     const { buffer } = await this._request({
       url,
       options: mergedOptions,
-      errorMessages: httpErrorMessages,
+      httpErrors: httpErrorMessages,
+      systemErrors,
     })
     const json = transformJson(this._parseJson(buffer))
     if (json.errors) {
diff --git a/core/base-service/base-json.js b/core/base-service/base-json.js
index ebabf1a41652d08c9a845863642c6f48273f0d12..fe42783bd3276e391049e1932da796fc9cdf0433 100644
--- a/core/base-service/base-json.js
+++ b/core/base-service/base-json.js
@@ -30,14 +30,26 @@ class BaseJsonService extends BaseService {
    * @param {string} attrs.url URL to request
    * @param {object} [attrs.options={}] Options to pass to got. See
    *    [documentation](https://github.com/sindresorhus/got/blob/main/documentation/2-options.md)
-   * @param {object} [attrs.errorMessages={}] Key-value map of status codes
+   * @param {object} [attrs.httpErrors={}] Key-value map of status codes
    *    and custom error messages e.g: `{ 404: 'package not found' }`.
    *    This can be used to extend or override the
    *    [default](https://github.com/badges/shields/blob/master/core/base-service/check-error-response.js#L5)
+   * @param {object} [attrs.systemErrors={}] Key-value map of got network exception codes
+   *    and an object of params to pass when we construct an Inaccessible exception object
+   *    e.g: `{ ECONNRESET: { prettyMessage: 'connection reset' } }`.
+   *    See {@link https://github.com/sindresorhus/got/blob/main/documentation/7-retry.md#errorcodes got error codes}
+   *    for allowed keys
+   *    and {@link module:core/base-service/errors~RuntimeErrorProps} for allowed values
    * @returns {object} Parsed response
    * @see https://github.com/sindresorhus/got/blob/main/documentation/2-options.md
    */
-  async _requestJson({ schema, url, options = {}, errorMessages = {} }) {
+  async _requestJson({
+    schema,
+    url,
+    options = {},
+    httpErrors = {},
+    systemErrors = {},
+  }) {
     const mergedOptions = {
       ...{ headers: { Accept: 'application/json' } },
       ...options,
@@ -45,7 +57,8 @@ class BaseJsonService extends BaseService {
     const { buffer } = await this._request({
       url,
       options: mergedOptions,
-      errorMessages,
+      httpErrors,
+      systemErrors,
     })
     const json = this._parseJson(buffer)
     return this.constructor._validate(json, schema)
diff --git a/core/base-service/base-svg-scraping.js b/core/base-service/base-svg-scraping.js
index a1cf98185761105b8454c76dae23fd11692e744a..95bc3be8ac61fbbd5a84449aa5e5699840eaff7c 100644
--- a/core/base-service/base-svg-scraping.js
+++ b/core/base-service/base-svg-scraping.js
@@ -53,10 +53,16 @@ class BaseSvgScrapingService extends BaseService {
    * @param {string} attrs.url URL to request
    * @param {object} [attrs.options={}] Options to pass to got. See
    *    [documentation](https://github.com/sindresorhus/got/blob/main/documentation/2-options.md)
-   * @param {object} [attrs.errorMessages={}] Key-value map of status codes
+   * @param {object} [attrs.httpErrors={}] Key-value map of status codes
    *    and custom error messages e.g: `{ 404: 'package not found' }`.
    *    This can be used to extend or override the
    *    [default](https://github.com/badges/shields/blob/master/core/base-service/check-error-response.js#L5)
+   * @param {object} [attrs.systemErrors={}] Key-value map of got network exception codes
+   *    and an object of params to pass when we construct an Inaccessible exception object
+   *    e.g: `{ ECONNRESET: { prettyMessage: 'connection reset' } }`.
+   *    See {@link https://github.com/sindresorhus/got/blob/main/documentation/7-retry.md#errorcodes got error codes}
+   *    for allowed keys
+   *    and {@link module:core/base-service/errors~RuntimeErrorProps} for allowed values
    * @returns {object} Parsed response
    * @see https://github.com/sindresorhus/got/blob/main/documentation/2-options.md
    */
@@ -65,7 +71,8 @@ class BaseSvgScrapingService extends BaseService {
     valueMatcher,
     url,
     options = {},
-    errorMessages = {},
+    httpErrors = {},
+    systemErrors = {},
   }) {
     const logTrace = (...args) => trace.logTrace('fetch', ...args)
     const mergedOptions = {
@@ -75,7 +82,8 @@ class BaseSvgScrapingService extends BaseService {
     const { buffer } = await this._request({
       url,
       options: mergedOptions,
-      errorMessages,
+      httpErrors,
+      systemErrors,
     })
     logTrace(emojic.dart, 'Response SVG', buffer)
     const data = {
diff --git a/core/base-service/base-xml.js b/core/base-service/base-xml.js
index d758781c39d936747c402e4f66c518ea7656837f..7395c45ea64bdff7c880ad0f856fc31755a6a3c0 100644
--- a/core/base-service/base-xml.js
+++ b/core/base-service/base-xml.js
@@ -24,10 +24,16 @@ class BaseXmlService extends BaseService {
    * @param {string} attrs.url URL to request
    * @param {object} [attrs.options={}] Options to pass to got. See
    *    [documentation](https://github.com/sindresorhus/got/blob/main/documentation/2-options.md)
-   * @param {object} [attrs.errorMessages={}] Key-value map of status codes
+   * @param {object} [attrs.httpErrors={}] Key-value map of status codes
    *    and custom error messages e.g: `{ 404: 'package not found' }`.
    *    This can be used to extend or override the
    *    [default](https://github.com/badges/shields/blob/master/core/base-service/check-error-response.js#L5)
+   * @param {object} [attrs.systemErrors={}] Key-value map of got network exception codes
+   *    and an object of params to pass when we construct an Inaccessible exception object
+   *    e.g: `{ ECONNRESET: { prettyMessage: 'connection reset' } }`.
+   *    See {@link https://github.com/sindresorhus/got/blob/main/documentation/7-retry.md#errorcodes got error codes}
+   *    for allowed keys
+   *    and {@link module:core/base-service/errors~RuntimeErrorProps} for allowed values
    * @param {object} [attrs.parserOptions={}] Options to pass to fast-xml-parser. See
    *    [documentation](https://github.com/NaturalIntelligence/fast-xml-parser#xml-to-json)
    * @returns {object} Parsed response
@@ -38,7 +44,8 @@ class BaseXmlService extends BaseService {
     schema,
     url,
     options = {},
-    errorMessages = {},
+    httpErrors = {},
+    systemErrors = {},
     parserOptions = {},
   }) {
     const logTrace = (...args) => trace.logTrace('fetch', ...args)
@@ -49,7 +56,8 @@ class BaseXmlService extends BaseService {
     const { buffer } = await this._request({
       url,
       options: mergedOptions,
-      errorMessages,
+      httpErrors,
+      systemErrors,
     })
     const validateResult = XMLValidator.validate(buffer)
     if (validateResult !== true) {
diff --git a/core/base-service/base-yaml.js b/core/base-service/base-yaml.js
index 85e08f2d25c188381542d5efcea2b6ae9d601ef8..bae76068f213f48206a3efeebce97df597ba5431 100644
--- a/core/base-service/base-yaml.js
+++ b/core/base-service/base-yaml.js
@@ -23,10 +23,16 @@ class BaseYamlService extends BaseService {
    * @param {string} attrs.url URL to request
    * @param {object} [attrs.options={}] Options to pass to got. See
    *    [documentation](https://github.com/sindresorhus/got/blob/main/documentation/2-options.md)
-   * @param {object} [attrs.errorMessages={}] Key-value map of status codes
+   * @param {object} [attrs.httpErrors={}] Key-value map of status codes
    *    and custom error messages e.g: `{ 404: 'package not found' }`.
    *    This can be used to extend or override the
    *    [default](https://github.com/badges/shields/blob/master/core/base-service/check-error-response.js#L5)
+   * @param {object} [attrs.systemErrors={}] Key-value map of got network exception codes
+   *    and an object of params to pass when we construct an Inaccessible exception object
+   *    e.g: `{ ECONNRESET: { prettyMessage: 'connection reset' } }`.
+   *    See {@link https://github.com/sindresorhus/got/blob/main/documentation/7-retry.md#errorcodes got error codes}
+   *    for allowed keys
+   *    and {@link module:core/base-service/errors~RuntimeErrorProps} for allowed values
    * @param {object} [attrs.encoding='utf8'] Character encoding
    * @returns {object} Parsed response
    * @see https://github.com/sindresorhus/got/blob/main/documentation/2-options.md
@@ -35,7 +41,8 @@ class BaseYamlService extends BaseService {
     schema,
     url,
     options = {},
-    errorMessages = {},
+    httpErrors = {},
+    systemErrors = {},
     encoding = 'utf8',
   }) {
     const logTrace = (...args) => trace.logTrace('fetch', ...args)
@@ -51,7 +58,8 @@ class BaseYamlService extends BaseService {
     const { buffer } = await this._request({
       url,
       options: mergedOptions,
-      errorMessages,
+      httpErrors,
+      systemErrors,
     })
     let parsed
     try {
diff --git a/core/base-service/base.js b/core/base-service/base.js
index f60470fa3ba78cf0d843c2597769532531bf7947..cf077c562fec962e706a6bd9eeae1d31559b4a45 100644
--- a/core/base-service/base.js
+++ b/core/base-service/base.js
@@ -226,7 +226,7 @@ class BaseService {
     this._metricHelper = metricHelper
   }
 
-  async _request({ url, options = {}, errorMessages = {} }) {
+  async _request({ url, options = {}, httpErrors = {}, systemErrors = {} }) {
     const logTrace = (...args) => trace.logTrace('fetch', ...args)
     let logUrl = url
     const logOptions = Object.assign({}, options)
@@ -246,10 +246,14 @@ class BaseService {
       'Request',
       `${logUrl}\n${JSON.stringify(logOptions, null, 2)}`
     )
-    const { res, buffer } = await this._requestFetcher(url, options)
+    const { res, buffer } = await this._requestFetcher(
+      url,
+      options,
+      systemErrors
+    )
     await this._meterResponse(res, buffer)
     logTrace(emojic.dart, 'Response status code', res.statusCode)
-    return checkErrorResponse(errorMessages)({ buffer, res })
+    return checkErrorResponse(httpErrors)({ buffer, res })
   }
 
   static enabledMetrics = []
@@ -328,11 +332,15 @@ class BaseService {
       error instanceof Deprecated
     ) {
       trace.logTrace('outbound', emojic.noGoodWoman, 'Handled error', error)
-      return {
+      const serviceData = {
         isError: true,
         message: error.prettyMessage,
         color: 'lightgray',
       }
+      if (error.cacheSeconds !== undefined) {
+        serviceData.cacheSeconds = error.cacheSeconds
+      }
+      return serviceData
     } else if (this._handleInternalErrors) {
       if (
         !trace.logTrace(
diff --git a/core/base-service/cache-headers.js b/core/base-service/cache-headers.js
index 14a707efae7e39afa5477db3acbb96c5646f0bb6..2bd02e2f161e44c2890fc52481dbab2a707a511d 100644
--- a/core/base-service/cache-headers.js
+++ b/core/base-service/cache-headers.js
@@ -39,6 +39,7 @@ function coalesceCacheLength({
   assert(defaultCacheLengthSeconds !== undefined)
 
   const cacheLength = coalesce(
+    serviceOverrideCacheLengthSeconds,
     serviceDefaultCacheLengthSeconds,
     defaultCacheLengthSeconds
   )
@@ -46,7 +47,6 @@ function coalesceCacheLength({
   // Overrides can apply _more_ caching, but not less. Query param overriding
   // can request more overriding than service override, but not less.
   const candidateOverrides = [
-    serviceOverrideCacheLengthSeconds,
     overrideCacheLengthFromQueryParams(queryParams),
   ].filter(x => x !== undefined)
 
diff --git a/core/base-service/cache-headers.spec.js b/core/base-service/cache-headers.spec.js
index ebfc53f815243e600ea85fb77df65dc3b92e4920..fcf82ee749fd7de32b25c69d5691f03b36d7ae9a 100644
--- a/core/base-service/cache-headers.spec.js
+++ b/core/base-service/cache-headers.spec.js
@@ -74,12 +74,12 @@ describe('Cache header functions', function () {
         serviceDefaultCacheLengthSeconds: 900,
         serviceOverrideCacheLengthSeconds: 400,
         queryParams: {},
-      }).expect(900)
+      }).expect(400)
       given({
         cacheHeaderConfig,
         serviceOverrideCacheLengthSeconds: 400,
         queryParams: {},
-      }).expect(777)
+      }).expect(400)
       given({
         cacheHeaderConfig,
         serviceOverrideCacheLengthSeconds: 900,
diff --git a/core/base-service/check-error-response.js b/core/base-service/check-error-response.js
index 93120d725a9f1f8d190b0eafc566b04f6cbab4d9..cda53fa7e954b2945c7cb9b5ed26ce2dc91acb4b 100644
--- a/core/base-service/check-error-response.js
+++ b/core/base-service/check-error-response.js
@@ -5,19 +5,19 @@ const defaultErrorMessages = {
   429: 'rate limited by upstream service',
 }
 
-export default function checkErrorResponse(errorMessages = {}) {
+export default function checkErrorResponse(httpErrors = {}) {
   return async function ({ buffer, res }) {
     let error
-    errorMessages = { ...defaultErrorMessages, ...errorMessages }
+    httpErrors = { ...defaultErrorMessages, ...httpErrors }
     if (res.statusCode === 404) {
-      error = new NotFound({ prettyMessage: errorMessages[404] })
+      error = new NotFound({ prettyMessage: httpErrors[404] })
     } else if (res.statusCode !== 200) {
       const underlying = Error(
         `Got status code ${res.statusCode} (expected 200)`
       )
       const props = { underlyingError: underlying }
-      if (errorMessages[res.statusCode] !== undefined) {
-        props.prettyMessage = errorMessages[res.statusCode]
+      if (httpErrors[res.statusCode] !== undefined) {
+        props.prettyMessage = httpErrors[res.statusCode]
       }
       if (res.statusCode >= 500) {
         error = new Inaccessible(props)
diff --git a/core/base-service/errors.js b/core/base-service/errors.js
index a1c897ff6d0e90f657e41c1f7d9f55efc91be85b..ce90f199d2640c9fd6272690f130d847ce7f8426 100644
--- a/core/base-service/errors.js
+++ b/core/base-service/errors.js
@@ -42,6 +42,7 @@ class ShieldsRuntimeError extends Error {
     if (props.underlyingError) {
       this.stack = props.underlyingError.stack
     }
+    this.cacheSeconds = props.cacheSeconds
   }
 }
 
@@ -206,6 +207,9 @@ class Deprecated extends ShieldsRuntimeError {
  * @property {string} prettyMessage User-facing error message to override the
  * value of `defaultPrettyMessage()`. This is the text that will appear on the
  * badge when we catch and render the exception (Optional)
+ * @property {number} cacheSeconds Length of time to cache this error response
+ * for. Defaults to the cacheLength of the service class throwing the error
+ * (Optional)
  */
 
 export {
diff --git a/core/base-service/got.js b/core/base-service/got.js
index 773aa3b57ffd33a7e94f2daf2dcec7b324afdf9d..793901e7ea31fcd024239a240269e4636d5c6741 100644
--- a/core/base-service/got.js
+++ b/core/base-service/got.js
@@ -7,7 +7,7 @@ import {
 
 const userAgent = getUserAgent()
 
-async function sendRequest(gotWrapper, url, options) {
+async function sendRequest(gotWrapper, url, options = {}, systemErrors = {}) {
   const gotOptions = Object.assign({}, options)
   gotOptions.throwHttpErrors = false
   gotOptions.retry = { limit: 0 }
@@ -22,6 +22,12 @@ async function sendRequest(gotWrapper, url, options) {
         underlyingError: new Error('Maximum response size exceeded'),
       })
     }
+    if (err.code in systemErrors) {
+      throw new Inaccessible({
+        ...systemErrors[err.code],
+        underlyingError: err,
+      })
+    }
     throw new Inaccessible({ underlyingError: err })
   }
 }
diff --git a/core/base-service/got.spec.js b/core/base-service/got.spec.js
index 004ee667a1bca3f1a396d17a7c3bb9f211d9be31..37b201f0f57520d29d21b561b01602c22436b613 100644
--- a/core/base-service/got.spec.js
+++ b/core/base-service/got.spec.js
@@ -45,6 +45,36 @@ describe('got wrapper', function () {
     )
   })
 
+  it('should throw a custom error if provided', async function () {
+    const sendRequest = _fetchFactory(1024)
+    return (
+      expect(
+        sendRequest(
+          'https://www.google.com/foo/bar',
+          { timeout: { request: 1 } },
+          {
+            ETIMEDOUT: {
+              prettyMessage: 'Oh no! A terrible thing has happened',
+              cacheSeconds: 10,
+            },
+          }
+        )
+      )
+        .to.be.rejectedWith(
+          Inaccessible,
+          "Inaccessible: Timeout awaiting 'request' for 1ms"
+        )
+        // eslint-disable-next-line promise/prefer-await-to-then
+        .then(error => {
+          expect(error).to.have.property(
+            'prettyMessage',
+            'Oh no! A terrible thing has happened'
+          )
+          expect(error).to.have.property('cacheSeconds', 10)
+        })
+    )
+  })
+
   it('should pass a custom user agent header', async function () {
     nock('https://www.google.com', {
       reqheaders: {
diff --git a/core/base-service/legacy-request-handler.js b/core/base-service/legacy-request-handler.js
index 2e5b7e92b9a2aaf67c691e6d77198bce3479f60e..9ef3d4efeb4b5cc0eab6ab3d678c61ac1ed4456e 100644
--- a/core/base-service/legacy-request-handler.js
+++ b/core/base-service/legacy-request-handler.js
@@ -73,11 +73,9 @@ function handleRequest(cacheHeaderConfig, handlerOptions) {
     // `defaultCacheLengthSeconds` can be overridden by
     // `serviceDefaultCacheLengthSeconds` (either by category or on a badge-
     // by-badge basis). Then in turn that can be overridden by
-    // `serviceOverrideCacheLengthSeconds` (which we expect to be used only in
-    // the dynamic badge) but only if `serviceOverrideCacheLengthSeconds` is
-    // longer than `serviceDefaultCacheLengthSeconds` and then the `cacheSeconds`
-    // query param can also override both of those but again only if `cacheSeconds`
-    // is longer.
+    // `serviceOverrideCacheLengthSeconds`.
+    // Then the `cacheSeconds` query param can also override both of those
+    // but only if `cacheSeconds` is longer.
     //
     // When the legacy services have been rewritten, all the code in here
     // will go away, which should achieve this goal in a simpler way.
diff --git a/core/base-service/legacy-request-handler.spec.js b/core/base-service/legacy-request-handler.spec.js
index 2265f18e69eb39d67d23dfb584a8d287aa81230e..9293e42ecacd9d86024b1e9e7d88267a21eaf5f6 100644
--- a/core/base-service/legacy-request-handler.spec.js
+++ b/core/base-service/legacy-request-handler.spec.js
@@ -148,7 +148,7 @@ describe('The request handler', function () {
         expect(headers['cache-control']).to.equal('max-age=900, s-maxage=900')
       })
 
-      it('should let live service data override the default cache headers with longer value', async function () {
+      it('should allow serviceData to override the default cache headers with longer value', async function () {
         camp.route(
           /^\/testing\/([^/]+)\.(svg|png|gif|jpg|json)$/,
           handleRequest(
@@ -168,7 +168,7 @@ describe('The request handler', function () {
         expect(headers['cache-control']).to.equal('max-age=400, s-maxage=400')
       })
 
-      it('should not let live service data override the default cache headers with shorter value', async function () {
+      it('should allow serviceData to override the default cache headers with shorter value', async function () {
         camp.route(
           /^\/testing\/([^/]+)\.(svg|png|gif|jpg|json)$/,
           handleRequest(
@@ -185,7 +185,7 @@ describe('The request handler', function () {
         )
 
         const { headers } = await got(`${baseUrl}/testing/123.json`)
-        expect(headers['cache-control']).to.equal('max-age=300, s-maxage=300')
+        expect(headers['cache-control']).to.equal('max-age=200, s-maxage=200')
       })
 
       it('should set the expires header to current time + cacheSeconds', async function () {
diff --git a/doc/TUTORIAL.md b/doc/TUTORIAL.md
index 06441df87619521602eee1a6719f798ec01b4859..f649f197ce5f99bacd07cda76539f09826559f19 100644
--- a/doc/TUTORIAL.md
+++ b/doc/TUTORIAL.md
@@ -229,14 +229,14 @@ Description of the code:
 
    - `_requestJson()` automatically adds an Accept header, checks the status code, parses the response as JSON, and returns the parsed response.
    - `_requestJson()` uses [got](https://github.com/sindresorhus/got) to perform the HTTP request. Options can be passed to got, including method, query string, and headers. If headers are provided they will override the ones automatically set by `_requestJson()`. There is no need to specify json, as the JSON parsing is handled by `_requestJson()`. See the `got` docs for [supported options](https://github.com/sindresorhus/got/blob/main/documentation/2-options.md).
-   - Error messages corresponding to each status code can be returned by passing a dictionary of status codes -> messages in `errorMessages`.
+   - Error messages corresponding to each status code can be returned by passing a dictionary of status codes -> messages in `httpErrors`.
    - A more complex call to `_requestJson()` might look like this:
      ```js
      return this._requestJson({
        schema: mySchema,
        url,
        options: { searchParams: { branch: 'master' } },
-       errorMessages: {
+       httpErrors: {
          401: 'private application not supported',
          404: 'application not found',
        },
diff --git a/doc/service-tests.md b/doc/service-tests.md
index 2242920f685f57e74970a46a161e007eb1ab49f3..45f5cd81633caf1e07f8e12abec7341fc5537d02 100644
--- a/doc/service-tests.md
+++ b/doc/service-tests.md
@@ -152,7 +152,7 @@ npm run test:services -- --only="wercker" --fgrep="Build status (with branch)"
 Having covered the typical and custom cases, we'll move on to errors. We should include a test for the 'not found' response and also tests for any other custom error handling. The Wercker integration defines a custom error condition for 401 as well as a custom 404 message:
 
 ```js
-errorMessages: {
+httpErrors: {
   401: 'private application not supported',
   404: 'application not found',
 }
diff --git a/services/appveyor/appveyor-base.js b/services/appveyor/appveyor-base.js
index 923b718466cbf1f71b71539b9adafb32a5efd045..9903beae5fafad5818b086fe46c4891e864edb4a 100644
--- a/services/appveyor/appveyor-base.js
+++ b/services/appveyor/appveyor-base.js
@@ -29,7 +29,7 @@ export default class AppVeyorBase extends BaseJsonService {
     return this._requestJson({
       schema,
       url,
-      errorMessages: { 404: 'project not found or access denied' },
+      httpErrors: { 404: 'project not found or access denied' },
     })
   }
 
diff --git a/services/azure-devops/azure-devops-base.js b/services/azure-devops/azure-devops-base.js
index 6b01bea8466d2d1a0cffc1facb34386155a89d57..85331836d49dd5e321244546881064f116073e78 100644
--- a/services/azure-devops/azure-devops-base.js
+++ b/services/azure-devops/azure-devops-base.js
@@ -19,13 +19,13 @@ export default class AzureDevOpsBase extends BaseJsonService {
     defaultToEmptyStringForUser: true,
   }
 
-  async fetch({ url, options, schema, errorMessages }) {
+  async fetch({ url, options, schema, httpErrors }) {
     return this._requestJson(
       this.authHelper.withBasicAuth({
         schema,
         url,
         options,
-        errorMessages,
+        httpErrors,
       })
     )
   }
@@ -35,7 +35,7 @@ export default class AzureDevOpsBase extends BaseJsonService {
     project,
     definitionId,
     branch,
-    errorMessages
+    httpErrors
   ) {
     // Microsoft documentation: https://docs.microsoft.com/en-us/rest/api/azure/devops/build/builds/list?view=azure-devops-rest-5.0
     const url = `https://dev.azure.com/${organization}/${project}/_apis/build/builds`
@@ -56,7 +56,7 @@ export default class AzureDevOpsBase extends BaseJsonService {
       url,
       options,
       schema: latestBuildSchema,
-      errorMessages,
+      httpErrors,
     })
 
     if (json.count !== 1) {
diff --git a/services/azure-devops/azure-devops-build.service.js b/services/azure-devops/azure-devops-build.service.js
index a4c2bc93b702dc85cdf6351547a02d8310a2e5e1..98403df4037110ebc8a4d2ba26cd1ed086aa2d3d 100644
--- a/services/azure-devops/azure-devops-build.service.js
+++ b/services/azure-devops/azure-devops-build.service.js
@@ -109,7 +109,7 @@ export default class AzureDevOpsBuild extends BaseSvgScrapingService {
         stageName: stage,
         jobName: job,
       },
-      errorMessages: {
+      httpErrors: {
         404: 'user or project not found',
       },
     })
diff --git a/services/azure-devops/azure-devops-coverage.service.js b/services/azure-devops/azure-devops-coverage.service.js
index eb5b7eeb797c131b3e597732ed52e88404339c18..6ab0ad9fe02252c212a3a4efb7a2cd057f03e41d 100644
--- a/services/azure-devops/azure-devops-coverage.service.js
+++ b/services/azure-devops/azure-devops-coverage.service.js
@@ -88,7 +88,7 @@ export default class AzureDevOpsCoverage extends AzureDevOpsBase {
   }
 
   async handle({ organization, project, definitionId, branch }) {
-    const errorMessages = {
+    const httpErrors = {
       404: 'build pipeline or coverage not found',
     }
     const buildId = await this.getLatestCompletedBuildId(
@@ -96,7 +96,7 @@ export default class AzureDevOpsCoverage extends AzureDevOpsBase {
       project,
       definitionId,
       branch,
-      errorMessages
+      httpErrors
     )
     // Microsoft documentation: https://docs.microsoft.com/en-us/rest/api/azure/devops/test/code%20coverage/get%20build%20code%20coverage?view=azure-devops-rest-5.0
     const url = `https://dev.azure.com/${organization}/${project}/_apis/test/codecoverage`
@@ -110,7 +110,7 @@ export default class AzureDevOpsCoverage extends AzureDevOpsBase {
       url,
       options,
       schema: buildCodeCoverageSchema,
-      errorMessages,
+      httpErrors,
     })
 
     let covered = 0
diff --git a/services/azure-devops/azure-devops-helpers.js b/services/azure-devops/azure-devops-helpers.js
index e57f8c83472322f65b1c896e93baea3da819de67..a2a0c89694d4d15c667e8c80b3992fbadc5f4cac 100644
--- a/services/azure-devops/azure-devops-helpers.js
+++ b/services/azure-devops/azure-devops-helpers.js
@@ -15,16 +15,13 @@ const schema = Joi.object({
     .required(),
 }).required()
 
-async function fetch(
-  serviceInstance,
-  { url, searchParams = {}, errorMessages }
-) {
+async function fetch(serviceInstance, { url, searchParams = {}, httpErrors }) {
   // Microsoft documentation: https://docs.microsoft.com/en-us/rest/api/vsts/build/status/get
   const { message: status } = await serviceInstance._requestSvg({
     schema,
     url,
     options: { searchParams },
-    errorMessages,
+    httpErrors,
   })
   return { status }
 }
diff --git a/services/azure-devops/azure-devops-release.service.js b/services/azure-devops/azure-devops-release.service.js
index 96393ad4b0d9467a24f0baacff3d9a9c4bd2cf6d..288f62435d1cfeff8097a59824be1edf44d691a7 100644
--- a/services/azure-devops/azure-devops-release.service.js
+++ b/services/azure-devops/azure-devops-release.service.js
@@ -49,7 +49,7 @@ export default class AzureDevOpsRelease extends BaseSvgScrapingService {
     // Microsoft documentation: ?
     const props = await fetch(this, {
       url: `https://vsrm.dev.azure.com/${organization}/_apis/public/Release/badge/${projectId}/${definitionId}/${environmentId}`,
-      errorMessages: {
+      httpErrors: {
         400: 'project not found',
         404: 'user or environment not found',
         500: 'inaccessible or definition not found',
diff --git a/services/azure-devops/azure-devops-tests.service.js b/services/azure-devops/azure-devops-tests.service.js
index 8b10ebf4318f0de7969eba029369bfe649678b3e..e27b505f55b7badfd68dbd49516b6b1f33b755d6 100644
--- a/services/azure-devops/azure-devops-tests.service.js
+++ b/services/azure-devops/azure-devops-tests.service.js
@@ -145,7 +145,7 @@ export default class AzureDevOpsTests extends AzureDevOpsBase {
   }
 
   async fetchTestResults({ organization, project, definitionId, branch }) {
-    const errorMessages = {
+    const httpErrors = {
       404: 'build pipeline or test result summary not found',
     }
     const buildId = await this.getLatestCompletedBuildId(
@@ -153,7 +153,7 @@ export default class AzureDevOpsTests extends AzureDevOpsBase {
       project,
       definitionId,
       branch,
-      errorMessages
+      httpErrors
     )
 
     // https://dev.azure.com/azuredevops-powershell/azuredevops-powershell/_apis/test/ResultSummaryByBuild?buildId=20
@@ -163,7 +163,7 @@ export default class AzureDevOpsTests extends AzureDevOpsBase {
         searchParams: { buildId },
       },
       schema: buildTestResultSummarySchema,
-      errorMessages,
+      httpErrors,
     })
   }
 
diff --git a/services/bit/bit-components.service.js b/services/bit/bit-components.service.js
index e2236639034b75514b535123fa7e2f3da6c1e49b..15f27730d4dfcfa283e80a326a85295180d41ab9 100644
--- a/services/bit/bit-components.service.js
+++ b/services/bit/bit-components.service.js
@@ -37,7 +37,7 @@ export default class BitComponents extends BaseJsonService {
     return this._requestJson({
       url,
       schema: collectionSchema,
-      errorMessages: {
+      httpErrors: {
         404: 'collection not found',
       },
     })
diff --git a/services/bitbucket/bitbucket-issues.service.js b/services/bitbucket/bitbucket-issues.service.js
index 38eafea3a3d5ac28fa11fefcf4f964feabcda9ae..2da5a629cd2247c9201ddd78629e6cd4401e61ee 100644
--- a/services/bitbucket/bitbucket-issues.service.js
+++ b/services/bitbucket/bitbucket-issues.service.js
@@ -46,7 +46,7 @@ function issueClassGenerator(raw) {
         options: {
           searchParams: { limit: 0, q: '(state = "new" OR state = "open")' },
         },
-        errorMessages: { 403: 'private repo' },
+        httpErrors: { 403: 'private repo' },
       })
     }
 
diff --git a/services/bitbucket/bitbucket-pipelines.service.js b/services/bitbucket/bitbucket-pipelines.service.js
index 29d0277d4b58c438453fcd1828a493625adc3e58..878a518a3b229f97aa8cbb919f78f26fbd6f9558 100644
--- a/services/bitbucket/bitbucket-pipelines.service.js
+++ b/services/bitbucket/bitbucket-pipelines.service.js
@@ -63,7 +63,7 @@ class BitbucketPipelines extends BaseJsonService {
           'target.ref_name': branch,
         },
       },
-      errorMessages: { 403: 'private repo' },
+      httpErrors: { 403: 'private repo' },
     })
   }
 
diff --git a/services/bitbucket/bitbucket-pull-request.service.js b/services/bitbucket/bitbucket-pull-request.service.js
index b885109fb5736ac0176baaa813d9324865312d47..9606e8213885a31bf1b2353f0cfbab1bc5735a2c 100644
--- a/services/bitbucket/bitbucket-pull-request.service.js
+++ b/services/bitbucket/bitbucket-pull-request.service.js
@@ -12,7 +12,7 @@ const queryParamSchema = Joi.object({
   server: optionalUrl,
 }).required()
 
-const errorMessages = {
+const httpErrors = {
   401: 'invalid credentials',
   403: 'private repo',
   404: 'not found',
@@ -87,7 +87,7 @@ function pullRequestClassGenerator(raw) {
           url: `https://bitbucket.org/api/2.0/repositories/${user}/${repo}/pullrequests/`,
           schema,
           options: { searchParams: { state: 'OPEN', limit: 0 } },
-          errorMessages,
+          httpErrors,
         })
       )
     }
@@ -106,7 +106,7 @@ function pullRequestClassGenerator(raw) {
               withAttributes: false,
             },
           },
-          errorMessages,
+          httpErrors,
         })
       )
     }
diff --git a/services/bitrise/bitrise.service.js b/services/bitrise/bitrise.service.js
index cca2a786669d3680d942dfaf9182156d15e81330..49e5f2fb901c6c743bb050efeeb50c73466a457c 100644
--- a/services/bitrise/bitrise.service.js
+++ b/services/bitrise/bitrise.service.js
@@ -55,7 +55,7 @@ export default class Bitrise extends BaseJsonService {
       )}/status.json`,
       options: { searchParams: { token, branch } },
       schema,
-      errorMessages: {
+      httpErrors: {
         403: 'app not found or invalid token',
       },
     })
diff --git a/services/bower/bower-base.js b/services/bower/bower-base.js
index 92fb2c1e26225001d075b0ec765bbfdf06c85417..2ead07514aab555189d939c3131b845a049072a7 100644
--- a/services/bower/bower-base.js
+++ b/services/bower/bower-base.js
@@ -22,7 +22,7 @@ export default class BaseBowerService extends LibrariesIoBase {
     return this._requestJson({
       schema,
       url: `/bower/${packageName}`,
-      errorMessages: {
+      httpErrors: {
         404: 'package not found',
       },
     })
diff --git a/services/bundlephobia/bundlephobia.service.js b/services/bundlephobia/bundlephobia.service.js
index c3fed6cdd1134a9a4602e35968d7129e43d01b91..68ac51262090040a63df0918b5861f8411974305 100644
--- a/services/bundlephobia/bundlephobia.service.js
+++ b/services/bundlephobia/bundlephobia.service.js
@@ -84,7 +84,7 @@ export default class Bundlephobia extends BaseJsonService {
       schema,
       url: 'https://bundlephobia.com/api/size',
       options,
-      errorMessages: {
+      httpErrors: {
         404: 'package or version not found',
       },
     })
diff --git a/services/cii-best-practices/cii-best-practices.service.js b/services/cii-best-practices/cii-best-practices.service.js
index d7230334dd3ea0c762c1ad04c417dd4e4d436123..2ee81cec50a63189dd58f1dd1fe9ed13f889c6a9 100644
--- a/services/cii-best-practices/cii-best-practices.service.js
+++ b/services/cii-best-practices/cii-best-practices.service.js
@@ -115,7 +115,7 @@ export default class CIIBestPracticesService extends BaseJsonService {
       await this._requestJson({
         schema,
         url: `https://bestpractices.coreinfrastructure.org/projects/${projectId}/badge.json`,
-        errorMessages: {
+        httpErrors: {
           404: 'project not found',
         },
       })
diff --git a/services/circleci/circleci.service.js b/services/circleci/circleci.service.js
index 11dd943cd3cf1d818467c6ec9dbc6ab117f80e77..49ca87d5d07ebf7f9638294308a20b04c844652c 100644
--- a/services/circleci/circleci.service.js
+++ b/services/circleci/circleci.service.js
@@ -57,7 +57,7 @@ class CircleCi extends BaseSvgScrapingService {
       // Note that the unusual 'circle-token' query param name is required.
       // https://circleci.com/docs/api/#get-authenticated
       options: { searchParams: { style: 'shield', 'circle-token': token } },
-      errorMessages: { 404: 'project not found' },
+      httpErrors: { 404: 'project not found' },
     })
     return this.constructor.render({ status: message })
   }
diff --git a/services/clearlydefined/clearlydefined-score.service.js b/services/clearlydefined/clearlydefined-score.service.js
index f480581af6479e4fe0f853d7bf3970ca877d37de..d100df5bcca76e5b7e263708df574b4bd8a7ed9e 100644
--- a/services/clearlydefined/clearlydefined-score.service.js
+++ b/services/clearlydefined/clearlydefined-score.service.js
@@ -53,7 +53,7 @@ export default class ClearlyDefinedService extends BaseJsonService {
     return this._requestJson({
       schema,
       url: `https://api.clearlydefined.io/definitions/${type}/${provider}/${namespace}/${name}/${revision}`,
-      errorMessages: {
+      httpErrors: {
         500: 'unknown type, provider, or upstream issue',
       },
     })
diff --git a/services/codacy/codacy-coverage.service.js b/services/codacy/codacy-coverage.service.js
index d57c1e80e32243997b2cd526b46ea8ebc3c44841..7deae5d34d08977b45be39e5f8361c362956cc90 100644
--- a/services/codacy/codacy-coverage.service.js
+++ b/services/codacy/codacy-coverage.service.js
@@ -53,7 +53,7 @@ export default class CodacyCoverage extends BaseSvgScrapingService {
       )}`,
       options: { searchParams: { branch } },
       valueMatcher: /text-anchor="middle">([^<>]+)<\/text>/,
-      errorMessages: {
+      httpErrors: {
         404: 'project not found',
       },
     })
diff --git a/services/codacy/codacy-grade.service.js b/services/codacy/codacy-grade.service.js
index aeee96579cfceb28f482722f7e81fcc75e7f1fb5..afb4ccabcc42af9782a12db9889dad1811bdda9b 100644
--- a/services/codacy/codacy-grade.service.js
+++ b/services/codacy/codacy-grade.service.js
@@ -51,7 +51,7 @@ export default class CodacyGrade extends BaseSvgScrapingService {
         projectId
       )}`,
       options: { searchParams: { branch } },
-      errorMessages: { 404: 'project or branch not found' },
+      httpErrors: { 404: 'project or branch not found' },
       valueMatcher: /visibility="hidden">([^<>]+)<\/text>/,
     })
     return this.constructor.render({ grade })
diff --git a/services/codecov/codecov.service.js b/services/codecov/codecov.service.js
index d6ab261498eaf2e82da0d0426fe9a9cdb4b01767..6c505854ba18178044372d54785c6144362968be 100644
--- a/services/codecov/codecov.service.js
+++ b/services/codecov/codecov.service.js
@@ -117,7 +117,7 @@ export default class Codecov extends BaseSvgScrapingService {
           Authorization: `token ${token}`,
         },
       },
-      errorMessages: {
+      httpErrors: {
         401: 'not authorized to access repository',
         404: 'repository not found',
       },
@@ -153,7 +153,7 @@ export default class Codecov extends BaseSvgScrapingService {
       options: {
         searchParams: { token, flag },
       },
-      errorMessages: token ? { 400: 'invalid token pattern' } : {},
+      httpErrors: token ? { 400: 'invalid token pattern' } : {},
     })
   }
 
diff --git a/services/codefactor/codefactor-grade.service.js b/services/codefactor/codefactor-grade.service.js
index 70528574be46d71e8a4541a08cc7bdee8a048dbc..0752654565fcac5c7fa9fd86f4b7ee4375113b2d 100644
--- a/services/codefactor/codefactor-grade.service.js
+++ b/services/codefactor/codefactor-grade.service.js
@@ -41,7 +41,7 @@ export default class CodeFactorGrade extends BaseSvgScrapingService {
       url: `https://codefactor.io/repository/${vcsType}/${user}/${repo}/badge/${
         branch || ''
       }`,
-      errorMessages: { 404: 'repo or branch not found' },
+      httpErrors: { 404: 'repo or branch not found' },
     })
     return this.constructor.render({ grade: message })
   }
diff --git a/services/coincap/coincap-base.js b/services/coincap/coincap-base.js
index 7ad3dfb6c6f2ff36803eed37b3e7b559c7a29b38..d602fb252954e416211cb211973ca466a7767205 100644
--- a/services/coincap/coincap-base.js
+++ b/services/coincap/coincap-base.js
@@ -12,7 +12,7 @@ export default class BaseCoincapService extends BaseJsonService {
     return this._requestJson({
       schema,
       url: `https://api.coincap.io/v2/assets/${assetId}`,
-      errorMessages: {
+      httpErrors: {
         404: 'asset not found',
       },
     })
diff --git a/services/coveralls/coveralls.service.js b/services/coveralls/coveralls.service.js
index 9f20c419be0c83d1f934b8dddb62c0dbcb6702f0..1b2b412f35d8ac773579a10891b69ede7531961d 100644
--- a/services/coveralls/coveralls.service.js
+++ b/services/coveralls/coveralls.service.js
@@ -66,7 +66,7 @@ export default class Coveralls extends BaseJsonService {
       schema,
       url,
       options,
-      errorMessages: {
+      httpErrors: {
         404: 'repository not found',
       },
     })
diff --git a/services/coverity/coverity-scan.service.js b/services/coverity/coverity-scan.service.js
index 2c1e9362362f387983db70b203e8b7596f2db520..7f6a74210b66ae6f6fb558fc1398631eb1ab99cb 100644
--- a/services/coverity/coverity-scan.service.js
+++ b/services/coverity/coverity-scan.service.js
@@ -48,7 +48,7 @@ export default class CoverityScan extends BaseJsonService {
     const json = await this._requestJson({
       url,
       schema,
-      errorMessages: {
+      httpErrors: {
         // At the moment Coverity returns an HTTP 200 with an HTML page
         // displaying the text 404 when project is not found.
         404: 'project not found',
diff --git a/services/discord/discord.service.js b/services/discord/discord.service.js
index 65837b9a35004c79d153a179dcbd6586d12a0535..5fe8944be119d129aa273fbb89e80904e601ee34 100644
--- a/services/discord/discord.service.js
+++ b/services/discord/discord.service.js
@@ -63,7 +63,7 @@ export default class Discord extends BaseJsonService {
         {
           url,
           schema,
-          errorMessages: {
+          httpErrors: {
             404: 'invalid server',
             403: 'widget disabled',
           },
diff --git a/services/docker/docker-automated.service.js b/services/docker/docker-automated.service.js
index ba28af299052068a9614e1df6c3d863ed855ec7d..c5432f813439422f144a97308ab179545ee18468 100644
--- a/services/docker/docker-automated.service.js
+++ b/services/docker/docker-automated.service.js
@@ -40,7 +40,7 @@ export default class DockerAutomatedBuild extends BaseJsonService {
       url: `https://registry.hub.docker.com/v2/repositories/${getDockerHubUser(
         user
       )}/${repo}`,
-      errorMessages: { 404: 'repo not found' },
+      httpErrors: { 404: 'repo not found' },
     })
   }
 
diff --git a/services/docker/docker-cloud-common-fetch.js b/services/docker/docker-cloud-common-fetch.js
index 51d763261e24858083bb7a98205168dd98e86a8f..bea59e66d3e50f33f0a35adb26ffd447b95afddb 100644
--- a/services/docker/docker-cloud-common-fetch.js
+++ b/services/docker/docker-cloud-common-fetch.js
@@ -16,7 +16,7 @@ async function fetchBuild(serviceInstance, { user, repo }) {
     schema: cloudBuildSchema,
     url: 'https://cloud.docker.com/api/build/v1/source',
     options: { searchParams: { image: `${user}/${repo}` } },
-    errorMessages: { 404: 'repo not found' },
+    httpErrors: { 404: 'repo not found' },
   })
 }
 
diff --git a/services/docker/docker-pulls.service.js b/services/docker/docker-pulls.service.js
index 4a31a16843b949fc28c13097adcac9ef954577e1..e1a8e8a129c42dc3923b7c0da7a46c2c8a057d18 100644
--- a/services/docker/docker-pulls.service.js
+++ b/services/docker/docker-pulls.service.js
@@ -38,7 +38,7 @@ export default class DockerPulls extends BaseJsonService {
       url: `https://hub.docker.com/v2/repositories/${getDockerHubUser(
         user
       )}/${repo}`,
-      errorMessages: { 404: 'repo not found' },
+      httpErrors: { 404: 'repo not found' },
     })
   }
 
diff --git a/services/docker/docker-size.service.js b/services/docker/docker-size.service.js
index 4d4c5f6a6a11ed9b01b33132c0df7f96f23b1e77..bef483105c86a66168705120c1254f6fb12dc8da 100644
--- a/services/docker/docker-size.service.js
+++ b/services/docker/docker-size.service.js
@@ -107,7 +107,7 @@ export default class DockerSize extends BaseJsonService {
       )}/${repo}/tags${
         tag ? `/${tag}` : '?page_size=100&ordering=last_updated'
       }${page}`,
-      errorMessages: { 404: 'repository or tag not found' },
+      httpErrors: { 404: 'repository or tag not found' },
     })
   }
 
diff --git a/services/docker/docker-stars.service.js b/services/docker/docker-stars.service.js
index f7e645aba19dfcb73b4c5e0efde4ef70c0243c23..49a43e5d61cff334c0118e0adb2dabb6ca21e278 100644
--- a/services/docker/docker-stars.service.js
+++ b/services/docker/docker-stars.service.js
@@ -41,7 +41,7 @@ export default class DockerStars extends BaseJsonService {
       url: `https://hub.docker.com/v2/repositories/${getDockerHubUser(
         user
       )}/${repo}/`,
-      errorMessages: { 404: 'repo not found' },
+      httpErrors: { 404: 'repo not found' },
     })
   }
 
diff --git a/services/docker/docker-version.service.js b/services/docker/docker-version.service.js
index 594c8e9647793a0785a5dd0febe37f1143135105..e61ff42a423adc5133ace186e3402fe3f6e8b355 100644
--- a/services/docker/docker-version.service.js
+++ b/services/docker/docker-version.service.js
@@ -69,7 +69,7 @@ export default class DockerVersion extends BaseJsonService {
       url: `https://registry.hub.docker.com/v2/repositories/${getDockerHubUser(
         user
       )}/${repo}/tags?page_size=100&ordering=last_updated${page}`,
-      errorMessages: { 404: 'repository or tag not found' },
+      httpErrors: { 404: 'repository or tag not found' },
     })
   }
 
diff --git a/services/drone/drone-build.service.js b/services/drone/drone-build.service.js
index 3951fd84da3bd703cdacd49fde03ebd98b3c6565..74132b604671746dca7077f346963cbb1392c0de 100644
--- a/services/drone/drone-build.service.js
+++ b/services/drone/drone-build.service.js
@@ -75,7 +75,7 @@ export default class DroneBuild extends BaseJsonService {
         options: {
           searchParams: { ref: branch ? `refs/heads/${branch}` : undefined },
         },
-        errorMessages: {
+        httpErrors: {
           401: 'repo not found or not authorized',
         },
       })
diff --git a/services/dynamic-common.js b/services/dynamic-common.js
index d82faaf81127c9152c5f056d7cbc4c0e79c184db..04a68e78cd301178f6a018cb42a7d9e82dd25dfa 100644
--- a/services/dynamic-common.js
+++ b/services/dynamic-common.js
@@ -14,7 +14,7 @@ import { InvalidResponse } from './index.js'
  *
  * @type {object}
  */
-const errorMessages = {
+const httpErrors = {
   404: 'resource not found',
 }
 
@@ -93,7 +93,7 @@ function renderDynamicBadge({
 }
 
 export {
-  errorMessages,
+  httpErrors,
   individualValueSchema,
   transformAndValidate,
   renderDynamicBadge,
diff --git a/services/dynamic/dynamic-json.service.js b/services/dynamic/dynamic-json.service.js
index 0dc3fa56a879827e4892984297130bac1db5ad72..68ffd4f6dc54dc8859ca86b0cbfd8c7ed9430c7c 100644
--- a/services/dynamic/dynamic-json.service.js
+++ b/services/dynamic/dynamic-json.service.js
@@ -54,11 +54,11 @@ export default class DynamicJson extends jsonPath(BaseJsonService) {
     },
   }
 
-  async fetch({ schema, url, errorMessages }) {
+  async fetch({ schema, url, httpErrors }) {
     return this._requestJson({
       schema,
       url,
-      errorMessages,
+      httpErrors,
     })
   }
 }
diff --git a/services/dynamic/dynamic-xml.service.js b/services/dynamic/dynamic-xml.service.js
index 3426af989bfa3348017ae8d4e64bd59c59908b09..fd4216c5a0302dbd78dc79e6846db5075519b4c0 100644
--- a/services/dynamic/dynamic-xml.service.js
+++ b/services/dynamic/dynamic-xml.service.js
@@ -1,7 +1,7 @@
 import { DOMParser } from '@xmldom/xmldom'
 import xpath from 'xpath'
 import { MetricNames } from '../../core/base-service/metric-helper.js'
-import { renderDynamicBadge, errorMessages } from '../dynamic-common.js'
+import { renderDynamicBadge, httpErrors } from '../dynamic-common.js'
 import { BaseService, InvalidResponse, InvalidParameter } from '../index.js'
 import { createRoute } from './dynamic-helpers.js'
 
@@ -113,7 +113,7 @@ export default class DynamicXml extends BaseService {
     const { buffer } = await this._request({
       url,
       options: { headers: { Accept: 'application/xml, text/xml' } },
-      errorMessages,
+      httpErrors,
     })
 
     const { values: value } = this.transform({
diff --git a/services/dynamic/dynamic-yaml.service.js b/services/dynamic/dynamic-yaml.service.js
index 46f84dd8e08b3cdf6fb4b6fb50c280f8d8cf111b..c1a5ab29ce2290a91283dec48de3dbbf81789e54 100644
--- a/services/dynamic/dynamic-yaml.service.js
+++ b/services/dynamic/dynamic-yaml.service.js
@@ -54,11 +54,11 @@ export default class DynamicYaml extends jsonPath(BaseYamlService) {
     },
   }
 
-  async fetch({ schema, url, errorMessages }) {
+  async fetch({ schema, url, httpErrors }) {
     return this._requestYaml({
       schema,
       url,
-      errorMessages,
+      httpErrors,
     })
   }
 }
diff --git a/services/dynamic/json-path.js b/services/dynamic/json-path.js
index ed242c944aaf4367de566954d668a33912f4b019..64c45d1578519328f2ce5f5336a036298cc99c35 100644
--- a/services/dynamic/json-path.js
+++ b/services/dynamic/json-path.js
@@ -4,7 +4,7 @@
 
 import Joi from 'joi'
 import jp from 'jsonpath'
-import { renderDynamicBadge, errorMessages } from '../dynamic-common.js'
+import { renderDynamicBadge, httpErrors } from '../dynamic-common.js'
 import { InvalidParameter, InvalidResponse } from '../index.js'
 
 /**
@@ -24,13 +24,13 @@ export default superclass =>
      * @param {object} attrs Refer to individual attrs
      * @param {Joi} attrs.schema Joi schema to validate the response transformed to JSON
      * @param {string} attrs.url URL to request
-     * @param {object} [attrs.errorMessages={}] Key-value map of status codes
+     * @param {object} [attrs.httpErrors={}] Key-value map of status codes
      *    and custom error messages e.g: `{ 404: 'package not found' }`.
      *    This can be used to extend or override the
      *    [default](https://github.com/badges/shields/blob/master/services/dynamic-common.js#L8)
      * @returns {object} Parsed response
      */
-    async fetch({ schema, url, errorMessages }) {
+    async fetch({ schema, url, httpErrors }) {
       throw new Error(
         `fetch() function not implemented for ${this.constructor.name}`
       )
@@ -40,7 +40,7 @@ export default superclass =>
       const data = await this.fetch({
         schema: Joi.any(),
         url,
-        errorMessages,
+        httpErrors,
       })
 
       // JSONPath only works on objects and arrays.
diff --git a/services/eclipse-marketplace/eclipse-marketplace-base.js b/services/eclipse-marketplace/eclipse-marketplace-base.js
index a4276731b9582f03c1affc8c4b72bab192af9dfd..2324219ef23b26188570d0d741b724788186d60b 100644
--- a/services/eclipse-marketplace/eclipse-marketplace-base.js
+++ b/services/eclipse-marketplace/eclipse-marketplace-base.js
@@ -12,7 +12,7 @@ export default class EclipseMarketplaceBase extends BaseXmlService {
     return this._requestXml({
       schema,
       url: `https://marketplace.eclipse.org/content/${name}/api/p`,
-      errorMessages: { 404: 'solution not found' },
+      httpErrors: { 404: 'solution not found' },
     })
   }
 }
diff --git a/services/ecologi/ecologi-carbon.service.js b/services/ecologi/ecologi-carbon.service.js
index 4aac425d1e60870bf5f08c55afc975fd18bd648a..01d878780fe63f72367a5dbfca06bfa692c3885b 100644
--- a/services/ecologi/ecologi-carbon.service.js
+++ b/services/ecologi/ecologi-carbon.service.js
@@ -30,7 +30,7 @@ export default class EcologiCarbonOffset extends BaseJsonService {
     return this._requestJson({
       url,
       schema: apiSchema,
-      errorMessages: {
+      httpErrors: {
         404: 'username not found',
       },
     })
diff --git a/services/ecologi/ecologi-trees.service.js b/services/ecologi/ecologi-trees.service.js
index 46d41b2f00f191b02dbd26bf2055a67b27d910c7..0d4225bb17c1c7b12d6cb2473fc8dfab1cbad6b7 100644
--- a/services/ecologi/ecologi-trees.service.js
+++ b/services/ecologi/ecologi-trees.service.js
@@ -30,7 +30,7 @@ export default class EcologiTrees extends BaseJsonService {
     return this._requestJson({
       url,
       schema: apiSchema,
-      errorMessages: {
+      httpErrors: {
         404: 'username not found',
       },
     })
diff --git a/services/elm-package/elm-package.service.js b/services/elm-package/elm-package.service.js
index dd606d090c0ffacb130a027dd813b7148e9775b7..cf608fd5971e20953a8bf7ad7b3a1af4755e16e1 100644
--- a/services/elm-package/elm-package.service.js
+++ b/services/elm-package/elm-package.service.js
@@ -27,7 +27,7 @@ export default class ElmPackage extends BaseJsonService {
     const { version } = await this._requestJson({
       schema,
       url,
-      errorMessages: {
+      httpErrors: {
         404: 'package not found',
       },
     })
diff --git a/services/endpoint-common.js b/services/endpoint-common.js
index 5b5c99828109c1124ecf964073891cec2a316f52..164762fd82b308162e28c28bc21e4c2ffd12f8c5 100644
--- a/services/endpoint-common.js
+++ b/services/endpoint-common.js
@@ -82,19 +82,19 @@ const anySchema = Joi.any()
  * @param {object} serviceInstance Instance of Endpoint class
  * @param {object} attrs Refer to individual attributes
  * @param {string} attrs.url Endpoint URL
- * @param {object} attrs.errorMessages Object containing error messages for different error codes
+ * @param {object} attrs.httpErrors Object containing error messages for different error codes
  * @param {string} attrs.validationPrettyErrorMessage If provided then the error message is set to this value
  * @param {boolean} attrs.includeKeys If true then includes error details in error message
  * @returns {object} Data fetched from endpoint
  */
 async function fetchEndpointData(
   serviceInstance,
-  { url, errorMessages, validationPrettyErrorMessage, includeKeys }
+  { url, httpErrors, validationPrettyErrorMessage, includeKeys }
 ) {
   const json = await serviceInstance._requestJson({
     schema: anySchema,
     url,
-    errorMessages,
+    httpErrors,
     options: { decompress: true },
   })
   return validateEndpointData(json, {
diff --git a/services/endpoint/endpoint.service.js b/services/endpoint/endpoint.service.js
index 26be6f8402de4e7a4dbfe74295bf2f543375b400..10fc4e01748748083043df780eb60f3b25fc492e 100644
--- a/services/endpoint/endpoint.service.js
+++ b/services/endpoint/endpoint.service.js
@@ -1,6 +1,6 @@
 import { URL } from 'url'
 import Joi from 'joi'
-import { errorMessages } from '../dynamic-common.js'
+import { httpErrors } from '../dynamic-common.js'
 import { optionalUrl } from '../validators.js'
 import { fetchEndpointData } from '../endpoint-common.js'
 import { BaseJsonService, InvalidParameter } from '../index.js'
@@ -178,7 +178,10 @@ export default class Endpoint extends BaseJsonService {
       logoWidth,
       logoPosition,
       style,
-      cacheSeconds,
+      // don't allow the user to set cacheSeconds any shorter than this._cacheLength
+      cacheSeconds: Math.max(
+        ...[this._cacheLength, cacheSeconds].filter(x => x !== undefined)
+      ),
     }
   }
 
@@ -200,7 +203,7 @@ export default class Endpoint extends BaseJsonService {
 
     const validated = await fetchEndpointData(this, {
       url,
-      errorMessages,
+      httpErrors,
       validationPrettyErrorMessage: 'invalid properties',
       includeKeys: true,
     })
diff --git a/services/f-droid/f-droid.service.js b/services/f-droid/f-droid.service.js
index 3ce765eb202c2013e5e3fce0b588db448158d3fc..33de6915336927cd9348921b962471d1c2fe30d0 100644
--- a/services/f-droid/f-droid.service.js
+++ b/services/f-droid/f-droid.service.js
@@ -53,7 +53,7 @@ export default class FDroid extends BaseJsonService {
     return this._requestJson({
       schema,
       url,
-      errorMessages: {
+      httpErrors: {
         403: 'app not found',
         404: 'app not found',
       },
diff --git a/services/factorio-mod-portal/factorio-mod-portal.service.js b/services/factorio-mod-portal/factorio-mod-portal.service.js
index 27217d267eb8e83a5b6ec931a1e38a7014c5890d..904a7f4a6804aa565a2c5414cd1ae9bbe7508f10 100644
--- a/services/factorio-mod-portal/factorio-mod-portal.service.js
+++ b/services/factorio-mod-portal/factorio-mod-portal.service.js
@@ -29,7 +29,7 @@ class BaseFactorioModPortalService extends BaseJsonService {
     const { releases, downloads_count } = await this._requestJson({
       schema,
       url: `https://mods.factorio.com/api/mods/${modName}`,
-      errorMessages: {
+      httpErrors: {
         404: 'mod not found',
       },
     })
diff --git a/services/fedora/fedora.service.js b/services/fedora/fedora.service.js
index d869bcd6efef1d8335efa7e81abe41b49661c9fe..10c7ee0163caceed7ce345440e2d3450bdd54f02 100644
--- a/services/fedora/fedora.service.js
+++ b/services/fedora/fedora.service.js
@@ -30,7 +30,7 @@ export default class Fedora extends BaseJsonService {
       url: `https://apps.fedoraproject.org/mdapi/${encodeURIComponent(
         branch
       )}/pkg/${encodeURIComponent(packageName)}`,
-      errorMessages: {
+      httpErrors: {
         400: 'branch not found',
       },
     })
diff --git a/services/feedz/feedz.service.js b/services/feedz/feedz.service.js
index 9039f1bf9afec3574478f7aa3a61b75550bf23b9..8bd2309194c9cd4eeb893dee39795d35229d73da 100644
--- a/services/feedz/feedz.service.js
+++ b/services/feedz/feedz.service.js
@@ -75,7 +75,7 @@ class FeedzVersionService extends BaseJsonService {
     return await this._requestJson({
       schema: packageSchema,
       url: `${registrationsBaseUrl}${packageName}/index.json`,
-      errorMessages: {
+      httpErrors: {
         404: 'repository or package not found',
       },
     })
@@ -90,7 +90,7 @@ class FeedzVersionService extends BaseJsonService {
           this._requestJson({
             schema: singlePageSchema,
             url: i['@id'],
-            errorMessages: {
+            httpErrors: {
               404: 'repository or package not found',
             },
           })
diff --git a/services/gem/gem-downloads.service.js b/services/gem/gem-downloads.service.js
index 6028530a2455fed2224e7cc29ecd9ffe6152bab4..6944fe406beaba8c76a0a208a58f46a589ea44b6 100644
--- a/services/gem/gem-downloads.service.js
+++ b/services/gem/gem-downloads.service.js
@@ -88,7 +88,7 @@ export default class GemDownloads extends BaseJsonService {
     const json = await this._requestJson({
       url: `https://rubygems.org/api/v1/versions/${gem}.json`,
       schema: versionSchema,
-      errorMessages: {
+      httpErrors: {
         404: 'gem not found',
       },
     })
@@ -117,7 +117,7 @@ export default class GemDownloads extends BaseJsonService {
       await this._requestJson({
         url: `https://rubygems.org/api/v1/gems/${gem}.json`,
         schema: gemSchema,
-        errorMessages: {
+        httpErrors: {
           404: 'gem not found',
         },
       })
diff --git a/services/gerrit/gerrit.service.js b/services/gerrit/gerrit.service.js
index 04ebca37578d278f72e7ce6528ef5880d6de4a94..b6271d588a9ae52aa2320c27aee738f7cd64fdd4 100644
--- a/services/gerrit/gerrit.service.js
+++ b/services/gerrit/gerrit.service.js
@@ -64,7 +64,7 @@ export default class Gerrit extends BaseJsonService {
     return this._requestJson({
       schema,
       url: `${baseUrl}/changes/${changeId}`,
-      errorMessages: {
+      httpErrors: {
         404: 'change not found',
       },
     })
diff --git a/services/github/gist/github-gist-last-commit.service.js b/services/github/gist/github-gist-last-commit.service.js
index cc148a8550f168b0d7036b207f86b9925dddb0e9..db5c8089cd98544e4e3ae991e2e9f800f751fbdb 100644
--- a/services/github/gist/github-gist-last-commit.service.js
+++ b/services/github/gist/github-gist-last-commit.service.js
@@ -2,7 +2,7 @@ import Joi from 'joi'
 import { formatDate } from '../../text-formatters.js'
 import { age as ageColor } from '../../color-formatters.js'
 import { GithubAuthV3Service } from '../github-auth-service.js'
-import { documentation, errorMessagesFor } from '../github-helpers.js'
+import { documentation, httpErrorsFor } from '../github-helpers.js'
 
 const schema = Joi.object({
   updated_at: Joi.string().required(),
@@ -36,7 +36,7 @@ export default class GistLastCommit extends GithubAuthV3Service {
     return this._requestJson({
       url: `/gists/${gistId}`,
       schema,
-      errorMessages: errorMessagesFor('gist not found'),
+      httpErrors: httpErrorsFor('gist not found'),
     })
   }
 
diff --git a/services/github/github-actions-workflow-status.service.js b/services/github/github-actions-workflow-status.service.js
index 2c598cc3f580104852ef48d4044883195ec0a971..e3f757fcc6218ef3235517ca9381d8669746d6c3 100644
--- a/services/github/github-actions-workflow-status.service.js
+++ b/services/github/github-actions-workflow-status.service.js
@@ -85,7 +85,7 @@ export default class GithubActionsWorkflowStatus extends BaseSvgScrapingService
       )}/badge.svg`,
       options: { searchParams: { branch, event } },
       valueMatcher: />([^<>]+)<\/tspan><\/text><\/g><path/,
-      errorMessages: {
+      httpErrors: {
         404: 'repo or workflow not found',
       },
     })
diff --git a/services/github/github-checks-status.service.js b/services/github/github-checks-status.service.js
index 35097f7b5a04291c6662f854bc9ed7b648fe14f7..65d7c0a20efc0d9d9f160dca8dc7920151a7b5fe 100644
--- a/services/github/github-checks-status.service.js
+++ b/services/github/github-checks-status.service.js
@@ -1,7 +1,7 @@
 import Joi from 'joi'
 import { isBuildStatus, renderBuildStatusBadge } from '../build-status.js'
 import { GithubAuthV3Service } from './github-auth-service.js'
-import { documentation, errorMessagesFor } from './github-helpers.js'
+import { documentation, httpErrorsFor } from './github-helpers.js'
 
 const schema = Joi.object({
   state: isBuildStatus,
@@ -61,7 +61,7 @@ export default class GithubChecksStatus extends GithubAuthV3Service {
   async handle({ user, repo, ref }) {
     const { state } = await this._requestJson({
       url: `/repos/${user}/${repo}/commits/${ref}/status`,
-      errorMessages: errorMessagesFor('ref or repo not found'),
+      httpErrors: httpErrorsFor('ref or repo not found'),
       schema,
     })
 
diff --git a/services/github/github-commit-status.service.js b/services/github/github-commit-status.service.js
index 46aae3410a8d4b8b5aa205446327d4b4606c388e..ba83b9f1438eee14224a7e181cda072be3e4f87a 100644
--- a/services/github/github-commit-status.service.js
+++ b/services/github/github-commit-status.service.js
@@ -1,7 +1,7 @@
 import Joi from 'joi'
 import { NotFound, InvalidParameter } from '../index.js'
 import { GithubAuthV3Service } from './github-auth-service.js'
-import { documentation, errorMessagesFor } from './github-helpers.js'
+import { documentation, httpErrorsFor } from './github-helpers.js'
 
 const schema = Joi.object({
   // https://stackoverflow.com/a/23969867/893113
@@ -55,7 +55,7 @@ export default class GithubCommitStatus extends GithubAuthV3Service {
     try {
       ;({ status } = await this._requestJson({
         url: `/repos/${user}/${repo}/compare/${branch}...${commit}`,
-        errorMessages: errorMessagesFor('commit or branch not found'),
+        httpErrors: httpErrorsFor('commit or branch not found'),
         schema,
       }))
     } catch (e) {
diff --git a/services/github/github-commits-difference.service.js b/services/github/github-commits-difference.service.js
index c9b867e6db975f3f8d7e02d00ca40414367c2299..b5028edf0a112e1a71cd1d3ce193e3377ceadfaf 100644
--- a/services/github/github-commits-difference.service.js
+++ b/services/github/github-commits-difference.service.js
@@ -2,7 +2,7 @@ import Joi from 'joi'
 import { metric } from '../text-formatters.js'
 import { nonNegativeInteger } from '../validators.js'
 import { GithubAuthV3Service } from './github-auth-service.js'
-import { documentation, errorMessagesFor } from './github-helpers.js'
+import { documentation, httpErrorsFor } from './github-helpers.js'
 
 const schema = Joi.object({ total_commits: nonNegativeInteger }).required()
 
@@ -51,7 +51,7 @@ export default class GithubCommitsDifference extends GithubAuthV3Service {
     const { total_commits: commitCount } = await this._requestJson({
       schema,
       url: `/repos/${user}/${repo}/compare/${base}...${head}`,
-      errorMessages: errorMessagesFor(notFoundMessage),
+      httpErrors: httpErrorsFor(notFoundMessage),
     })
 
     return this.constructor.render({ commitCount })
diff --git a/services/github/github-commits-since.service.js b/services/github/github-commits-since.service.js
index 7fd0cc924b51393cd9ed5a05eb7c1f00ac0b0091..8ea3300253bc1bf9e8089c4b48828bce97fd8682 100644
--- a/services/github/github-commits-since.service.js
+++ b/services/github/github-commits-since.service.js
@@ -6,7 +6,7 @@ import {
   fetchLatestRelease,
   queryParamSchema,
 } from './github-common-release.js'
-import { documentation, errorMessagesFor } from './github-helpers.js'
+import { documentation, httpErrorsFor } from './github-helpers.js'
 
 const schema = Joi.object({ ahead_by: nonNegativeInteger }).required()
 
@@ -151,7 +151,7 @@ export default class GithubCommitsSince extends GithubAuthV3Service {
     const { ahead_by: commitCount } = await this._requestJson({
       schema,
       url: `/repos/${user}/${repo}/compare/${version}...${branch || 'HEAD'}`,
-      errorMessages: errorMessagesFor(notFoundMessage),
+      httpErrors: httpErrorsFor(notFoundMessage),
     })
 
     return this.constructor.render({ version, commitCount })
diff --git a/services/github/github-common-fetch.js b/services/github/github-common-fetch.js
index 25c9a8de196bc68828d0aff9c360fad844a32c18..40784b4694f7a0a73df4e62096f9b796793b68db 100644
--- a/services/github/github-common-fetch.js
+++ b/services/github/github-common-fetch.js
@@ -1,6 +1,6 @@
 import Joi from 'joi'
 import { InvalidResponse } from '../index.js'
-import { errorMessagesFor } from './github-helpers.js'
+import { httpErrorsFor } from './github-helpers.js'
 
 const issueSchema = Joi.object({
   head: Joi.object({
@@ -12,7 +12,7 @@ async function fetchIssue(serviceInstance, { user, repo, number }) {
   return serviceInstance._requestJson({
     schema: issueSchema,
     url: `/repos/${user}/${repo}/pulls/${number}`,
-    errorMessages: errorMessagesFor('pull request or repo not found'),
+    httpErrors: httpErrorsFor('pull request or repo not found'),
   })
 }
 
@@ -26,7 +26,7 @@ async function fetchRepoContent(
   serviceInstance,
   { user, repo, branch = 'HEAD', filename }
 ) {
-  const errorMessages = errorMessagesFor(
+  const httpErrors = httpErrorsFor(
     `repo not found, branch not found, or ${filename} missing`
   )
   if (serviceInstance.staticAuthConfigured) {
@@ -34,7 +34,7 @@ async function fetchRepoContent(
       schema: contentSchema,
       url: `/repos/${user}/${repo}/contents/${filename}`,
       options: { searchParams: { ref: branch } },
-      errorMessages,
+      httpErrors,
     })
 
     try {
@@ -45,7 +45,7 @@ async function fetchRepoContent(
   } else {
     const { buffer } = await serviceInstance._request({
       url: `https://raw.githubusercontent.com/${user}/${repo}/${branch}/${filename}`,
-      errorMessages,
+      httpErrors,
     })
     return buffer
   }
@@ -68,7 +68,7 @@ async function fetchJsonFromRepo(
     return serviceInstance._requestJson({
       schema,
       url: `https://raw.githubusercontent.com/${user}/${repo}/${branch}/${filename}`,
-      errorMessages: errorMessagesFor(
+      httpErrors: httpErrorsFor(
         `repo not found, branch not found, or ${filename} missing`
       ),
     })
diff --git a/services/github/github-common-release.js b/services/github/github-common-release.js
index 991857fa0278449661a4d7523749010e78da0431..e6c9249310a3b0b901f0c17e83d08a86298087a0 100644
--- a/services/github/github-common-release.js
+++ b/services/github/github-common-release.js
@@ -2,7 +2,7 @@ import Joi from 'joi'
 import { nonNegativeInteger } from '../validators.js'
 import { latest } from '../version.js'
 import { NotFound } from '../index.js'
-import { errorMessagesFor } from './github-helpers.js'
+import { httpErrorsFor } from './github-helpers.js'
 
 const releaseInfoSchema = Joi.object({
   assets: Joi.array()
@@ -19,7 +19,7 @@ const releaseInfoSchema = Joi.object({
 // Fetch the 'latest' release as defined by the GitHub API
 async function fetchLatestGitHubRelease(serviceInstance, { user, repo }) {
   const commonAttrs = {
-    errorMessages: errorMessagesFor('no releases or repo not found'),
+    httpErrors: httpErrorsFor('no releases or repo not found'),
   }
   const releaseInfo = await serviceInstance._requestJson({
     schema: releaseInfoSchema,
@@ -36,7 +36,7 @@ const releaseInfoArraySchema = Joi.alternatives().try(
 
 async function fetchReleases(serviceInstance, { user, repo }) {
   const commonAttrs = {
-    errorMessages: errorMessagesFor('repo not found'),
+    httpErrors: httpErrorsFor('repo not found'),
   }
   const releases = await serviceInstance._requestJson({
     url: `/repos/${user}/${repo}/releases`,
diff --git a/services/github/github-contributors.service.js b/services/github/github-contributors.service.js
index af9b2c6dd1916d6a2007ab9d2f8ead1c5b16fc56..72162af27a79fe48c86d39e8ae58560b40c369e9 100644
--- a/services/github/github-contributors.service.js
+++ b/services/github/github-contributors.service.js
@@ -2,7 +2,7 @@ import Joi from 'joi'
 import parseLinkHeader from 'parse-link-header'
 import { renderContributorBadge } from '../contributor-count.js'
 import { GithubAuthV3Service } from './github-auth-service.js'
-import { documentation, errorMessagesFor } from './github-helpers.js'
+import { documentation, httpErrorsFor } from './github-helpers.js'
 
 // All we do is check its length.
 const schema = Joi.array().items(Joi.object())
@@ -39,7 +39,7 @@ export default class GithubContributors extends GithubAuthV3Service {
     const { res, buffer } = await this._request({
       url: `/repos/${user}/${repo}/contributors`,
       options: { searchParams: { page: '1', per_page: '1', anon: isAnon } },
-      errorMessages: errorMessagesFor('repo not found'),
+      httpErrors: httpErrorsFor('repo not found'),
     })
 
     const parsed = parseLinkHeader(res.headers.link)
diff --git a/services/github/github-downloads.service.js b/services/github/github-downloads.service.js
index a70d0c1ada3b4b9a4d6b55024d71ef5cfa1dc550..afe597b50b3c2012bc7dd1bd04852393cf50d88d 100644
--- a/services/github/github-downloads.service.js
+++ b/services/github/github-downloads.service.js
@@ -4,7 +4,7 @@ import { renderDownloadsBadge } from '../downloads.js'
 import { NotFound } from '../index.js'
 import { GithubAuthV3Service } from './github-auth-service.js'
 import { fetchLatestRelease } from './github-common-release.js'
-import { documentation, errorMessagesFor } from './github-helpers.js'
+import { documentation, httpErrorsFor } from './github-helpers.js'
 
 const queryParamSchema = Joi.object({
   sort: Joi.string().valid('date', 'semver').default('date'),
@@ -233,7 +233,7 @@ export default class GithubDownloads extends GithubAuthV3Service {
       const wantedRelease = await this._requestJson({
         schema: releaseSchema,
         url: `/repos/${user}/${repo}/releases/tags/${tag}`,
-        errorMessages: errorMessagesFor('repo or release not found'),
+        httpErrors: httpErrorsFor('repo or release not found'),
       })
       releases = [wantedRelease]
     } else {
@@ -241,7 +241,7 @@ export default class GithubDownloads extends GithubAuthV3Service {
         schema: releaseArraySchema,
         url: `/repos/${user}/${repo}/releases`,
         options: { searchParams: { per_page: 500 } },
-        errorMessages: errorMessagesFor('repo not found'),
+        httpErrors: httpErrorsFor('repo not found'),
       })
       releases = allReleases
     }
diff --git a/services/github/github-followers.service.js b/services/github/github-followers.service.js
index 71b3d01b05c9fac8f16b6a33d17ac1120f3dd826..f0cb3df95f40ef66fde13628ee8e6b10575dba11 100644
--- a/services/github/github-followers.service.js
+++ b/services/github/github-followers.service.js
@@ -2,7 +2,7 @@ import Joi from 'joi'
 import { metric } from '../text-formatters.js'
 import { nonNegativeInteger } from '../validators.js'
 import { GithubAuthV3Service } from './github-auth-service.js'
-import { documentation, errorMessagesFor } from './github-helpers.js'
+import { documentation, httpErrorsFor } from './github-helpers.js'
 
 const schema = Joi.object({
   followers: nonNegativeInteger,
@@ -37,7 +37,7 @@ export default class GithubFollowers extends GithubAuthV3Service {
     const { followers } = await this._requestJson({
       url: `/users/${user}`,
       schema,
-      errorMessages: errorMessagesFor('user not found'),
+      httpErrors: httpErrorsFor('user not found'),
     })
     return this.constructor.render({ followers })
   }
diff --git a/services/github/github-helpers.js b/services/github/github-helpers.js
index d294d659f2a218a1ad41b10a4182b2242d81494a..3c9eb81a2b77e1b5e3dfb31fbabf8c99bb2ad1df 100644
--- a/services/github/github-helpers.js
+++ b/services/github/github-helpers.js
@@ -14,7 +14,7 @@ function issueStateColor(s) {
   return { open: '2cbe4e', closed: '6f42c1' }[s]
 }
 
-function errorMessagesFor(notFoundMessage = 'repo not found') {
+function httpErrorsFor(notFoundMessage = 'repo not found') {
   return {
     404: notFoundMessage,
     422: notFoundMessage,
@@ -35,6 +35,6 @@ export {
   documentation,
   issueStateColor,
   commentsColor,
-  errorMessagesFor,
+  httpErrorsFor,
   transformErrors,
 }
diff --git a/services/github/github-issue-detail.service.js b/services/github/github-issue-detail.service.js
index a9cb4dadf1e06885c1205cb13eb5b46f834cbcf8..be8cce32be68d1d9dbaea897b83ad8a7a0d71256 100644
--- a/services/github/github-issue-detail.service.js
+++ b/services/github/github-issue-detail.service.js
@@ -6,7 +6,7 @@ import { InvalidResponse } from '../index.js'
 import { GithubAuthV3Service } from './github-auth-service.js'
 import {
   documentation,
-  errorMessagesFor,
+  httpErrorsFor,
   issueStateColor,
   commentsColor,
 } from './github-helpers.js'
@@ -222,7 +222,7 @@ export default class GithubIssueDetail extends GithubAuthV3Service {
     return this._requestJson({
       url: `/repos/${user}/${repo}/${issueKind}/${number}`,
       schema: propertyMap[property].schema,
-      errorMessages: errorMessagesFor('issue, pull request or repo not found'),
+      httpErrors: httpErrorsFor('issue, pull request or repo not found'),
     })
   }
 
diff --git a/services/github/github-labels.service.js b/services/github/github-labels.service.js
index b65af30073c71fdfb8de1bd9ecfda536a6739575..4e457da853fef9c96bb328aa71522dfd887454b6 100644
--- a/services/github/github-labels.service.js
+++ b/services/github/github-labels.service.js
@@ -1,6 +1,6 @@
 import Joi from 'joi'
 import { GithubAuthV3Service } from './github-auth-service.js'
-import { documentation, errorMessagesFor } from './github-helpers.js'
+import { documentation, httpErrorsFor } from './github-helpers.js'
 
 const schema = Joi.object({
   color: Joi.string().hex().required(),
@@ -35,7 +35,7 @@ export default class GithubLabels extends GithubAuthV3Service {
     return this._requestJson({
       url: `/repos/${user}/${repo}/labels/${name}`,
       schema,
-      errorMessages: errorMessagesFor('repo or label not found'),
+      httpErrors: httpErrorsFor('repo or label not found'),
     })
   }
 
diff --git a/services/github/github-languages-base.js b/services/github/github-languages-base.js
index 92427519feb910ea36184032b24a689fc4ed7dc1..667f12a47e7bb984fd1e023de51d730a5bdb1890 100644
--- a/services/github/github-languages-base.js
+++ b/services/github/github-languages-base.js
@@ -1,7 +1,7 @@
 import Joi from 'joi'
 import { nonNegativeInteger } from '../validators.js'
 import { GithubAuthV3Service } from './github-auth-service.js'
-import { errorMessagesFor } from './github-helpers.js'
+import { httpErrorsFor } from './github-helpers.js'
 
 /*
 We're expecting a response like { "Python": 39624, "Shell": 104 }
@@ -14,7 +14,7 @@ class BaseGithubLanguage extends GithubAuthV3Service {
     return this._requestJson({
       url: `/repos/${user}/${repo}/languages`,
       schema,
-      errorMessages: errorMessagesFor(),
+      httpErrors: httpErrorsFor(),
     })
   }
 
diff --git a/services/github/github-last-commit.service.js b/services/github/github-last-commit.service.js
index 45b6840bf8e1a24c2784954ea5675521515c162c..b5ea3b087c304345b406ad886a2502aab6d5252c 100644
--- a/services/github/github-last-commit.service.js
+++ b/services/github/github-last-commit.service.js
@@ -2,7 +2,7 @@ import Joi from 'joi'
 import { formatDate } from '../text-formatters.js'
 import { age as ageColor } from '../color-formatters.js'
 import { GithubAuthV3Service } from './github-auth-service.js'
-import { documentation, errorMessagesFor } from './github-helpers.js'
+import { documentation, httpErrorsFor } from './github-helpers.js'
 const commonExampleAttrs = {
   keywords: ['latest'],
   documentation,
@@ -87,7 +87,7 @@ export default class GithubLastCommit extends GithubAuthV3Service {
       url: `/repos/${user}/${repo}/commits`,
       options: { searchParams: { sha: branch } },
       schema,
-      errorMessages: errorMessagesFor(),
+      httpErrors: httpErrorsFor(),
     })
   }
 
diff --git a/services/github/github-license.service.js b/services/github/github-license.service.js
index 360153f29e61f1cf3c067f2d39b031f2f1714321..9676335eac1c07cd340bccd2fe5bf5880825bc2c 100644
--- a/services/github/github-license.service.js
+++ b/services/github/github-license.service.js
@@ -1,7 +1,7 @@
 import Joi from 'joi'
 import { renderLicenseBadge } from '../licenses.js'
 import { GithubAuthV3Service } from './github-auth-service.js'
-import { documentation, errorMessagesFor } from './github-helpers.js'
+import { documentation, httpErrorsFor } from './github-helpers.js'
 
 const schema = Joi.object({
   // Some repos do not have a license, in which case GitHub returns `{ license: null }`.
@@ -40,7 +40,7 @@ export default class GithubLicense extends GithubAuthV3Service {
     const { license: licenseObject } = await this._requestJson({
       schema,
       url: `/repos/${user}/${repo}`,
-      errorMessages: errorMessagesFor('repo not found'),
+      httpErrors: httpErrorsFor('repo not found'),
     })
 
     const license = licenseObject ? licenseObject.spdx_id : undefined
diff --git a/services/github/github-milestone-detail.service.js b/services/github/github-milestone-detail.service.js
index aef9845e3fd57bcd2a73487ba938845efaa4bf43..775a6e3278386d48b5de1b080c1f4282c832d41f 100644
--- a/services/github/github-milestone-detail.service.js
+++ b/services/github/github-milestone-detail.service.js
@@ -2,7 +2,7 @@ import Joi from 'joi'
 import { metric } from '../text-formatters.js'
 import { nonNegativeInteger } from '../validators.js'
 import { GithubAuthV3Service } from './github-auth-service.js'
-import { documentation, errorMessagesFor } from './github-helpers.js'
+import { documentation, httpErrorsFor } from './github-helpers.js'
 
 const schema = Joi.object({
   open_issues: nonNegativeInteger,
@@ -85,7 +85,7 @@ export default class GithubMilestoneDetail extends GithubAuthV3Service {
     return this._requestJson({
       url: `/repos/${user}/${repo}/milestones/${number}`,
       schema,
-      errorMessages: errorMessagesFor('repo or milestone not found'),
+      httpErrors: httpErrorsFor('repo or milestone not found'),
     })
   }
 
diff --git a/services/github/github-milestone.service.js b/services/github/github-milestone.service.js
index 5d16bc8d8f4f13335190fc198626ece82b0213ae..81f2b5961e78a6720f132ab3aa01b777342f4be1 100644
--- a/services/github/github-milestone.service.js
+++ b/services/github/github-milestone.service.js
@@ -1,7 +1,7 @@
 import Joi from 'joi'
 import { metric } from '../text-formatters.js'
 import { GithubAuthV3Service } from './github-auth-service.js'
-import { documentation, errorMessagesFor } from './github-helpers.js'
+import { documentation, httpErrorsFor } from './github-helpers.js'
 
 const schema = Joi.array()
   .items(
@@ -70,7 +70,7 @@ export default class GithubMilestone extends GithubAuthV3Service {
     return this._requestJson({
       url: `/repos/${user}/${repo}/milestones?state=${variant}`,
       schema,
-      errorMessages: errorMessagesFor('repo not found'),
+      httpErrors: httpErrorsFor('repo not found'),
     })
   }
 
diff --git a/services/github/github-pull-request-check-state.service.js b/services/github/github-pull-request-check-state.service.js
index 969c75d91be9d9b5e4cd9951d67bcb122a92eee1..4e2d2c9426fb1092bffea1ddf5bfe026670dfe65 100644
--- a/services/github/github-pull-request-check-state.service.js
+++ b/services/github/github-pull-request-check-state.service.js
@@ -2,7 +2,7 @@ import Joi from 'joi'
 import countBy from 'lodash.countby'
 import { GithubAuthV3Service } from './github-auth-service.js'
 import { fetchIssue } from './github-common-fetch.js'
-import { documentation, errorMessagesFor } from './github-helpers.js'
+import { documentation, httpErrorsFor } from './github-helpers.js'
 
 const schema = Joi.object({
   state: Joi.equal('failure', 'pending', 'success').required(),
@@ -92,7 +92,7 @@ export default class GithubPullRequestCheckState extends GithubAuthV3Service {
     const json = await this._requestJson({
       schema,
       url: `/repos/${user}/${repo}/commits/${ref}/status`,
-      errorMessages: errorMessagesFor('commit not found'),
+      httpErrors: httpErrorsFor('commit not found'),
     })
     const { state, stateCounts } = this.constructor.transform(json)
 
diff --git a/services/github/github-release-date.service.js b/services/github/github-release-date.service.js
index d6011a939f0b56bae339190e93db83bc2ce39555..6e382884ab114b42434b3b4e2f812e627dca3427 100644
--- a/services/github/github-release-date.service.js
+++ b/services/github/github-release-date.service.js
@@ -3,7 +3,7 @@ import Joi from 'joi'
 import { age } from '../color-formatters.js'
 import { formatDate } from '../text-formatters.js'
 import { GithubAuthV3Service } from './github-auth-service.js'
-import { documentation, errorMessagesFor } from './github-helpers.js'
+import { documentation, httpErrorsFor } from './github-helpers.js'
 
 const schema = Joi.alternatives(
   Joi.object({
@@ -86,7 +86,7 @@ export default class GithubReleaseDate extends GithubAuthV3Service {
     return this._requestJson({
       url,
       schema,
-      errorMessages: errorMessagesFor('no releases or repo not found'),
+      httpErrors: httpErrorsFor('no releases or repo not found'),
     })
   }
 
diff --git a/services/github/github-repo-size.service.js b/services/github/github-repo-size.service.js
index 774ddad426399dd2bcb1496e6928795181ca3f6d..7c78b136861c1cb1298cb86a58d55de1a3971e12 100644
--- a/services/github/github-repo-size.service.js
+++ b/services/github/github-repo-size.service.js
@@ -2,7 +2,7 @@ import Joi from 'joi'
 import prettyBytes from 'pretty-bytes'
 import { nonNegativeInteger } from '../validators.js'
 import { GithubAuthV3Service } from './github-auth-service.js'
-import { documentation, errorMessagesFor } from './github-helpers.js'
+import { documentation, httpErrorsFor } from './github-helpers.js'
 
 const schema = Joi.object({
   size: nonNegativeInteger,
@@ -37,7 +37,7 @@ export default class GithubRepoSize extends GithubAuthV3Service {
     return this._requestJson({
       url: `/repos/${user}/${repo}`,
       schema,
-      errorMessages: errorMessagesFor(),
+      httpErrors: httpErrorsFor(),
     })
   }
 
diff --git a/services/github/github-search.service.js b/services/github/github-search.service.js
index 1770e5bca5ccec2749974cd098344780b752fb83..69ace99dd030912a0bc21a2fa42a21b5aed6a3d3 100644
--- a/services/github/github-search.service.js
+++ b/services/github/github-search.service.js
@@ -2,7 +2,7 @@ import Joi from 'joi'
 import { metric } from '../text-formatters.js'
 import { nonNegativeInteger } from '../validators.js'
 import { GithubAuthV3Service } from './github-auth-service.js'
-import { errorMessagesFor, documentation } from './github-helpers.js'
+import { httpErrorsFor, documentation } from './github-helpers.js'
 
 const schema = Joi.object({ total_count: nonNegativeInteger }).required()
 
@@ -49,7 +49,7 @@ export default class GithubSearch extends GithubAuthV3Service {
         },
       },
       schema,
-      errorMessages: errorMessagesFor('repo not found'),
+      httpErrors: httpErrorsFor('repo not found'),
     })
     return this.constructor.render({ query, totalCount })
   }
diff --git a/services/github/github-size.service.js b/services/github/github-size.service.js
index de2e2bc0a217afe7446d87bb3539e00cb334167e..850a1e77d1e118fa34062477eacc10900635b257 100644
--- a/services/github/github-size.service.js
+++ b/services/github/github-size.service.js
@@ -3,7 +3,7 @@ import prettyBytes from 'pretty-bytes'
 import { nonNegativeInteger } from '../validators.js'
 import { NotFound } from '../index.js'
 import { GithubAuthV3Service } from './github-auth-service.js'
-import { documentation, errorMessagesFor } from './github-helpers.js'
+import { documentation, httpErrorsFor } from './github-helpers.js'
 
 const queryParamSchema = Joi.object({
   branch: Joi.string(),
@@ -65,13 +65,13 @@ export default class GithubSize extends GithubAuthV3Service {
       return this._requestJson({
         url: `/repos/${user}/${repo}/contents/${path}?ref=${branch}`,
         schema,
-        errorMessages: errorMessagesFor('repo, branch or file not found'),
+        httpErrors: httpErrorsFor('repo, branch or file not found'),
       })
     } else {
       return this._requestJson({
         url: `/repos/${user}/${repo}/contents/${path}`,
         schema,
-        errorMessages: errorMessagesFor('repo or file not found'),
+        httpErrors: httpErrorsFor('repo or file not found'),
       })
     }
   }
diff --git a/services/github/github-stars.service.js b/services/github/github-stars.service.js
index c790da3f23815b410756ed0900f343465e43bc35..77589e502e60407892dea5990de7a6e332056f9d 100644
--- a/services/github/github-stars.service.js
+++ b/services/github/github-stars.service.js
@@ -2,7 +2,7 @@ import Joi from 'joi'
 import { metric } from '../text-formatters.js'
 import { nonNegativeInteger } from '../validators.js'
 import { GithubAuthV3Service } from './github-auth-service.js'
-import { documentation, errorMessagesFor } from './github-helpers.js'
+import { documentation, httpErrorsFor } from './github-helpers.js'
 
 const schema = Joi.object({
   stargazers_count: nonNegativeInteger,
@@ -56,7 +56,7 @@ export default class GithubStars extends GithubAuthV3Service {
     const { stargazers_count: stars } = await this._requestJson({
       url: `/repos/${user}/${repo}`,
       schema,
-      errorMessages: errorMessagesFor(),
+      httpErrors: httpErrorsFor(),
     })
     return this.constructor.render({ user, repo, stars })
   }
diff --git a/services/github/github-watchers.service.js b/services/github/github-watchers.service.js
index 088757ff93a50e1224d240a4fc3b4eb676f26025..ceb6f1893fd1a7274924de8b7842cec3c6d9f649 100644
--- a/services/github/github-watchers.service.js
+++ b/services/github/github-watchers.service.js
@@ -2,7 +2,7 @@ import Joi from 'joi'
 import { metric } from '../text-formatters.js'
 import { nonNegativeInteger } from '../validators.js'
 import { GithubAuthV3Service } from './github-auth-service.js'
-import { documentation, errorMessagesFor } from './github-helpers.js'
+import { documentation, httpErrorsFor } from './github-helpers.js'
 
 const schema = Joi.object({
   subscribers_count: nonNegativeInteger,
@@ -55,7 +55,7 @@ export default class GithubWatchers extends GithubAuthV3Service {
     const { subscribers_count: watchers } = await this._requestJson({
       url: `/repos/${user}/${repo}`,
       schema,
-      errorMessages: errorMessagesFor(),
+      httpErrors: httpErrorsFor(),
     })
     return this.constructor.render({ user, repo, watchers })
   }
diff --git a/services/gitlab/gitlab-base.js b/services/gitlab/gitlab-base.js
index ecf1775e7ded183edf8c9e70009da09518742f8d..76d0f6b8a4abb4e0898c32f2345f85aa8622b9e6 100644
--- a/services/gitlab/gitlab-base.js
+++ b/services/gitlab/gitlab-base.js
@@ -6,13 +6,13 @@ export default class GitLabBase extends BaseJsonService {
     serviceKey: 'gitlab',
   }
 
-  async fetch({ url, options, schema, errorMessages }) {
+  async fetch({ url, options, schema, httpErrors }) {
     return this._requestJson(
       this.authHelper.withBearerAuthHeader({
         schema,
         url,
         options,
-        errorMessages,
+        httpErrors,
       })
     )
   }
@@ -34,7 +34,7 @@ export default class GitLabBase extends BaseJsonService {
     url,
     options,
     schema,
-    errorMessages,
+    httpErrors,
     firstPageOnly = false,
   }) {
     const requestParams = {
@@ -44,7 +44,7 @@ export default class GitLabBase extends BaseJsonService {
         searchParams: { per_page: 100 },
         ...options,
       },
-      errorMessages,
+      httpErrors,
     }
 
     const {
diff --git a/services/gitlab/gitlab-contributors.service.js b/services/gitlab/gitlab-contributors.service.js
index 5b8bb08dba82dc1b4741b4be52956cf7d843886e..e93a8ce0345202780c112a77216dfc9898fad000 100644
--- a/services/gitlab/gitlab-contributors.service.js
+++ b/services/gitlab/gitlab-contributors.service.js
@@ -1,7 +1,7 @@
 import Joi from 'joi'
 import { optionalUrl, nonNegativeInteger } from '../validators.js'
 import { renderContributorBadge } from '../contributor-count.js'
-import { documentation, errorMessagesFor } from './gitlab-helper.js'
+import { documentation, httpErrorsFor } from './gitlab-helper.js'
 import GitLabBase from './gitlab-base.js'
 
 const schema = Joi.object({ 'x-total': nonNegativeInteger }).required()
@@ -52,7 +52,7 @@ export default class GitlabContributors extends GitLabBase {
           project
         )}/repository/contributors`,
         options: { searchParams: { page: '1', per_page: '1' } },
-        errorMessages: errorMessagesFor('project not found'),
+        httpErrors: httpErrorsFor('project not found'),
       })
     )
     const data = this.constructor._validate(res.headers, schema)
diff --git a/services/gitlab/gitlab-forks.service.js b/services/gitlab/gitlab-forks.service.js
index 29b31b290c7e69e2244df8ddb97f55e5556ee253..fa15704982e41f3b8e02aaac77ac915a81eb07af 100644
--- a/services/gitlab/gitlab-forks.service.js
+++ b/services/gitlab/gitlab-forks.service.js
@@ -61,7 +61,7 @@ export default class GitlabForks extends GitLabBase {
     return super.fetch({
       schema,
       url: `${baseUrl}/api/v4/projects/${encodeURIComponent(project)}`,
-      errorMessages: {
+      httpErrors: {
         404: 'project not found',
       },
     })
diff --git a/services/gitlab/gitlab-helper.js b/services/gitlab/gitlab-helper.js
index d1f24ebba1a990a96ff184ba5b975617ea0f03c3..0580ea5840dccf8ced174f08e80a70123b90ccab 100644
--- a/services/gitlab/gitlab-helper.js
+++ b/services/gitlab/gitlab-helper.js
@@ -9,11 +9,11 @@ const documentation = `
 </p>
 `
 
-function errorMessagesFor(notFoundMessage = 'project not found') {
+function httpErrorsFor(notFoundMessage = 'project not found') {
   return {
     401: notFoundMessage,
     404: notFoundMessage,
   }
 }
 
-export { documentation, errorMessagesFor }
+export { documentation, httpErrorsFor }
diff --git a/services/gitlab/gitlab-issues.service.js b/services/gitlab/gitlab-issues.service.js
index ad86069f95565339d863f9a380a2d0cc80e2c50b..3f88d66519c42c6a433429de8bd6d42683c6994d 100644
--- a/services/gitlab/gitlab-issues.service.js
+++ b/services/gitlab/gitlab-issues.service.js
@@ -1,7 +1,7 @@
 import Joi from 'joi'
 import { optionalUrl, nonNegativeInteger } from '../validators.js'
 import { metric } from '../text-formatters.js'
-import { documentation, errorMessagesFor } from './gitlab-helper.js'
+import { documentation, httpErrorsFor } from './gitlab-helper.js'
 import GitLabBase from './gitlab-base.js'
 
 const schema = Joi.object({
@@ -237,7 +237,7 @@ export default class GitlabIssues extends GitLabBase {
         project
       )}/issues_statistics`,
       options: labels ? { searchParams: { labels } } : undefined,
-      errorMessages: errorMessagesFor('project not found'),
+      httpErrors: httpErrorsFor('project not found'),
     })
   }
 
diff --git a/services/gitlab/gitlab-languages-count.service.js b/services/gitlab/gitlab-languages-count.service.js
index 60e6588e7a457bcfecf9d2bd1a950a3b3fa0873e..4d08f13b6786a408d9c21269a3b9deee6179b708 100644
--- a/services/gitlab/gitlab-languages-count.service.js
+++ b/services/gitlab/gitlab-languages-count.service.js
@@ -1,7 +1,7 @@
 import Joi from 'joi'
 import { optionalUrl } from '../validators.js'
 import { metric } from '../text-formatters.js'
-import { documentation, errorMessagesFor } from './gitlab-helper.js'
+import { documentation, httpErrorsFor } from './gitlab-helper.js'
 import GitLabBase from './gitlab-base.js'
 
 /*
@@ -54,7 +54,7 @@ export default class GitlabLanguageCount extends GitLabBase {
       url: `${baseUrl}/api/v4/projects/${encodeURIComponent(
         project
       )}/languages`,
-      errorMessages: errorMessagesFor('project not found'),
+      httpErrors: httpErrorsFor('project not found'),
     })
   }
 
diff --git a/services/gitlab/gitlab-last-commit.service.js b/services/gitlab/gitlab-last-commit.service.js
index b2342d669b0fe20932142e5c5d819862fba61c26..c69050dfe47d4e733e1cd3483d14ed4ddd8c3c75 100644
--- a/services/gitlab/gitlab-last-commit.service.js
+++ b/services/gitlab/gitlab-last-commit.service.js
@@ -2,7 +2,7 @@ import Joi from 'joi'
 import { optionalUrl } from '../validators.js'
 import { formatDate } from '../text-formatters.js'
 import { age as ageColor } from '../color-formatters.js'
-import { documentation, errorMessagesFor } from './gitlab-helper.js'
+import { documentation, httpErrorsFor } from './gitlab-helper.js'
 import GitLabBase from './gitlab-base.js'
 
 const schema = Joi.array()
@@ -65,7 +65,7 @@ export default class GitlabLastCommit extends GitLabBase {
       )}/repository/commits`,
       options: { searchParams: { ref_name: ref } },
       schema,
-      errorMessages: errorMessagesFor('project not found'),
+      httpErrors: httpErrorsFor('project not found'),
     })
   }
 
diff --git a/services/gitlab/gitlab-license.service.js b/services/gitlab/gitlab-license.service.js
index 254696121cc86a37eed2453849a8060f778953d5..131173ba8aa6522d389f47165673f8d26810f32c 100644
--- a/services/gitlab/gitlab-license.service.js
+++ b/services/gitlab/gitlab-license.service.js
@@ -1,7 +1,7 @@
 import Joi from 'joi'
 import { optionalUrl } from '../validators.js'
 import { renderLicenseBadge } from '../licenses.js'
-import { documentation, errorMessagesFor } from './gitlab-helper.js'
+import { documentation, httpErrorsFor } from './gitlab-helper.js'
 import GitLabBase from './gitlab-base.js'
 
 const schema = Joi.object({
@@ -67,7 +67,7 @@ export default class GitlabLicense extends GitLabBase {
       schema,
       url: `${baseUrl}/api/v4/projects/${encodeURIComponent(project)}`,
       options: { searchParams: { license: '1' } },
-      errorMessages: errorMessagesFor('project not found'),
+      httpErrors: httpErrorsFor('project not found'),
     })
   }
 
diff --git a/services/gitlab/gitlab-merge-requests.service.js b/services/gitlab/gitlab-merge-requests.service.js
index bc7f7b88a102d55ec72a7961a84065befed1665b..5db63bcb6e29e282fb0d6e880f469a91a614ede1 100644
--- a/services/gitlab/gitlab-merge-requests.service.js
+++ b/services/gitlab/gitlab-merge-requests.service.js
@@ -1,7 +1,7 @@
 import Joi from 'joi'
 import { optionalUrl, nonNegativeInteger } from '../validators.js'
 import { metric } from '../text-formatters.js'
-import { documentation, errorMessagesFor } from './gitlab-helper.js'
+import { documentation, httpErrorsFor } from './gitlab-helper.js'
 import GitLabBase from './gitlab-base.js'
 
 // The total number of MR is in the `x-total` field in the headers.
@@ -314,7 +314,7 @@ export default class GitlabMergeRequests extends GitLabBase {
             labels,
           },
         },
-        errorMessages: errorMessagesFor('project not found'),
+        httpErrors: httpErrorsFor('project not found'),
       })
     )
     return this.constructor._validate(res.headers, schema)
diff --git a/services/gitlab/gitlab-pipeline-coverage.service.js b/services/gitlab/gitlab-pipeline-coverage.service.js
index 3267e8e4eb23b4e3225e8e1145c66a7df55f67ec..e0a332907b34d65f88c5756cbd09a40857bdfb3b 100644
--- a/services/gitlab/gitlab-pipeline-coverage.service.js
+++ b/services/gitlab/gitlab-pipeline-coverage.service.js
@@ -2,7 +2,7 @@ import Joi from 'joi'
 import { coveragePercentage } from '../color-formatters.js'
 import { optionalUrl } from '../validators.js'
 import { BaseSvgScrapingService, NotFound } from '../index.js'
-import { documentation, errorMessagesFor } from './gitlab-helper.js'
+import { documentation, httpErrorsFor } from './gitlab-helper.js'
 
 const schema = Joi.object({
   message: Joi.string()
@@ -98,11 +98,11 @@ export default class GitlabPipelineCoverage extends BaseSvgScrapingService {
     const url = `${baseUrl}/${decodeURIComponent(
       project
     )}/badges/${branch}/coverage.svg${jobName}`
-    const errorMessages = errorMessagesFor('project not found')
+    const httpErrors = httpErrorsFor('project not found')
     return this._requestSvg({
       schema,
       url,
-      errorMessages,
+      httpErrors,
     })
   }
 
diff --git a/services/gitlab/gitlab-pipeline-status.service.js b/services/gitlab/gitlab-pipeline-status.service.js
index dbd0cdbcd1f76505c32df5b3ab474454512ffdb7..49246f861d92201d6f6ccc8d9212fdad6d7d4f2a 100644
--- a/services/gitlab/gitlab-pipeline-status.service.js
+++ b/services/gitlab/gitlab-pipeline-status.service.js
@@ -2,7 +2,7 @@ import Joi from 'joi'
 import { isBuildStatus, renderBuildStatusBadge } from '../build-status.js'
 import { optionalUrl } from '../validators.js'
 import { BaseSvgScrapingService, NotFound, redirector } from '../index.js'
-import { documentation, errorMessagesFor } from './gitlab-helper.js'
+import { documentation, httpErrorsFor } from './gitlab-helper.js'
 
 const badgeSchema = Joi.object({
   message: Joi.alternatives()
@@ -73,7 +73,7 @@ class GitlabPipelineStatus extends BaseSvgScrapingService {
       url: `${baseUrl}/${decodeURIComponent(
         project
       )}/badges/${branch}/pipeline.svg`,
-      errorMessages: errorMessagesFor('project not found'),
+      httpErrors: httpErrorsFor('project not found'),
     })
   }
 
diff --git a/services/gitlab/gitlab-release.service.js b/services/gitlab/gitlab-release.service.js
index 51f3c37291b4f216433d51d9c003a6e4bd8b035b..28e3872b0cfcbb20bd35be062c610d0cdf35f3dc 100644
--- a/services/gitlab/gitlab-release.service.js
+++ b/services/gitlab/gitlab-release.service.js
@@ -2,7 +2,7 @@ import Joi from 'joi'
 import { optionalUrl } from '../validators.js'
 import { latest, renderVersionBadge } from '../version.js'
 import { NotFound } from '../index.js'
-import { documentation, errorMessagesFor } from './gitlab-helper.js'
+import { documentation, httpErrorsFor } from './gitlab-helper.js'
 import GitLabBase from './gitlab-base.js'
 
 const schema = Joi.array().items(
@@ -98,7 +98,7 @@ export default class GitLabRelease extends GitLabBase {
     return this.fetchPaginatedArrayData({
       schema,
       url: `${baseUrl}/api/v4/projects/${encodeURIComponent(project)}/releases`,
-      errorMessages: errorMessagesFor('project not found'),
+      httpErrors: httpErrorsFor('project not found'),
       options: {
         searchParams: { order_by: orderBy },
       },
diff --git a/services/gitlab/gitlab-stars.service.js b/services/gitlab/gitlab-stars.service.js
index a440c814f34a12a5de34788f0eac517d86947228..695c0db3916fa24c255807f684fa767df2b804aa 100644
--- a/services/gitlab/gitlab-stars.service.js
+++ b/services/gitlab/gitlab-stars.service.js
@@ -58,7 +58,7 @@ export default class GitlabStars extends GitLabBase {
     return super.fetch({
       schema,
       url: `${baseUrl}/api/v4/projects/${encodeURIComponent(project)}`,
-      errorMessages: {
+      httpErrors: {
         404: 'project not found',
       },
     })
diff --git a/services/gitlab/gitlab-tag.service.js b/services/gitlab/gitlab-tag.service.js
index 534d3719729b8d66a04cc3155712c5a5e39dca07..10f7bd62ed7a1d19902ddc2e8ccb75bc25593c0a 100644
--- a/services/gitlab/gitlab-tag.service.js
+++ b/services/gitlab/gitlab-tag.service.js
@@ -4,7 +4,7 @@ import { optionalUrl } from '../validators.js'
 import { latest } from '../version.js'
 import { addv } from '../text-formatters.js'
 import { NotFound } from '../index.js'
-import { documentation, errorMessagesFor } from './gitlab-helper.js'
+import { documentation, httpErrorsFor } from './gitlab-helper.js'
 import GitLabBase from './gitlab-base.js'
 
 const schema = Joi.array().items(
@@ -92,7 +92,7 @@ export default class GitlabTag extends GitLabBase {
         project
       )}/repository/tags`,
       options: { searchParams: { order_by: 'updated' } },
-      errorMessages: errorMessagesFor('project not found'),
+      httpErrors: httpErrorsFor('project not found'),
     })
   }
 
diff --git a/services/hackernews/hackernews-user-karma.service.js b/services/hackernews/hackernews-user-karma.service.js
index 6ff5638ba7879fa5299bb8194971f9745a1cf25d..8d37f841f37b41b6ed5bd838dcf0a9e64d8eb330 100644
--- a/services/hackernews/hackernews-user-karma.service.js
+++ b/services/hackernews/hackernews-user-karma.service.js
@@ -44,7 +44,7 @@ export default class HackerNewsUserKarma extends BaseJsonService {
     return this._requestJson({
       schema,
       url: `https://hacker-news.firebaseio.com/v0/user/${id}.json`,
-      errorMessages: {
+      httpErrors: {
         404: 'user not found',
       },
     })
diff --git a/services/homebrew/homebrew-downloads.service.js b/services/homebrew/homebrew-downloads.service.js
index 20e19b23e4763a913340fb5da4770f8ff6a2cc11..e7989e48b362a4122969441f66f6a14f8bdff620 100644
--- a/services/homebrew/homebrew-downloads.service.js
+++ b/services/homebrew/homebrew-downloads.service.js
@@ -53,7 +53,7 @@ export default class HomebrewDownloads extends BaseJsonService {
     return this._requestJson({
       schema,
       url: `https://formulae.brew.sh/api/formula/${formula}.json`,
-      errorMessages: { 404: 'formula not found' },
+      httpErrors: { 404: 'formula not found' },
     })
   }
 
diff --git a/services/jenkins/jenkins-base.js b/services/jenkins/jenkins-base.js
index 35398c030147537f772a53beadc8a3af5a2b68b8..2a52b2d47640b154fbdce766020f40ec38dfa2f4 100644
--- a/services/jenkins/jenkins-base.js
+++ b/services/jenkins/jenkins-base.js
@@ -11,14 +11,14 @@ export default class JenkinsBase extends BaseJsonService {
     url,
     schema,
     searchParams,
-    errorMessages = { 404: 'instance or job not found' },
+    httpErrors = { 404: 'instance or job not found' },
   }) {
     return this._requestJson(
       this.authHelper.withBasicAuth({
         url,
         options: { searchParams },
         schema,
-        errorMessages,
+        httpErrors,
       })
     )
   }
diff --git a/services/jenkins/jenkins-coverage.service.js b/services/jenkins/jenkins-coverage.service.js
index 9727fdca4b6b222c73d1a6c11b7be6fedfbb05b8..c072abe7c2c01ec5454cc60eb603bf93e6fd6f86 100644
--- a/services/jenkins/jenkins-coverage.service.js
+++ b/services/jenkins/jenkins-coverage.service.js
@@ -138,7 +138,7 @@ export default class JenkinsCoverage extends JenkinsBase {
       url: buildUrl({ jobUrl, plugin: pluginSpecificPath }),
       schema,
       searchParams: buildTreeParamQueryString(treeQueryParam),
-      errorMessages: {
+      httpErrors: {
         404: 'job or coverage not found',
       },
     })
diff --git a/services/jenkins/jenkins-plugin-installs.service.js b/services/jenkins/jenkins-plugin-installs.service.js
index 456d2071b61e276db8e26452fb39d1b9181aa242..ce51df17180ddf5210a768d8504d542442fd06a0 100644
--- a/services/jenkins/jenkins-plugin-installs.service.js
+++ b/services/jenkins/jenkins-plugin-installs.service.js
@@ -63,7 +63,7 @@ export default class JenkinsPluginInstalls extends BaseJsonService {
     return this._requestJson({
       url: `https://stats.jenkins.io/plugin-installation-trend/${plugin}.stats.json`,
       schema: version ? schemaInstallationsPerVersion : schemaInstallations,
-      errorMessages: {
+      httpErrors: {
         404: 'plugin not found',
       },
     })
diff --git a/services/jetbrains/jetbrains-base.js b/services/jetbrains/jetbrains-base.js
index ea8bc5d5c15f46f7253cc02764b295f1dde64724..fe3c497c4797de1cd08c7016eb9e7a4d064fe2fe 100644
--- a/services/jetbrains/jetbrains-base.js
+++ b/services/jetbrains/jetbrains-base.js
@@ -54,7 +54,7 @@ export default class JetbrainsBase extends BaseXmlService {
     return super._validate(data, schema)
   }
 
-  async _requestJson({ schema, url, options = {}, errorMessages = {} }) {
+  async _requestJson({ schema, url, options = {}, httpErrors = {} }) {
     const mergedOptions = {
       ...{ headers: { Accept: 'application/json' } },
       ...options,
@@ -62,7 +62,7 @@ export default class JetbrainsBase extends BaseXmlService {
     const { buffer } = await this._request({
       url,
       options: mergedOptions,
-      errorMessages,
+      httpErrors,
     })
     const json = this._parseJson(buffer)
     return this.constructor._validateJson(json, schema)
diff --git a/services/jetbrains/jetbrains-downloads.service.js b/services/jetbrains/jetbrains-downloads.service.js
index fc91c78ce3f761deacd4798277d914e8efa299cd..7db2403e28ca239868c644571f2064e4bfe86b0a 100644
--- a/services/jetbrains/jetbrains-downloads.service.js
+++ b/services/jetbrains/jetbrains-downloads.service.js
@@ -56,7 +56,7 @@ export default class JetbrainsDownloads extends JetbrainsBase {
         url: `https://plugins.jetbrains.com/api/plugins/${this.constructor._cleanPluginId(
           pluginId
         )}`,
-        errorMessages: { 400: 'not found' },
+        httpErrors: { 400: 'not found' },
       })
       downloads = jetbrainsPluginData.downloads
     }
diff --git a/services/jetbrains/jetbrains-rating.service.js b/services/jetbrains/jetbrains-rating.service.js
index 81fa3fb61ba2611c3a59208e149d7908bc0a76e3..5c3fd2d7573faac8b79a6b08874de96f6ccf09c5 100644
--- a/services/jetbrains/jetbrains-rating.service.js
+++ b/services/jetbrains/jetbrains-rating.service.js
@@ -92,7 +92,7 @@ export default class JetbrainsRating extends JetbrainsBase {
         url: `https://plugins.jetbrains.com/api/plugins/${this.constructor._cleanPluginId(
           pluginId
         )}/rating`,
-        errorMessages: { 400: 'not found' },
+        httpErrors: { 400: 'not found' },
       })
 
       let voteSum = 0
diff --git a/services/jetbrains/jetbrains-version.service.js b/services/jetbrains/jetbrains-version.service.js
index 2b7d8dd3b2b077a377a96a518fa39a7407d31ea4..dad18b10a9b3ef7caeafee14d3708b22cdcb35a7 100644
--- a/services/jetbrains/jetbrains-version.service.js
+++ b/services/jetbrains/jetbrains-version.service.js
@@ -67,7 +67,7 @@ export default class JetbrainsVersion extends JetbrainsBase {
         url: `https://plugins.jetbrains.com/api/plugins/${this.constructor._cleanPluginId(
           pluginId
         )}/updates`,
-        errorMessages: { 400: 'not found' },
+        httpErrors: { 400: 'not found' },
       })
       version = jetbrainsPluginData[0].version
     }
diff --git a/services/jira/jira-issue.service.js b/services/jira/jira-issue.service.js
index 35fafa60a3a9baca3373bbab8e85e8dbdb5f40ce..609c81dd1df1193252d23fb1c14aa6bafcb0ae34 100644
--- a/services/jira/jira-issue.service.js
+++ b/services/jira/jira-issue.service.js
@@ -75,7 +75,7 @@ export default class JiraIssue extends BaseJsonService {
       this.authHelper.withBasicAuth({
         schema,
         url: `${baseUrl}/rest/api/2/issue/${encodeURIComponent(issueKey)}`,
-        errorMessages: { 404: 'issue not found' },
+        httpErrors: { 404: 'issue not found' },
       })
     )
 
diff --git a/services/jira/jira-sprint.service.js b/services/jira/jira-sprint.service.js
index eaf6b0bcc31e4f184531d0e4f976bacb1a2693f9..2ab4d31a673ac2ae875aae402153fdaa1c8baf99 100644
--- a/services/jira/jira-sprint.service.js
+++ b/services/jira/jira-sprint.service.js
@@ -92,7 +92,7 @@ export default class JiraSprint extends BaseJsonService {
             maxResults: 500,
           },
         },
-        errorMessages: {
+        httpErrors: {
           400: 'sprint not found',
           404: 'sprint not found',
         },
diff --git a/services/jitpack/jitpack-version.service.js b/services/jitpack/jitpack-version.service.js
index 8420ee58c0540643c4941242d9edfcfa045d52d5..7b088dbffeea1d5f5551256324a739da1e20bbad 100644
--- a/services/jitpack/jitpack-version.service.js
+++ b/services/jitpack/jitpack-version.service.js
@@ -37,7 +37,7 @@ export default class JitPackVersion extends BaseJsonService {
     return this._requestJson({
       schema,
       url,
-      errorMessages: { 401: 'project not found or private' },
+      httpErrors: { 401: 'project not found or private' },
     })
   }
 
diff --git a/services/librariesio/librariesio-base.js b/services/librariesio/librariesio-base.js
index 26183df917a1c8b0bd9c3f958449f58e46f600d9..850db1e63be8c81ed3d62256cc10b5e4482d69d5 100644
--- a/services/librariesio/librariesio-base.js
+++ b/services/librariesio/librariesio-base.js
@@ -26,7 +26,7 @@ export default class LibrariesIoBase extends BaseJsonService {
       url: `/${encodeURIComponent(platform)}/${
         scope ? encodeURIComponent(`${scope}/`) : ''
       }${encodeURIComponent(packageName)}`,
-      errorMessages: { 404: 'package not found' },
+      httpErrors: { 404: 'package not found' },
     })
   }
 }
diff --git a/services/librariesio/librariesio-dependencies.service.js b/services/librariesio/librariesio-dependencies.service.js
index 6c8190534de7cb9be88a0e9183e3759943e3ff10..5e12a480332a5c4cfcdb56e2b6aacc578bc15a8f 100644
--- a/services/librariesio/librariesio-dependencies.service.js
+++ b/services/librariesio/librariesio-dependencies.service.js
@@ -92,7 +92,7 @@ class LibrariesIoProjectDependencies extends LibrariesIoBase {
     const json = await this._requestJson({
       url,
       schema,
-      errorMessages: { 404: 'package or version not found' },
+      httpErrors: { 404: 'package or version not found' },
     })
     const { deprecatedCount, outdatedCount } = transform(json)
     return renderDependenciesBadge({ deprecatedCount, outdatedCount })
@@ -127,7 +127,7 @@ class LibrariesIoRepoDependencies extends LibrariesIoBase {
     const json = await this._requestJson({
       url,
       schema,
-      errorMessages: {
+      httpErrors: {
         404: 'repo not found',
       },
     })
diff --git a/services/localizely/localizely.service.js b/services/localizely/localizely.service.js
index 47c301453be4085e08795fb56dff7d853c88e905..1dc13f94780212b1b14fe230c31b5affd134c702 100644
--- a/services/localizely/localizely.service.js
+++ b/services/localizely/localizely.service.js
@@ -111,7 +111,7 @@ export default class Localizely extends BaseJsonService {
         searchParams: { branch },
         headers: { 'X-Api-Token': apiToken },
       },
-      errorMessages: {
+      httpErrors: {
         403: 'not authorized for project',
       },
     })
diff --git a/services/luarocks/luarocks.service.js b/services/luarocks/luarocks.service.js
index 2ffb68616afad60478c057f290b4ac58fba67ba3..49d75fbe4b6e7553e509ba31faf52fde2ea9db32 100644
--- a/services/luarocks/luarocks.service.js
+++ b/services/luarocks/luarocks.service.js
@@ -60,7 +60,7 @@ export default class Luarocks extends BaseJsonService {
         user
       )}/manifest.json`,
       schema,
-      errorMessages: {
+      httpErrors: {
         404: 'user not found',
       },
     })
diff --git a/services/matrix/matrix.service.js b/services/matrix/matrix.service.js
index 50c28ad84747df8fa029f8bfedb4486b76174909..8371388e02d56b5739b5df289d90eb2791841508 100644
--- a/services/matrix/matrix.service.js
+++ b/services/matrix/matrix.service.js
@@ -116,7 +116,7 @@ export default class Matrix extends BaseJsonService {
           auth: { type: 'm.login.dummy' },
         }),
       },
-      errorMessages: {
+      httpErrors: {
         401: 'auth failed',
         403: 'guests not allowed',
       },
@@ -134,7 +134,7 @@ export default class Matrix extends BaseJsonService {
           access_token: accessToken,
         },
       },
-      errorMessages: {
+      httpErrors: {
         401: 'bad auth token',
         404: 'room not found',
       },
@@ -172,7 +172,7 @@ export default class Matrix extends BaseJsonService {
           access_token: accessToken,
         },
       },
-      errorMessages: {
+      httpErrors: {
         400: 'unknown request',
         401: 'bad auth token',
         403: 'room not world readable or is invalid',
diff --git a/services/nexus/nexus.service.js b/services/nexus/nexus.service.js
index 8f13df2b46213e35fd9073904363de8b169d2777..b2b166a719731379b45dab03a43b2a2321fcd587 100644
--- a/services/nexus/nexus.service.js
+++ b/services/nexus/nexus.service.js
@@ -220,7 +220,7 @@ export default class Nexus extends BaseJsonService {
         schema,
         url,
         options: { searchParams },
-        errorMessages: {
+        httpErrors: {
           404: 'artifact not found',
         },
       })
@@ -261,7 +261,7 @@ export default class Nexus extends BaseJsonService {
         schema: nexus3SearchApiSchema,
         url,
         options: { searchParams },
-        errorMessages: {
+        httpErrors: {
           404: 'artifact not found',
         },
       })
diff --git a/services/npm/npm-base.js b/services/npm/npm-base.js
index 7f8ed6cbc2ca3941d05014f45f240e2716201668..b4dc250d620cb14bc1013432c88d51383acfb930 100644
--- a/services/npm/npm-base.js
+++ b/services/npm/npm-base.js
@@ -117,7 +117,7 @@ export default class NpmBase extends BaseJsonService {
       // We don't validate here because we need to pluck the desired subkey first.
       schema: Joi.any(),
       url,
-      errorMessages: { 404: 'package not found' },
+      httpErrors: { 404: 'package not found' },
     })
 
     let packageData
diff --git a/services/npm/npm-downloads.service.js b/services/npm/npm-downloads.service.js
index 9745b5db530539cdb66bbee066cb3828aeaefaf6..ea6ea7eefcbbefdfd60f0f202f3bd98a40f3e513 100644
--- a/services/npm/npm-downloads.service.js
+++ b/services/npm/npm-downloads.service.js
@@ -77,7 +77,7 @@ export default class NpmDownloads extends BaseJsonService {
     const json = await this._requestJson({
       schema,
       url: `https://api.npmjs.org/downloads/${query}/${slug}`,
-      errorMessages: { 404: 'package not found or too new' },
+      httpErrors: { 404: 'package not found or too new' },
     })
 
     const downloadCount = transform(json)
diff --git a/services/npm/npm-version.service.js b/services/npm/npm-version.service.js
index 20caf3e9984c8193849e0bbd817118d383d8e77e..80fd3c9e09bce711750c0a132bd4c56b993e817d 100644
--- a/services/npm/npm-version.service.js
+++ b/services/npm/npm-version.service.js
@@ -80,7 +80,7 @@ export default class NpmVersion extends NpmBase {
     const packageData = await this._requestJson({
       schema,
       url: `${registryUrl}/-/package/${slug}/dist-tags`,
-      errorMessages: { 404: 'package not found' },
+      httpErrors: { 404: 'package not found' },
     })
 
     if (tag && !(tag in packageData)) {
diff --git a/services/npms-io/npms-io-score.service.js b/services/npms-io/npms-io-score.service.js
index b0f48910894c61e468e7f6af8a156d17d7aed450..6de07aa4dd4cba09407f1cb6a65f20fc787095ed 100644
--- a/services/npms-io/npms-io-score.service.js
+++ b/services/npms-io/npms-io-score.service.js
@@ -77,7 +77,7 @@ export default class NpmsIOScore extends BaseJsonService {
     const json = await this._requestJson({
       schema: responseSchema,
       url,
-      errorMessages: { 404: 'package not found or too new' },
+      httpErrors: { 404: 'package not found or too new' },
     })
 
     const scoreType = type.slice(0, -6)
diff --git a/services/open-vsx/open-vsx-base.js b/services/open-vsx/open-vsx-base.js
index d17a1e66a8cf722106bed742b9c2c7888afdd882..b7a79656604bbdb4b308c7c2784bc9c6f81f14a6 100644
--- a/services/open-vsx/open-vsx-base.js
+++ b/services/open-vsx/open-vsx-base.js
@@ -34,7 +34,7 @@ export default class OpenVSXBase extends BaseJsonService {
       url: `https://open-vsx.org/api/${namespace}/${extension}/${
         version || ''
       }`,
-      errorMessages: {
+      httpErrors: {
         400: 'invalid extension id',
         404: 'extension not found',
       },
diff --git a/services/opencollective/opencollective-base.js b/services/opencollective/opencollective-base.js
index 9019820997d7c875ee31c3ce9a2a9cc90ac88bb6..203cfabf0327444ce8d542b370ad933075625354 100644
--- a/services/opencollective/opencollective-base.js
+++ b/services/opencollective/opencollective-base.js
@@ -43,7 +43,7 @@ export default class OpencollectiveBase extends BaseJsonService {
       schema: collectiveDetailsSchema,
       // https://developer.opencollective.com/#/api/collectives?id=get-info
       url: `https://opencollective.com/${collective}.json`,
-      errorMessages: {
+      httpErrors: {
         404: 'collective not found',
       },
     })
@@ -66,7 +66,7 @@ export default class OpencollectiveBase extends BaseJsonService {
       url: `https://opencollective.com/${collective}/members/${
         userType || 'all'
       }.json${tierId ? `?TierId=${tierId}` : ''}`,
-      errorMessages: {
+      httpErrors: {
         404: 'collective not found',
       },
     })
diff --git a/services/opm/opm-version.service.js b/services/opm/opm-version.service.js
index b0c8b5e7fe0f28cf1e949f7cfaca55ff500e9d4f..e05358862870bbc23464d9a9f05978be5640fd8f 100644
--- a/services/opm/opm-version.service.js
+++ b/services/opm/opm-version.service.js
@@ -34,7 +34,7 @@ export default class OpmVersion extends BaseService {
           name: moduleName,
         },
       },
-      errorMessages: {
+      httpErrors: {
         404: 'module not found',
       },
     })
diff --git a/services/ossf-scorecard/ossf-scorecard.service.js b/services/ossf-scorecard/ossf-scorecard.service.js
index a7489bcd6710b66f7e17bdc7e84f68d6eabbfad3..9d17322943de42325d36fc691871b6078203ebcc 100644
--- a/services/ossf-scorecard/ossf-scorecard.service.js
+++ b/services/ossf-scorecard/ossf-scorecard.service.js
@@ -41,7 +41,7 @@ export default class OSSFScorecard extends BaseJsonService {
     return this._requestJson({
       schema,
       url: `https://api.securityscorecards.dev/projects/${host}/${orgName}/${repoName}`,
-      errorMessages: {
+      httpErrors: {
         404: 'invalid repo path',
       },
     })
diff --git a/services/piwheels/piwheels-version.service.js b/services/piwheels/piwheels-version.service.js
index 51be963d6e24d6c7160d00623e50e2ee5da28985..b83e341c03a08e90e82bd9005d798de980d2620d 100644
--- a/services/piwheels/piwheels-version.service.js
+++ b/services/piwheels/piwheels-version.service.js
@@ -55,7 +55,7 @@ export default class PiWheelsVersion extends BaseJsonService {
     return this._requestJson({
       schema,
       url: `https://www.piwheels.org/project/${wheel}/json/`,
-      errorMessages: { 404: 'package not found' },
+      httpErrors: { 404: 'package not found' },
     })
   }
 
diff --git a/services/pypi/pypi-base.js b/services/pypi/pypi-base.js
index 012af06f4974038e933b8b9907ec0a6e50feaf61..48f7e43f8394b3d27cc55e1ba0cab9ffb88a2dd8 100644
--- a/services/pypi/pypi-base.js
+++ b/services/pypi/pypi-base.js
@@ -30,7 +30,7 @@ export default class PypiBase extends BaseJsonService {
     return this._requestJson({
       schema,
       url: `https://pypi.org/pypi/${egg}/json`,
-      errorMessages: { 404: 'package or version not found' },
+      httpErrors: { 404: 'package or version not found' },
     })
   }
 }
diff --git a/services/pypi/pypi-downloads.service.js b/services/pypi/pypi-downloads.service.js
index abc0647f30a3ed676a4937e6b7365bdb0b4f99b5..d6449bcdcdd74816d617c1834bcaed4ea47e00e8 100644
--- a/services/pypi/pypi-downloads.service.js
+++ b/services/pypi/pypi-downloads.service.js
@@ -59,7 +59,7 @@ export default class PypiDownloads extends BaseJsonService {
     return this._requestJson({
       url: `https://pypistats.org/api/packages/${packageName.toLowerCase()}/recent`,
       schema,
-      errorMessages: { 404: 'package not found' },
+      httpErrors: { 404: 'package not found' },
     })
   }
 
diff --git a/services/reddit/subreddit-subscribers.service.js b/services/reddit/subreddit-subscribers.service.js
index 2d0ce5c53d7d39fa1dc14b822507fb62988f3aeb..d162e6fd0c626f8fc848f07d068dcf65b947cf14 100644
--- a/services/reddit/subreddit-subscribers.service.js
+++ b/services/reddit/subreddit-subscribers.service.js
@@ -48,7 +48,7 @@ export default class RedditSubredditSubscribers extends BaseJsonService {
     return this._requestJson({
       schema,
       url: `https://www.reddit.com/r/${subreddit}/about.json`,
-      errorMessages: {
+      httpErrors: {
         404: 'subreddit not found',
         403: 'subreddit is private',
       },
diff --git a/services/reddit/user-karma.service.js b/services/reddit/user-karma.service.js
index b53edfc68a3932e163da791bbd47eab4c1c7f821..fe873aa046618e2d73309ca646efbf541c02d412 100644
--- a/services/reddit/user-karma.service.js
+++ b/services/reddit/user-karma.service.js
@@ -53,7 +53,7 @@ export default class RedditUserKarma extends BaseJsonService {
     return this._requestJson({
       schema,
       url: `https://www.reddit.com/u/${user}/about.json`,
-      errorMessages: {
+      httpErrors: {
         404: 'user not found',
       },
     })
diff --git a/services/reuse/reuse-compliance.service.js b/services/reuse/reuse-compliance.service.js
index 93933f5f9008dc09a2a692a329ea8ac14df56d21..2473572d372635423d0c862006be6de78129a8f5 100644
--- a/services/reuse/reuse-compliance.service.js
+++ b/services/reuse/reuse-compliance.service.js
@@ -41,7 +41,7 @@ export default class Reuse extends BaseJsonService {
     return await this._requestJson({
       schema: responseSchema,
       url: `https://api.reuse.software/status/${remote}`,
-      errorMessages: {
+      httpErrors: {
         400: 'Not a Git repository',
       },
     })
diff --git a/services/scrutinizer/scrutinizer-base.js b/services/scrutinizer/scrutinizer-base.js
index 918a9b6dec49da362cf3390c64495686b9f8a49f..90f4fe9062f35d23b17c9b4b375917f1c40d0115 100644
--- a/services/scrutinizer/scrutinizer-base.js
+++ b/services/scrutinizer/scrutinizer-base.js
@@ -6,7 +6,7 @@ export default class ScrutinizerBase extends BaseJsonService {
     return this._requestJson({
       schema,
       url: `https://scrutinizer-ci.com/api/repositories/${vcs}/${slug}`,
-      errorMessages: {
+      httpErrors: {
         401: 'not authorized to access project',
         404: 'project not found',
       },
diff --git a/services/snyk/snyk-vulnerability-base.js b/services/snyk/snyk-vulnerability-base.js
index 39a5fd33f9e7ddb9dac4775d785656a45d7804ed..ee25d1dd449c6c583a9260792fc8cc6f28259426 100644
--- a/services/snyk/snyk-vulnerability-base.js
+++ b/services/snyk/snyk-vulnerability-base.js
@@ -25,14 +25,14 @@ export default class SnykVulnerabilityBase extends BaseSvgScrapingService {
     }
   }
 
-  async fetch({ url, searchParams, errorMessages }) {
+  async fetch({ url, searchParams, httpErrors }) {
     const { message: vulnerabilities } = await this._requestSvg({
       url,
       schema,
       options: {
         searchParams,
       },
-      errorMessages,
+      httpErrors,
     })
 
     return { vulnerabilities }
diff --git a/services/snyk/snyk-vulnerability-github.service.js b/services/snyk/snyk-vulnerability-github.service.js
index 535dc311143f247e0559b3f3ff11b2542d7a8166..7611e4ffd4e6c22de416112729858d5a25678c2b 100644
--- a/services/snyk/snyk-vulnerability-github.service.js
+++ b/services/snyk/snyk-vulnerability-github.service.js
@@ -39,7 +39,7 @@ export default class SnykVulnerabilityGitHub extends SynkVulnerabilityBase {
     const { vulnerabilities } = await this.fetch({
       url,
       searchParams,
-      errorMessages: {
+      httpErrors: {
         404: 'repo or manifest not found',
       },
     })
diff --git a/services/snyk/snyk-vulnerability-npm.service.js b/services/snyk/snyk-vulnerability-npm.service.js
index 4e5f99db3e18f40fd9c7b9c8da65feb06a16c581..5043608400e5d1d57d506010186d349674013514 100644
--- a/services/snyk/snyk-vulnerability-npm.service.js
+++ b/services/snyk/snyk-vulnerability-npm.service.js
@@ -43,7 +43,7 @@ export default class SnykVulnerabilityNpm extends SynkVulnerabilityBase {
         // Snyk returns an HTTP 200 with an HTML page when the specified
         // npm package is not found that contains the text 404.
         // Including this in case Snyk starts returning a 404 response code instead.
-        errorMessages: {
+        httpErrors: {
           404: 'npm package is invalid or does not exist',
         },
       })
diff --git a/services/sonar/sonar-base.js b/services/sonar/sonar-base.js
index 2e4fd807ca20f43c69a9f90c9bc4b54bdd0ed644..aaa29d3346df3694f3f33a254b7d7b891dc9b6f8 100644
--- a/services/sonar/sonar-base.js
+++ b/services/sonar/sonar-base.js
@@ -84,7 +84,7 @@ export default class SonarBase extends BaseJsonService {
         schema,
         url,
         options: { searchParams },
-        errorMessages: {
+        httpErrors: {
           404: 'component or metric not found, or legacy API not supported',
         },
       })
diff --git a/services/sourceforge/sourceforge-base.js b/services/sourceforge/sourceforge-base.js
index c8e84ed0dfa1eb1bb47b37b8e4a9a1db8a5dd1f9..e1c973a8cf16eb0d12c573a79a722b61b94561c2 100644
--- a/services/sourceforge/sourceforge-base.js
+++ b/services/sourceforge/sourceforge-base.js
@@ -5,7 +5,7 @@ export default class BaseSourceForgeService extends BaseJsonService {
     return this._requestJson({
       url: `https://sourceforge.net/rest/p/${project}/`,
       schema,
-      errorMessages: {
+      httpErrors: {
         404: 'project not found',
       },
     })
diff --git a/services/sourceforge/sourceforge-commit-count.service.js b/services/sourceforge/sourceforge-commit-count.service.js
index 581f4384c22cd8cbc4eb29b5eda4be0ffa2e491d..d7c9f8927502ba9b01612b6e6a3e7015db838e75 100644
--- a/services/sourceforge/sourceforge-commit-count.service.js
+++ b/services/sourceforge/sourceforge-commit-count.service.js
@@ -39,7 +39,7 @@ export default class SourceforgeCommitCount extends BaseJsonService {
     return this._requestJson({
       url: `https://sourceforge.net/rest/p/${project}/git`,
       schema,
-      errorMessages: {
+      httpErrors: {
         404: 'project not found',
       },
     })
diff --git a/services/sourceforge/sourceforge-downloads.service.js b/services/sourceforge/sourceforge-downloads.service.js
index f382b5c1e2af3f1a928d6d6a20e6c083b509dd81..134c52f20cd8283e8f81017ef82389a44f2fd2e3 100644
--- a/services/sourceforge/sourceforge-downloads.service.js
+++ b/services/sourceforge/sourceforge-downloads.service.js
@@ -91,7 +91,7 @@ export default class SourceforgeDownloads extends BaseJsonService {
       schema,
       url,
       options,
-      errorMessages: {
+      httpErrors: {
         404: 'project not found',
       },
     })
diff --git a/services/sourceforge/sourceforge-last-commit.service.js b/services/sourceforge/sourceforge-last-commit.service.js
index 9e6acfb38f32a259374f325c8a13ed4285af0e34..5b4315af6f347833414ccea88a54cdf3594be73f 100644
--- a/services/sourceforge/sourceforge-last-commit.service.js
+++ b/services/sourceforge/sourceforge-last-commit.service.js
@@ -46,7 +46,7 @@ export default class SourceforgeLastCommit extends BaseJsonService {
     return this._requestJson({
       url: `https://sourceforge.net/rest/p/${project}/git/commits`,
       schema,
-      errorMessages: {
+      httpErrors: {
         404: 'project not found',
       },
     })
diff --git a/services/sourceforge/sourceforge-open-tickets.service.js b/services/sourceforge/sourceforge-open-tickets.service.js
index 7cf956105b830153243ff5d99c625dd1ae8c4350..d6fa6b2c26a2eb4899e69bab7511c80ef6ae8ea7 100644
--- a/services/sourceforge/sourceforge-open-tickets.service.js
+++ b/services/sourceforge/sourceforge-open-tickets.service.js
@@ -43,7 +43,7 @@ export default class SourceforgeOpenTickets extends BaseJsonService {
     return this._requestJson({
       schema,
       url,
-      errorMessages: {
+      httpErrors: {
         404: 'project not found',
       },
     })
diff --git a/services/spack/spack.service.js b/services/spack/spack.service.js
index c3ad8e527fb3d95082be8cfc397f1824fb323786..a052431d74bd047a5e9d271d850866bce5845204 100644
--- a/services/spack/spack.service.js
+++ b/services/spack/spack.service.js
@@ -32,7 +32,7 @@ export default class SpackVersion extends BaseJsonService {
     return this._requestJson({
       schema,
       url: `https://packages.spack.io/data/packages/${packageName}.json`,
-      errorMessages: {
+      httpErrors: {
         404: 'package not found',
       },
     })
diff --git a/services/stackexchange/stackexchange-reputation.service.js b/services/stackexchange/stackexchange-reputation.service.js
index db2e3df40d6c18fd4489704addd1db9b0d0a1300..b75f61e39ea2379f9f14329920929c19f23b2972 100644
--- a/services/stackexchange/stackexchange-reputation.service.js
+++ b/services/stackexchange/stackexchange-reputation.service.js
@@ -49,7 +49,7 @@ export default class StackExchangeReputation extends StackExchangeBase {
       schema: reputationSchema,
       options: { decompress: true, searchParams: { site: stackexchangesite } },
       url: `https://api.stackexchange.com/2.2/${path}`,
-      errorMessages: {
+      httpErrors: {
         400: 'invalid parameters',
       },
     })
diff --git a/services/steam/steam-base.js b/services/steam/steam-base.js
index 9ea5cae989cdcf0860c0568451e0eb3db2258baf..459c6d2a7ac0f6dd865ac885787ab7f2cc5c876a 100644
--- a/services/steam/steam-base.js
+++ b/services/steam/steam-base.js
@@ -45,7 +45,7 @@ class BaseSteamAPI extends BaseJsonService {
     return this._requestJson({
       url,
       schema,
-      errorMessages: {
+      httpErrors: {
         400: 'bad request',
       },
       options,
diff --git a/services/symfony/symfony-insight-base.js b/services/symfony/symfony-insight-base.js
index 8cace75a89741201fda240d1f363010229f80b77..95318439afd5707958fbc16269c07c96d923c5eb 100644
--- a/services/symfony/symfony-insight-base.js
+++ b/services/symfony/symfony-insight-base.js
@@ -62,7 +62,7 @@ class SymfonyInsightBase extends BaseXmlService {
         options: {
           headers: { Accept: 'application/vnd.com.sensiolabs.insight+xml' },
         },
-        errorMessages: {
+        httpErrors: {
           401: 'not authorized to access project',
           404: 'project not found',
         },
diff --git a/services/tas/tas-tests.service.js b/services/tas/tas-tests.service.js
index b347f8caaacd85071a5ba8982cb45b20b3c8b14c..70836b0f7c93127ed10bf347ad3ce1b3ac834520 100644
--- a/services/tas/tas-tests.service.js
+++ b/services/tas/tas-tests.service.js
@@ -80,7 +80,7 @@ export default class TasBuildStatus extends BaseJsonService {
     return this._requestJson({
       schema,
       url: `https://api.tas.lambdatest.com/repo/badge?git_provider=${provider}&org=${org}&repo=${repo}`,
-      errorMessages: {
+      httpErrors: {
         401: 'private project not supported',
         404: 'project not found',
       },
diff --git a/services/teamcity/teamcity-base.js b/services/teamcity/teamcity-base.js
index a3b447c72dc6b888e7d62118faaccec310d1444d..00b60da40b1cce6e8ab6d0defc2fe5022f0f5e34 100644
--- a/services/teamcity/teamcity-base.js
+++ b/services/teamcity/teamcity-base.js
@@ -7,7 +7,7 @@ export default class TeamCityBase extends BaseJsonService {
     serviceKey: 'teamcity',
   }
 
-  async fetch({ url, schema, searchParams = {}, errorMessages = {} }) {
+  async fetch({ url, schema, searchParams = {}, httpErrors = {} }) {
     // JetBrains API Auth Docs: https://confluence.jetbrains.com/display/TCD18/REST+API#RESTAPI-RESTAuthentication
     const options = { searchParams }
     if (!this.authHelper.isConfigured) {
@@ -19,7 +19,7 @@ export default class TeamCityBase extends BaseJsonService {
         url,
         schema,
         options,
-        errorMessages: { 404: 'build not found', ...errorMessages },
+        httpErrors: { 404: 'build not found', ...httpErrors },
       })
     )
   }
diff --git a/services/testspace/testspace-base.js b/services/testspace/testspace-base.js
index 5f74c556a0b753f7fa6a6f3e62f65ab0e98b9cc7..556aaf2b7f87952a93e58bb89209ee911eee0352 100644
--- a/services/testspace/testspace-base.js
+++ b/services/testspace/testspace-base.js
@@ -35,7 +35,7 @@ export default class TestspaceBase extends BaseJsonService {
     return this._requestJson({
       schema,
       url,
-      errorMessages: {
+      httpErrors: {
         403: 'org not found or not authorized',
         404: 'org, project, or space not found',
       },
diff --git a/services/tokei/tokei.service.js b/services/tokei/tokei.service.js
index dd01918b8d40494bd764420b8a0c53b881c0e7ae..2a6baeb8c5a2918e4df54995103795b6f7b8b6ea 100644
--- a/services/tokei/tokei.service.js
+++ b/services/tokei/tokei.service.js
@@ -65,7 +65,7 @@ export default class Tokei extends BaseJsonService {
     return this._requestJson({
       schema,
       url: `https://tokei.rs/b1/${provider}/${user}/${repo}`,
-      errorMessages: {
+      httpErrors: {
         400: 'repo not found',
       },
     })
diff --git a/services/twitch/twitch-base.js b/services/twitch/twitch-base.js
index 844157c3f1bd793c348fe45b20f2ad3786f3032f..3ca2b135a011cf822aee40e0284f939e054a58a1 100644
--- a/services/twitch/twitch-base.js
+++ b/services/twitch/twitch-base.js
@@ -46,7 +46,7 @@ export default class TwitchBase extends BaseJsonService {
               grant_type: 'client_credentials',
             },
           },
-          errorMessages: {
+          httpErrors: {
             401: 'invalid token',
             404: 'node not found',
           },
diff --git a/services/ubuntu/ubuntu.service.js b/services/ubuntu/ubuntu.service.js
index a52d61b14b6efb198e7c9d0f1720ff3cfa458c00..fae6f52837235fd44a9d1862a1aedd897b02050f 100644
--- a/services/ubuntu/ubuntu.service.js
+++ b/services/ubuntu/ubuntu.service.js
@@ -53,7 +53,7 @@ export default class Ubuntu extends BaseJsonService {
           ...seriesParam,
         },
       },
-      errorMessages: {
+      httpErrors: {
         400: 'series not found',
       },
     })
diff --git a/services/visual-studio-app-center/visual-studio-app-center-base.js b/services/visual-studio-app-center/visual-studio-app-center-base.js
index e90a6ee2f368bc9def858be951aa4b3ec74271eb..72952155d5143602625bc3649fe264f1b5778876 100644
--- a/services/visual-studio-app-center/visual-studio-app-center-base.js
+++ b/services/visual-studio-app-center/visual-studio-app-center-base.js
@@ -25,7 +25,7 @@ class BaseVisualStudioAppCenterService extends BaseJsonService {
           'X-API-Token': token,
         },
       },
-      errorMessages: {
+      httpErrors: {
         401: 'invalid token',
         403: 'project not found',
         404: 'project not found',
diff --git a/services/visual-studio-marketplace/visual-studio-marketplace-base.js b/services/visual-studio-marketplace/visual-studio-marketplace-base.js
index 95acda7747889ce88fcf03399e454828c908ff59..53456a91df334d3d9d004d588ad2d49bd519136c 100644
--- a/services/visual-studio-marketplace/visual-studio-marketplace-base.js
+++ b/services/visual-studio-marketplace/visual-studio-marketplace-base.js
@@ -95,7 +95,7 @@ export default class VisualStudioMarketplaceBase extends BaseJsonService {
       schema: extensionQuerySchema,
       url,
       options,
-      errorMessages: {
+      httpErrors: {
         400: 'invalid extension id',
       },
     })
diff --git a/services/weblate/weblate-component-license.service.js b/services/weblate/weblate-component-license.service.js
index a24f5c3ab9146f73eff269fe028be8ba08be8dd0..2a31fa8b5c1d36399441a5988a624ecb25db38bb 100644
--- a/services/weblate/weblate-component-license.service.js
+++ b/services/weblate/weblate-component-license.service.js
@@ -37,7 +37,7 @@ export default class WeblateComponentLicense extends WeblateBase {
     return super.fetch({
       schema,
       url: `${server}/api/components/${project}/${component}/`,
-      errorMessages: {
+      httpErrors: {
         403: 'access denied by remote server',
         404: 'component not found',
       },
diff --git a/services/weblate/weblate-entities.service.js b/services/weblate/weblate-entities.service.js
index f8db2d25ca0909db418d1df206053b78dd1ec73d..26f59b4774b2698a03bb96b076dcece4aaac2d0d 100644
--- a/services/weblate/weblate-entities.service.js
+++ b/services/weblate/weblate-entities.service.js
@@ -36,7 +36,7 @@ export default class WeblateEntities extends WeblateBase {
     return super.fetch({
       schema,
       url: `${server}/api/${type}/`,
-      errorMessages: {
+      httpErrors: {
         403: 'access denied by remote server',
       },
     })
diff --git a/services/weblate/weblate-project-translated-percentage.service.js b/services/weblate/weblate-project-translated-percentage.service.js
index e8089f3b374187130b8ad7870d4a506c75aa10b8..d9743b03c34b93f1071b7fc669461e413d864c0a 100644
--- a/services/weblate/weblate-project-translated-percentage.service.js
+++ b/services/weblate/weblate-project-translated-percentage.service.js
@@ -49,7 +49,7 @@ export default class WeblateProjectTranslatedPercentage extends WeblateBase {
     return super.fetch({
       schema,
       url: `${server}/api/projects/${project}/statistics/`,
-      errorMessages: {
+      httpErrors: {
         403: 'access denied by remote server',
         404: 'project not found',
       },
diff --git a/services/weblate/weblate-user-statistic.service.js b/services/weblate/weblate-user-statistic.service.js
index 639153bc6854079db13fbb3b0234d6d30894e75b..6a4c3a89dcf71d922b36fe0aa6476d10f397c671 100644
--- a/services/weblate/weblate-user-statistic.service.js
+++ b/services/weblate/weblate-user-statistic.service.js
@@ -49,7 +49,7 @@ export default class WeblateUserStatistic extends WeblateBase {
     return super.fetch({
       schema,
       url: `${server}/api/users/${user}/statistics/`,
-      errorMessages: {
+      httpErrors: {
         403: 'access denied by remote server',
         404: 'user not found',
       },
diff --git a/services/wheelmap/wheelmap.service.js b/services/wheelmap/wheelmap.service.js
index c6abf22d8c6cd9cca47b41c7126ef6f4cd106858..98a43ef1d4eef773878ecddd065dbfdb997e6784 100644
--- a/services/wheelmap/wheelmap.service.js
+++ b/services/wheelmap/wheelmap.service.js
@@ -50,7 +50,7 @@ export default class Wheelmap extends BaseJsonService {
         {
           schema,
           url: `https://wheelmap.org/api/nodes/${nodeId}`,
-          errorMessages: {
+          httpErrors: {
             401: 'invalid token',
             404: 'node not found',
           },