code: async def send(
          self,
          request: Union[str, Dict, List],
          trim_log_values: bool = False,
          validate_against_schema: bool = True,
          **kwargs: Any
      ) -> Response:
          
          # We need both the serialized and deserialized version of the request
          if isinstance(request, str):
              request_text = request
              request_deserialized = deserialize(request)
          else:
              request_text = serialize(request)
              request_deserialized = request
          batch = isinstance(request_deserialized, list)
          response_expected = batch or "id" in request_deserialized
          self.log_request(request_text, trim_log_values=trim_log_values)
          response = await self.send_message(
              request_text, response_expected=response_expected, **kwargs
          )
          self.log_response(response, trim_log_values=trim_log_values)
          self.validate_response(response)
          response.data = parse(
              response.text, batch=batch, validate_against_schema=validate_against_schema
          )
          # If received a single error response, raise
          if isinstance(response.data, ErrorResponse):
              raise ReceivedErrorResponseError(response.data)
          return response
docs: Async version of Client.send.