> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sutro.sh/llms.txt
> Use this file to discover all available pages before exploring further.

# Remote inputs

> Submit production CSV or Parquet inputs by signed HTTPS URL.

# Remote inputs

Pass an HTTP(S) URL as `data` to avoid loading a large file into the SDK
process. The URL must return the object with an unauthenticated GET; `s3://`
URIs are not accepted.

## Contract

* Formats: uncompressed CSV or Parquet
* Published Functions: columns must match Function inputs; omit `column`
* Direct model IDs: set `column` to the input column
* Optional `id_column`: preserved in every result format
* Use [`job_priority=1`](/batch/run-model#job-priority-and-sla) and `stay_attached=False`

Sutro performs one full-object download and does not resume or retry a failed
input download. Use an immutable object and a URL lifetime that covers queueing
plus download startup.

## Sign an Amazon S3 object

```python theme={null}
import boto3

s3 = boto3.client("s3", region_name="us-west-2")
input_url = s3.generate_presigned_url(
    "get_object",
    Params={"Bucket": "my-bucket", "Key": "inputs/run-001.parquet"},
    ExpiresIn=3600,
)
```

```python theme={null}
job_id = so.infer(
    data=input_url,
    column="text",
    id_column="record_id",
    model="gpt-oss-20b",
    job_priority=1,
    stay_attached=False,
)
```

Cloudflare R2 and other S3-compatible stores use the same signing flow with
their S3 endpoint. Google Cloud Storage uses a native V4 signed GET URL.

Treat the complete URL as a credential: do not commit or log its query string.
Use a read-only signing identity, the shortest practical lifetime, and keep the
source object until results are reconciled. For KMS-encrypted S3 objects, the
signing identity also needs the required KMS decrypt permissions.

If pickup fails, inspect the original job before generating a fresh URL and
submitting a replacement.
