Skip to content
Get started

Uploads

Issue short-lived presigned URLs for direct client-to-object-storage uploads. Created uploads can be referenced by id when creating or updating resources that accept binary content (e.g., MemoryEntry).

Create an upload
client.Uploads.New(ctx, workspaceID, body) (*Upload, error)
POST/v1/workspaces/{workspaceId}/uploads
Get an upload by ID
client.Uploads.Get(ctx, workspaceID, id) (*Upload, error)
GET/v1/workspaces/{workspaceId}/uploads/{id}
ModelsExpand Collapse
type Upload struct{…}

A handle representing a single file upload flow. Clients call CreateUpload to receive a short-lived presigned URL, PUT the file directly to object storage, then reference the upload by id when creating or updating resources that accept binary content.

Uploads are one-shot: once consumed by a creating or updating resource the upload transitions to UPLOAD_STATUS_CONSUMED and cannot be reused. Unused uploads expire and are garbage-collected.

CreatedBy ProfileOptional

A profile identifies a user or non-human principal (such as an API key) at the account level. Profiles are account-scoped and can be granted access to multiple workspaces.

AccountResourceMetadata is used to represent a resource that is associated to an account but not to a workspace.

ID string

Unique identifier for the resource (prefixed ULID, e.g., “apikey_01HXK…”)

AccountID string

Account this resource belongs to for multi-tenant isolation (prefixed ULID)

Name string

Human-readable name for the resource (e.g., “Customer Support Agent”, “Email Tool”) Required for resources that users interact with directly

ProfileID string
ExternalID stringOptional

External ID for the resource (e.g., a workflow ID from an external system)

Labels map[string, string]Optional

Arbitrary key-value pairs for categorization and filtering Examples: {“environment”: “production”, “team”: “platform”, “version”: “v2”}

Configuration for a profile.

Type ProfileSpecType

Whether this profile represents a human user, an API key, or a system principal.

formatenum
One of the following:
const ProfileSpecTypeProfileTypeUnspecified ProfileSpecType = "PROFILE_TYPE_UNSPECIFIED"
const ProfileSpecTypeProfileTypeUser ProfileSpecType = "PROFILE_TYPE_USER"
const ProfileSpecTypeProfileTypeAPIKey ProfileSpecType = "PROFILE_TYPE_API_KEY"
const ProfileSpecTypeProfileTypeSystem ProfileSpecType = "PROFILE_TYPE_SYSTEM"
Email stringOptional

Email address of the profile. Required and unique within an account for user profiles.

Name stringOptional

Display name (e.g., “Bobby Tables”).

Status UploadInfoStatusOptional

Lifecycle state. Transitions PENDING → COMPLETE (storage confirms the object exists) → CONSUMED (a resource referenced this upload), or → EXPIRED (URL elapsed without a PUT).

formatenum
One of the following:
const UploadInfoStatusUploadStatusUnspecified UploadInfoStatus = "UPLOAD_STATUS_UNSPECIFIED"
const UploadInfoStatusUploadStatusPending UploadInfoStatus = "UPLOAD_STATUS_PENDING"
const UploadInfoStatusUploadStatusComplete UploadInfoStatus = "UPLOAD_STATUS_COMPLETE"
const UploadInfoStatusUploadStatusConsumed UploadInfoStatus = "UPLOAD_STATUS_CONSUMED"
const UploadInfoStatusUploadStatusExpired UploadInfoStatus = "UPLOAD_STATUS_EXPIRED"
UploadURL stringOptional

Presigned PUT URL. Short-lived. The client must PUT with the exact Content-Type declared in the spec, and the body length must match size_bytes.

UploadURLExpiresAt TimeOptional

Absolute time at which upload_url stops working.

formatdate-time

Standard metadata for persistent, named resources (e.g., agents, tools, prompts)

ID string

Unique identifier for the resource (prefixed ULID, e.g., “agent_01HXK…”)

AccountID string

Account this resource belongs to for multi-tenant isolation (prefixed ULID)

CreatedAt Time

Timestamp when this resource was created

formatdate-time
Name string

Human-readable name for the resource (e.g., “Customer Support Agent”, “Email Tool”) Required for resources that users interact with directly

