Skip to content
FLORA DocsGo to app

Create an asset upload

client.Assets.New(ctx, body) (*AssetNewResponse, error)
POST/assets

Creates an asset from an allowlisted source URL or reserves a signed upload URL. Mutating public API requests support an optional Idempotency-Key header for client retries; duplicate keys within two hours return idempotency_duplicate.

ParametersExpand Collapse
body AssetNewParams
Source param.Field[string]

Asset source URL or signed-url upload mode

WorkspaceID param.Field[string]

Workspace identifier

ContentType param.Field[string]Optional

Asset content type

FileName param.Field[string]Optional

Asset file name

Folder param.Field[string]Optional

Destination folder

ReturnsExpand Collapse
type AssetNewResponse struct{…}
AssetID string

Asset identifier

Status AssetNewResponseStatus
One of the following:
const AssetNewResponseStatusPendingUpload AssetNewResponseStatus = "pending_upload"
const AssetNewResponseStatusReady AssetNewResponseStatus = "ready"
const AssetNewResponseStatusFailed AssetNewResponseStatus = "failed"
UploadedVia AssetNewResponseUploadedVia

Asset source

One of the following:
const AssetNewResponseUploadedViaURL AssetNewResponseUploadedVia = "url"
const AssetNewResponseUploadedViaSignedURL AssetNewResponseUploadedVia = "signed_url"
URL string

Asset URL

formaturi
Visibility Workspace
WorkspaceID string

Workspace identifier

ExpiresAt TimeOptional

Expiration time for the upload URL

formatdate-time
Upload AssetNewResponseUploadOptional
ContentType MultipartFormData
FileField File
FormFields map[string, string]

Upload form fields

Method Post
URL string

Upload URL

formaturi
UploadURL stringOptional

Upload URL (serialized)

Create an asset upload

package main

import (
  "context"
  "fmt"

  "github.com/florafauna-ai/flora-go"
  "github.com/florafauna-ai/flora-go/option"
)

func main() {
  client := flora.NewClient(
    option.WithAPIKey("My API Key"),
  )
  asset, err := client.Assets.New(context.TODO(), flora.AssetNewParams{
    Source: "signed-url",
    WorkspaceID: "ws_abc123",
  })
  if err != nil {
    panic(err.Error())
  }
  fmt.Printf("%+v\n", asset.AssetID)
}
{
  "asset_id": "asset_abc123",
  "status": "pending_upload",
  "uploaded_via": "url",
  "url": "https://example.com",
  "visibility": "workspace",
  "workspace_id": "ws_abc123",
  "expires_at": "2019-12-27T18:11:19.117Z",
  "upload": {
    "content_type": "multipart/form-data",
    "file_field": "file",
    "form_fields": {
      "foo": "string"
    },
    "method": "POST",
    "url": "https://example.com"
  },
  "upload_url": "https://upload.imagekit.io/api/v1/files/upload"
}
{
  "error": {
    "code": "input_validation_error",
    "message": "prompt: Required",
    "fields": [
      {
        "field": "prompt",
        "message": "Required"
      }
    ]
  }
}
{
  "error": {
    "code": "unauthorized",
    "message": "Invalid API key."
  }
}
{
  "error": {
    "code": "insufficient_credits",
    "message": "Insufficient credits."
  }
}
{
  "error": {
    "code": "forbidden",
    "message": "Forbidden."
  }
}
{
  "error": {
    "code": "not_found",
    "message": "Not found."
  }
}
{
  "error": {
    "code": "idempotency_duplicate",
    "message": "Duplicate idempotency key."
  }
}
{
  "error": {
    "code": "rate_limited",
    "message": "Rate limit exceeded."
  }
}
{
  "error": {
    "code": "unknown_error",
    "message": "An unknown error occurred."
  }
}
Returns Examples
{
  "asset_id": "asset_abc123",
  "status": "pending_upload",
  "uploaded_via": "url",
  "url": "https://example.com",
  "visibility": "workspace",
  "workspace_id": "ws_abc123",
  "expires_at": "2019-12-27T18:11:19.117Z",
  "upload": {
    "content_type": "multipart/form-data",
    "file_field": "file",
    "form_fields": {
      "foo": "string"
    },
    "method": "POST",
    "url": "https://example.com"
  },
  "upload_url": "https://upload.imagekit.io/api/v1/files/upload"
}
{
  "error": {
    "code": "input_validation_error",
    "message": "prompt: Required",
    "fields": [
      {
        "field": "prompt",
        "message": "Required"
      }
    ]
  }
}
{
  "error": {
    "code": "unauthorized",
    "message": "Invalid API key."
  }
}
{
  "error": {
    "code": "insufficient_credits",
    "message": "Insufficient credits."
  }
}
{
  "error": {
    "code": "forbidden",
    "message": "Forbidden."
  }
}
{
  "error": {
    "code": "not_found",
    "message": "Not found."
  }
}
{
  "error": {
    "code": "idempotency_duplicate",
    "message": "Duplicate idempotency key."
  }
}
{
  "error": {
    "code": "rate_limited",
    "message": "Rate limit exceeded."
  }
}
{
  "error": {
    "code": "unknown_error",
    "message": "An unknown error occurred."
  }
}