def METHOD_NAME(self, image: ndarray, camera: str) -> str:
    r = self._get("image/signed_urls")
    presigned_urls = r.json()
    if not r.ok:
        raise Exception("Unable to get signed urls")
    # resize and submit original
    files = {"file": get_jpg_bytes(image, 1920, 85)}
    data = presigned_urls["original"]["fields"]
    data["content-type"] = "image/jpeg"
    r = requests.post(presigned_urls["original"]["url"], files=files, data=data)
    if not r.ok:
        logger.error(f"Failed to upload original: {r.status_code} {r.text}")
        raise Exception(r.text)
    # resize and submit annotate
    files = {"file": get_jpg_bytes(image, 640, 70)}
    data = presigned_urls["annotate"]["fields"]
    data["content-type"] = "image/jpeg"
    r = requests.post(presigned_urls["annotate"]["url"], files=files, data=data)
    if not r.ok:
        logger.error(f"Failed to upload annotate: {r.status_code} {r.text}")
        raise Exception(r.text)
    # resize and submit thumbnail
    files = {"file": get_jpg_bytes(image, 200, 70)}
    data = presigned_urls["thumbnail"]["fields"]
    data["content-type"] = "image/jpeg"
    r = requests.post(presigned_urls["thumbnail"]["url"], files=files, data=data)
    if not r.ok:
        logger.error(f"Failed to upload thumbnail: {r.status_code} {r.text}")
        raise Exception(r.text)
    # create image
    r = self._post(
        "image/create", {"id": presigned_urls["imageId"], "camera": camera}
    )
    if not r.ok:
        raise Exception(r.text)
    # return image id
    return str(presigned_urls.get("imageId"))