From 25f8541e5b4523ea2ffb4035be455853faa25746 Mon Sep 17 00:00:00 2001
From: Pierre-Yves B <PyvesDev@gmail.com>
Date: Sun, 7 Apr 2019 18:57:55 +0100
Subject: [PATCH] JSON format modernisation and _shields_test removal (#3272)

* Modernised JSON format and removed _shields_test style

* Added logoWidth and labelColor fields to JSON response

* Reinstated and updated comment

* Extended expectBadge to accept Joi schemas for all fields
---
 .prettierignore                               |  1 -
 __snapshots__/make-badge.spec.js              |  5 +-
 .../legacy-request-handler.spec.js            | 22 +++++++-
 .../service-test-runner/icedfrisby-shields.js | 30 +++++++----
 doc/json-format.md                            | 25 ++++++++++
 doc/service-tests.md                          |  8 +--
 gh-badges/lib/make-badge.js                   |  2 +-
 gh-badges/lib/make-badge.spec.js              |  4 +-
 .../templates/_shields_test-template.json     | 11 ----
 gh-badges/templates/default-template.json     |  7 ++-
 scripts/badge-cli.js                          |  1 -
 services/appveyor/appveyor-ci.tester.js       |  2 +-
 services/appveyor/appveyor-tests.tester.js    |  2 +-
 services/aur/aur.tester.js                    |  4 +-
 .../azure-devops/azure-devops-build.tester.js |  4 +-
 services/bintray/bintray.tester.js            |  2 +-
 services/circleci/circleci.tester.js          |  2 +-
 services/cookbook/cookbook.tester.js          |  2 +-
 services/coverity/coverity-scan.tester.js     |  8 +--
 services/ctan/ctan.tester.js                  |  2 +-
 services/dependabot/dependabot.tester.js      |  2 +-
 services/discord/discord.tester.js            |  2 +-
 services/docker/docker-automated.tester.js    |  4 +-
 services/docker/docker-build.tester.js        |  6 +--
 .../docker/docker-cloud-automated.tester.js   |  4 +-
 services/docker/docker-cloud-build.tester.js  |  6 +--
 services/docker/docker-pulls.tester.js        |  2 +-
 services/docker/docker-stars.tester.js        |  2 +-
 services/dub/dub-download.tester.js           | 12 ++---
 services/dub/dub-version.tester.js            |  2 +-
 services/dynamic/dynamic-json.tester.js       | 20 ++++----
 services/dynamic/dynamic-xml.tester.js        | 20 ++++----
 services/dynamic/dynamic-yaml.tester.js       | 18 +++----
 services/endpoint/endpoint.tester.js          | 31 ++++++------
 .../github/github-commit-status.tester.js     | 26 +++-------
 .../github/github-commits-since.tester.js     |  4 +-
 services/github/github-license.tester.js      | 10 ++--
 services/github/github-tag.tester.js          |  6 +--
 services/hexpm/hexpm.tester.js                |  6 +--
 services/hsts/hsts.tester.js                  | 14 +++---
 services/jira/jira-issue.tester.js            | 14 +++---
 services/jira/jira-sprint.tester.js           |  8 +--
 services/matrix/matrix.tester.js              | 24 ++++-----
 .../mozilla-observatory.tester.js             | 50 +++++++++----------
 services/myget/myget.tester.js                | 12 ++---
 services/nexus/nexus.tester.js                | 34 ++++---------
 services/nodeping/nodeping-status.tester.js   |  4 +-
 services/nodeping/nodeping-uptime.tester.js   |  8 +--
 services/npm/npm-downloads.tester.js          |  6 +--
 services/npm/npm-license.tester.js            | 18 +++----
 services/nuget/nuget.tester.js                | 12 ++---
 .../opencollective-all.tester.js              |  6 +--
 .../opencollective-backers.tester.js          |  4 +-
 .../opencollective-by-tier.tester.js          |  6 +--
 .../opencollective-sponsors.tester.js         |  4 +-
 services/scrutinizer/scrutinizer.tester.js    |  2 +-
 .../snyk/snyk-vulnerability-github.tester.js  |  8 +--
 .../snyk/snyk-vulnerability-npm.tester.js     |  8 +--
 .../query-string-static.tester.js             | 20 +++-----
 services/static-badge/static-badge.tester.js  | 26 +++++-----
 services/swagger/swagger.tester.js            |  2 +-
 .../symfony/symfony-insight-grade.tester.js   | 12 ++---
 .../symfony/symfony-insight-stars.tester.js   | 12 ++---
 .../symfony-insight-violations.tester.js      | 14 +++---
 services/teamcity/teamcity-build.tester.js    | 16 +++---
 services/teamcity/teamcity-coverage.tester.js |  4 +-
 ...arketplace-azure-devops-installs.tester.js |  8 +--
 ...ual-studio-marketplace-downloads.tester.js | 12 ++---
 ...visual-studio-marketplace-rating.tester.js | 12 ++---
 ...isual-studio-marketplace-version.tester.js |  8 +--
 services/waffle/waffle-label.tester.js        |  4 +-
 services/website/website.tester.js            | 12 ++---
 services/wercker/wercker.tester.js            |  4 +-
 services/wheelmap/wheelmap.tester.js          |  6 +--
 .../wordpress/wordpress-platform.tester.js    |  6 +--
 75 files changed, 365 insertions(+), 382 deletions(-)
 create mode 100644 doc/json-format.md
 delete mode 100644 gh-badges/templates/_shields_test-template.json

diff --git a/.prettierignore b/.prettierignore
index c74f6a84ee..21ba9c1012 100644
--- a/.prettierignore
+++ b/.prettierignore
@@ -9,7 +9,6 @@ package-lock.json
 private/*.json
 /.nyc_output
 analytics.json
-gh-badges/templates/_shields_test-template.json
 gh-badges/templates/default-template.json
 supported-features.json
 service-definitions.yml
diff --git a/__snapshots__/make-badge.spec.js b/__snapshots__/make-badge.spec.js
index 1809cb5d14..57fdeb8a0c 100644
--- a/__snapshots__/make-badge.spec.js
+++ b/__snapshots__/make-badge.spec.js
@@ -5,7 +5,10 @@ exports['The badge generator SVG should always produce the same SVG (unless we h
 exports['The badge generator JSON should always produce the same JSON (unless we have changed something!) 1'] = `
 {
   "name": "cactus",
-  "value": "grown"
+  "label": "cactus",
+  "value": "grown",
+  "message": "grown",
+  "color": null
 }
 `
 
diff --git a/core/base-service/legacy-request-handler.spec.js b/core/base-service/legacy-request-handler.spec.js
index 40e4d74e6a..84dd021a8e 100644
--- a/core/base-service/legacy-request-handler.spec.js
+++ b/core/base-service/legacy-request-handler.spec.js
@@ -81,7 +81,13 @@ describe('The request handler', function() {
     it('should return the expected response', async function() {
       const res = await fetch(`${baseUrl}/testing/123.json`)
       expect(res.ok).to.be.true
-      expect(await res.json()).to.deep.equal({ name: 'testing', value: '123' })
+      expect(await res.json()).to.deep.equal({
+        name: 'testing',
+        value: '123',
+        label: 'testing',
+        message: '123',
+        color: 'lightgrey',
+      })
     })
   })
 
@@ -96,7 +102,13 @@ describe('The request handler', function() {
     it('should return the expected response', async function() {
       const res = await fetch(`${baseUrl}/testing/123.json`)
       expect(res.ok).to.be.true
-      expect(await res.json()).to.deep.equal({ name: 'testing', value: '123' })
+      expect(await res.json()).to.deep.equal({
+        name: 'testing',
+        value: '123',
+        label: 'testing',
+        message: '123',
+        color: 'lightgrey',
+      })
     })
   })
 
@@ -121,6 +133,9 @@ describe('The request handler', function() {
       expect(await res.json()).to.deep.equal({
         name: 'testing',
         value: '123',
+        label: 'testing',
+        message: '123',
+        color: 'lightgrey',
       })
     })
 
@@ -134,6 +149,9 @@ describe('The request handler', function() {
       expect(await res.json()).to.deep.equal({
         name: 'testing',
         value: 'Maximum response size exceeded',
+        label: 'testing',
+        message: 'Maximum response size exceeded',
+        color: 'lightgrey',
       })
     })
 
diff --git a/core/service-test-runner/icedfrisby-shields.js b/core/service-test-runner/icedfrisby-shields.js
index 6229008bb6..e3e07c484c 100644
--- a/core/service-test-runner/icedfrisby-shields.js
+++ b/core/service-test-runner/icedfrisby-shields.js
@@ -1,6 +1,7 @@
 'use strict'
 
 const Joi = require('joi')
+const { expect } = require('chai')
 
 // based on https://github.com/paulmelnikow/icedfrisby-nock/blob/master/icedfrisby-nock.js
 // can be used to wrap the original "icedfrisby-nock" with additional functionality:
@@ -31,18 +32,25 @@ const factory = superclass =>
       return this
     }
 
-    expectBadge({ label, message, color }) {
-      let expectedBadge
-      if (typeof color === 'undefined') {
-        expectedBadge = { name: label, value: message }
-      } else {
-        expectedBadge = { name: label, value: message, color }
-      }
+    expectBadge({ label, message, logoWidth, labelColor, color }) {
+      return this.afterJSON(json => {
+        this.constructor._expectField(json, 'label', label)
+        this.constructor._expectField(json, 'message', message)
+        this.constructor._expectField(json, 'logoWidth', logoWidth)
+        this.constructor._expectField(json, 'labelColor', labelColor)
+        this.constructor._expectField(json, 'color', color)
+      })
+    }
 
-      if (typeof message === 'string') {
-        return this.expectJSON(expectedBadge)
-      } else {
-        return this.expectJSONTypes(Joi.object().keys(expectedBadge))
+    static _expectField(json, name, expected) {
+      if (typeof expected === 'string') {
+        expect(json[name], `${name} mismatch`).to.equal(expected)
+      } else if (typeof expected === 'object') {
+        Joi.validate(json[name], expected, err => {
+          if (err) {
+            throw err
+          }
+        })
       }
     }
   }
diff --git a/doc/json-format.md b/doc/json-format.md
new file mode 100644
index 0000000000..892a828598
--- /dev/null
+++ b/doc/json-format.md
@@ -0,0 +1,25 @@
+# JSON Format
+
+Even though Shields is probably best known for its SVG badges, you can also retrieve
+a JSON payload by replacing the `.svg` extension with `.json`.
+
+For instance, hitting [this endpoint](https://img.shields.io/badge/hello-world-brightgreen.json)
+will generate the following payload:
+
+```
+{
+  "name": "hello",
+  "label": "hello",
+  "value": "world",
+  "message": "world",
+  "color": "brightgreen"
+}
+```
+
+Note that the values of the `name` and `value` fields are duplicates of the `label`
+and `message` ones, respectively. As of April 2019, `name` and `value` are deprecated
+and will be removed in a future release, please consider migrating your application
+to use `label` and `message` instead.
+
+Feel free to [open an issue](https://github.com/badges/shields/issues/new/choose)
+if you have any queries regarding the JSON format.
diff --git a/doc/service-tests.md b/doc/service-tests.md
index f88657464a..968648a24a 100644
--- a/doc/service-tests.md
+++ b/doc/service-tests.md
@@ -66,7 +66,7 @@ t.create('Build status')
    - Note that when we call our badge, we are allowing it to communicate with an external service without mocking the response. We write tests which interact with external services, which is unusual practice in unit testing. We do this because one of the purposes of service tests is to notify us if a badge has broken due to an upstream API change. For this reason it is important for at least one test to call the live API without mocking the interaction.
    - All badges on shields can be requested in a number of formats. As well as calling https://img.shields.io/wercker/build/wercker/go-wercker-api.svg to generate ![](https://img.shields.io/wercker/build/wercker/go-wercker-api.svg) we can also call https://img.shields.io/wercker/build/wercker/go-wercker-api.json to request the same content as JSON. When writing service tests, we request the badge in JSON format so it is easier to make assertions about the content.
    - We don't need to explicitly call `/wercker/build/wercker/go-wercker-api.json` here, only `/build/wercker/go-wercker-api.json`. When we create a tester object with `createServiceTester()` the URL base defined in our service class (in this case `/wercker`) is used as the base URL for any requests made by the tester object.
-3. `expectBadge()` is a helper function which accepts either a string literal or a [Joi][] schema for `message`.
+3. `expectBadge()` is a helper function which accepts either a string literal or a [Joi][] schema for the different fields.
    Joi is a validation library that is build into IcedFrisby which you can use to
    match based on a set of allowed strings, regexes, or specific values. You can
    refer to their [API reference][joi api].
@@ -222,7 +222,7 @@ We can also use nock to intercept API calls to return a known response body.
 
 ```js
 t.create('Build passed (mocked)')
-  .get('/build/wercker/go-wercker-api.json?style=_shields_test')
+  .get('/build/wercker/go-wercker-api.json')
   .intercept(nock =>
     nock('https://app.wercker.com/api/v3/applications/')
       .get('/wercker/go-wercker-api/builds?limit=1')
@@ -235,7 +235,7 @@ t.create('Build passed (mocked)')
   })
 
 t.create('Build failed (mocked)')
-  .get('/build/wercker/go-wercker-api.json?style=_shields_test')
+  .get('/build/wercker/go-wercker-api.json')
   .intercept(nock =>
     nock('https://app.wercker.com/api/v3/applications/')
       .get('/wercker/go-wercker-api/builds?limit=1')
@@ -244,7 +244,7 @@ t.create('Build failed (mocked)')
   .expectBadge({ label: 'build', message: 'failed', color: 'red' })
 ```
 
-Note that in these tests, we are passing the URL parameter `?style=_shields_test`. This returns a JSON response which also contains the color. This is helpful in a case like this when we want to test custom color logic, but it is only necessary to explicitly test color values if our badge implements custom logic for setting the badge colors.
+Note that in these tests, we have specified a `color` parameter in `expectBadge`. This is helpful in a case like this when we want to test custom color logic, but it is only necessary to explicitly test color values if our badge implements custom logic for setting the badge colors.
 
 ## Code coverage
 
diff --git a/gh-badges/lib/make-badge.js b/gh-badges/lib/make-badge.js
index 11e36ca5f9..ca8b09c188 100644
--- a/gh-badges/lib/make-badge.js
+++ b/gh-badges/lib/make-badge.js
@@ -164,7 +164,7 @@ function makeBadge({
     logoPosition,
     logoWidth,
     logoPadding,
-    // `color` and `labelColor` are included for the `_shields_test` template.
+    // `color` and `labelColor` are included for the `default` JSON template.
     color: normalizeColor(color),
     labelColor: normalizeColor(labelColor),
     colorA: toSvgColor(labelColor),
diff --git a/gh-badges/lib/make-badge.spec.js b/gh-badges/lib/make-badge.spec.js
index 1466f50d47..cd151fbe9c 100644
--- a/gh-badges/lib/make-badge.spec.js
+++ b/gh-badges/lib/make-badge.spec.js
@@ -13,7 +13,6 @@ function testColor(color = '', colorAttr = 'colorB') {
       text: ['name', 'Bob'],
       [colorAttr]: color,
       format: 'json',
-      template: '_shields_test',
     })
   ).color
 }
@@ -115,6 +114,9 @@ describe('The badge generator', function() {
       expect(JSON.parse(jsonBadgeWithUnknownStyle)).to.deep.equal({
         name: 'name',
         value: 'Bob',
+        label: 'name',
+        message: 'Bob',
+        color: null,
       })
     })
 
diff --git a/gh-badges/templates/_shields_test-template.json b/gh-badges/templates/_shields_test-template.json
deleted file mode 100644
index af44570bba..0000000000
--- a/gh-badges/templates/_shields_test-template.json
+++ /dev/null
@@ -1,11 +0,0 @@
-{
-  "color": {{=JSON.stringify(it.color || null)}},
-{{?it.labelColor}}
-  "labelColor": {{=JSON.stringify(it.labelColor)}},
-{{?}}
-{{?it.logoWidth}}
-  "logoWidth": {{=JSON.stringify(it.logoWidth)}},
-{{?}}
-  "name": {{=JSON.stringify(it.text[0])}},
-  "value": {{=JSON.stringify(it.text[1])}}
-}
diff --git a/gh-badges/templates/default-template.json b/gh-badges/templates/default-template.json
index dc1efc7e49..1f3476e757 100644
--- a/gh-badges/templates/default-template.json
+++ b/gh-badges/templates/default-template.json
@@ -1,4 +1,9 @@
 {
   "name": {{=JSON.stringify(it.text[0])}},
-  "value": {{=JSON.stringify(it.text[1])}}
+  "label": {{=JSON.stringify(it.text[0])}},
+  "value": {{=JSON.stringify(it.text[1])}},
+  "message": {{=JSON.stringify(it.text[1])}},{{?it.logoWidth}}
+  "logoWidth": {{=JSON.stringify(it.logoWidth)}},{{?}}{{?it.labelColor}}
+  "labelColor": {{=JSON.stringify(it.labelColor)}},{{?}}
+  "color": {{=JSON.stringify(it.color || null)}}
 }
\ No newline at end of file
diff --git a/scripts/badge-cli.js b/scripts/badge-cli.js
index 3f4868e274..77d088d3e1 100644
--- a/scripts/badge-cli.js
+++ b/scripts/badge-cli.js
@@ -11,7 +11,6 @@ function normalizeBadgeUrl(url) {
   // Provide a base URL in order to accept fragments.
   const { pathname, searchParams } = new URL(url, 'http://example.com')
   const newPath = pathname.replace('.svg', '.json')
-  searchParams.set('style', '_shields_test')
   return `${newPath}?${searchParams.toString()}`
 }
 
diff --git a/services/appveyor/appveyor-ci.tester.js b/services/appveyor/appveyor-ci.tester.js
index ce8be0d3ee..9858a91f17 100644
--- a/services/appveyor/appveyor-ci.tester.js
+++ b/services/appveyor/appveyor-ci.tester.js
@@ -22,7 +22,7 @@ t.create('CI status on nonexistent project')
   })
 
 t.create('CI status on project that does exist but has no builds yet')
-  .get('/gruntjs/grunt.json?style=_shields_test')
+  .get('/gruntjs/grunt.json')
   .intercept(nock =>
     nock('https://ci.appveyor.com/api/projects/')
       .get('/gruntjs/grunt')
diff --git a/services/appveyor/appveyor-tests.tester.js b/services/appveyor/appveyor-tests.tester.js
index 490282f38d..df81a2de2e 100644
--- a/services/appveyor/appveyor-tests.tester.js
+++ b/services/appveyor/appveyor-tests.tester.js
@@ -70,7 +70,7 @@ t.create('Test status on non-existent project')
   })
 
 t.create('Test status on project that does exist but has no builds yet')
-  .get('/gruntjs/grunt.json?style=_shields_test')
+  .get('/gruntjs/grunt.json')
   .intercept(nock =>
     nock('https://ci.appveyor.com/api/projects/')
       .get('/gruntjs/grunt')
diff --git a/services/aur/aur.tester.js b/services/aur/aur.tester.js
index ed76d3f065..5fe48f4c18 100644
--- a/services/aur/aur.tester.js
+++ b/services/aur/aur.tester.js
@@ -14,7 +14,7 @@ const t = (module.exports = new ServiceTester({
 // version tests
 
 t.create('version (valid)')
-  .get('/version/yaourt.json?style=_shields_test')
+  .get('/version/yaourt.json')
   .expectBadge({
     label: 'aur',
     message: isVPlusDottedVersionNClausesWithOptionalSuffix,
@@ -22,7 +22,7 @@ t.create('version (valid)')
   })
 
 t.create('version (valid, out of date)')
-  .get('/version/gog-gemini-rue.json?style=_shields_test')
+  .get('/version/gog-gemini-rue.json')
   .expectBadge({
     label: 'aur',
     message: isVPlusDottedVersionNClausesWithOptionalSuffix,
diff --git a/services/azure-devops/azure-devops-build.tester.js b/services/azure-devops/azure-devops-build.tester.js
index a495e213f1..65c7776b88 100644
--- a/services/azure-devops/azure-devops-build.tester.js
+++ b/services/azure-devops/azure-devops-build.tester.js
@@ -34,7 +34,5 @@ t.create('unknown user')
 
 // The following build definition has always a partially succeeded status
 t.create('partially succeeded build')
-  .get(
-    '/totodem/8cf3ec0e-d0c2-4fcd-8206-ad204f254a96/4.json?style=_shields_test'
-  )
+  .get('/totodem/8cf3ec0e-d0c2-4fcd-8206-ad204f254a96/4.json')
   .expectBadge({ label: 'build', message: 'passing', color: 'orange' })
diff --git a/services/bintray/bintray.tester.js b/services/bintray/bintray.tester.js
index 720a7cd58d..e019a5f29d 100644
--- a/services/bintray/bintray.tester.js
+++ b/services/bintray/bintray.tester.js
@@ -20,7 +20,7 @@ t.create('version (not found)')
   })
 
 t.create('version (mocked)')
-  .get('/asciidoctor/maven/asciidoctorj.json?style=_shields_test')
+  .get('/asciidoctor/maven/asciidoctorj.json')
   .intercept(nock =>
     nock('https://bintray.com')
       .get('/api/v1/packages/asciidoctor/maven/asciidoctorj/versions/_latest')
diff --git a/services/circleci/circleci.tester.js b/services/circleci/circleci.tester.js
index c0e6590178..37559f606f 100644
--- a/services/circleci/circleci.tester.js
+++ b/services/circleci/circleci.tester.js
@@ -55,7 +55,7 @@ t.create('circle ci (no response data)')
 
 // we're passing &limit=1 so we expect exactly one array element
 t.create('circle ci (invalid json)')
-  .get('/project/github/RedSparr0w/node-csgo-parser.json?style=_shields_test')
+  .get('/project/github/RedSparr0w/node-csgo-parser.json')
   .intercept(nock =>
     nock('https://circleci.com')
       .get(
diff --git a/services/cookbook/cookbook.tester.js b/services/cookbook/cookbook.tester.js
index 09d2c54ddd..1e05103a58 100644
--- a/services/cookbook/cookbook.tester.js
+++ b/services/cookbook/cookbook.tester.js
@@ -11,7 +11,7 @@ t.create('version')
   })
 
 t.create('version (mocked)')
-  .get('/chef-sugar.json?style=_shields_test')
+  .get('/chef-sugar.json')
   .intercept(nock =>
     nock('https://supermarket.getchef.com')
       .get('/api/v1/cookbooks/chef-sugar/versions/latest')
diff --git a/services/coverity/coverity-scan.tester.js b/services/coverity/coverity-scan.tester.js
index 6d010ad00c..acbd517cc5 100644
--- a/services/coverity/coverity-scan.tester.js
+++ b/services/coverity/coverity-scan.tester.js
@@ -25,7 +25,7 @@ t.create('404 response')
   .expectBadge({ label: 'coverity', message: 'project not found' })
 
 t.create('passed')
-  .get('/2.json?style=_shields_test')
+  .get('/2.json')
   .intercept(nock =>
     nock('https://scan.coverity.com/projects/2')
       .get('/badge.json')
@@ -40,7 +40,7 @@ t.create('passed')
   })
 
 t.create('passed with defects')
-  .get('/2.json?style=_shields_test')
+  .get('/2.json')
   .intercept(nock =>
     nock('https://scan.coverity.com/projects/2')
       .get('/badge.json')
@@ -55,7 +55,7 @@ t.create('passed with defects')
   })
 
 t.create('pending')
-  .get('/2.json?style=_shields_test')
+  .get('/2.json')
   .intercept(nock =>
     nock('https://scan.coverity.com/projects/2')
       .get('/badge.json')
@@ -70,7 +70,7 @@ t.create('pending')
   })
 
 t.create('failed')
-  .get('/2.json?style=_shields_test')
+  .get('/2.json')
   .intercept(nock =>
     nock('https://scan.coverity.com/projects/2')
       .get('/badge.json')
diff --git a/services/ctan/ctan.tester.js b/services/ctan/ctan.tester.js
index 0e538ecbfd..609b7cdde9 100644
--- a/services/ctan/ctan.tester.js
+++ b/services/ctan/ctan.tester.js
@@ -56,7 +56,7 @@ t.create('version')
   })
 
 t.create('version (mocked)')
-  .get('/v/novel.json?style=_shields_test')
+  .get('/v/novel.json')
   .intercept(nock =>
     nock('http://www.ctan.org')
       .get('/json/pkg/novel')
diff --git a/services/dependabot/dependabot.tester.js b/services/dependabot/dependabot.tester.js
index ebdb990e67..89ffd9a1a6 100644
--- a/services/dependabot/dependabot.tester.js
+++ b/services/dependabot/dependabot.tester.js
@@ -11,7 +11,7 @@ t.create('semver stability (valid)')
   })
 
 t.create('semver stability (invalid error)')
-  .get('/invalid-manager/puma.json?style=_shields_test')
+  .get('/invalid-manager/puma.json')
   .expectBadge({
     label: 'semver stability',
     message: 'invalid',
diff --git a/services/discord/discord.tester.js b/services/discord/discord.tester.js
index 102fdef3e5..5e3d8aff38 100644
--- a/services/discord/discord.tester.js
+++ b/services/discord/discord.tester.js
@@ -4,7 +4,7 @@ const Joi = require('joi')
 const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('gets status for Reactiflux')
-  .get('/102860784329052160.json?style=_shields_test')
+  .get('/102860784329052160.json')
   .expectBadge({
     label: 'chat',
     message: Joi.string().regex(/^[0-9]+ online$/),
diff --git a/services/docker/docker-automated.tester.js b/services/docker/docker-automated.tester.js
index ce26dc8ef2..4cc144d7ce 100644
--- a/services/docker/docker-automated.tester.js
+++ b/services/docker/docker-automated.tester.js
@@ -25,7 +25,7 @@ t.create('docker automated build (not found)')
   .expectBadge({ label: 'docker build', message: 'repo not found' })
 
 t.create('docker automated build - automated')
-  .get('/_/ubuntu.json?style=_shields_test')
+  .get('/_/ubuntu.json')
   .intercept(nock =>
     nock('https://registry.hub.docker.com/')
       .get('/v2/repositories/library/ubuntu')
@@ -38,7 +38,7 @@ t.create('docker automated build - automated')
   })
 
 t.create('docker automated build - manual')
-  .get('/_/ubuntu.json?style=_shields_test')
+  .get('/_/ubuntu.json')
   .intercept(nock =>
     nock('https://registry.hub.docker.com/')
       .get('/v2/repositories/library/ubuntu')
diff --git a/services/docker/docker-build.tester.js b/services/docker/docker-build.tester.js
index 500ea62ca0..533f5c52ac 100644
--- a/services/docker/docker-build.tester.js
+++ b/services/docker/docker-build.tester.js
@@ -16,7 +16,7 @@ t.create('docker build status (not found)')
   .expectBadge({ label: 'docker build', message: 'repo not found' })
 
 t.create('docker build status (passing)')
-  .get('/_/ubuntu.json?style=_shields_test')
+  .get('/_/ubuntu.json')
   .intercept(nock =>
     nock('https://registry.hub.docker.com/')
       .get('/v2/repositories/library/ubuntu/buildhistory')
@@ -29,7 +29,7 @@ t.create('docker build status (passing)')
   })
 
 t.create('docker build status (failing)')
-  .get('/_/ubuntu.json?style=_shields_test')
+  .get('/_/ubuntu.json')
   .intercept(nock =>
     nock('https://registry.hub.docker.com/')
       .get('/v2/repositories/library/ubuntu/buildhistory')
@@ -38,7 +38,7 @@ t.create('docker build status (failing)')
   .expectBadge({ label: 'docker build', message: 'failing', color: 'red' })
 
 t.create('docker build status (building)')
-  .get('/_/ubuntu.json?style=_shields_test')
+  .get('/_/ubuntu.json')
   .intercept(nock =>
     nock('https://registry.hub.docker.com/')
       .get('/v2/repositories/library/ubuntu/buildhistory')
diff --git a/services/docker/docker-cloud-automated.tester.js b/services/docker/docker-cloud-automated.tester.js
index 226cb9670d..22d508dcc3 100644
--- a/services/docker/docker-cloud-automated.tester.js
+++ b/services/docker/docker-cloud-automated.tester.js
@@ -27,7 +27,7 @@ t.create('docker cloud automated build (not found)')
   .expectBadge({ label: 'docker build', message: 'repo not found' })
 
 t.create('docker cloud automated build - automated')
-  .get('/xenolf/lego.json?style=_shields_test')
+  .get('/xenolf/lego.json')
   .intercept(nock =>
     nock('https://cloud.docker.com/')
       .get(`/api/build/v1/source?image=${encodeURIComponent('xenolf/lego')}`)
@@ -40,7 +40,7 @@ t.create('docker cloud automated build - automated')
   })
 
 t.create('docker cloud automated build - manual')
-  .get('/xenolf/lego.json?style=_shields_test')
+  .get('/xenolf/lego.json')
   .intercept(nock =>
     nock('https://cloud.docker.com/')
       .get(`/api/build/v1/source?image=${encodeURIComponent('xenolf/lego')}`)
diff --git a/services/docker/docker-cloud-build.tester.js b/services/docker/docker-cloud-build.tester.js
index 12c24a1ca2..59a8f8ef72 100644
--- a/services/docker/docker-cloud-build.tester.js
+++ b/services/docker/docker-cloud-build.tester.js
@@ -25,7 +25,7 @@ t.create('docker cloud build status (not found)')
   .expectBadge({ label: 'docker build', message: 'repo not found' })
 
 t.create('docker cloud build status (passing)')
-  .get('/xenolf/lego.json?style=_shields_test')
+  .get('/xenolf/lego.json')
   .intercept(nock =>
     nock('https://cloud.docker.com/')
       .get(`/api/build/v1/source?image=${encodeURIComponent('xenolf/lego')}`)
@@ -38,7 +38,7 @@ t.create('docker cloud build status (passing)')
   })
 
 t.create('docker cloud build status (failing)')
-  .get('/xenolf/lego.json?style=_shields_test')
+  .get('/xenolf/lego.json')
   .intercept(nock =>
     nock('https://cloud.docker.com/')
       .get(`/api/build/v1/source?image=${encodeURIComponent('xenolf/lego')}`)
@@ -47,7 +47,7 @@ t.create('docker cloud build status (failing)')
   .expectBadge({ label: 'docker build', message: 'failing', color: 'red' })
 
 t.create('docker cloud build status (building)')
-  .get('/xenolf/lego.json?style=_shields_test')
+  .get('/xenolf/lego.json')
   .intercept(nock =>
     nock('https://cloud.docker.com/')
       .get(`/api/build/v1/source?image=${encodeURIComponent('xenolf/lego')}`)
diff --git a/services/docker/docker-pulls.tester.js b/services/docker/docker-pulls.tester.js
index 46750aae26..cdf55b2574 100644
--- a/services/docker/docker-pulls.tester.js
+++ b/services/docker/docker-pulls.tester.js
@@ -5,7 +5,7 @@ const t = (module.exports = require('../tester').createServiceTester())
 const { dockerBlue } = require('./docker-helpers')
 
 t.create('docker pulls (valid, library)')
-  .get('/_/ubuntu.json?style=_shields_test')
+  .get('/_/ubuntu.json')
   .expectBadge({
     label: 'docker pulls',
     message: isMetric,
diff --git a/services/docker/docker-stars.tester.js b/services/docker/docker-stars.tester.js
index 2d41dea5dc..9a732e8564 100644
--- a/services/docker/docker-stars.tester.js
+++ b/services/docker/docker-stars.tester.js
@@ -5,7 +5,7 @@ const t = (module.exports = require('../tester').createServiceTester())
 const { dockerBlue } = require('./docker-helpers')
 
 t.create('docker stars (valid, library)')
-  .get('/_/ubuntu.json?style=_shields_test')
+  .get('/_/ubuntu.json')
   .expectBadge({
     label: 'docker stars',
     message: isMetric,
diff --git a/services/dub/dub-download.tester.js b/services/dub/dub-download.tester.js
index f76a3cf625..dc33826d10 100644
--- a/services/dub/dub-download.tester.js
+++ b/services/dub/dub-download.tester.js
@@ -18,7 +18,7 @@ const t = (module.exports = new ServiceTester({
 }))
 
 t.create('total downloads (valid)')
-  .get('/dt/vibe-d.json?style=_shields_test')
+  .get('/dt/vibe-d.json')
   .expectBadge({
     label: 'downloads',
     message: isMetric,
@@ -26,7 +26,7 @@ t.create('total downloads (valid)')
   })
 
 t.create('total downloads, specific version (valid)')
-  .get('/dt/vibe-d/0.8.4.json?style=_shields_test')
+  .get('/dt/vibe-d/0.8.4.json')
   .expectBadge({
     label: 'downloads@0.8.4',
     message: Joi.string().regex(/^[1-9][0-9]*[kMGTPEZY]?$/),
@@ -35,7 +35,7 @@ t.create('total downloads, specific version (valid)')
   .timeout(15000)
 
 t.create('total downloads, latest version (valid)')
-  .get('/dt/vibe-d/latest.json?style=_shields_test')
+  .get('/dt/vibe-d/latest.json')
   .expectBadge({
     label: 'downloads@latest',
     message: Joi.string().regex(/^[1-9][0-9]*[kMGTPEZY]?$/),
@@ -43,7 +43,7 @@ t.create('total downloads, latest version (valid)')
   })
 
 t.create('daily downloads (valid)')
-  .get('/dd/vibe-d.json?style=_shields_test')
+  .get('/dd/vibe-d.json')
   .expectBadge({
     label: 'downloads',
     message: isMetricOverTimePeriod,
@@ -51,7 +51,7 @@ t.create('daily downloads (valid)')
   })
 
 t.create('weekly downloads (valid)')
-  .get('/dw/vibe-d.json?style=_shields_test')
+  .get('/dw/vibe-d.json')
   .expectBadge({
     label: 'downloads',
     message: isMetricOverTimePeriod,
@@ -59,7 +59,7 @@ t.create('weekly downloads (valid)')
   })
 
 t.create('monthly downloads (valid)')
-  .get('/dm/vibe-d.json?style=_shields_test')
+  .get('/dm/vibe-d.json')
   .expectBadge({
     label: 'downloads',
     message: isMetricOverTimePeriod,
diff --git a/services/dub/dub-version.tester.js b/services/dub/dub-version.tester.js
index 0ef53a7b34..972c7256e3 100644
--- a/services/dub/dub-version.tester.js
+++ b/services/dub/dub-version.tester.js
@@ -7,7 +7,7 @@ const {
 const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('version (valid)')
-  .get('/vibe-d.json?style=_shields_test')
+  .get('/vibe-d.json')
   .expectBadge({
     label: 'dub',
     message: isVPlusDottedVersionNClausesWithOptionalSuffix,
diff --git a/services/dynamic/dynamic-json.tester.js b/services/dynamic/dynamic-json.tester.js
index 0d507f15a3..41b7435479 100644
--- a/services/dynamic/dynamic-json.tester.js
+++ b/services/dynamic/dynamic-json.tester.js
@@ -5,7 +5,7 @@ const { expect } = require('chai')
 const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('No URL specified')
-  .get('.json?query=$.name&label=Package Name&style=_shields_test')
+  .get('.json?query=$.name&label=Package Name')
   .expectBadge({
     label: 'Package Name',
     message: 'invalid query parameter: url',
@@ -14,7 +14,7 @@ t.create('No URL specified')
 
 t.create('No query specified')
   .get(
-    '.json?url=https://github.com/badges/shields/raw/master/package.json&label=Package Name&style=_shields_test'
+    '.json?url=https://github.com/badges/shields/raw/master/package.json&label=Package Name'
   )
   .expectBadge({
     label: 'Package Name',
@@ -24,7 +24,7 @@ t.create('No query specified')
 
 t.create('Malformed url')
   .get(
-    '.json?url=https://github.com/badges/shields/raw/master/%0package.json&query=$.name&label=Package Name&style=_shields_test'
+    '.json?url=https://github.com/badges/shields/raw/master/%0package.json&query=$.name&label=Package Name'
   )
   .expectBadge({
     label: 'Package Name',
@@ -34,7 +34,7 @@ t.create('Malformed url')
 
 t.create('JSON from url')
   .get(
-    '.json?url=https://github.com/badges/shields/raw/master/package.json&query=$.name&style=_shields_test'
+    '.json?url=https://github.com/badges/shields/raw/master/package.json&query=$.name'
   )
   .expectBadge({
     label: 'custom badge',
@@ -44,7 +44,7 @@ t.create('JSON from url')
 
 t.create('JSON from uri (support uri query parameter)')
   .get(
-    '.json?uri=https://github.com/badges/shields/raw/master/package.json&query=$.name&style=_shields_test'
+    '.json?uri=https://github.com/badges/shields/raw/master/package.json&query=$.name'
   )
   .expectBadge({
     label: 'custom badge',
@@ -78,7 +78,7 @@ t.create('JSON from url | with prefix & suffix & label')
 
 t.create('JSON from url | object doesnt exist')
   .get(
-    '.json?url=https://github.com/badges/shields/raw/master/package.json&query=$.does_not_exist&style=_shields_test'
+    '.json?url=https://github.com/badges/shields/raw/master/package.json&query=$.does_not_exist'
   )
   .expectBadge({
     label: 'custom badge',
@@ -88,7 +88,7 @@ t.create('JSON from url | object doesnt exist')
 
 t.create('JSON from url | invalid url')
   .get(
-    '.json?url=https://github.com/badges/shields/raw/master/notafile.json&query=$.version&style=_shields_test'
+    '.json?url=https://github.com/badges/shields/raw/master/notafile.json&query=$.version'
   )
   .expectBadge({
     label: 'custom badge',
@@ -98,7 +98,7 @@ t.create('JSON from url | invalid url')
 
 t.create('JSON from url | user color overrides default')
   .get(
-    '.json?url=https://github.com/badges/shields/raw/master/package.json&query=$.name&color=10ADED&style=_shields_test'
+    '.json?url=https://github.com/badges/shields/raw/master/package.json&query=$.name&color=10ADED'
   )
   .expectBadge({
     label: 'custom badge',
@@ -108,7 +108,7 @@ t.create('JSON from url | user color overrides default')
 
 t.create('JSON from url | error color overrides default')
   .get(
-    '.json?url=https://github.com/badges/shields/raw/master/notafile.json&query=$.version&style=_shields_test'
+    '.json?url=https://github.com/badges/shields/raw/master/notafile.json&query=$.version'
   )
   .expectBadge({
     label: 'custom badge',
@@ -117,7 +117,7 @@ t.create('JSON from url | error color overrides default')
   })
 
 t.create('JSON from url | error color overrides user specified')
-  .get('.json?query=$.version&color=10ADED&style=_shields_test')
+  .get('.json?query=$.version&color=10ADED')
   .expectBadge({
     label: 'custom badge',
     message: 'invalid query parameter: url',
diff --git a/services/dynamic/dynamic-xml.tester.js b/services/dynamic/dynamic-xml.tester.js
index b1d9bb9a3b..200288f0be 100644
--- a/services/dynamic/dynamic-xml.tester.js
+++ b/services/dynamic/dynamic-xml.tester.js
@@ -6,7 +6,7 @@ const { isSemver } = require('../test-validators')
 const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('No URL specified')
-  .get('.json?query=//name&label=Package Name&style=_shields_test')
+  .get('.json?query=//name&label=Package Name')
   .expectBadge({
     label: 'Package Name',
     message: 'invalid query parameter: url',
@@ -15,7 +15,7 @@ t.create('No URL specified')
 
 t.create('No query specified')
   .get(
-    '.json?url=https://services.addons.mozilla.org/en-US/firefox/api/1.5/addon/707078&label=Package Name&style=_shields_test'
+    '.json?url=https://services.addons.mozilla.org/en-US/firefox/api/1.5/addon/707078&label=Package Name'
   )
   .expectBadge({
     label: 'Package Name',
@@ -25,7 +25,7 @@ t.create('No query specified')
 
 t.create('XML from url')
   .get(
-    '.json?url=https://services.addons.mozilla.org/en-US/firefox/api/1.5/addon/707078&query=/addon/name&style=_shields_test'
+    '.json?url=https://services.addons.mozilla.org/en-US/firefox/api/1.5/addon/707078&query=/addon/name'
   )
   .expectBadge({
     label: 'custom badge',
@@ -35,7 +35,7 @@ t.create('XML from url')
 
 t.create('XML from uri (support uri query parameter)')
   .get(
-    '.json?uri=https://services.addons.mozilla.org/en-US/firefox/api/1.5/addon/707078&query=/addon/name&style=_shields_test'
+    '.json?uri=https://services.addons.mozilla.org/en-US/firefox/api/1.5/addon/707078&query=/addon/name'
   )
   .expectBadge({
     label: 'custom badge',
@@ -83,7 +83,7 @@ t.create('XML from url | with prefix & suffix & label')
 
 t.create('XML from url | query doesnt exist')
   .get(
-    '.json?url=https://services.addons.mozilla.org/en-US/firefox/api/1.5/addon/707078&query=/does/not/exist&style=_shields_test'
+    '.json?url=https://services.addons.mozilla.org/en-US/firefox/api/1.5/addon/707078&query=/does/not/exist'
   )
   .expectBadge({
     label: 'custom badge',
@@ -93,7 +93,7 @@ t.create('XML from url | query doesnt exist')
 
 t.create('XML from url | query doesnt exist (attribute)')
   .get(
-    '.json?url=https://services.addons.mozilla.org/en-US/firefox/api/1.5/addon/707078&query=/does/not/@exist&style=_shields_test'
+    '.json?url=https://services.addons.mozilla.org/en-US/firefox/api/1.5/addon/707078&query=/does/not/@exist'
   )
   .expectBadge({
     label: 'custom badge',
@@ -103,7 +103,7 @@ t.create('XML from url | query doesnt exist (attribute)')
 
 t.create('XML from url | invalid url')
   .get(
-    '.json?url=https://github.com/badges/shields/raw/master/notafile.xml&query=//version&style=_shields_test'
+    '.json?url=https://github.com/badges/shields/raw/master/notafile.xml&query=//version'
   )
   .expectBadge({
     label: 'custom badge',
@@ -113,7 +113,7 @@ t.create('XML from url | invalid url')
 
 t.create('XML from url | user color overrides default')
   .get(
-    '.json?url=https://services.addons.mozilla.org/en-US/firefox/api/1.5/addon/707078&query=/addon/name&color=10ADED&style=_shields_test'
+    '.json?url=https://services.addons.mozilla.org/en-US/firefox/api/1.5/addon/707078&query=/addon/name&color=10ADED'
   )
   .expectBadge({
     label: 'custom badge',
@@ -123,7 +123,7 @@ t.create('XML from url | user color overrides default')
 
 t.create('XML from url | error color overrides default')
   .get(
-    '.json?url=https://github.com/badges/shields/raw/master/notafile.xml&query=//version&style=_shields_test'
+    '.json?url=https://github.com/badges/shields/raw/master/notafile.xml&query=//version'
   )
   .expectBadge({
     label: 'custom badge',
@@ -132,7 +132,7 @@ t.create('XML from url | error color overrides default')
   })
 
 t.create('XML from url | error color overrides user specified')
-  .get('.json?query=//version&color=10ADED&style=_shields_test')
+  .get('.json?query=//version&color=10ADED')
   .expectBadge({
     label: 'custom badge',
     message: 'invalid query parameter: url',
diff --git a/services/dynamic/dynamic-yaml.tester.js b/services/dynamic/dynamic-yaml.tester.js
index d2a5c2c23e..ad52a5ec0f 100644
--- a/services/dynamic/dynamic-yaml.tester.js
+++ b/services/dynamic/dynamic-yaml.tester.js
@@ -3,7 +3,7 @@
 const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('No URL specified')
-  .get('.json?query=$.name&label=Package Name&style=_shields_test')
+  .get('.json?query=$.name&label=Package Name')
   .expectBadge({
     label: 'Package Name',
     message: 'invalid query parameter: url',
@@ -12,7 +12,7 @@ t.create('No URL specified')
 
 t.create('No query specified')
   .get(
-    '.json?url=https://raw.githubusercontent.com/kubernetes/charts/568291d6e476c39ca8322c30c3f601d0383d4760/stable/coredns/Chart.yaml&label=Package Name&style=_shields_test'
+    '.json?url=https://raw.githubusercontent.com/kubernetes/charts/568291d6e476c39ca8322c30c3f601d0383d4760/stable/coredns/Chart.yaml&label=Package Name'
   )
   .expectBadge({
     label: 'Package Name',
@@ -22,7 +22,7 @@ t.create('No query specified')
 
 t.create('YAML from url')
   .get(
-    '.json?url=https://raw.githubusercontent.com/kubernetes/charts/568291d6e476c39ca8322c30c3f601d0383d4760/stable/coredns/Chart.yaml&query=$.name&style=_shields_test'
+    '.json?url=https://raw.githubusercontent.com/kubernetes/charts/568291d6e476c39ca8322c30c3f601d0383d4760/stable/coredns/Chart.yaml&query=$.name'
   )
   .expectBadge({
     label: 'custom badge',
@@ -32,7 +32,7 @@ t.create('YAML from url')
 
 t.create('YAML from uri (support uri query parameter)')
   .get(
-    '.json?uri=https://raw.githubusercontent.com/kubernetes/charts/568291d6e476c39ca8322c30c3f601d0383d4760/stable/coredns/Chart.yaml&query=$.name&style=_shields_test'
+    '.json?uri=https://raw.githubusercontent.com/kubernetes/charts/568291d6e476c39ca8322c30c3f601d0383d4760/stable/coredns/Chart.yaml&query=$.name'
   )
   .expectBadge({
     label: 'custom badge',
@@ -60,7 +60,7 @@ t.create('YAML from url | with prefix & suffix & label')
 
 t.create('YAML from url | object doesnt exist')
   .get(
-    '.json?url=https://raw.githubusercontent.com/kubernetes/charts/568291d6e476c39ca8322c30c3f601d0383d4760/stable/coredns/Chart.yaml&query=$.does_not_exist&style=_shields_test'
+    '.json?url=https://raw.githubusercontent.com/kubernetes/charts/568291d6e476c39ca8322c30c3f601d0383d4760/stable/coredns/Chart.yaml&query=$.does_not_exist'
   )
   .expectBadge({
     label: 'custom badge',
@@ -70,7 +70,7 @@ t.create('YAML from url | object doesnt exist')
 
 t.create('YAML from url | invalid url')
   .get(
-    '.json?url=https://raw.githubusercontent.com/kubernetes/charts/568291d6e476c39ca8322c30c3f601d0383d4760/stable/coredns/notafile.yaml&query=$.version&style=_shields_test'
+    '.json?url=https://raw.githubusercontent.com/kubernetes/charts/568291d6e476c39ca8322c30c3f601d0383d4760/stable/coredns/notafile.yaml&query=$.version'
   )
   .expectBadge({
     label: 'custom badge',
@@ -80,13 +80,13 @@ t.create('YAML from url | invalid url')
 
 t.create('YAML from url | user color overrides default')
   .get(
-    '.json?url=https://raw.githubusercontent.com/kubernetes/charts/568291d6e476c39ca8322c30c3f601d0383d4760/stable/coredns/Chart.yaml&query=$.name&color=10ADED&style=_shields_test'
+    '.json?url=https://raw.githubusercontent.com/kubernetes/charts/568291d6e476c39ca8322c30c3f601d0383d4760/stable/coredns/Chart.yaml&query=$.name&color=10ADED'
   )
   .expectBadge({ label: 'custom badge', message: 'coredns', color: '#10aded' })
 
 t.create('YAML from url | error color overrides default')
   .get(
-    '.json?url=https://raw.githubusercontent.com/kubernetes/charts/568291d6e476c39ca8322c30c3f601d0383d4760/stable/coredns/notafile.yaml&query=$.version&style=_shields_test'
+    '.json?url=https://raw.githubusercontent.com/kubernetes/charts/568291d6e476c39ca8322c30c3f601d0383d4760/stable/coredns/notafile.yaml&query=$.version'
   )
   .expectBadge({
     label: 'custom badge',
@@ -95,7 +95,7 @@ t.create('YAML from url | error color overrides default')
   })
 
 t.create('YAML from url | error color overrides user specified')
-  .get('.json?query=$.version&color=10ADED&style=_shields_test')
+  .get('.json?query=$.version&color=10ADED')
   .expectBadge({
     label: 'custom badge',
     message: 'invalid query parameter: url',
diff --git a/services/endpoint/endpoint.tester.js b/services/endpoint/endpoint.tester.js
index 2ec62e635a..0a6c5c869f 100644
--- a/services/endpoint/endpoint.tester.js
+++ b/services/endpoint/endpoint.tester.js
@@ -18,7 +18,7 @@ t.create('Valid schema (mocked)')
   .expectBadge({ label: '', message: 'yo' })
 
 t.create('color and labelColor')
-  .get('.json?url=https://example.com/badge&style=_shields_test')
+  .get('.json?url=https://example.com/badge')
   .intercept(nock =>
     nock('https://example.com/')
       .get('/badge')
@@ -30,9 +30,9 @@ t.create('color and labelColor')
         labelColor: '#e6e6fa',
       })
   )
-  .expectJSON({
-    name: 'hey',
-    value: 'yo',
+  .expectBadge({
+    label: 'hey',
+    message: 'yo',
     color: '#f0dcc3',
     labelColor: '#e6e6fa',
   })
@@ -47,15 +47,13 @@ t.create('style')
         label: 'hey',
         message: 'yo',
         color: '#99c',
-        style: '_shields_test',
       })
   )
   .expectBadge({
     label: 'hey',
     message: 'yo',
-    // `color` is only in _shields_test which is being specified by the
-    // service, not the request. If the color key is here we know this has
-    // worked.
+    // `color` is being specified by the service, not the request.
+    // If the color key is here we know this has worked.
     color: '#99c',
   })
 
@@ -117,7 +115,7 @@ t.create('custom svg logo')
   })
 
 t.create('logoWidth')
-  .get('.json?url=https://example.com/badge&style=_shields_test')
+  .get('.json?url=https://example.com/badge')
   .intercept(nock =>
     nock('https://example.com/')
       .get('/badge')
@@ -129,10 +127,9 @@ t.create('logoWidth')
         logoWidth: 30,
       })
   )
-  .expectJSON({
-    name: 'hey',
-    value: 'yo',
-    color: 'lightgrey',
+  .expectBadge({
+    label: 'hey',
+    message: 'yo',
     logoWidth: 30,
   })
 
@@ -169,7 +166,7 @@ t.create('Invalid schema (mocked)')
   })
 
 t.create('User color overrides success color')
-  .get('.json?url=https://example.com/badge&color=101010&style=_shields_test')
+  .get('.json?url=https://example.com/badge&color=101010')
   .intercept(nock =>
     nock('https://example.com/')
       .get('/badge')
@@ -183,7 +180,7 @@ t.create('User color overrides success color')
   .expectBadge({ label: '', message: 'yo', color: '#101010' })
 
 t.create('User legacy color overrides success color')
-  .get('.json?url=https://example.com/badge&colorB=101010&style=_shields_test')
+  .get('.json?url=https://example.com/badge&colorB=101010')
   .intercept(nock =>
     nock('https://example.com/')
       .get('/badge')
@@ -197,7 +194,7 @@ t.create('User legacy color overrides success color')
   .expectBadge({ label: '', message: 'yo', color: '#101010' })
 
 t.create('User color does not override error color')
-  .get('.json?url=https://example.com/badge&color=101010&style=_shields_test')
+  .get('.json?url=https://example.com/badge&color=101010')
   .intercept(nock =>
     nock('https://example.com/')
       .get('/badge')
@@ -212,7 +209,7 @@ t.create('User color does not override error color')
   .expectBadge({ label: 'something is', message: 'not right', color: 'red' })
 
 t.create('User legacy color does not override error color')
-  .get('.json?url=https://example.com/badge&colorB=101010&style=_shields_test')
+  .get('.json?url=https://example.com/badge&colorB=101010')
   .intercept(nock =>
     nock('https://example.com/')
       .get('/badge')
diff --git a/services/github/github-commit-status.tester.js b/services/github/github-commit-status.tester.js
index 523da29307..177dd00c3c 100644
--- a/services/github/github-commit-status.tester.js
+++ b/services/github/github-commit-status.tester.js
@@ -4,9 +4,7 @@ const { invalidJSON } = require('../response-fixtures')
 const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('commit status - commit in branch')
-  .get(
-    '/badges/shields/master/5d4ab86b1b5ddfb3c4a70a70bd19932c52603b8c.json?style=_shields_test'
-  )
+  .get('/badges/shields/master/5d4ab86b1b5ddfb3c4a70a70bd19932c52603b8c.json')
   .expectBadge({
     label: 'commit status',
     message: 'in master',
@@ -16,9 +14,7 @@ t.create('commit status - commit in branch')
 t.create(
   'commit status - checked commit is identical with the newest commit in branch'
 )
-  .get(
-    '/badges/shields/master/5d4ab86b1b5ddfb3c4a70a70bd19932c52603b8c.json?style=_shields_test'
-  )
+  .get('/badges/shields/master/5d4ab86b1b5ddfb3c4a70a70bd19932c52603b8c.json')
   .intercept(nock =>
     nock('https://api.github.com')
       .get(
@@ -33,9 +29,7 @@ t.create(
   })
 
 t.create('commit status - commit not in branch')
-  .get(
-    '/badges/shields/master/960c5bf72d7d1539fcd453343eed3f8617427a41.json?style=_shields_test'
-  )
+  .get('/badges/shields/master/960c5bf72d7d1539fcd453343eed3f8617427a41.json')
   .expectBadge({
     label: 'commit status',
     message: 'commit or branch not found',
@@ -43,9 +37,7 @@ t.create('commit status - commit not in branch')
   })
 
 t.create('commit status - unknown commit id')
-  .get(
-    '/atom/atom/v1.27.1/7dfb45eb61a48a4ce18a0dd2e31f944ed4467ae3.json?style=_shields_test'
-  )
+  .get('/atom/atom/v1.27.1/7dfb45eb61a48a4ce18a0dd2e31f944ed4467ae3.json')
   .expectBadge({
     label: 'commit status',
     message: 'not in v1.27.1',
@@ -54,7 +46,7 @@ t.create('commit status - unknown commit id')
 
 t.create('commit status - unknown branch')
   .get(
-    '/badges/shields/this-branch-does-not-exist/b551a3a8daf1c48dba32a3eab1edf99b10c28863.json?style=_shields_test'
+    '/badges/shields/this-branch-does-not-exist/b551a3a8daf1c48dba32a3eab1edf99b10c28863.json'
   )
   .expectBadge({
     label: 'commit status',
@@ -63,9 +55,7 @@ t.create('commit status - unknown branch')
   })
 
 t.create('commit status - no common ancestor between commit and branch')
-  .get(
-    '/badges/shields/master/b551a3a8daf1c48dba32a3eab1edf99b10c28863.json?style=_shields_test'
-  )
+  .get('/badges/shields/master/b551a3a8daf1c48dba32a3eab1edf99b10c28863.json')
   .expectBadge({
     label: 'commit status',
     message: 'no common ancestor',
@@ -75,9 +65,7 @@ t.create('commit status - no common ancestor between commit and branch')
 // Since the service is responsible for parsing its error response, this tests
 // the service, not BaseJsonService.
 t.create('commit status - 404 with invalid JSON form github')
-  .get(
-    '/badges/shields/master/5d4ab86b1b5ddfb3c4a70a70bd19932c52603b8c.json?style=_shields_test'
-  )
+  .get('/badges/shields/master/5d4ab86b1b5ddfb3c4a70a70bd19932c52603b8c.json')
   .intercept(nock =>
     nock('https://api.github.com')
       .get(
diff --git a/services/github/github-commits-since.tester.js b/services/github/github-commits-since.tester.js
index 544cee53f5..bf66ae1e01 100644
--- a/services/github/github-commits-since.tester.js
+++ b/services/github/github-commits-since.tester.js
@@ -4,9 +4,7 @@ const Joi = require('joi')
 const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('Commits since')
-  .get(
-    '/badges/shields/a0663d8da53fb712472c02665e6ff7547ba945b7.json?style=_shields_test'
-  )
+  .get('/badges/shields/a0663d8da53fb712472c02665e6ff7547ba945b7.json')
   .expectBadge({
     label: Joi.string().regex(/^(commits since){1}[\s\S]+$/),
     message: Joi.string().regex(/^\w+$/),
diff --git a/services/github/github-license.tester.js b/services/github/github-license.tester.js
index fc582255e0..261b4b4126 100644
--- a/services/github/github-license.tester.js
+++ b/services/github/github-license.tester.js
@@ -7,7 +7,7 @@ const publicDomainLicenseColor = licenseToColor('CC0-1.0')
 const unknownLicenseColor = licenseToColor()
 
 t.create('License')
-  .get('/github/gitignore.json?style=_shields_test')
+  .get('/github/gitignore.json')
   .expectBadge({
     label: 'license',
     message: 'CC0-1.0',
@@ -15,7 +15,7 @@ t.create('License')
   })
 
 t.create('License for repo without a license')
-  .get('/badges/badger.json?style=_shields_test')
+  .get('/badges/badger.json')
   .expectBadge({
     label: 'license',
     message: 'not specified',
@@ -23,7 +23,7 @@ t.create('License for repo without a license')
   })
 
 t.create('License for repo with an unrecognized license')
-  .get('/philokev/sopel-noblerealms.json?style=_shields_test')
+  .get('/philokev/sopel-noblerealms.json')
   .expectBadge({
     label: 'license',
     message: 'not identifiable by github',
@@ -31,7 +31,7 @@ t.create('License for repo with an unrecognized license')
   })
 
 t.create('License with SPDX id not appearing in configuration')
-  .get('/user1/project-with-EFL-license.json?style=_shields_test')
+  .get('/user1/project-with-EFL-license.json')
   .intercept(nock =>
     nock('https://api.github.com')
       .get('/repos/user1/project-with-EFL-license')
@@ -54,7 +54,7 @@ t.create('License with SPDX id not appearing in configuration')
   })
 
 t.create('License for unknown repo')
-  .get('/user1/github-does-not-have-this-repo.json?style=_shields_test')
+  .get('/user1/github-does-not-have-this-repo.json')
   .expectBadge({
     label: 'license',
     message: 'repo not found',
diff --git a/services/github/github-tag.tester.js b/services/github/github-tag.tester.js
index bf5fbc7bb0..eba861ca92 100644
--- a/services/github/github-tag.tester.js
+++ b/services/github/github-tag.tester.js
@@ -22,7 +22,7 @@ const tagsFixture = [
 ]
 
 t.create('Tag (mocked response, no pre-releases, semver ordering)')
-  .get('/tag/foo/bar.json?style=_shields_test')
+  .get('/tag/foo/bar.json')
   .intercept(nock =>
     nock('https://api.github.com')
       .get('/repos/foo/bar/tags')
@@ -31,7 +31,7 @@ t.create('Tag (mocked response, no pre-releases, semver ordering)')
   .expectBadge({ label: 'tag', message: 'v1.2', color: 'blue' })
 
 t.create('Tag (mocked response, include pre-releases, semver ordering)')
-  .get('/tag-pre/foo/bar.json?style=_shields_test')
+  .get('/tag-pre/foo/bar.json')
   .intercept(nock =>
     nock('https://api.github.com')
       .get('/repos/foo/bar/tags')
@@ -40,7 +40,7 @@ t.create('Tag (mocked response, include pre-releases, semver ordering)')
   .expectBadge({ label: 'tag', message: 'v1.3-beta3', color: 'orange' })
 
 t.create('Tag (mocked response, date ordering)')
-  .get('/tag-date/foo/bar.json?style=_shields_test')
+  .get('/tag-date/foo/bar.json')
   .intercept(nock =>
     nock('https://api.github.com')
       .get('/repos/foo/bar/tags')
diff --git a/services/hexpm/hexpm.tester.js b/services/hexpm/hexpm.tester.js
index 0f86adc933..12637e5560 100644
--- a/services/hexpm/hexpm.tester.js
+++ b/services/hexpm/hexpm.tester.js
@@ -46,7 +46,7 @@ t.create('version (not found)')
   .expectBadge({ label: 'hex', message: 'not found' })
 
 t.create('license')
-  .get('/l/cowboy.json?style=_shields_test')
+  .get('/l/cowboy.json')
   .expectBadge({
     label: 'license',
     message: Joi.string().required(),
@@ -54,7 +54,7 @@ t.create('license')
   })
 
 t.create('license (multiple licenses)')
-  .get('/l/cowboy.json?style=_shields_test')
+  .get('/l/cowboy.json')
   .intercept(nock =>
     nock('https://hex.pm/')
       .get('/api/packages/cowboy')
@@ -71,7 +71,7 @@ t.create('license (multiple licenses)')
   })
 
 t.create('license (no license)')
-  .get('/l/cowboy.json?style=_shields_test')
+  .get('/l/cowboy.json')
   .intercept(nock =>
     nock('https://hex.pm/')
       .get('/api/packages/cowboy')
diff --git a/services/hsts/hsts.tester.js b/services/hsts/hsts.tester.js
index 6ae2d5ff23..fffc9b1a62 100644
--- a/services/hsts/hsts.tester.js
+++ b/services/hsts/hsts.tester.js
@@ -4,7 +4,7 @@ const t = (module.exports = require('../tester').createServiceTester())
 const label = 'hsts preloaded'
 
 t.create('gets the hsts status of github')
-  .get('/github.com.json?style=_shields_test')
+  .get('/github.com.json')
   .expectBadge({
     label,
     message: 'yes',
@@ -12,7 +12,7 @@ t.create('gets the hsts status of github')
   })
 
 t.create('gets the hsts status of httpforever')
-  .get('/httpforever.com.json?style=_shields_test')
+  .get('/httpforever.com.json')
   .expectBadge({
     label,
     message: 'no',
@@ -20,7 +20,7 @@ t.create('gets the hsts status of httpforever')
   })
 
 t.create('gets the status of an invalid uri')
-  .get('/does-not-exist.json?style=_shields_test')
+  .get('/does-not-exist.json')
   .expectBadge({
     label,
     message: 'no',
@@ -28,7 +28,7 @@ t.create('gets the status of an invalid uri')
   })
 
 t.create('gets the hsts status of github (mock)')
-  .get('/github.com.json?style=_shields_test')
+  .get('/github.com.json')
   .intercept(nock =>
     nock('https://hstspreload.org')
       .get('/api/v2/status?domain=github.com')
@@ -41,7 +41,7 @@ t.create('gets the hsts status of github (mock)')
   })
 
 t.create('gets the hsts status of httpforever (mock)')
-  .get('/httpforever.com.json?style=_shields_test')
+  .get('/httpforever.com.json')
   .intercept(nock =>
     nock('https://hstspreload.org')
       .get('/api/v2/status?domain=httpforever.com')
@@ -54,7 +54,7 @@ t.create('gets the hsts status of httpforever (mock)')
   })
 
 t.create('gets the hsts status of a pending site (mock)')
-  .get('/pending.mock.json?style=_shields_test')
+  .get('/pending.mock.json')
   .intercept(nock =>
     nock('https://hstspreload.org')
       .get('/api/v2/status?domain=pending.mock')
@@ -67,7 +67,7 @@ t.create('gets the hsts status of a pending site (mock)')
   })
 
 t.create('gets the status of an invalid uri (mock)')
-  .get('/does-not-exist.json?style=_shields_test')
+  .get('/does-not-exist.json')
   .intercept(nock =>
     nock('https://hstspreload.org')
       .get('/api/v2/status?domain=does-not-exist')
diff --git a/services/jira/jira-issue.tester.js b/services/jira/jira-issue.tester.js
index 020fb55e14..1729b9d2d3 100644
--- a/services/jira/jira-issue.tester.js
+++ b/services/jira/jira-issue.tester.js
@@ -12,7 +12,7 @@ t.create('live: known issue')
   .expectBadge({ label: 'kafka-2896', message: 'Resolved' })
 
 t.create('no status color')
-  .get('/http/issues.apache.org/jira/foo-123.json?style=_shields_test')
+  .get('/http/issues.apache.org/jira/foo-123.json')
   .intercept(nock =>
     nock('http://issues.apache.org/jira/rest/api/2/issue')
       .get(`/${encodeURIComponent('foo-123')}`)
@@ -31,7 +31,7 @@ t.create('no status color')
   })
 
 t.create('green status color')
-  .get('/https/issues.apache.org:8000/jira/bar-345.json?style=_shields_test')
+  .get('/https/issues.apache.org:8000/jira/bar-345.json')
   .intercept(nock =>
     nock('https://issues.apache.org:8000/jira/rest/api/2/issue')
       .get(`/${encodeURIComponent('bar-345')}`)
@@ -53,7 +53,7 @@ t.create('green status color')
   })
 
 t.create('medium-gray status color')
-  .get('/https/issues.apache.org:8080/abc-123.json?style=_shields_test')
+  .get('/https/issues.apache.org:8080/abc-123.json')
   .intercept(nock =>
     nock('https://issues.apache.org:8080/rest/api/2/issue')
       .get(`/${encodeURIComponent('abc-123')}`)
@@ -75,7 +75,7 @@ t.create('medium-gray status color')
   })
 
 t.create('yellow status color')
-  .get('/https/issues.apache.org/test-001.json?style=_shields_test')
+  .get('/https/issues.apache.org/test-001.json')
   .intercept(nock =>
     nock('https://issues.apache.org/rest/api/2/issue')
       .get(`/${encodeURIComponent('test-001')}`)
@@ -97,7 +97,7 @@ t.create('yellow status color')
   })
 
 t.create('brown status color')
-  .get('/https/issues.apache.org/zzz-789.json?style=_shields_test')
+  .get('/https/issues.apache.org/zzz-789.json')
   .intercept(nock =>
     nock('https://issues.apache.org/rest/api/2/issue')
       .get(`/${encodeURIComponent('zzz-789')}`)
@@ -119,7 +119,7 @@ t.create('brown status color')
   })
 
 t.create('warm-red status color')
-  .get('/https/issues.apache.org/fire-321.json?style=_shields_test')
+  .get('/https/issues.apache.org/fire-321.json')
   .intercept(nock =>
     nock('https://issues.apache.org/rest/api/2/issue')
       .get(`/${encodeURIComponent('fire-321')}`)
@@ -141,7 +141,7 @@ t.create('warm-red status color')
   })
 
 t.create('blue-gray status color')
-  .get('/https/issues.apache.org/sky-775.json?style=_shields_test')
+  .get('/https/issues.apache.org/sky-775.json')
   .intercept(nock =>
     nock('https://issues.apache.org/rest/api/2/issue')
       .get(`/${encodeURIComponent('sky-775')}`)
diff --git a/services/jira/jira-sprint.tester.js b/services/jira/jira-sprint.tester.js
index b75738851a..7813afefe6 100644
--- a/services/jira/jira-sprint.tester.js
+++ b/services/jira/jira-sprint.tester.js
@@ -23,7 +23,7 @@ t.create('live: known sprint')
   })
 
 t.create('100% completion')
-  .get(`/http/issues.apache.org/jira/${sprintId}.json?style=_shields_test`)
+  .get(`/http/issues.apache.org/jira/${sprintId}.json`)
   .intercept(nock =>
     nock('http://issues.apache.org/jira/rest/api/2')
       .get('/search')
@@ -55,7 +55,7 @@ t.create('100% completion')
   })
 
 t.create('0% completion')
-  .get(`/http/issues.apache.org/jira/${sprintId}.json?style=_shields_test`)
+  .get(`/http/issues.apache.org/jira/${sprintId}.json`)
   .intercept(nock =>
     nock('http://issues.apache.org/jira/rest/api/2')
       .get('/search')
@@ -80,7 +80,7 @@ t.create('0% completion')
   })
 
 t.create('no issues in sprint')
-  .get(`/http/issues.apache.org/jira/${sprintId}.json?style=_shields_test`)
+  .get(`/http/issues.apache.org/jira/${sprintId}.json`)
   .intercept(nock =>
     nock('http://issues.apache.org/jira/rest/api/2')
       .get('/search')
@@ -97,7 +97,7 @@ t.create('no issues in sprint')
   })
 
 t.create('issue with null resolution value')
-  .get(`/https/jira.spring.io:8080/${sprintId}.json?style=_shields_test`)
+  .get(`/https/jira.spring.io:8080/${sprintId}.json`)
   .intercept(nock =>
     nock('https://jira.spring.io:8080/rest/api/2')
       .get('/search')
diff --git a/services/matrix/matrix.tester.js b/services/matrix/matrix.tester.js
index f24fb6e7c2..d6853010fd 100644
--- a/services/matrix/matrix.tester.js
+++ b/services/matrix/matrix.tester.js
@@ -4,7 +4,7 @@ const Joi = require('joi')
 const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('get room state as guest')
-  .get('/ALIAS:DUMMY.dumb.json?style=_shields_test')
+  .get('/ALIAS:DUMMY.dumb.json')
   .intercept(nock =>
     nock('https://DUMMY.dumb/')
       .post('/_matrix/client/r0/register?kind=guest')
@@ -75,7 +75,7 @@ t.create('get room state as guest')
   })
 
 t.create('get room state as member (backup method)')
-  .get('/ALIAS:DUMMY.dumb.json?style=_shields_test')
+  .get('/ALIAS:DUMMY.dumb.json')
   .intercept(nock =>
     nock('https://DUMMY.dumb/')
       .post('/_matrix/client/r0/register?kind=guest')
@@ -154,7 +154,7 @@ t.create('get room state as member (backup method)')
   })
 
 t.create('bad server or connection')
-  .get('/ALIAS:DUMMY.dumb.json?style=_shields_test')
+  .get('/ALIAS:DUMMY.dumb.json')
   .networkOff()
   .expectBadge({
     label: 'chat',
@@ -163,7 +163,7 @@ t.create('bad server or connection')
   })
 
 t.create('non-world readable room')
-  .get('/ALIAS:DUMMY.dumb.json?style=_shields_test')
+  .get('/ALIAS:DUMMY.dumb.json')
   .intercept(nock =>
     nock('https://DUMMY.dumb/')
       .post('/_matrix/client/r0/register?kind=guest')
@@ -200,7 +200,7 @@ t.create('non-world readable room')
   })
 
 t.create('invalid token')
-  .get('/ALIAS:DUMMY.dumb.json?style=_shields_test')
+  .get('/ALIAS:DUMMY.dumb.json')
   .intercept(nock =>
     nock('https://DUMMY.dumb/')
       .post('/_matrix/client/r0/register?kind=guest')
@@ -228,7 +228,7 @@ t.create('invalid token')
   })
 
 t.create('unknown request')
-  .get('/ALIAS:DUMMY.dumb.json?style=_shields_test')
+  .get('/ALIAS:DUMMY.dumb.json')
   .intercept(nock =>
     nock('https://DUMMY.dumb/')
       .post('/_matrix/client/r0/register?kind=guest')
@@ -265,7 +265,7 @@ t.create('unknown request')
   })
 
 t.create('unknown alias')
-  .get('/ALIAS:DUMMY.dumb.json?style=_shields_test')
+  .get('/ALIAS:DUMMY.dumb.json')
   .intercept(nock =>
     nock('https://DUMMY.dumb/')
       .post('/_matrix/client/r0/register?kind=guest')
@@ -293,7 +293,7 @@ t.create('unknown alias')
   })
 
 t.create('invalid alias')
-  .get('/ALIASDUMMY.dumb.json?style=_shields_test')
+  .get('/ALIASDUMMY.dumb.json')
   .expectBadge({
     label: 'chat',
     message: 'invalid alias',
@@ -301,7 +301,7 @@ t.create('invalid alias')
   })
 
 t.create('server uses a custom port')
-  .get('/ALIAS:DUMMY.dumb:5555.json?style=_shields_test')
+  .get('/ALIAS:DUMMY.dumb:5555.json')
   .intercept(nock =>
     nock('https://DUMMY.dumb:5555/')
       .post('/_matrix/client/r0/register?kind=guest')
@@ -372,9 +372,7 @@ t.create('server uses a custom port')
   })
 
 t.create('specify the homeserver fqdn')
-  .get(
-    '/ALIAS:DUMMY.dumb.json?style=_shields_test&server_fqdn=matrix.DUMMY.dumb'
-  )
+  .get('/ALIAS:DUMMY.dumb.json?server_fqdn=matrix.DUMMY.dumb')
   .intercept(nock =>
     nock('https://matrix.DUMMY.dumb/')
       .post('/_matrix/client/r0/register?kind=guest')
@@ -445,7 +443,7 @@ t.create('specify the homeserver fqdn')
   })
 
 t.create('test on real matrix room for API compliance')
-  .get('/twim:matrix.org.json?style=_shields_test')
+  .get('/twim:matrix.org.json')
   .timeout(10000)
   .expectBadge({
     label: 'chat',
diff --git a/services/mozilla-observatory/mozilla-observatory.tester.js b/services/mozilla-observatory/mozilla-observatory.tester.js
index 00899985b1..1c5921965a 100644
--- a/services/mozilla-observatory/mozilla-observatory.tester.js
+++ b/services/mozilla-observatory/mozilla-observatory.tester.js
@@ -6,7 +6,7 @@ const t = (module.exports = require('../tester').createServiceTester())
 const validColors = ['brightgreen', 'green', 'yellow', 'orange', 'red']
 
 t.create('request on observatory.mozilla.org')
-  .get('/grade-score/observatory.mozilla.org.json?style=_shields_test')
+  .get('/grade-score/observatory.mozilla.org.json')
   .expectBadge({
     label: 'observatory',
     message: Joi.string().regex(/^[ABCDEF][+-]? \([0-9]{1,3}\/100\)$/),
@@ -16,7 +16,7 @@ t.create('request on observatory.mozilla.org')
   })
 
 t.create('request on observatory.mozilla.org with inclusion in public results')
-  .get('/grade-score/observatory.mozilla.org.json?publish&style=_shields_test')
+  .get('/grade-score/observatory.mozilla.org.json?publish')
   .expectBadge({
     label: 'observatory',
     message: Joi.string().regex(/^[ABCDEF][+-]? \([0-9]{1,3}\/100\)$/),
@@ -26,7 +26,7 @@ t.create('request on observatory.mozilla.org with inclusion in public results')
   })
 
 t.create('grade without score (mock)')
-  .get('/grade/foo.bar.json?style=_shields_test')
+  .get('/grade/foo.bar.json')
   .intercept(nock =>
     nock('https://http-observatory.security.mozilla.org')
       .post('/api/v1/analyze?host=foo.bar')
@@ -39,7 +39,7 @@ t.create('grade without score (mock)')
   })
 
 t.create('grade A with score (mock)')
-  .get('/grade-score/foo.bar.json?style=_shields_test')
+  .get('/grade-score/foo.bar.json')
   .intercept(nock =>
     nock('https://http-observatory.security.mozilla.org')
       .post('/api/v1/analyze?host=foo.bar')
@@ -52,7 +52,7 @@ t.create('grade A with score (mock)')
   })
 
 t.create('grade A+ with score (mock)')
-  .get('/grade-score/foo.bar.json?style=_shields_test')
+  .get('/grade-score/foo.bar.json')
   .intercept(nock =>
     nock('https://http-observatory.security.mozilla.org')
       .post('/api/v1/analyze?host=foo.bar')
@@ -65,7 +65,7 @@ t.create('grade A+ with score (mock)')
   })
 
 t.create('grade A- with score (mock)')
-  .get('/grade-score/foo.bar.json?style=_shields_test')
+  .get('/grade-score/foo.bar.json')
   .intercept(nock =>
     nock('https://http-observatory.security.mozilla.org')
       .post('/api/v1/analyze?host=foo.bar')
@@ -78,7 +78,7 @@ t.create('grade A- with score (mock)')
   })
 
 t.create('grade B with score (mock)')
-  .get('/grade-score/foo.bar.json?style=_shields_test')
+  .get('/grade-score/foo.bar.json')
   .intercept(nock =>
     nock('https://http-observatory.security.mozilla.org')
       .post('/api/v1/analyze?host=foo.bar')
@@ -91,7 +91,7 @@ t.create('grade B with score (mock)')
   })
 
 t.create('grade B+ with score (mock)')
-  .get('/grade-score/foo.bar.json?style=_shields_test')
+  .get('/grade-score/foo.bar.json')
   .intercept(nock =>
     nock('https://http-observatory.security.mozilla.org')
       .post('/api/v1/analyze?host=foo.bar')
@@ -104,7 +104,7 @@ t.create('grade B+ with score (mock)')
   })
 
 t.create('grade B- with score (mock)')
-  .get('/grade-score/foo.bar.json?style=_shields_test')
+  .get('/grade-score/foo.bar.json')
   .intercept(nock =>
     nock('https://http-observatory.security.mozilla.org')
       .post('/api/v1/analyze?host=foo.bar')
@@ -117,7 +117,7 @@ t.create('grade B- with score (mock)')
   })
 
 t.create('grade C with score (mock)')
-  .get('/grade-score/foo.bar.json?style=_shields_test')
+  .get('/grade-score/foo.bar.json')
   .intercept(nock =>
     nock('https://http-observatory.security.mozilla.org')
       .post('/api/v1/analyze?host=foo.bar')
@@ -130,7 +130,7 @@ t.create('grade C with score (mock)')
   })
 
 t.create('grade C+ with score (mock)')
-  .get('/grade-score/foo.bar.json?style=_shields_test')
+  .get('/grade-score/foo.bar.json')
   .intercept(nock =>
     nock('https://http-observatory.security.mozilla.org')
       .post('/api/v1/analyze?host=foo.bar')
@@ -143,7 +143,7 @@ t.create('grade C+ with score (mock)')
   })
 
 t.create('grade C- with score (mock)')
-  .get('/grade-score/foo.bar.json?style=_shields_test')
+  .get('/grade-score/foo.bar.json')
   .intercept(nock =>
     nock('https://http-observatory.security.mozilla.org')
       .post('/api/v1/analyze?host=foo.bar')
@@ -156,7 +156,7 @@ t.create('grade C- with score (mock)')
   })
 
 t.create('grade D with score (mock)')
-  .get('/grade-score/foo.bar.json?style=_shields_test')
+  .get('/grade-score/foo.bar.json')
   .intercept(nock =>
     nock('https://http-observatory.security.mozilla.org')
       .post('/api/v1/analyze?host=foo.bar')
@@ -169,7 +169,7 @@ t.create('grade D with score (mock)')
   })
 
 t.create('grade D+ with score (mock)')
-  .get('/grade-score/foo.bar.json?style=_shields_test')
+  .get('/grade-score/foo.bar.json')
   .intercept(nock =>
     nock('https://http-observatory.security.mozilla.org')
       .post('/api/v1/analyze?host=foo.bar')
@@ -182,7 +182,7 @@ t.create('grade D+ with score (mock)')
   })
 
 t.create('grade D- with score (mock)')
-  .get('/grade-score/foo.bar.json?style=_shields_test')
+  .get('/grade-score/foo.bar.json')
   .intercept(nock =>
     nock('https://http-observatory.security.mozilla.org')
       .post('/api/v1/analyze?host=foo.bar')
@@ -195,7 +195,7 @@ t.create('grade D- with score (mock)')
   })
 
 t.create('grade E with score (mock)')
-  .get('/grade-score/foo.bar.json?style=_shields_test')
+  .get('/grade-score/foo.bar.json')
   .intercept(nock =>
     nock('https://http-observatory.security.mozilla.org')
       .post('/api/v1/analyze?host=foo.bar')
@@ -208,7 +208,7 @@ t.create('grade E with score (mock)')
   })
 
 t.create('grade E+ with score (mock)')
-  .get('/grade-score/foo.bar.json?style=_shields_test')
+  .get('/grade-score/foo.bar.json')
   .intercept(nock =>
     nock('https://http-observatory.security.mozilla.org')
       .post('/api/v1/analyze?host=foo.bar')
@@ -221,7 +221,7 @@ t.create('grade E+ with score (mock)')
   })
 
 t.create('grade E- with score (mock)')
-  .get('/grade-score/foo.bar.json?style=_shields_test')
+  .get('/grade-score/foo.bar.json')
   .intercept(nock =>
     nock('https://http-observatory.security.mozilla.org')
       .post('/api/v1/analyze?host=foo.bar')
@@ -234,7 +234,7 @@ t.create('grade E- with score (mock)')
   })
 
 t.create('grade F with score (mock)')
-  .get('/grade-score/foo.bar.json?style=_shields_test')
+  .get('/grade-score/foo.bar.json')
   .intercept(nock =>
     nock('https://http-observatory.security.mozilla.org')
       .post('/api/v1/analyze?host=foo.bar')
@@ -247,7 +247,7 @@ t.create('grade F with score (mock)')
   })
 
 t.create('aborted (mock)')
-  .get('/grade-score/foo.bar.json?style=_shields_test')
+  .get('/grade-score/foo.bar.json')
   .intercept(nock =>
     nock('https://http-observatory.security.mozilla.org')
       .post('/api/v1/analyze?host=foo.bar')
@@ -260,7 +260,7 @@ t.create('aborted (mock)')
   })
 
 t.create('failed (mock)')
-  .get('/grade-score/foo.bar.json?style=_shields_test')
+  .get('/grade-score/foo.bar.json')
   .intercept(nock =>
     nock('https://http-observatory.security.mozilla.org')
       .post('/api/v1/analyze?host=foo.bar')
@@ -273,7 +273,7 @@ t.create('failed (mock)')
   })
 
 t.create('pending (mock)')
-  .get('/grade-score/foo.bar.json?style=_shields_test')
+  .get('/grade-score/foo.bar.json')
   .intercept(nock =>
     nock('https://http-observatory.security.mozilla.org')
       .post('/api/v1/analyze?host=foo.bar')
@@ -286,7 +286,7 @@ t.create('pending (mock)')
   })
 
 t.create('starting (mock)')
-  .get('/grade-score/foo.bar.json?style=_shields_test')
+  .get('/grade-score/foo.bar.json')
   .intercept(nock =>
     nock('https://http-observatory.security.mozilla.org')
       .post('/api/v1/analyze?host=foo.bar')
@@ -299,7 +299,7 @@ t.create('starting (mock)')
   })
 
 t.create('running (mock)')
-  .get('/grade-score/foo.bar.json?style=_shields_test')
+  .get('/grade-score/foo.bar.json')
   .intercept(nock =>
     nock('https://http-observatory.security.mozilla.org')
       .post('/api/v1/analyze?host=foo.bar')
@@ -312,7 +312,7 @@ t.create('running (mock)')
   })
 
 t.create('invalid response with grade and score but not finished (mock)')
-  .get('/grade-score/foo.bar.json?style=_shields_test')
+  .get('/grade-score/foo.bar.json')
   .intercept(nock =>
     nock('https://http-observatory.security.mozilla.org')
       .post('/api/v1/analyze?host=foo.bar')
diff --git a/services/myget/myget.tester.js b/services/myget/myget.tester.js
index e9fa697263..47432ad777 100644
--- a/services/myget/myget.tester.js
+++ b/services/myget/myget.tester.js
@@ -78,7 +78,7 @@ t.create('total downloads (tenant)')
   })
 
 t.create('version (mocked, yellow badge)')
-  .get('/myget/mongodb/v/MongoDB.Driver.Core.json?style=_shields_test')
+  .get('/myget/mongodb/v/MongoDB.Driver.Core.json')
   .intercept(nock =>
     nock('https://www.myget.org')
       .get('/F/mongodb/api/v3/index.json')
@@ -98,7 +98,7 @@ t.create('version (mocked, yellow badge)')
   })
 
 t.create('version (mocked, orange badge)')
-  .get('/myget/mongodb/v/MongoDB.Driver.Core.json?style=_shields_test')
+  .get('/myget/mongodb/v/MongoDB.Driver.Core.json')
   .intercept(nock =>
     nock('https://www.myget.org')
       .get('/F/mongodb/api/v3/index.json')
@@ -118,7 +118,7 @@ t.create('version (mocked, orange badge)')
   })
 
 t.create('version (mocked, blue badge)')
-  .get('/myget/mongodb/v/MongoDB.Driver.Core.json?style=_shields_test')
+  .get('/myget/mongodb/v/MongoDB.Driver.Core.json')
   .intercept(nock =>
     nock('https://www.myget.org')
       .get('/F/mongodb/api/v3/index.json')
@@ -151,7 +151,7 @@ t.create('version (pre) (valid)')
   })
 
 t.create('version (pre) (mocked, yellow badge)')
-  .get('/myget/mongodb/vpre/MongoDB.Driver.Core.json?style=_shields_test')
+  .get('/myget/mongodb/vpre/MongoDB.Driver.Core.json')
   .intercept(nock =>
     nock('https://www.myget.org')
       .get('/F/mongodb/api/v3/index.json')
@@ -171,7 +171,7 @@ t.create('version (pre) (mocked, yellow badge)')
   })
 
 t.create('version (pre) (mocked, orange badge)')
-  .get('/myget/mongodb/vpre/MongoDB.Driver.Core.json?style=_shields_test')
+  .get('/myget/mongodb/vpre/MongoDB.Driver.Core.json')
   .intercept(nock =>
     nock('https://www.myget.org')
       .get('/F/mongodb/api/v3/index.json')
@@ -191,7 +191,7 @@ t.create('version (pre) (mocked, orange badge)')
   })
 
 t.create('version (pre) (mocked, blue badge)')
-  .get('/myget/mongodb/vpre/MongoDB.Driver.Core.json?style=_shields_test')
+  .get('/myget/mongodb/vpre/MongoDB.Driver.Core.json')
   .intercept(nock =>
     nock('https://www.myget.org')
       .get('/F/mongodb/api/v3/index.json')
diff --git a/services/nexus/nexus.tester.js b/services/nexus/nexus.tester.js
index c26e3ada2f..5916cf7c29 100644
--- a/services/nexus/nexus.tester.js
+++ b/services/nexus/nexus.tester.js
@@ -43,9 +43,7 @@ t.create('live: search snapshot version of a release artifact')
   .expectBadge({ label: 'nexus', message: 'no snapshot versions found' })
 
 t.create('live: search snapshot version of an inexistent artifact')
-  .get(
-    '/s/https/repository.jboss.org/nexus/jboss/inexistent-artifact-id.json?style=_shields_test'
-  )
+  .get('/s/https/repository.jboss.org/nexus/jboss/inexistent-artifact-id.json')
   .expectBadge({
     label: 'nexus',
     message: 'artifact or version not found',
@@ -78,9 +76,7 @@ t.create('live: repository version of an inexistent artifact')
   })
 
 t.create('snapshot version with + in version')
-  .get(
-    '/s/https/repository.jboss.org/nexus/com.progress.fuse/fusehq.json?style=_shields_test'
-  )
+  .get('/s/https/repository.jboss.org/nexus/com.progress.fuse/fusehq.json')
   .intercept(nock =>
     nock('https://repository.jboss.org/nexus')
       .get('/service/local/lucene/search')
@@ -94,9 +90,7 @@ t.create('snapshot version with + in version')
   })
 
 t.create('search snapshot version not in latestSnapshot')
-  .get(
-    '/s/https/repository.jboss.org/nexus/com.progress.fuse/fusehq.json?style=_shields_test'
-  )
+  .get('/s/https/repository.jboss.org/nexus/com.progress.fuse/fusehq.json')
   .intercept(nock =>
     nock('https://repository.jboss.org/nexus')
       .get('/service/local/lucene/search')
@@ -110,9 +104,7 @@ t.create('search snapshot version not in latestSnapshot')
   })
 
 t.create('search snapshot no snapshot versions')
-  .get(
-    '/s/https/repository.jboss.org/nexus/com.progress.fuse/fusehq.json?style=_shields_test'
-  )
+  .get('/s/https/repository.jboss.org/nexus/com.progress.fuse/fusehq.json')
   .intercept(nock =>
     nock('https://repository.jboss.org/nexus')
       .get('/service/local/lucene/search')
@@ -126,9 +118,7 @@ t.create('search snapshot no snapshot versions')
   })
 
 t.create('search release version')
-  .get(
-    '/r/https/repository.jboss.org/nexus/jboss/jboss-client.json?style=_shields_test'
-  )
+  .get('/r/https/repository.jboss.org/nexus/jboss/jboss-client.json')
   .intercept(nock =>
     nock('https://repository.jboss.org/nexus')
       .get('/service/local/lucene/search')
@@ -142,9 +132,7 @@ t.create('search release version')
   })
 
 t.create('repository release version')
-  .get(
-    '/developer/https/repository.jboss.org/nexus/ai.h2o/h2o-automl.json?style=_shields_test'
-  )
+  .get('/developer/https/repository.jboss.org/nexus/ai.h2o/h2o-automl.json')
   .intercept(nock =>
     nock('https://repository.jboss.org/nexus')
       .get('/service/local/artifact/maven/resolve')
@@ -168,9 +156,7 @@ t.create('repository release version')
   })
 
 t.create('repository release version')
-  .get(
-    '/developer/https/repository.jboss.org/nexus/ai.h2o/h2o-automl.json?style=_shields_test'
-  )
+  .get('/developer/https/repository.jboss.org/nexus/ai.h2o/h2o-automl.json')
   .intercept(nock =>
     nock('https://repository.jboss.org/nexus')
       .get('/service/local/artifact/maven/resolve')
@@ -194,7 +180,7 @@ t.create('repository release version')
 
 t.create('user query params')
   .get(
-    '/fs-public-snapshots/https/repository.jboss.org/nexus/com.progress.fuse/fusehq:c=agent-apple-osx:p=tar.gz.json?style=_shields_test'
+    '/fs-public-snapshots/https/repository.jboss.org/nexus/com.progress.fuse/fusehq:c=agent-apple-osx:p=tar.gz.json'
   )
   .intercept(nock =>
     nock('https://repository.jboss.org/nexus')
@@ -221,9 +207,7 @@ t.create('user query params')
 
 t.create('auth')
   .before(mockNexusCreds)
-  .get(
-    '/r/https/repository.jboss.org/nexus/jboss/jboss-client.json?style=_shields_test'
-  )
+  .get('/r/https/repository.jboss.org/nexus/jboss/jboss-client.json')
   .intercept(nock =>
     nock('https://repository.jboss.org/nexus')
       .get('/service/local/lucene/search')
diff --git a/services/nodeping/nodeping-status.tester.js b/services/nodeping/nodeping-status.tester.js
index f10eb170c5..da4e5691a1 100644
--- a/services/nodeping/nodeping-status.tester.js
+++ b/services/nodeping/nodeping-status.tester.js
@@ -40,7 +40,7 @@ t.create('NodePing status - down (mock)')
 
 t.create('NodePing status - custom up color/message')
   .get(
-    '/jkiwn052-ntpp-4lbb-8d45-ihew6d9ucoei.json?style=_shields_test&up_color=blue&up_message=happy'
+    '/jkiwn052-ntpp-4lbb-8d45-ihew6d9ucoei.json?up_color=blue&up_message=happy'
   )
   .intercept(nock =>
     nock('https://nodeping.com')
@@ -57,7 +57,7 @@ t.create('NodePing status - custom up color/message')
 
 t.create('NodePing status - custom down color/message')
   .get(
-    '/jkiwn052-ntpp-4lbb-8d45-ihew6d9ucoei.json?style=_shields_test&down_color=yellow&down_message=sad'
+    '/jkiwn052-ntpp-4lbb-8d45-ihew6d9ucoei.json?down_color=yellow&down_message=sad'
   )
   .intercept(nock =>
     nock('https://nodeping.com')
diff --git a/services/nodeping/nodeping-uptime.tester.js b/services/nodeping/nodeping-uptime.tester.js
index cd034ff1ee..6d1dc75e72 100644
--- a/services/nodeping/nodeping-uptime.tester.js
+++ b/services/nodeping/nodeping-uptime.tester.js
@@ -11,7 +11,7 @@ t.create('NodePing uptime - live')
   })
 
 t.create('NodePing uptime - 100% (mock)')
-  .get('/jkiwn052-ntpp-4lbb-8d45-ihew6d9ucoei.json?style=_shields_test')
+  .get('/jkiwn052-ntpp-4lbb-8d45-ihew6d9ucoei.json')
   .intercept(nock =>
     nock('https://nodeping.com')
       .get(
@@ -30,7 +30,7 @@ t.create('NodePing uptime - 100% (mock)')
   })
 
 t.create('NodePing uptime - 99.999% (mock)')
-  .get('/jkiwn052-ntpp-4lbb-8d45-ihew6d9ucoei.json?style=_shields_test')
+  .get('/jkiwn052-ntpp-4lbb-8d45-ihew6d9ucoei.json')
   .intercept(nock =>
     nock('https://nodeping.com')
       .get(
@@ -49,7 +49,7 @@ t.create('NodePing uptime - 99.999% (mock)')
   })
 
 t.create('NodePing uptime - 99.001% (mock)')
-  .get('/jkiwn052-ntpp-4lbb-8d45-ihew6d9ucoei.json?style=_shields_test')
+  .get('/jkiwn052-ntpp-4lbb-8d45-ihew6d9ucoei.json')
   .intercept(nock =>
     nock('https://nodeping.com')
       .get(
@@ -68,7 +68,7 @@ t.create('NodePing uptime - 99.001% (mock)')
   })
 
 t.create('NodePing uptime - 90.001% (mock)')
-  .get('/jkiwn052-ntpp-4lbb-8d45-ihew6d9ucoei.json?style=_shields_test')
+  .get('/jkiwn052-ntpp-4lbb-8d45-ihew6d9ucoei.json')
   .intercept(nock =>
     nock('https://nodeping.com')
       .get(
diff --git a/services/npm/npm-downloads.tester.js b/services/npm/npm-downloads.tester.js
index 428e6b0ad4..6fa58d3212 100644
--- a/services/npm/npm-downloads.tester.js
+++ b/services/npm/npm-downloads.tester.js
@@ -11,7 +11,7 @@ const t = new ServiceTester({
 module.exports = t
 
 t.create('total downloads of left-pad')
-  .get('/dt/left-pad.json?style=_shields_test')
+  .get('/dt/left-pad.json')
   .expectBadge({
     label: 'downloads',
     message: isMetric,
@@ -23,7 +23,7 @@ t.create('total downloads of @cycle/core')
   .expectBadge({ label: 'downloads', message: isMetric })
 
 t.create('total downloads of package with zero downloads')
-  .get('/dt/package-no-downloads.json?style=_shields_test')
+  .get('/dt/package-no-downloads.json')
   .intercept(nock =>
     nock('https://api.npmjs.org')
       .get('/downloads/range/1000-01-01:3000-01-01/package-no-downloads')
@@ -48,7 +48,7 @@ t.create('exact total downloads value')
   .expectBadge({ label: 'downloads', message: '5' })
 
 t.create('total downloads of unknown package')
-  .get('/dt/npm-api-does-not-have-this-package.json?style=_shields_test')
+  .get('/dt/npm-api-does-not-have-this-package.json')
   .expectBadge({
     label: 'downloads',
     message: 'package not found or too new',
diff --git a/services/npm/npm-license.tester.js b/services/npm/npm-license.tester.js
index a9c74a7580..d30c5783b3 100644
--- a/services/npm/npm-license.tester.js
+++ b/services/npm/npm-license.tester.js
@@ -11,25 +11,25 @@ t.create('gets the license of express from a custom registry')
   .expectBadge({ label: 'license', message: 'MIT' })
 
 t.create('public domain license')
-  .get('/redux-auth.json?style=_shields_test')
+  .get('/redux-auth.json')
   .expectBadge({ label: 'license', message: 'WTFPL', color: '#7cd958' })
 
 t.create('copyleft license')
-  .get('/trianglify.json?style=_shields_test')
+  .get('/trianglify.json')
   .expectBadge({ label: 'license', message: 'GPL-3.0', color: 'orange' })
 
 t.create('permissive license')
-  .get('/express.json?style=_shields_test')
+  .get('/express.json')
   .expectBadge({ label: 'license', message: 'MIT', color: 'green' })
 
 t.create('permissive license for scoped package')
-  .get('/@cycle%2Fcore.json?style=_shields_test')
+  .get('/@cycle%2Fcore.json')
   .expectBadge({ label: 'license', message: 'MIT', color: 'green' })
 
 t.create(
   'permissive and copyleft licenses (SPDX license expression syntax version 2.0)'
 )
-  .get('/rho-cc-promise.json?style=_shields_test')
+  .get('/rho-cc-promise.json')
   .expectBadge({
     label: 'license',
     message: '(MPL-2.0 OR MIT)',
@@ -37,7 +37,7 @@ t.create(
   })
 
 t.create('license for package without a license property')
-  .get('/package-without-license.json?style=_shields_test')
+  .get('/package-without-license.json')
   .intercept(nock =>
     nock('https://registry.npmjs.org')
       .get('/package-without-license/latest')
@@ -49,7 +49,7 @@ t.create('license for package without a license property')
   .expectBadge({ label: 'license', message: 'missing', color: 'red' })
 
 t.create('license for package with a license object')
-  .get('/package-license-object.json?style=_shields_test')
+  .get('/package-license-object.json')
   .intercept(nock =>
     nock('https://registry.npmjs.org')
       .get('/package-license-object/latest')
@@ -65,7 +65,7 @@ t.create('license for package with a license object')
   .expectBadge({ label: 'license', message: 'MIT', color: 'green' })
 
 t.create('license for package with a license array')
-  .get('/package-license-array.json?style=_shields_test')
+  .get('/package-license-array.json')
   .intercept(nock =>
     nock('https://registry.npmjs.org')
       .get('/package-license-array/latest')
@@ -82,7 +82,7 @@ t.create('license for package with a license array')
   })
 
 t.create('license for unknown package')
-  .get('/npm-registry-does-not-have-this-package.json?style=_shields_test')
+  .get('/npm-registry-does-not-have-this-package.json')
   .expectBadge({
     label: 'license',
     message: 'package not found',
diff --git a/services/nuget/nuget.tester.js b/services/nuget/nuget.tester.js
index 77b63bdfbd..5027e581e0 100644
--- a/services/nuget/nuget.tester.js
+++ b/services/nuget/nuget.tester.js
@@ -55,7 +55,7 @@ t.create('version (valid)')
   })
 
 t.create('version (mocked, yellow badge)')
-  .get('/v/Microsoft.AspNetCore.Mvc.json?style=_shields_test')
+  .get('/v/Microsoft.AspNetCore.Mvc.json')
   .intercept(nock =>
     nock('https://api.nuget.org')
       .get('/v3/index.json')
@@ -75,7 +75,7 @@ t.create('version (mocked, yellow badge)')
   })
 
 t.create('version (mocked, orange badge)')
-  .get('/v/Microsoft.AspNetCore.Mvc.json?style=_shields_test')
+  .get('/v/Microsoft.AspNetCore.Mvc.json')
   .intercept(nock =>
     nock('https://api.nuget.org')
       .get('/v3/index.json')
@@ -95,7 +95,7 @@ t.create('version (mocked, orange badge)')
   })
 
 t.create('version (mocked, blue badge)')
-  .get('/v/Microsoft.AspNetCore.Mvc.json?style=_shields_test')
+  .get('/v/Microsoft.AspNetCore.Mvc.json')
   .intercept(nock =>
     nock('https://api.nuget.org')
       .get('/v3/index.json')
@@ -144,7 +144,7 @@ t.create('version (pre) (valid)')
   })
 
 t.create('version (pre) (mocked, yellow badge)')
-  .get('/vpre/Microsoft.AspNetCore.Mvc.json?style=_shields_test')
+  .get('/vpre/Microsoft.AspNetCore.Mvc.json')
   .intercept(nock =>
     nock('https://api.nuget.org')
       .get('/v3/index.json')
@@ -164,7 +164,7 @@ t.create('version (pre) (mocked, yellow badge)')
   })
 
 t.create('version (pre) (mocked, orange badge)')
-  .get('/vpre/Microsoft.AspNetCore.Mvc.json?style=_shields_test')
+  .get('/vpre/Microsoft.AspNetCore.Mvc.json')
   .intercept(nock =>
     nock('https://api.nuget.org')
       .get('/v3/index.json')
@@ -184,7 +184,7 @@ t.create('version (pre) (mocked, orange badge)')
   })
 
 t.create('version (pre) (mocked, blue badge)')
-  .get('/vpre/Microsoft.AspNetCore.Mvc.json?style=_shields_test')
+  .get('/vpre/Microsoft.AspNetCore.Mvc.json')
   .intercept(nock =>
     nock('https://api.nuget.org')
       .get('/v3/index.json')
diff --git a/services/opencollective/opencollective-all.tester.js b/services/opencollective/opencollective-all.tester.js
index 4e0d8d192a..c4584349f9 100644
--- a/services/opencollective/opencollective-all.tester.js
+++ b/services/opencollective/opencollective-all.tester.js
@@ -4,7 +4,7 @@ const { nonNegativeInteger } = require('../validators')
 const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('renders correctly')
-  .get('/shields.json?style=_shields_test')
+  .get('/shields.json')
   .intercept(nock =>
     nock('https://opencollective.com/')
       .get('/shields.json')
@@ -32,7 +32,7 @@ t.create('gets amount of backers and sponsors')
   })
 
 t.create('renders not found correctly')
-  .get('/nonexistent-collective.json?style=_shields_test')
+  .get('/nonexistent-collective.json')
   .intercept(nock =>
     nock('https://opencollective.com/')
       .get('/nonexistent-collective.json')
@@ -45,7 +45,7 @@ t.create('renders not found correctly')
   })
 
 t.create('handles not found correctly')
-  .get('/nonexistent-collective.json?style=_shields_test')
+  .get('/nonexistent-collective.json')
   .expectBadge({
     label: 'backers and sponsors',
     message: 'collective not found',
diff --git a/services/opencollective/opencollective-backers.tester.js b/services/opencollective/opencollective-backers.tester.js
index 246829a191..fbdaf1bfbe 100644
--- a/services/opencollective/opencollective-backers.tester.js
+++ b/services/opencollective/opencollective-backers.tester.js
@@ -4,7 +4,7 @@ const { nonNegativeInteger } = require('../validators')
 const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('renders correctly')
-  .get('/shields.json?style=_shields_test')
+  .get('/shields.json')
   .intercept(nock =>
     nock('https://opencollective.com/')
       .get('/shields/members/users.json')
@@ -85,7 +85,7 @@ t.create('gets amount of backers')
   })
 
 t.create('handles not found correctly')
-  .get('/nonexistent-collective.json?style=_shields_test')
+  .get('/nonexistent-collective.json')
   .expectBadge({
     label: 'backers',
     message: 'collective not found',
diff --git a/services/opencollective/opencollective-by-tier.tester.js b/services/opencollective/opencollective-by-tier.tester.js
index b202281de4..d2b53a8d4e 100644
--- a/services/opencollective/opencollective-by-tier.tester.js
+++ b/services/opencollective/opencollective-by-tier.tester.js
@@ -4,7 +4,7 @@ const { nonNegativeInteger } = require('../validators')
 const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('renders correctly')
-  .get('/shields/2988.json?style=_shields_test')
+  .get('/shields/2988.json')
   .intercept(nock =>
     nock('https://opencollective.com/')
       .get('/shields/members/all.json?TierId=2988')
@@ -67,7 +67,7 @@ t.create('renders correctly')
 
 // Not ideal, but open collective only returns an empty array
 t.create('shows 0 when given a non existent tier')
-  .get('/shields/1234567890.json?style=_shields_test')
+  .get('/shields/1234567890.json')
   .intercept(nock =>
     nock('https://opencollective.com/')
       .get('/shields/members/all.json?TierId=1234567890')
@@ -87,7 +87,7 @@ t.create('gets amount of backers in specified tier')
   })
 
 t.create('handles not found correctly')
-  .get('/nonexistent-collective/1234.json?style=_shields_test')
+  .get('/nonexistent-collective/1234.json')
   .expectBadge({
     label: 'open collective',
     message: 'collective not found',
diff --git a/services/opencollective/opencollective-sponsors.tester.js b/services/opencollective/opencollective-sponsors.tester.js
index 34ab73d30b..68d740f5c9 100644
--- a/services/opencollective/opencollective-sponsors.tester.js
+++ b/services/opencollective/opencollective-sponsors.tester.js
@@ -4,7 +4,7 @@ const { nonNegativeInteger } = require('../validators')
 const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('renders correctly')
-  .get('/shields.json?style=_shields_test')
+  .get('/shields.json')
   .intercept(nock =>
     nock('https://opencollective.com/')
       .get('/shields/members/organizations.json')
@@ -76,7 +76,7 @@ t.create('gets amount of sponsors')
   })
 
 t.create('handles not found correctly')
-  .get('/nonexistent-collective.json?style=_shields_test')
+  .get('/nonexistent-collective.json')
   .expectBadge({
     label: 'sponsors',
     message: 'collective not found',
diff --git a/services/scrutinizer/scrutinizer.tester.js b/services/scrutinizer/scrutinizer.tester.js
index 53b2ee6963..8dff6ccda7 100644
--- a/services/scrutinizer/scrutinizer.tester.js
+++ b/services/scrutinizer/scrutinizer.tester.js
@@ -79,7 +79,7 @@ t.create('unexpected response data')
   })
 
 t.create('build - unknown')
-  .get('/build/g/filp/whoops.json?style=_shields_test')
+  .get('/build/g/filp/whoops.json')
   .intercept(nock =>
     nock('https://scrutinizer-ci.com')
       .get('/api/repositories/g/filp/whoops')
diff --git a/services/snyk/snyk-vulnerability-github.tester.js b/services/snyk/snyk-vulnerability-github.tester.js
index edb43f5cae..6a73abcaae 100644
--- a/services/snyk/snyk-vulnerability-github.tester.js
+++ b/services/snyk/snyk-vulnerability-github.tester.js
@@ -40,7 +40,7 @@ t.create('live: invalid target manifest path')
   })
 
 t.create('repo has no vulnerabilities')
-  .get('/badges/shields.json?style=_shields_test')
+  .get('/badges/shields.json')
   .intercept(nock =>
     nock('https://snyk.io/test/github/badges/shields')
       .get('/badge.svg')
@@ -53,7 +53,7 @@ t.create('repo has no vulnerabilities')
   })
 
 t.create('repo has vulnerabilities')
-  .get('/badges/shields.json?style=_shields_test')
+  .get('/badges/shields.json')
   .intercept(nock =>
     nock('https://snyk.io/test/github/badges/shields')
       .get('/badge.svg')
@@ -66,7 +66,7 @@ t.create('repo has vulnerabilities')
   })
 
 t.create('target manifest file has no vulnerabilities')
-  .get('/badges/shields/gh-badges/package.json.json?style=_shields_test')
+  .get('/badges/shields/gh-badges/package.json.json')
   .intercept(nock =>
     nock('https://snyk.io/test/github/badges/shields')
       .get('/badge.svg')
@@ -82,7 +82,7 @@ t.create('target manifest file has no vulnerabilities')
   })
 
 t.create('target manifest file has vulnerabilities')
-  .get('/badges/shields/gh-badges/package.json.json?style=_shields_test')
+  .get('/badges/shields/gh-badges/package.json.json')
   .intercept(nock =>
     nock('https://snyk.io/test/github/badges/shields')
       .get('/badge.svg')
diff --git a/services/snyk/snyk-vulnerability-npm.tester.js b/services/snyk/snyk-vulnerability-npm.tester.js
index 47cef0b4d7..8dc8f62851 100644
--- a/services/snyk/snyk-vulnerability-npm.tester.js
+++ b/services/snyk/snyk-vulnerability-npm.tester.js
@@ -32,7 +32,7 @@ t.create('live: non existent package')
   })
 
 t.create('live: valid package specific version')
-  .get('/mocha@4.0.0.json?style=_shields_test')
+  .get('/mocha@4.0.0.json')
   .timeout(10000)
   .expectBadge({
     label: 'vulnerabilities',
@@ -49,7 +49,7 @@ t.create('live: non existent package version')
   })
 
 t.create('package has no vulnerabilities')
-  .get('/mocha.json?style=_shields_test')
+  .get('/mocha.json')
   .intercept(nock =>
     nock('https://snyk.io/test/npm/mocha')
       .get('/badge.svg')
@@ -62,7 +62,7 @@ t.create('package has no vulnerabilities')
   })
 
 t.create('package has vulnerabilities')
-  .get('/mocha.json?style=_shields_test')
+  .get('/mocha.json')
   .intercept(nock =>
     nock('https://snyk.io/test/npm/mocha')
       .get('/badge.svg')
@@ -75,7 +75,7 @@ t.create('package has vulnerabilities')
   })
 
 t.create('package not found')
-  .get('/not-mocha-fake-ish@13.0.0.json?style=_shields_test')
+  .get('/not-mocha-fake-ish@13.0.0.json')
   .intercept(nock =>
     nock('https://snyk.io/test/npm/not-mocha-fake-ish@13.0.0')
       .get('/badge.svg')
diff --git a/services/static-badge/query-string-static.tester.js b/services/static-badge/query-string-static.tester.js
index c754a97a85..2e1e7602a6 100644
--- a/services/static-badge/query-string-static.tester.js
+++ b/services/static-badge/query-string-static.tester.js
@@ -3,7 +3,7 @@
 const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('Missing message')
-  .get('/static/v1.json?label=label&message=&color=blue&style=_shields_test')
+  .get('/static/v1.json?label=label&message=&color=blue')
   .expectBadge({
     label: 'label',
     message: 'invalid query parameter: message',
@@ -11,29 +11,21 @@ t.create('Missing message')
   })
 
 t.create('Missing label')
-  .get('/static/v1.json?label=&message=message&color=blue&style=_shields_test')
+  .get('/static/v1.json?label=&message=message&color=blue')
   .expectBadge({ label: '', message: 'message', color: 'blue' })
 
 t.create('Case is preserved')
-  .get(
-    '/static/v1.json?label=LiCeNsE&message=mIt&color=blue&style=_shields_test'
-  )
+  .get('/static/v1.json?label=LiCeNsE&message=mIt&color=blue')
   .expectBadge({ label: 'LiCeNsE', message: 'mIt', color: 'blue' })
 
 t.create('Set color')
-  .get(
-    '/static/v1.json?label=label&message=message&color=yellow&style=_shields_test'
-  )
+  .get('/static/v1.json?label=label&message=message&color=yellow')
   .expectBadge({ label: 'label', message: 'message', color: 'yellow' })
 
 t.create('Set color with a number')
-  .get(
-    '/static/v1.json?label=label&message=message&color=123&style=_shields_test'
-  )
+  .get('/static/v1.json?label=label&message=message&color=123')
   .expectBadge({ label: 'label', message: 'message', color: '#123' })
 
 t.create('Set label')
-  .get(
-    '/static/v1.json?label=mylabel&message=message&color=blue&style=_shields_test'
-  )
+  .get('/static/v1.json?label=mylabel&message=message&color=blue')
   .expectBadge({ label: 'mylabel', message: 'message', color: 'blue' })
diff --git a/services/static-badge/static-badge.tester.js b/services/static-badge/static-badge.tester.js
index affe3ecb5a..807cd505de 100644
--- a/services/static-badge/static-badge.tester.js
+++ b/services/static-badge/static-badge.tester.js
@@ -3,15 +3,15 @@
 const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('Shields colorscheme color')
-  .get('/badge/label-message-blue.json?style=_shields_test')
+  .get('/badge/label-message-blue.json')
   .expectBadge({ label: 'label', message: 'message', color: 'blue' })
 
 t.create('CSS named color')
-  .get('/badge/label-message-whitesmoke.json?style=_shields_test')
+  .get('/badge/label-message-whitesmoke.json')
   .expectBadge({ label: 'label', message: 'message', color: 'whitesmoke' })
 
 t.create('RGB color')
-  .get('/badge/label-message-rgb(123,123,123).json?style=_shields_test')
+  .get('/badge/label-message-rgb(123,123,123).json')
   .expectBadge({
     label: 'label',
     message: 'message',
@@ -19,43 +19,43 @@ t.create('RGB color')
   })
 
 t.create('All one color')
-  .get('/badge/all%20one%20color-red.json?style=_shields_test')
+  .get('/badge/all%20one%20color-red.json')
   .expectBadge({ label: '', message: 'all one color', color: 'red' })
 
 t.create('Not a valid color')
-  .get('/badge/label-message-notacolor.json?style=_shields_test')
+  .get('/badge/label-message-notacolor.json')
   .expectBadge({ label: 'label', message: 'message', color: null })
 
 t.create('Missing message')
-  .get('/badge/label--blue.json?style=_shields_test')
+  .get('/badge/label--blue.json')
   .expectBadge({ label: 'label', message: '', color: 'blue' })
 
 t.create('Missing label')
-  .get('/badge/-message-blue.json?style=_shields_test')
+  .get('/badge/-message-blue.json')
   .expectBadge({ label: '', message: 'message', color: 'blue' })
 
 t.create('Case is preserved')
-  .get('/badge/LiCeNsE-mIt-blue.json?style=_shields_test')
+  .get('/badge/LiCeNsE-mIt-blue.json')
   .expectBadge({ label: 'LiCeNsE', message: 'mIt', color: 'blue' })
 
 t.create('"Shields-encoded" dash')
-  .get('/badge/best--license-Apache--2.0-blue.json?style=_shields_test')
+  .get('/badge/best--license-Apache--2.0-blue.json')
   .expectBadge({ label: 'best-license', message: 'Apache-2.0', color: 'blue' })
 
 t.create('Override color')
-  .get('/badge/label-message-blue.json?style=_shields_test&color=yellow')
+  .get('/badge/label-message-blue.json?color=yellow')
   .expectBadge({ label: 'label', message: 'message', color: 'yellow' })
 
 t.create('Override color (legacy)')
-  .get('/badge/label-message-blue.json?style=_shields_test&colorB=yellow')
+  .get('/badge/label-message-blue.json?colorB=yellow')
   .expectBadge({ label: 'label', message: 'message', color: 'yellow' })
 
 t.create('Override color with a number')
-  .get('/badge/label-message-blue.json?style=_shields_test&color=123')
+  .get('/badge/label-message-blue.json?color=123')
   .expectBadge({ label: 'label', message: 'message', color: '#123' })
 
 t.create('Override label')
-  .get('/badge/label-message-blue.json?style=_shields_test&label=mylabel')
+  .get('/badge/label-message-blue.json?label=mylabel')
   .expectBadge({ label: 'mylabel', message: 'message', color: 'blue' })
 
 t.create('Old static badge')
diff --git a/services/swagger/swagger.tester.js b/services/swagger/swagger.tester.js
index e83086509a..5c73d8d24a 100644
--- a/services/swagger/swagger.tester.js
+++ b/services/swagger/swagger.tester.js
@@ -1,6 +1,6 @@
 'use strict'
 
-const getURL = '/https/example.com/example.json.json?style=_shields_test'
+const getURL = '/https/example.com/example.json.json'
 const apiURL = 'http://online.swagger.io'
 const apiGetURL = '/validator/debug'
 const apiGetQueryParams = { url: 'https://example.com/example.json' }
diff --git a/services/symfony/symfony-insight-grade.tester.js b/services/symfony/symfony-insight-grade.tester.js
index 9ed3c3a4c7..7e742e2817 100644
--- a/services/symfony/symfony-insight-grade.tester.js
+++ b/services/symfony/symfony-insight-grade.tester.js
@@ -63,7 +63,7 @@ createTest(t, '401 not authorized grade')
   })
 
 createTest(t, 'pending project grade')
-  .get(`/${sampleProjectUuid}.json?style=_shields_test`)
+  .get(`/${sampleProjectUuid}.json`)
   .intercept(nock =>
     nock('https://insight.symfony.com/api/projects')
       .get(`/${sampleProjectUuid}`)
@@ -76,7 +76,7 @@ createTest(t, 'pending project grade')
   })
 
 createTest(t, 'platinum grade')
-  .get(`/${sampleProjectUuid}.json?style=_shields_test`)
+  .get(`/${sampleProjectUuid}.json`)
   .intercept(nock =>
     nock('https://insight.symfony.com/api/projects')
       .get(`/${sampleProjectUuid}`)
@@ -89,7 +89,7 @@ createTest(t, 'platinum grade')
   })
 
 createTest(t, 'gold grade')
-  .get(`/${sampleProjectUuid}.json?style=_shields_test`)
+  .get(`/${sampleProjectUuid}.json`)
   .intercept(nock =>
     nock('https://insight.symfony.com/api/projects')
       .get(`/${sampleProjectUuid}`)
@@ -102,7 +102,7 @@ createTest(t, 'gold grade')
   })
 
 createTest(t, 'silver grade')
-  .get(`/${sampleProjectUuid}.json?style=_shields_test`)
+  .get(`/${sampleProjectUuid}.json`)
   .intercept(nock =>
     nock('https://insight.symfony.com/api/projects')
       .get(`/${sampleProjectUuid}`)
@@ -115,7 +115,7 @@ createTest(t, 'silver grade')
   })
 
 createTest(t, 'bronze grade')
-  .get(`/${sampleProjectUuid}.json?style=_shields_test`)
+  .get(`/${sampleProjectUuid}.json`)
   .intercept(nock =>
     nock('https://insight.symfony.com/api/projects')
       .get(`/${sampleProjectUuid}`)
@@ -128,7 +128,7 @@ createTest(t, 'bronze grade')
   })
 
 createTest(t, 'no medal grade')
-  .get(`/${sampleProjectUuid}.json?style=_shields_test`)
+  .get(`/${sampleProjectUuid}.json`)
   .intercept(nock =>
     nock('https://insight.symfony.com/api/projects')
       .get(`/${sampleProjectUuid}`)
diff --git a/services/symfony/symfony-insight-stars.tester.js b/services/symfony/symfony-insight-stars.tester.js
index eab0931ad6..d6eac18b92 100644
--- a/services/symfony/symfony-insight-stars.tester.js
+++ b/services/symfony/symfony-insight-stars.tester.js
@@ -45,7 +45,7 @@ createTest(t, 'live (stars): nonexistent project', { withMockCreds: false })
   })
 
 createTest(t, 'pending project stars')
-  .get(`/${sampleProjectUuid}.json?style=_shields_test`)
+  .get(`/${sampleProjectUuid}.json`)
   .intercept(nock =>
     nock('https://insight.symfony.com/api/projects')
       .get(`/${sampleProjectUuid}`)
@@ -58,7 +58,7 @@ createTest(t, 'pending project stars')
   })
 
 createTest(t, 'platinum stars')
-  .get(`/${sampleProjectUuid}.json?style=_shields_test`)
+  .get(`/${sampleProjectUuid}.json`)
   .intercept(nock =>
     nock('https://insight.symfony.com/api/projects')
       .get(`/${sampleProjectUuid}`)
@@ -71,7 +71,7 @@ createTest(t, 'platinum stars')
   })
 
 createTest(t, 'gold stars')
-  .get(`/${sampleProjectUuid}.json?style=_shields_test`)
+  .get(`/${sampleProjectUuid}.json`)
   .intercept(nock =>
     nock('https://insight.symfony.com/api/projects')
       .get(`/${sampleProjectUuid}`)
@@ -84,7 +84,7 @@ createTest(t, 'gold stars')
   })
 
 createTest(t, 'silver stars')
-  .get(`/${sampleProjectUuid}.json?style=_shields_test`)
+  .get(`/${sampleProjectUuid}.json`)
   .intercept(nock =>
     nock('https://insight.symfony.com/api/projects')
       .get(`/${sampleProjectUuid}`)
@@ -97,7 +97,7 @@ createTest(t, 'silver stars')
   })
 
 createTest(t, 'bronze stars')
-  .get(`/${sampleProjectUuid}.json?style=_shields_test`)
+  .get(`/${sampleProjectUuid}.json`)
   .intercept(nock =>
     nock('https://insight.symfony.com/api/projects')
       .get(`/${sampleProjectUuid}`)
@@ -110,7 +110,7 @@ createTest(t, 'bronze stars')
   })
 
 createTest(t, 'no medal stars')
-  .get(`/${sampleProjectUuid}.json?style=_shields_test`)
+  .get(`/${sampleProjectUuid}.json`)
   .intercept(nock =>
     nock('https://insight.symfony.com/api/projects')
       .get(`/${sampleProjectUuid}`)
diff --git a/services/symfony/symfony-insight-violations.tester.js b/services/symfony/symfony-insight-violations.tester.js
index ddb87a9a47..145cdd513a 100644
--- a/services/symfony/symfony-insight-violations.tester.js
+++ b/services/symfony/symfony-insight-violations.tester.js
@@ -35,7 +35,7 @@ createTest(t, 'live: valid project violations', { withMockCreds: false })
   })
 
 createTest(t, 'pending project grade')
-  .get(`/${sampleProjectUuid}.json?style=_shields_test`)
+  .get(`/${sampleProjectUuid}.json`)
   .intercept(nock =>
     nock('https://insight.symfony.com/api/projects')
       .get(`/${sampleProjectUuid}`)
@@ -48,7 +48,7 @@ createTest(t, 'pending project grade')
   })
 
 createTest(t, 'zero violations')
-  .get(`/${sampleProjectUuid}.json?style=_shields_test`)
+  .get(`/${sampleProjectUuid}.json`)
   .intercept(nock =>
     nock('https://insight.symfony.com/api/projects')
       .get(`/${sampleProjectUuid}`)
@@ -61,7 +61,7 @@ createTest(t, 'zero violations')
   })
 
 createTest(t, 'critical violations')
-  .get(`/${sampleProjectUuid}.json?style=_shields_test`)
+  .get(`/${sampleProjectUuid}.json`)
   .intercept(nock =>
     nock('https://insight.symfony.com/api/projects')
       .get(`/${sampleProjectUuid}`)
@@ -74,7 +74,7 @@ createTest(t, 'critical violations')
   })
 
 createTest(t, 'major violations')
-  .get(`/${sampleProjectUuid}.json?style=_shields_test`)
+  .get(`/${sampleProjectUuid}.json`)
   .intercept(nock =>
     nock('https://insight.symfony.com/api/projects')
       .get(`/${sampleProjectUuid}`)
@@ -87,7 +87,7 @@ createTest(t, 'major violations')
   })
 
 createTest(t, 'minor violations')
-  .get(`/${sampleProjectUuid}.json?style=_shields_test`)
+  .get(`/${sampleProjectUuid}.json`)
   .intercept(nock =>
     nock('https://insight.symfony.com/api/projects')
       .get(`/${sampleProjectUuid}`)
@@ -104,7 +104,7 @@ createTest(t, 'minor violations')
   })
 
 createTest(t, 'info violations')
-  .get(`/${sampleProjectUuid}.json?style=_shields_test`)
+  .get(`/${sampleProjectUuid}.json`)
   .intercept(nock =>
     nock('https://insight.symfony.com/api/projects')
       .get(`/${sampleProjectUuid}`)
@@ -121,7 +121,7 @@ createTest(t, 'info violations')
   })
 
 createTest(t, 'multiple violations grade')
-  .get(`/${sampleProjectUuid}.json?style=_shields_test`)
+  .get(`/${sampleProjectUuid}.json`)
   .intercept(nock =>
     nock('https://insight.symfony.com/api/projects')
       .get(`/${sampleProjectUuid}`)
diff --git a/services/teamcity/teamcity-build.tester.js b/services/teamcity/teamcity-build.tester.js
index 7220b0221c..cab7a1765e 100644
--- a/services/teamcity/teamcity-build.tester.js
+++ b/services/teamcity/teamcity-build.tester.js
@@ -39,7 +39,7 @@ t.create('live: full status for known build')
   })
 
 t.create('codebetter success build')
-  .get('/codebetter/bt123.json?style=_shields_test')
+  .get('/codebetter/bt123.json')
   .intercept(nock =>
     nock('https://teamcity.jetbrains.com/app/rest/builds')
       .get(`/${encodeURIComponent('buildType:(id:bt123)')}`)
@@ -56,7 +56,7 @@ t.create('codebetter success build')
   })
 
 t.create('codebetter failure build')
-  .get('/codebetter/bt123.json?style=_shields_test')
+  .get('/codebetter/bt123.json')
   .intercept(nock =>
     nock('https://teamcity.jetbrains.com/app/rest/builds')
       .get(`/${encodeURIComponent('buildType:(id:bt123)')}`)
@@ -73,7 +73,7 @@ t.create('codebetter failure build')
   })
 
 t.create('simple build status with passed build')
-  .get('/https/myteamcity.com:8080/s/bt321.json?style=_shields_test')
+  .get('/https/myteamcity.com:8080/s/bt321.json')
   .intercept(nock =>
     nock('https://myteamcity.com:8080/app/rest/builds')
       .get(`/${encodeURIComponent('buildType:(id:bt321)')}`)
@@ -90,7 +90,7 @@ t.create('simple build status with passed build')
   })
 
 t.create('simple build status with failed build')
-  .get('/https/myteamcity.com:8080/s/bt999.json?style=_shields_test')
+  .get('/https/myteamcity.com:8080/s/bt999.json')
   .intercept(nock =>
     nock('https://myteamcity.com:8080/app/rest/builds')
       .get(`/${encodeURIComponent('buildType:(id:bt999)')}`)
@@ -107,7 +107,7 @@ t.create('simple build status with failed build')
   })
 
 t.create('full build status with passed build')
-  .get('/https/selfhosted.teamcity.com:4000/e/bt321.json?style=_shields_test')
+  .get('/https/selfhosted.teamcity.com:4000/e/bt321.json')
   .intercept(nock =>
     nock('https://selfhosted.teamcity.com:4000/app/rest/builds')
       .get(`/${encodeURIComponent('buildType:(id:bt321)')}`)
@@ -124,9 +124,7 @@ t.create('full build status with passed build')
   })
 
 t.create('full build status with failed build')
-  .get(
-    '/https/selfhosted.teamcity.com:4000/tc/e/bt567.json?style=_shields_test'
-  )
+  .get('/https/selfhosted.teamcity.com:4000/tc/e/bt567.json')
   .intercept(nock =>
     nock('https://selfhosted.teamcity.com:4000/tc/app/rest/builds')
       .get(`/${encodeURIComponent('buildType:(id:bt567)')}`)
@@ -144,7 +142,7 @@ t.create('full build status with failed build')
 
 t.create('with auth')
   .before(mockTeamCityCreds)
-  .get('/https/selfhosted.teamcity.com/e/bt678.json?style=_shields_test')
+  .get('/https/selfhosted.teamcity.com/e/bt678.json')
   .intercept(nock =>
     nock('https://selfhosted.teamcity.com/app/rest/builds')
       .get(`/${encodeURIComponent('buildType:(id:bt678)')}`)
diff --git a/services/teamcity/teamcity-coverage.tester.js b/services/teamcity/teamcity-coverage.tester.js
index b156e63ba5..2f70039f1f 100644
--- a/services/teamcity/teamcity-coverage.tester.js
+++ b/services/teamcity/teamcity-coverage.tester.js
@@ -52,7 +52,7 @@ t.create('no coverage data for build')
   .expectBadge({ label: 'coverage', message: 'no coverage data available' })
 
 t.create('zero lines covered')
-  .get('/bt345.json?style=_shields_test')
+  .get('/bt345.json')
   .intercept(nock =>
     nock('https://teamcity.jetbrains.com/app/rest/builds')
       .get(`/${encodeURIComponent('buildType:(id:bt345)')}/statistics`)
@@ -78,7 +78,7 @@ t.create('zero lines covered')
 
 t.create('with auth, lines covered')
   .before(mockTeamCityCreds)
-  .get('/https/selfhosted.teamcity.com/bt678.json?style=_shields_test')
+  .get('/https/selfhosted.teamcity.com/bt678.json')
   .intercept(nock =>
     nock('https://selfhosted.teamcity.com/app/rest/builds')
       .get(`/${encodeURIComponent('buildType:(id:bt678)')}/statistics`)
diff --git a/services/visual-studio-marketplace/visual-studio-marketplace-azure-devops-installs.tester.js b/services/visual-studio-marketplace/visual-studio-marketplace-azure-devops-installs.tester.js
index 0415bdabab..57f8a80cea 100644
--- a/services/visual-studio-marketplace/visual-studio-marketplace-azure-devops-installs.tester.js
+++ b/services/visual-studio-marketplace/visual-studio-marketplace-azure-devops-installs.tester.js
@@ -58,7 +58,7 @@ t.create('live: non existent extension')
   })
 
 t.create('total installs')
-  .get('/total/swellaby.cobertura-transform.json?style=_shields_test')
+  .get('/total/swellaby.cobertura-transform.json')
   .intercept(nock =>
     nock('https://marketplace.visualstudio.com/_apis/public/gallery/')
       .post(`/extensionquery/`)
@@ -71,7 +71,7 @@ t.create('total installs')
   })
 
 t.create('services installs')
-  .get('/services/swellaby.cobertura-transform.json?style=_shields_test')
+  .get('/services/swellaby.cobertura-transform.json')
   .intercept(nock =>
     nock('https://marketplace.visualstudio.com/_apis/public/gallery/')
       .post(`/extensionquery/`)
@@ -84,7 +84,7 @@ t.create('services installs')
   })
 
 t.create('onprem installs')
-  .get('/onprem/swellaby.cobertura-transform.json?style=_shields_test')
+  .get('/onprem/swellaby.cobertura-transform.json')
   .intercept(nock =>
     nock('https://marketplace.visualstudio.com/_apis/public/gallery/')
       .post(`/extensionquery/`)
@@ -97,7 +97,7 @@ t.create('onprem installs')
   })
 
 t.create('zero installs')
-  .get('/total/swellaby.cobertura-transform.json?style=_shields_test')
+  .get('/total/swellaby.cobertura-transform.json')
   .intercept(nock =>
     nock('https://marketplace.visualstudio.com/_apis/public/gallery/')
       .post(`/extensionquery/`)
diff --git a/services/visual-studio-marketplace/visual-studio-marketplace-downloads.tester.js b/services/visual-studio-marketplace/visual-studio-marketplace-downloads.tester.js
index 4c894135f6..19f667d409 100644
--- a/services/visual-studio-marketplace/visual-studio-marketplace-downloads.tester.js
+++ b/services/visual-studio-marketplace/visual-studio-marketplace-downloads.tester.js
@@ -58,9 +58,7 @@ t.create('live: non existent extension')
   })
 
 t.create('installs')
-  .get(
-    '/visual-studio-marketplace/i/swellaby.rust-pack.json?style=_shields_test'
-  )
+  .get('/visual-studio-marketplace/i/swellaby.rust-pack.json')
   .intercept(nock =>
     nock('https://marketplace.visualstudio.com/_apis/public/gallery/')
       .post(`/extensionquery/`)
@@ -73,9 +71,7 @@ t.create('installs')
   })
 
 t.create('zero installs')
-  .get(
-    '/visual-studio-marketplace/i/swellaby.rust-pack.json?style=_shields_test'
-  )
+  .get('/visual-studio-marketplace/i/swellaby.rust-pack.json')
   .intercept(nock =>
     nock('https://marketplace.visualstudio.com/_apis/public/gallery/')
       .post(`/extensionquery/`)
@@ -103,9 +99,7 @@ t.create('zero installs')
   })
 
 t.create('downloads')
-  .get(
-    '/visual-studio-marketplace/d/swellaby.rust-pack.json?style=_shields_test'
-  )
+  .get('/visual-studio-marketplace/d/swellaby.rust-pack.json')
   .intercept(nock =>
     nock('https://marketplace.visualstudio.com/_apis/public/gallery/')
       .post(`/extensionquery/`)
diff --git a/services/visual-studio-marketplace/visual-studio-marketplace-rating.tester.js b/services/visual-studio-marketplace/visual-studio-marketplace-rating.tester.js
index 85b9fdc869..6d2d92c292 100644
--- a/services/visual-studio-marketplace/visual-studio-marketplace-rating.tester.js
+++ b/services/visual-studio-marketplace/visual-studio-marketplace-rating.tester.js
@@ -20,9 +20,7 @@ t.create('live: stars')
   })
 
 t.create('rating')
-  .get(
-    '/visual-studio-marketplace/r/ritwickdey.LiveServer.json?style=_shields_test'
-  )
+  .get('/visual-studio-marketplace/r/ritwickdey.LiveServer.json')
   .intercept(nock =>
     nock('https://marketplace.visualstudio.com/_apis/public/gallery/')
       .post(`/extensionquery/`)
@@ -59,9 +57,7 @@ t.create('rating')
   })
 
 t.create('zero rating')
-  .get(
-    '/visual-studio-marketplace/r/ritwickdey.LiveServer.json?style=_shields_test'
-  )
+  .get('/visual-studio-marketplace/r/ritwickdey.LiveServer.json')
   .intercept(nock =>
     nock('https://marketplace.visualstudio.com/_apis/public/gallery/')
       .post(`/extensionquery/`)
@@ -89,9 +85,7 @@ t.create('zero rating')
   })
 
 t.create('stars')
-  .get(
-    '/visual-studio-marketplace/stars/ritwickdey.LiveServer.json?style=_shields_test'
-  )
+  .get('/visual-studio-marketplace/stars/ritwickdey.LiveServer.json')
   .intercept(nock =>
     nock('https://marketplace.visualstudio.com/_apis/public/gallery/')
       .post(`/extensionquery/`)
diff --git a/services/visual-studio-marketplace/visual-studio-marketplace-version.tester.js b/services/visual-studio-marketplace/visual-studio-marketplace-version.tester.js
index 488625d33f..0a0f149756 100644
--- a/services/visual-studio-marketplace/visual-studio-marketplace-version.tester.js
+++ b/services/visual-studio-marketplace/visual-studio-marketplace-version.tester.js
@@ -13,9 +13,7 @@ t.create('live: rating')
   })
 
 t.create('version')
-  .get(
-    '/visual-studio-marketplace/v/ritwickdey.LiveServer.json?style=_shields_test'
-  )
+  .get('/visual-studio-marketplace/v/ritwickdey.LiveServer.json')
   .intercept(nock =>
     nock('https://marketplace.visualstudio.com/_apis/public/gallery/')
       .post(`/extensionquery/`)
@@ -43,9 +41,7 @@ t.create('version')
   })
 
 t.create('pre-release version')
-  .get(
-    '/visual-studio-marketplace/v/swellaby.vscode-rust-test-adapter.json?style=_shields_test'
-  )
+  .get('/visual-studio-marketplace/v/swellaby.vscode-rust-test-adapter.json')
   .intercept(nock =>
     nock('https://marketplace.visualstudio.com/_apis/public/gallery/')
       .post(`/extensionquery/`)
diff --git a/services/waffle/waffle-label.tester.js b/services/waffle/waffle-label.tester.js
index c7f8f02fc1..3f97e11bd3 100644
--- a/services/waffle/waffle-label.tester.js
+++ b/services/waffle/waffle-label.tester.js
@@ -11,9 +11,7 @@ t.create('project not found)')
   })
 
 t.create('label not found')
-  .get(
-    '/ritwickdey/vscode-live-server/not-a-real-label.json?style=_shields_test'
-  )
+  .get('/ritwickdey/vscode-live-server/not-a-real-label.json')
   .expectBadge({
     label: 'not-a-real-label',
     message: '0',
diff --git a/services/website/website.tester.js b/services/website/website.tester.js
index 2e1ed0e037..cb0000791b 100644
--- a/services/website/website.tester.js
+++ b/services/website/website.tester.js
@@ -3,25 +3,25 @@
 const t = (module.exports = require('../tester').createServiceTester())
 
 t.create('status of http://shields.io')
-  .get('/http/shields.io.json?style=_shields_test')
+  .get('/http/shields.io.json')
   .expectBadge({ label: 'website', message: 'up', color: 'brightgreen' })
 
 t.create('status of https://shields.io')
-  .get('/https/shields.io.json?style=_shields_test')
+  .get('/https/shields.io.json')
   .expectBadge({ label: 'website', message: 'up', color: 'brightgreen' })
 
 t.create('status of nonexistent domain')
-  .get('/https/shields-io.io.json?style=_shields_test')
+  .get('/https/shields-io.io.json')
   .expectBadge({ label: 'website', message: 'down', color: 'red' })
 
 t.create('status when network is off')
-  .get('/http/shields.io.json?style=_shields_test')
+  .get('/http/shields.io.json')
   .networkOff()
   .expectBadge({ label: 'website', message: 'down', color: 'red' })
 
 t.create('custom online label, online message and online color')
   .get(
-    '/http/online.com.json?style=_shields_test&up_message=up&down_message=down&up_color=green&down_color=grey'
+    '/http/online.com.json?up_message=up&down_message=down&up_color=green&down_color=grey'
   )
   .intercept(nock =>
     nock('http://online.com')
@@ -32,7 +32,7 @@ t.create('custom online label, online message and online color')
 
 t.create('custom offline message and offline color')
   .get(
-    '/http/offline.com.json?style=_shields_test&up_message=up&down_message=down&up_color=green&down_color=grey'
+    '/http/offline.com.json?up_message=up&down_message=down&up_color=green&down_color=grey'
   )
   .intercept(nock =>
     nock('http://offline.com')
diff --git a/services/wercker/wercker.tester.js b/services/wercker/wercker.tester.js
index ebe8a38af6..9e2d3fad21 100644
--- a/services/wercker/wercker.tester.js
+++ b/services/wercker/wercker.tester.js
@@ -20,7 +20,7 @@ t.create('Build status (private application)')
   .expectBadge({ label: 'build', message: 'private application not supported' })
 
 t.create('Build passed (mocked)')
-  .get('/build/wercker/go-wercker-api.json?style=_shields_test')
+  .get('/build/wercker/go-wercker-api.json')
   .intercept(nock =>
     nock('https://app.wercker.com/api/v3/applications/')
       .get('/wercker/go-wercker-api/builds?limit=1')
@@ -33,7 +33,7 @@ t.create('Build passed (mocked)')
   })
 
 t.create('Build failed (mocked)')
-  .get('/build/wercker/go-wercker-api.json?style=_shields_test')
+  .get('/build/wercker/go-wercker-api.json')
   .intercept(nock =>
     nock('https://app.wercker.com/api/v3/applications/')
       .get('/wercker/go-wercker-api/builds?limit=1')
diff --git a/services/wheelmap/wheelmap.tester.js b/services/wheelmap/wheelmap.tester.js
index 167c1a4dc9..09470a92ff 100644
--- a/services/wheelmap/wheelmap.tester.js
+++ b/services/wheelmap/wheelmap.tester.js
@@ -14,7 +14,7 @@ function logTokenWarning() {
 
 t.create('node with accessibility')
   .before(logTokenWarning)
-  .get('/26699541.json?style=_shields_test')
+  .get('/26699541.json')
   .timeout(7500)
   .interceptIf(noToken, nock =>
     nock('https://wheelmap.org/')
@@ -36,7 +36,7 @@ t.create('node with accessibility')
 
 t.create('node with limited accessibility')
   .before(logTokenWarning)
-  .get('/2034868974.json?style=_shields_test')
+  .get('/2034868974.json')
   .timeout(7500)
   .interceptIf(noToken, nock =>
     nock('https://wheelmap.org/')
@@ -58,7 +58,7 @@ t.create('node with limited accessibility')
 
 t.create('node without accessibility')
   .before(logTokenWarning)
-  .get('/-147495158.json?style=_shields_test')
+  .get('/-147495158.json')
   .timeout(7500)
   .interceptIf(noToken, nock =>
     nock('https://wheelmap.org/')
diff --git a/services/wordpress/wordpress-platform.tester.js b/services/wordpress/wordpress-platform.tester.js
index 895e0ffc57..447af95637 100644
--- a/services/wordpress/wordpress-platform.tester.js
+++ b/services/wordpress/wordpress-platform.tester.js
@@ -49,7 +49,7 @@ const mockedCoreResponseData = {
 }
 
 t.create('Plugin Tested WP Version - current (mocked)')
-  .get('/plugin/tested/akismet.json?style=_shields_test')
+  .get('/plugin/tested/akismet.json')
   .intercept(nock =>
     nock('https://api.wordpress.org')
       .get('/plugins/info/1.1/')
@@ -73,7 +73,7 @@ t.create('Plugin Tested WP Version - current (mocked)')
   })
 
 t.create('Plugin Tested WP Version - old (mocked)')
-  .get('/plugin/tested/akismet.json?style=_shields_test')
+  .get('/plugin/tested/akismet.json')
   .intercept(nock =>
     nock('https://api.wordpress.org')
       .get('/plugins/info/1.1/')
@@ -97,7 +97,7 @@ t.create('Plugin Tested WP Version - old (mocked)')
   })
 
 t.create('Plugin Tested WP Version - non-exsistant or unsupported (mocked)')
-  .get('/plugin/tested/akismet.json?style=_shields_test')
+  .get('/plugin/tested/akismet.json')
   .intercept(nock =>
     nock('https://api.wordpress.org')
       .get('/plugins/info/1.1/')
-- 
GitLab