code: async def list_receipts(self, request):
          
          error_traps = [error_handlers.ReceiptNotFoundTrap]
  
          # Parse transaction ids from POST body, or query paramaters
          if request.method == 'POST':
              if request.headers['Content-Type'] != 'application/json':
                  LOGGER.debug(
                      'Request headers had wrong Content-Type: %s',
                      request.headers['Content-Type'])
                  raise errors.ReceiptWrongContentType()
  
              ids = await request.json()
  
              if (not ids
                      or not isinstance(ids, list)
                      or not all(isinstance(i, str) for i in ids)):
                  LOGGER.debug('Request body was invalid: %s', ids)
                  raise errors.ReceiptBodyInvalid()
              for i in ids:
                  self._validate_id(i)
  
          else:
              ids = self._get_filter_ids(request)
              if not ids:
                  LOGGER.debug('Request for receipts missing id query')
                  raise errors.ReceiptIdQueryInvalid()
  
          # Query validator
          validator_query = \
              client_receipt_pb2.ClientReceiptGetRequest(
                  transaction_ids=ids)
          self._set_wait(request, validator_query)
  
          response = await self._query_validator(
              Message.CLIENT_RECEIPT_GET_REQUEST,
              client_receipt_pb2.ClientReceiptGetResponse,
              validator_query,
              error_traps)
  
          # Send response
          if request.method != 'POST':
              metadata = self._get_metadata(request, response)
          else:
              metadata = None
  
          data = self._drop_id_prefixes(
              self._drop_empty_props(response['receipts']))
  
          return self._wrap_response(request, data=data, metadata=metadata)
docs: Fetches the receipts for transaction by either a POST or GET.
  
          Request:
              body: A JSON array of one or more transaction id strings (if POST)
              query:
                  - id: A comma separated list of up to 15 ids (if GET)
                  - wait: Request should return as soon as some receipts are
                      available
  
          Response:
              data: A JSON object, with transaction ids as keys, and receipts as
                  values
              link: The /receipts link queried (if GET)