docs: def api_call(self, service, method, data, options):
          """
          :type app: metasdk.MetaApp
          """
          if 'self' in data:
              # может не быть, если вызывается напрямую из кода,
              # а не из прослоек типа DbQueryService
              data.pop("self")
  
          if options:
              data.update(options)
  
          _headers = dict(self.__default_headers)
  
          if self.auth_user_id:
              _headers['X-META-AuthUserID'] = str(self.auth_user_id)
  
          request = {
              "url": self.meta_url + "/api/v1/adptools/" + service + "/" + method,
              "data": json.dumps(data),
              "headers": _headers,
              "timeout": (60, 1800)
          }
  
          for _try_idx in range(20):
              try:
                  resp = requests.post(**request)
                  if resp.status_code == 200:
                      decoded_resp = json.loads(resp.text)
                      if 'data' in decoded_resp:
                          return decoded_resp['data'][method]
                      if 'error' in decoded_resp:
                          if 'details' in decoded_resp['error']:
                              eprint(decoded_resp['error']['details'])
                          raise DbQueryError(decoded_resp['error'])
                      raise UnexpectedError()
                  else:
                      process_meta_api_error_code(resp.status_code, request, resp.text)
              except (requests.exceptions.ConnectionError, ConnectionError, TimeoutError) as e:
                  self.log.warning('META API Connection Error. Sleep...', {"e": e})
                  time.sleep(15)
              except Exception as e:
                  if 'Служба частично или полностью недоступна' in str(e):
                      self.log.warning('META API Connection Error. Sleep...', {"e": e})
                      time.sleep(15)
                  else:
                      raise e
  
          raise ServerError(request)