def post(self, endpoint, data, parallelism=5):
        headers = {
            "Content-Type": "application/json",
            "Accept": "application/json",
            "x-standardize-only": "true" if self.standardize else "false",
            "x-include-invalid": "true" if self.invalid else "false",
            "x-accept-keypair": "true" if self.accept_keypair else "false",
        }
        if not self.logging:
            headers["x-suppress-logging"] = "false"
        params = {"auth-id": self.auth_id, "auth-token": self.auth_token}
        url = self.BASE_URL + endpoint
        rs = (
            grequests.post(
                url=url,
                data=json.dumps(stringify(data_chunk)),
                params=params,
                headers=headers,
            )
            for data_chunk in chunker(data, 100)
        )
        responses = grequests.imap(rs, size=parallelism)
        status_codes = {}
        addresses = AddressCollection([])
        for response in responses:
            if response.status_code not in status_codes.keys():
                status_codes[response.status_code] = 1
            else:
                status_codes[response.status_code] += 1
            if response.status_code == 200:
                addresses[0:0] = AddressCollection(
                    response.json()
                )
            elif response.status_code == 401:
                raise ERROR_CODES[401]
        if len(status_codes.keys()) == 1:
            if 200 in status_codes:
                return addresses, status_codes
            else:
                raise ERROR_CODES.get(status_codes.keys()[0], SmartyStreetsError)
        return addresses, status_codes