diff --git a/core/base-service/coalesce-badge.js b/core/base-service/coalesce-badge.js
index 6a809cf785aeadc707feb88a2c8b884e00ce739b..30819fb81485f51ebc3912bafb26b2b8d09d210f 100644
--- a/core/base-service/coalesce-badge.js
+++ b/core/base-service/coalesce-badge.js
@@ -41,19 +41,36 @@ module.exports = function coalesceBadge(
   defaultBadgeData,
   { category, _cacheLength: defaultCacheSeconds } = {}
 ) {
+  // The "overrideX" naming is based on services that provide badge
+  // parameters themselves, which can be overridden by a query string
+  // parameter. (For a couple services, the dynamic badge and the
+  // query-string-based static badge, the service never sets a value
+  // so the query string overrides are the _only_ way to configure
+  // these badge parameters.
   const {
     style: overrideStyle,
     label: overrideLabel,
     logoColor: overrideLogoColor,
     link: overrideLink,
+    colorB: legacyOverrideColor,
+    colorA: legacyOverrideLabelColor,
   } = overrides
-  // Scoutcamp converts numeric query params to numbers. Convert them back.
   let {
-    colorB: overrideColor,
-    colorA: overrideLabelColor,
     logoWidth: overrideLogoWidth,
     logoPosition: overrideLogoPosition,
+    color: overrideColor,
+    labelColor: overrideLabelColor,
   } = overrides
+
+  // Only use the legacy properties of the new ones are not provided
+  if (typeof overrideColor === 'undefined') {
+    overrideColor = legacyOverrideColor
+  }
+  if (typeof overrideLabelColor === 'undefined') {
+    overrideLabelColor = legacyOverrideLabelColor
+  }
+
+  // Scoutcamp converts numeric query params to numbers. Convert them back.
   if (typeof overrideColor === 'number') {
     overrideColor = `${overrideColor}`
   }
diff --git a/core/base-service/coalesce-badge.spec.js b/core/base-service/coalesce-badge.spec.js
index 90416ee9731cda0ddd3a7861d68bd6e80391a980..e543a5599d3a4e549d1e188842a19f55519417a0 100644
--- a/core/base-service/coalesce-badge.spec.js
+++ b/core/base-service/coalesce-badge.spec.js
@@ -58,15 +58,27 @@ describe('coalesceBadge', function() {
 
     it('overrides the color', function() {
       expect(
-        coalesceBadge({ colorB: '10ADED' }, { color: 'red' }, {}).color
+        coalesceBadge({ color: '10ADED' }, { color: 'red' }, {}).color
       ).to.equal('10ADED')
+      // also expected for legacy name
+      expect(
+        coalesceBadge({ colorB: 'B0ADED' }, { color: 'red' }, {}).color
+      ).to.equal('B0ADED')
     })
 
     context('In case of an error', function() {
       it('does not override the color', function() {
         expect(
           coalesceBadge(
-            { colorB: '10ADED' },
+            { color: '10ADED' },
+            { isError: true, color: 'lightgray' },
+            {}
+          ).color
+        ).to.equal('lightgray')
+        // also expected for legacy name
+        expect(
+          coalesceBadge(
+            { colorB: 'B0ADED' },
             { isError: true, color: 'lightgray' },
             {}
           ).color
@@ -92,11 +104,25 @@ describe('coalesceBadge', function() {
 
     it('overrides the label color', function() {
       expect(
-        coalesceBadge({ colorA: '42f483' }, { color: 'green' }, {}).labelColor
+        coalesceBadge({ labelColor: '42f483' }, { color: 'green' }, {})
+          .labelColor
       ).to.equal('42f483')
+      // also expected for legacy name
+      expect(
+        coalesceBadge({ colorA: 'B2f483' }, { color: 'green' }, {}).labelColor
+      ).to.equal('B2f483')
     })
 
     it('converts a query-string numeric color to a string', function() {
+      expect(
+        coalesceBadge(
+          // Scoutcamp converts numeric query params to numbers.
+          { color: 123 },
+          { color: 'green' },
+          {}
+        ).color
+      ).to.equal('123')
+      // also expected for legacy name
       expect(
         coalesceBadge(
           // Scoutcamp converts numeric query params to numbers.
diff --git a/core/base-service/legacy-request-handler.js b/core/base-service/legacy-request-handler.js
index 9795d77d542a58e0a3d8b5d86c1981d6e8885e91..f5e0903857c713e67f056a39b5d7a4a5e75b2197 100644
--- a/core/base-service/legacy-request-handler.js
+++ b/core/base-service/legacy-request-handler.js
@@ -52,6 +52,8 @@ const globalQueryParams = new Set([
   'link',
   'colorA',
   'colorB',
+  'color',
+  'labelColor',
 ])
 
 function flattenQueryParams(queryParams) {
diff --git a/core/base-service/legacy-request-handler.spec.js b/core/base-service/legacy-request-handler.spec.js
index f501a9eed5f9abbd6c3fc97c9d50199af2b7ece7..b1dbc5519515d650b634c5c793c25d34bc6ba0d4 100644
--- a/core/base-service/legacy-request-handler.spec.js
+++ b/core/base-service/legacy-request-handler.spec.js
@@ -297,17 +297,17 @@ describe('The request handler', function() {
         beforeEach(function() {
           register({ cacheHeaderConfig: standardCacheHeaders })
         })
-        const expectedCacheKey = '/testing/123.json?colorB=123&label=foo'
+        const expectedCacheKey = '/testing/123.json?color=123&label=foo'
         it('should match expected and use canonical order - 1', async function() {
           const res = await fetch(
-            `${baseUrl}/testing/123.json?colorB=123&label=foo`
+            `${baseUrl}/testing/123.json?color=123&label=foo`
           )
           expect(res.ok).to.be.true
           expect(_requestCache.cache).to.have.keys(expectedCacheKey)
         })
         it('should match expected and use canonical order - 2', async function() {
           const res = await fetch(
-            `${baseUrl}/testing/123.json?label=foo&colorB=123`
+            `${baseUrl}/testing/123.json?label=foo&color=123`
           )
           expect(res.ok).to.be.true
           expect(_requestCache.cache).to.have.keys(expectedCacheKey)
diff --git a/frontend/components/customizer/query-string-builder.js b/frontend/components/customizer/query-string-builder.js
index e1aee38ecb90c4d19a6842c17c6bf235ae3a5338..9297c1193fb29d09445429c75b2a7c44b8bc7ebd 100644
--- a/frontend/components/customizer/query-string-builder.js
+++ b/frontend/components/customizer/query-string-builder.js
@@ -26,7 +26,7 @@ const QueryParamCaption = styled(BuilderCaption)`
 const supportedBadgeOptions = [
   { name: 'style', shieldsDefaultValue: 'flat' },
   { name: 'label', label: 'override label' },
-  { name: 'colorB', label: 'override color' },
+  { name: 'color', label: 'override color' },
   { name: 'logo', label: 'named logo' },
   { name: 'logoColor', label: 'override logo color' },
 ]
diff --git a/frontend/components/usage.js b/frontend/components/usage.js
index 7a88c2fef0f23bb1dadab267c1370fa21a2b3f46..dfb50954422b4fa72ad3a8f08ecf587b7b752bb9 100644
--- a/frontend/components/usage.js
+++ b/frontend/components/usage.js
@@ -243,7 +243,7 @@ export default class Usage extends React.PureComponent {
             >
               $.DATA.SUBDATA
             </a>
-            &gt;&amp;colorB=&lt;COLOR&gt;&amp;prefix=&lt;PREFIX&gt;&amp;suffix=&lt;SUFFIX&gt;
+            &gt;&amp;color=&lt;COLOR&gt;&amp;prefix=&lt;PREFIX&gt;&amp;suffix=&lt;SUFFIX&gt;
           </StyledCode>
         </p>
         <p>
@@ -257,7 +257,7 @@ export default class Usage extends React.PureComponent {
             >
               //data/subdata
             </a>
-            &gt;&amp;colorB=&lt;COLOR&gt;&amp;prefix=&lt;PREFIX&gt;&amp;suffix=&lt;SUFFIX&gt;
+            &gt;&amp;color=&lt;COLOR&gt;&amp;prefix=&lt;PREFIX&gt;&amp;suffix=&lt;SUFFIX&gt;
           </StyledCode>
         </p>
         <p>
@@ -271,7 +271,7 @@ export default class Usage extends React.PureComponent {
             >
               $.DATA.SUBDATA
             </a>
-            &gt;&amp;colorB=&lt;COLOR&gt;&amp;prefix=&lt;PREFIX&gt;&amp;suffix=&lt;SUFFIX&gt;
+            &gt;&amp;color=&lt;COLOR&gt;&amp;prefix=&lt;PREFIX&gt;&amp;suffix=&lt;SUFFIX&gt;
           </StyledCode>
         </p>
 
@@ -352,22 +352,24 @@ export default class Usage extends React.PureComponent {
               }
             />
             <QueryParam
-              key="colorA"
-              snippet="?colorA=abcdef"
+              key="labelColor"
+              snippet="?labelColor=abcdef"
               documentation={
                 <span>
                   Set background of the left part (hex, rgb, rgba, hsl, hsla and
-                  css named colors supported)
+                  css named colors supported). The legacy name "colorA" is also
+                  supported.
                 </span>
               }
             />
             <QueryParam
-              key="colorB"
-              snippet="?colorB=fedcba"
+              key="color"
+              snippet="?color=fedcba"
               documentation={
                 <span>
                   Set background of the right part (hex, rgb, rgba, hsl, hsla
-                  and css named colors supported)
+                  and css named colors supported). The legacy name "colorB" is
+                  also supported.
                 </span>
               }
             />
diff --git a/frontend/lib/badge-url.js b/frontend/lib/badge-url.js
index d6f5c6c5adc19419ab3e9a74f573c69e7ba01532..5ff3aca4c72724823e28806d551eaf2c87e89974 100644
--- a/frontend/lib/badge-url.js
+++ b/frontend/lib/badge-url.js
@@ -38,7 +38,7 @@ export function dynamicBadgeUrl(
   })
 
   if (color) {
-    queryParams.colorB = color
+    queryParams.color = color
   }
   if (prefix) {
     queryParams.prefix = prefix
diff --git a/frontend/lib/badge-url.spec.js b/frontend/lib/badge-url.spec.js
index 2265a80e06ffdda21f25dd70c4efa3e4013b83e8..4817e4cb133c00516bb528b6b613759ceec679b1 100644
--- a/frontend/lib/badge-url.spec.js
+++ b/frontend/lib/badge-url.spec.js
@@ -58,7 +58,7 @@ describe('Badge URL functions', function() {
         '?label=foo',
         `&url=${encodeURIComponent(dataUrl)}`,
         `&query=${encodeURIComponent(query)}`,
-        '&colorB=blue',
+        '&color=blue',
         `&suffix=${encodeURIComponent(suffix)}`,
         '&style=plastic',
       ].join('')
diff --git a/frontend/pages/endpoint.js b/frontend/pages/endpoint.js
index 2ed6e34a6eb7778f0bd4c4b696b46075c2c143bf..71cc07282d5de84d16783e297a5ee52ccea6cb3d 100644
--- a/frontend/pages/endpoint.js
+++ b/frontend/pages/endpoint.js
@@ -173,11 +173,12 @@ const EndpointPage = () => (
       <dd>
         Default: <code>lightgrey</code>. The right color. Supports the eight
         named colors above, as well as hex, rgb, rgba, hsl, hsla and css named
-        colors.
+        colors. This can be overridden by the query string.
       </dd>
       <dt>labelColor</dt>
       <dd>
-        Default: <code>grey</code>. The left color.
+        Default: <code>grey</code>. The left color. This can be overridden by
+        the query string.
       </dd>
       <dt>isError</dt>
       <dd>
diff --git a/services/endpoint/endpoint.tester.js b/services/endpoint/endpoint.tester.js
index 2d8fd9a4c260ec9bd30b9f7e37ccd34870e68314..371969bc136e4d60cc5266948ac5667ba02ba7fc 100644
--- a/services/endpoint/endpoint.tester.js
+++ b/services/endpoint/endpoint.tester.js
@@ -170,6 +170,20 @@ t.create('Invalid schema (mocked)')
   })
 
 t.create('User color overrides success color')
+  .get('.json?url=https://example.com/badge&color=101010&style=_shields_test')
+  .intercept(nock =>
+    nock('https://example.com/')
+      .get('/badge')
+      .reply(200, {
+        schemaVersion: 1,
+        label: '',
+        message: 'yo',
+        color: 'blue',
+      })
+  )
+  .expectJSON({ name: '', value: 'yo', color: '#101010' })
+
+t.create('User legacy color overrides success color')
   .get('.json?url=https://example.com/badge&colorB=101010&style=_shields_test')
   .intercept(nock =>
     nock('https://example.com/')
@@ -184,6 +198,21 @@ t.create('User color overrides success color')
   .expectJSON({ name: '', value: 'yo', color: '#101010' })
 
 t.create('User color does not override error color')
+  .get('.json?url=https://example.com/badge&color=101010&style=_shields_test')
+  .intercept(nock =>
+    nock('https://example.com/')
+      .get('/badge')
+      .reply(200, {
+        schemaVersion: 1,
+        isError: true,
+        label: 'something is',
+        message: 'not right',
+        color: 'red',
+      })
+  )
+  .expectJSON({ name: 'something is', value: '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')
   .intercept(nock =>
     nock('https://example.com/')