diff --git a/services/client_config_svc.py b/services/client_config_svc.py
index d5d6a25..d1eb123 100644
--- a/services/client_config_svc.py
+++ b/services/client_config_svc.py
@@ -1,19 +1,17 @@
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style
-# license that can be found in the LICENSE file or at
-# https://developers.google.com/open-source/licenses/bsd
+# Copyright 2016 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
 
 from __future__ import print_function
 from __future__ import division
 from __future__ import absolute_import
 
 import base64
+import binascii
 import json
 import logging
 import os
 import time
-from six.moves import urllib
-import webapp2
 import flask
 
 from google.appengine.api import app_identity
@@ -25,15 +23,14 @@
 
 import settings
 from framework import framework_constants
-from proto import api_clients_config_pb2
+from mrproto import api_clients_config_pb2
 
 
 CONFIG_FILE_PATH = os.path.join(
     os.path.dirname(os.path.dirname(os.path.realpath(__file__))),
     'testing', 'api_clients.cfg')
 LUCI_CONFIG_URL = (
-    'https://luci-config.appspot.com/_ah/api/config/v1/config_sets'
-    '/services/monorail-prod/config/api_clients.cfg')
+    'https://config.luci.app/prpc/config.service.v2.Configs/GetConfig')
 
 
 client_config_svc = None
@@ -51,26 +48,34 @@
     [ts_mon.BooleanField('success'),
      ts_mon.StringField('type')])
 
-
 def _process_response(response):
   try:
-    content = json.loads(response.content)
+    utf8_decoded_content = response.content.decode('utf-8')
+  except AttributeError:
+    logging.error('Response content was not binary: %r', response.content)
+    _CONFIG_LOADS.increment({'success': False, 'type': 'json-load-error'})
+    raise
+
+  try:
+    # Strip the XSSI prefix.
+    stripped_content = utf8_decoded_content[len(")]}'"):].strip()
+    json_config = json.loads(stripped_content)
   except ValueError:
     logging.error('Response was not JSON: %r', response.content)
     _CONFIG_LOADS.increment({'success': False, 'type': 'json-load-error'})
     raise
 
   try:
-    config_content = content['content']
+    config_raw_content = json_config['rawContent']
   except KeyError:
-    logging.error('JSON contained no content: %r', content)
+    logging.error('JSON missing rawContent: %r', json_config)
     _CONFIG_LOADS.increment({'success': False, 'type': 'json-key-error'})
     raise
 
   try:
-    content_text = base64.b64decode(config_content)
-  except TypeError:
-    logging.error('Content was not b64: %r', config_content)
+    content_text = base64.b64decode(config_raw_content)
+  except binascii.Error:
+    logging.error('Content was not b64: %r', config_raw_content)
     _CONFIG_LOADS.increment({'success': False, 'type': 'b64-decode-error'})
     raise
 
@@ -85,32 +90,44 @@
   return content_text
 
 
-def GetLoadApiClientConfigs():
-  global service_account_map
-  global qpm_dict
+def _CallLuciConfig() -> urlfetch._URLFetchResult:
   authorization_token, _ = app_identity.get_access_token(
       framework_constants.OAUTH_SCOPE)
   response = urlfetch.fetch(
       LUCI_CONFIG_URL,
-      method=urlfetch.GET,
+      method=urlfetch.POST,
       follow_redirects=False,
       headers={
-          'Content-Type': 'application/json; charset=UTF-8',
-          'Authorization': 'Bearer ' + authorization_token
-      })
-
+          'Content-Type': 'application/json; charset=utf-8',
+          'Authorization': 'Bearer ' + authorization_token,
+          'Accept': 'application/json'
+      },
+      payload=json.dumps(
+          {
+              'configSet': 'services/monorail-prod',
+              'path': 'api_clients.cfg'
+          }),
+  )
   if response.status_code != 200:
     logging.error('Invalid response from luci-config: %r', response)
     _CONFIG_LOADS.increment({'success': False, 'type': 'luci-cfg-error'})
     flask.abort(500, 'Invalid response from luci-config')
+  return response
+
+
+def GetLoadApiClientConfigs():
+  global service_account_map
+  global qpm_dict
+  response = _CallLuciConfig()
 
   try:
-    content_text = _process_response(response)
+    config_content_text = _process_response(response)
   except Exception as e:
     flask.abort(500, str(e))
 
-  logging.info('luci-config content decoded: %r.', content_text)
-  configs = ClientConfig(configs=content_text, key_name='api_client_configs')
+  logging.info('luci-config content decoded: %r.', config_content_text)
+  configs = ClientConfig(
+      configs=config_content_text, key_name='api_client_configs')
   configs.put()
   service_account_map = None
   qpm_dict = None
