For the complete documentation index, see llms.txt. This page is also available as Markdown.

Request Signed URL for Upload/Download Files

to generate signed URLs both for uploads and downloads

POST <base_url>/port/api/v1/commerce/signedUrls

Please replace <base_url> as explained here.

Category

Logical: bucket

Semantic: meaning in the SRR

In attachmentFiles[*].category

In thumbnailURL / image / contractTerms.fileURL

non_attachment_file

public

Supporting file that is not part of the work — referenced by URL only

❌ not accepted

recommended

artwork

public

A digital component of the artwork itself — its content hash is written into metadata.digitalComponents (part of the authenticity claim)

✅ → folded into digitalComponents

✅ accepted (public), but semantically reserve it for actual artwork files

certificate

private

Certificate document attached to the work

✅ → folded into attachmentFiles

❌ rejected — private bucket, viewers cannot access

for_authenticity

private

Authenticity evidence attached to the work

✅ → folded into attachmentFiles

❌ rejected

installation

private

Installation instructions/records attached to the work

✅ → folded into attachmentFiles

❌ rejected

Precaution

File Size

File Name

Headers

Name
Type
Description

commerce-api-key*

string

Commerce API Key.

issuer-address*

string

Contract Address of API Key owner.

Request Body

Name
Type
Description

action*

string (write and read)

Field to specify the action of the Signed URL. Value

write

to request upload signed URL, and

read

to request download signed URL.

payload*

array

Array of signed URL request.

payload[*].filename*

string

The filename must meet the constraints mentioned above.

If the client needs to delete an existing file, please contact Startbahn.

payload[*].category*

string

Please refer to the category table at the top of this page for how each category is treated (bucket + meaning), and this page for product-level background.

Use non_attachment_file to upload thumbnails, images and contract terms.

The API responds with 201 when the signed URL is created. The validity of the signed URL is 15 minutes after it is created.

The client’s back-end needs to consider its upload speed. If the files that need to be uploaded are many, client’s back-end may consider splitting the signed URL request to ensure that all of the files are uploaded.

Body Attribute
Description
Format

results

results of the request

Array

results[*].filename

Name of the file, same as one in the request

string

results[*].contentType

Content-Type that was chosen and set for the file. You need to set the same value in Content-Type header when uploading or downloading the file with the signed URL. Otherwise, you will get an error about signature mismatch.

string

results[*].url

The signed URL that client can use to perform action such as upload or download. NOTE: This URL is only valid for 15 minutes and should not be saved. Please check the reference below.

string

results[*].finalUrl

The URL that client should save and use when calling issue endpoint. Check below for details

string

Usage of Final URL

category
Usage
example

certificate, installation, for_authenticity

On issue endpoint, use it for payload.attachmentFiles[*].url

non_attachment_file

use it for the field in metadata on the image, payload[*].metadata.thumbnailURL or payload[*].metadata.contractTerms.fileURL

Swagger Endpoint (Test Environment)

Swagger to test.

Required Permissions

Check parent page.

Request Body Example

Signed URL for upload

Signed URL for Download

Code Example

Check parent page.

Reference

https://cloud.google.com/storage/docs/access-control/signed-urls

Last updated

Was this helpful?