ProfileID string

ID of the actor (user or service account) that created this resource

WorkspaceID string

Workspace this resource belongs to for organizational grouping (prefixed ULID)

BundleKey stringOptional

Optional bundle ownership key. When set, indicates the resource is managed by a configuration bundle identified by this key. Used by BulkWorkspaceResources.Apply to track which resources belong to which bundle for reconciliation / soft-delete on re-apply.

ExternalID stringOptional

External ID for the resource (e.g., a workflow ID from an external system)

Labels map[string, string]Optional

Arbitrary key-value pairs for categorization and filtering Examples: {“environment”: “production”, “team”: “platform”, “version”: “v2”}

ContentType string

MIME type the client will send. Baked into the presigned URL’s signature — the PUT must match exactly or object storage will reject it.

Filename string

Client-supplied filename. Used for audit and display only; does not control the object’s storage path.

SizeBytes string

Expected size of the upload in bytes. Baked into the presigned URL as a Content-Length constraint.

type UploadInfo struct{…}
CreatedBy ProfileOptional

A profile identifies a user or non-human principal (such as an API key) at the account level. Profiles are account-scoped and can be granted access to multiple workspaces.

AccountResourceMetadata is used to represent a resource that is associated to an account but not to a workspace.

ID string

Unique identifier for the resource (prefixed ULID, e.g., “apikey_01HXK…”)

AccountID string

Account this resource belongs to for multi-tenant isolation (prefixed ULID)

Name string

Human-readable name for the resource (e.g., “Customer Support Agent”, “Email Tool”) Required for resources that users interact with directly

ProfileID string
ExternalID stringOptional

External ID for the resource (e.g., a workflow ID from an external system)

Labels map[string, string]Optional

Arbitrary key-value pairs for categorization and filtering Examples: {“environment”: “production”, “team”: “platform”, “version”: “v2”}

Configuration for a profile.

Type ProfileSpecType

Whether this profile represents a human user, an API key, or a system principal.

formatenum
One of the following:
const ProfileSpecTypeProfileTypeUnspecified ProfileSpecType = "PROFILE_TYPE_UNSPECIFIED"
const ProfileSpecTypeProfileTypeUser ProfileSpecType = "PROFILE_TYPE_USER"
const ProfileSpecTypeProfileTypeAPIKey ProfileSpecType = "PROFILE_TYPE_API_KEY"
const ProfileSpecTypeProfileTypeSystem ProfileSpecType = "PROFILE_TYPE_SYSTEM"
Email stringOptional

Email address of the profile. Required and unique within an account for user profiles.

Name stringOptional

Display name (e.g., “Bobby Tables”).

Status UploadInfoStatusOptional

Lifecycle state. Transitions PENDING → COMPLETE (storage confirms the object exists) → CONSUMED (a resource referenced this upload), or → EXPIRED (URL elapsed without a PUT).

formatenum
One of the following:
const UploadInfoStatusUploadStatusUnspecified UploadInfoStatus = "UPLOAD_STATUS_UNSPECIFIED"
const UploadInfoStatusUploadStatusPending UploadInfoStatus = "UPLOAD_STATUS_PENDING"
const UploadInfoStatusUploadStatusComplete UploadInfoStatus = "UPLOAD_STATUS_COMPLETE"
const UploadInfoStatusUploadStatusConsumed UploadInfoStatus = "UPLOAD_STATUS_CONSUMED"
const UploadInfoStatusUploadStatusExpired UploadInfoStatus = "UPLOAD_STATUS_EXPIRED"
UploadURL stringOptional

Presigned PUT URL. Short-lived. The client must PUT with the exact Content-Type declared in the spec, and the body length must match size_bytes.

UploadURLExpiresAt TimeOptional

Absolute time at which upload_url stops working.

formatdate-time
type UploadSpec struct{…}
ContentType string

MIME type the client will send. Baked into the presigned URL’s signature — the PUT must match exactly or object storage will reject it.

Filename string

Client-supplied filename. Used for audit and display only; does not control the object’s storage path.

SizeBytes string

Expected size of the upload in bytes. Baked into the presigned URL as a Content-Length constraint.