def METHOD_NAME(self, args: ApiParams, request: Request) -> Intake:
    """Identify the tarball to be streamed.
    We get the Relay manifest file location from the "uri" API
    parameter.
    The Relay manifest is an application/json file which contains the
    following required fields:
        uri: The Relay URI of the tarball file
        md5: The tarball's MD5 hash (Pbench Server resource ID)
        name: The original tarball name (with .tar.xz but no path)
        access: The desired Dataset access level (default "private")
        metadata: An optional list of "key:value" metadata strings
    This information will be captured in an Intake instance for use by the
    base class and by the _stream method.
    Args:
        args: API parameters
            URI parameters: the Relay manifest URI
        request: The original Request object containing query parameters
    Returns:
        An Intake object capturing the critical information
    Raises:
        APIAbort on failure
    """
    uri = args.uri["uri"]
    try:
        response = requests.get(uri, headers={"Accept": "application/json"})
    except Exception as e:
        raise APIAbort(
            HTTPStatus.BAD_GATEWAY, f"Unable to connect to manifest URI: {str(e)!r}"
        )
    if not response.ok:
        raise APIAbort(
            HTTPStatus.BAD_GATEWAY,
            f"Relay manifest URI problem: {response.reason!r}",
        )
    try:
        information = response.json()
    except Exception as e:
        raise APIAbort(
            HTTPStatus.BAD_GATEWAY,
            f"Relay URI did not return a JSON manifest: {str(e)!r}",
        ) from e
    try:
        uri = information["uri"]
        md5 = information["md5"]
        name = information["name"]
        access = information.get("access", Dataset.PRIVATE_ACCESS)
        metadata = information.get("metadata", [])
    except KeyError as e:
        raise APIAbort(
            HTTPStatus.BAD_GATEWAY, f"Relay info missing {str(e)!r}"
        ) from e
    # If the API client specified metadata, add it to the manifest
    # metadata list. When the common code processes the list into a dict,
    # any later duplicate keys will override the earlier values.
    metadata += args.query.get("metadata", [])
    return Intake(name, md5, access, metadata, uri)