InferencePort Buckets#
Buckets provides private and public object storage for model weights, datasets, checkpoints
and generated artifacts using your existing account or organization workspace.
A server without storage configuration reports not_available and rejects
storage operations with 503.
Endpoints and ownership#
For S3 client connection settings use https://api.inferenceport.ai/{workspace-id}/s3 (without a trailing slash). Copy the
exact endpoint from the console’s Connect tab, ipx bucket connection, or the
credential issuance response. The workspace ID is your personal user UUID or the
organization UUID. Use path-style URLs
/{workspace-id}/s3/{logical-bucket}/{opaque-key}. The entire path, including
the workspace ID and /s3/, is part of the SigV4 signature. Preserve raw path,
percent encoding, query and Host; signed requests cannot be redirected or normalized.
Bucket names are unique only within a workspace. Two users or organizations can
both create models. Credentials select the authorized workspace; the endpoint
must match it. Changing the workspace ID in a URL grants no access. The original
https://api.inferenceport.ai/s3/ endpoint remains supported for existing clients.
Native HTTP and ipx use existing ipa_live_* Bearer keys. Console actions
use existing signed-in sessions and authorized organization selection. API keys
have a fixed personal or organization workspace; an unsigned header cannot move
a key into another workspace. Current membership, suspension, role, parent-key
revocation/expiry, IP limits and credential scopes apply on every operation.
S3 SDKs use a separate InferencePort-issued Access Key ID and Secret Access Key, not an AWS account key or existing scrypt-hashed API key. Secrets are returned only during issuance/rotation and bounded retries, and stored as AES-GCM envelopes wrapped by an external encryption key. Keep Authorization, secret values and presigned query strings out of logs/telemetry.
Management API#
All management responses are JSON; S3 operations return S3 XML/errors. Errors carry request IDs. These routes use the existing account/session authentication:
Method |
Path |
Behavior |
|---|---|---|
GET |
|
Public availability and verified rate catalog |
GET |
|
Authenticated workspace ID, kind, S3 endpoint, signing region and addressing style |
POST |
|
Refresh up to 100 known bucket IDs; only visible buckets in the authenticated workspace are returned |
GET / POST |
|
List / create logical buckets |
GET / PATCH / DELETE |
|
Metadata / rename, quota, visibility or read-only status / delete empty bucket |
GET |
|
JSON browser listing, prefix and continuation token |
GET / HEAD / DELETE |
|
Native object actions preserving dot-only keys in browsers |
GET |
|
Measured operations, bytes and versioned settlements |
GET / POST |
|
List metadata / issue a reveal-once scoped credential |
DELETE |
|
Revoke immediately |
POST |
|
Reveal-once replacement with the same scopes; optionally revoke previous |
POST |
|
Quote a quantity in published pricing units at a selected immutable rate version |
Create a bucket with {"name":"models","quota_bytes":10737418240}. Owner IDs
are derived from authentication, never accepted as authority in request bodies.
The console’s Settings action and ipx bucket update expose name, maximum-size
visibility and upload-status changes. Quota must be a whole number between one byte and one
TiB and cannot be smaller than stored plus reserved bytes. Names remain unique
within the workspace; a conflict returns 409. Renaming preserves bucket ID,
objects and bucket-scoped credentials, but S3 clients must use the new name.
Finish or abort active uploads before renaming a bucket.
Public and private access#
Buckets are private by default, including all existing buckets. Set
"visibility":"public" when creating a bucket, or PATCH its ID with
{"visibility":"public"}. Only workspace administrators can change visibility.
The console exposes this in Create and Settings; use Copy public URL in the file
browser to share a file.
Public means anyone with a known object URL can GET or HEAD that file without an account or S3 credential. Public access does not allow listing, uploading, deleting, changing settings or viewing usage. Private downloads still require authorized account access, scoped S3 credentials or an unexpired signed URL.
Object listings from a public bucket include a server-issued public_url:
https://api.inferenceport.ai/public/buckets/{bucket-id}/object?key=....
Use the API’s returned URL, especially on separate storage hosts. The UUID keeps
names independent across workspaces and URLs stable when a bucket is renamed;
query encoding preserves opaque keys, including dot-only path segments.
Visibility alone does not grant S3 listing or management access.
Owner-only ACL requests accept private, bucket-owner-full-control, or the
canonical owner’s sole full-control XML grant. Public/external ACL grants are
rejected. These requests preserve existing bucket visibility and policy access;
The bucket’s visibility=private setting overrides anonymous Allow grants
from S3 bucket policies, including policy-granted listing. A public bucket can
allow anonymous known-object downloads, but anonymous listing additionally
requires an explicit policy Allow; policy Deny rules can restrict both.
This private-access guarantee requires server security fix #183 to be deployed.
Public download operations and transfer are billed to the bucket’s personal or organization wallet. Organization-wide spending limits and available credits still apply. Anonymous requests are recorded without an invented member/key actor; they do not use a publishing administrator’s individual budget. Downloads may fail when pricing or credits are unavailable. Public access has IP and bucket request limits.
PATCH {"visibility":"private"} blocks new anonymous requests, including
those otherwise allowed by a bucket policy, once server #183 is deployed. Responses use
Cache-Control: no-store; already downloaded files and transfers already
accepted cannot be recalled. Pausing uploads does not disable public downloads.
Deleted buckets and unavailable owners cannot serve public objects. Object
responses retain attachment, nosniff and sandbox protections.
Credential issuance and rotation accept an optional UUID Idempotency-Key
header. Identical retries from the same authenticated owner, actor and parent key
return the same result for ten minutes. Changed options, revoked/expired results
and retries after that window fail explicitly. A new intent requires a new UUID.
Rotation preserves the original expiry. Secrets are not otherwise recoverable.
Credentials accept permissions, optional bucket_ids/key_prefixes,
expires_in (60 seconds to 90 days), IP allowlist and rate limit. Administration
requires the appropriate current account/org rights. Prefix credentials cannot
administer buckets. Rotation defaults to keeping the previous key active until
clients are updated; {"revoke_previous":true} revokes it atomically.
Supported S3 operations#
The gateway supports bucket/object operations, copy and multipart copy,
legacy/v2 listing, paginated multipart discovery, bucket/object tags, and owner
ACL inspection. HTTP content metadata, signed response overrides, ranges,
part-number reads, durable part attributes, all ten modeled checksum algorithms,
SigV4 headers and signed/checksummed aws-chunked uploads are supported.
Browser uploads can use SDK-generated SigV4 POST policies with expiry, field,
key-prefix and content-length conditions.
Versioning is opt-in using put_bucket_versioning. Enabled buckets preserve
older versions and create delete markers; explicit version IDs select historical
GET/HEAD/COPY/DELETE/tag/attribute operations. Suspended versioning preserves
numbered versions while replacing the null version. Retained versions count
toward bucket quota and prevent deleting the bucket until removed.
Copy requires source read and destination write access in the same workspace, with both credential scopes enforced. Content metadata and tags are preserved unless replaced explicitly. Object tags allow ten entries and bucket tags fifty. Tag changes do not change an object’s LastModified.
Bucket policies enforce Allow/Deny rules beneath existing workspace, role and
credential limits. Public-access blocks constrain public visibility and policy
access. Per-bucket CORS rules apply on workspace-scoped endpoints. Explicit public policies may grant anonymous reads or listing only while
visibility=public; visibility alone grants only known-object downloads.
Policies can further restrict access with explicit Deny rules. Public-access blocks
also reject wildcard and broad NotPrincipal grants. Requester Pays requires the request acknowledgment while
charges continue to use the owning workspace wallet. Cross-account AWS IAM
semantics are not implemented.
New uploads use authenticated AES-256 encryption. SSE-C requires the same customer key on applicable operations and does not store that key. Managed key modes use the existing external key service and workspace key identifiers; AWS KMS account keys/ARNs are not supported. Lifecycle rules support expiration, noncurrent-version expiration, marker cleanup and incomplete-upload abort.
Use us-east-1 as the signing region. Presigns can last up to seven days,
subject to live credential expiry/revocation and server limits. Requests/parts
can contain up to 5 GiB; larger objects use multipart. Concurrent replacement can
return OperationAborted; retry as a new upload. Active uploads prevent bucket
deletion. Stored HTTP cache metadata is honored: choose cache directives with
your private-data and revocation requirements in mind.
This remains an S3 subset. Provider-enforced retention/legal hold, replication,
notifications, inventory/analytics, website hosting, public/external ACL grants, SigV2,
temporary session tokens, archival classes, tier transitions and restoration
remain unsupported. STANDARD is the supported storage class. The API
repository’s operation matrix records remaining parameter and operation gaps.
For example, AWS CLI server-side copy, move, sync and recursive removal use the same endpoint and profile as uploads. Check the selected workspace and credential scopes before running mutations:
aws --profile inferenceport --endpoint-url https://api.inferenceport.ai/WORKSPACE_UUID/s3 s3 cp s3://models/source.bin s3://models/copied.bin
aws --profile inferenceport --endpoint-url https://api.inferenceport.ai/WORKSPACE_UUID/s3 s3 sync s3://models/ ./downloaded-models/
Bulk deletion accepts up to 1000 keys and reports failures per key; an HTTP 200 response can still contain individual deletion errors. Copying objects larger than 5 GiB requires multipart copy. AWS CLI chooses multipart copy from its configured multipart threshold and preserves tags using tagging operations.
SDK configuration#
Use InferencePort-issued credentials from a secure provider/profile. Force SigV4
and path addressing. Some default boto3 presign configurations otherwise choose
SigV2. Replace WORKSPACE_UUID below with the ID returned by the authenticated
workspace endpoint; do not use the bucket name in its place:
aws configure set s3.addressing_style path --profile inferenceport
aws configure set s3.signature_version s3v4 --profile inferenceport
aws --profile inferenceport --region us-east-1 \
--endpoint-url https://api.inferenceport.ai/WORKSPACE_UUID/s3/ s3 ls
import boto3
from botocore.config import Config
client = boto3.client(
"s3", endpoint_url="https://api.inferenceport.ai/WORKSPACE_UUID/s3/",
region_name="us-east-1",
config=Config(signature_version="s3v4", s3={"addressing_style": "path"}),
)
import { S3Client } from "@aws-sdk/client-s3";
const client = new S3Client({
endpoint: "https://api.inferenceport.ai/WORKSPACE_UUID/s3/",
region: "us-east-1",
forcePathStyle: true,
});
rclone#
Use rclone config to create an S3 remote with the following settings. Enter
the InferencePort-issued Access Key ID and Secret Access Key when prompted:
Setting |
Value |
|---|---|
Provider |
|
Endpoint |
The exact workspace endpoint from Connect, including |
Region |
|
Force path style |
|
ACL |
Default |
For a remote named inferenceport and an existing permitted bucket models:
rclone copy ./models inferenceport:models/
rclone check ./models inferenceport:models/
rclone copy inferenceport:models/ ./downloaded-models/
Multipart upload, checksum-based sync/check, server-side copy/move, empty files, Unicode names and modification-time updates are tested with rclone v1.76.0. Read/write credentials can ensure an existing permitted destination without changing its quota, visibility or data. Creating new buckets, changing settings or deleting a bucket requires admin capability. Prefix and bucket scopes still constrain object access.
Object responses default to attachments, with content sniffing disabled and sandbox restrictions. Content metadata can select other delivery headers; this is not an application-hosting service.
Keys are opaque UTF-8, decoded once. SDK requests preserve Unicode, encoded
slashes, repeated separators and dot segments. Browser WHATWG URL/fetch handling
normalizes literal .. path segments: use a client that preserves the original
request target for those presigned URLs, and never edit a URL after signing.
Pricing and credits#
GET /v1/buckets/pricing publishes current storage, operation and transfer
prices in USD with volume bands, effective dates and an immutable rate version.
All usage is billed from the first unit; there is no free storage or transfer
allowance. Always use the returned catalog for current prices. Stored and retained
data is prorated by byte-hours using the actual UTC month length.
POST /v1/buckets/pricing/quote accepts a meter, quantity and optional rate
version and returns cost in USD. A quote does not reserve credits. Historical
quotes and recorded usage retain their original rate versions when new prices
are published. Volume bands are shared across the service.
Existing personal/org wallets and ledgers are reused. Refundable holds reduce available credits before billable work; closed-day settlement refunds holds and debits measured charges under the owner-wallet lock. Deterministic IDs prevent retry charges. Fractions carry at the existing 0.0001-credit precision. Retained versions and pending data remain billable after logical deletion. Insufficient credits pause new writes; they never cause automatic object deletion.
Compatibility#
AWS CLI v2, boto3 and JavaScript SDK v3 are tested with path-style addressing and
an endpoint containing /s3/. Other clients must support that configuration and
the operation subset listed above. Bucket names are unique within a workspace;
the credentials determine which personal or organization workspace is accessed.
Prefix-scoped credentials can list their allowed prefixes, but cannot list the bucket root. For clients that require whole-bucket browsing, issue a credential with the object-prefix field blank. Turn off read-only access when uploads are required. Rotation preserves the old credential’s scope.
See the API setup and operations guide.