Skip to main content
POST
Call brand_kit.upload_asset

Authorizations

Authorization
string
header
required

An API key minted at Settings › API & MCP. Send it as Authorization: Bearer <key>. A key carries its holder's own permissions, resolved on every call — revoking a membership closes the key's reach immediately. Keep it in an environment variable (GOOSY_API_KEY), never in a committed file.

Headers

x-request-id
string

Your own id for this request, echoed back and recorded on the audit trail. 1–128 characters from A–Z a–z 0–9 . _ : -, starting with a letter or digit; anything else is replaced by a generated id.

Maximum string length: 128

Body

application/json
action
enum<string>
required
Available options:
start,
complete
kind
enum<string>
Available options:
logo,
person_picture,
document,
reference
filename
string
Required string length: 1 - 255
mime_type
string
Required string length: 1 - 160
byte_size
integer
label
string
Required string length: 1 - 240
person
string
Required string length: 1 - 120
asset_id
string<uuid>
workspace
string

Which workspace to run in — its slug. Omit to use your default. With more than one reachable workspace and no default, the call is refused and the choices are listed.

Minimum string length: 1

Response

The call was admitted and dispatched. ok says whether the tool succeeded — a refusal the tool itself produced is still a 200, exactly as it is a successful JSON-RPC result over MCP.

The tool ran and answered.

ok
boolean
required
action
enum<string>
required
Available options:
start,
complete
state
enum<string>
required

open: send the bytes, then complete. landed: the file is in the library.

Available options:
open,
landed
asset_id
string<uuid>
required
kind
enum<string>
required
Available options:
logo,
person_picture,
document,
reference
line
string
required
workspace
string
required

The slug of the workspace this call ran in.

working_in
object
required

Which workspace this call ran in, and how that was decided. Present on every workspace-scoped result.

put_url
string

start: where to PUT the file's bytes, with the content-type in put_headers. It is the caller's own short-lived upload address.

put_headers
object
expires_in_seconds
integer
fact_id
string<uuid>
job_run_id
string<uuid>

complete: the confirm's job reference, for support. The file reads confirmed in seconds; read it as read_outcome_with says.

read_outcome_with
object

brand_kit.read with kind "asset" shows the outcome.