ServerOps.ggbeta
API ReferenceMedia

Upload a file

Upload a file using multipart/form-data. The file part must declare a Content-Type header - the server validates it against the actual file bytes via magic-byte sniffing. Mismatches are rejected.

Size limits by content type:

TypeLimit
Images50 MB
Video500 MB
Audio100 MB
Documents50 MB

Requires media:write scope.

POST
/media

Authorization

bearerAuth media:write
AuthorizationBearer <token>

API token from your dashboard.

Format: so_live_... (production) or so_test_... (test mode).

Tokens carry one or more scopes. Request only the scopes your integration needs:

ScopeGrants
media:readList and retrieve files
media:writeUpload and delete files
logs:readRead log entries
logs:writeIngest log entries
cases:readRead cases
cases:writeCreate and update cases
apps:readRead apps
apps:writeSubmit apps
usage:readRead quota usage
members:readList organisation members
members:writeInvite and remove members
billing:readRead billing and subscription info
tokens:writeCreate and revoke API tokens

In: header

Scope: media:write

Request Body

multipart/form-data

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/media" \  -F file="string"
{
  "id": "f_01HZXXXXXXXXXXXXXXXXXXXXX",
  "url": "https://media.serverops.gg/p_01HZ.../screenshot.png",
  "key": "string",
  "size": 2097152,
  "content_type": "image/png",
  "sha256": "string",
  "original_name": "screenshot.png",
  "tags": [
    "string"
  ],
  "folder": "string",
  "abuse_status": "clean",
  "visibility": "public",
  "storage_class": "standard",
  "created_at": "2019-08-24T14:15:22Z",
  "updated_at": "2019-08-24T14:15:22Z"
}
{
  "error": {
    "code": "bad_request",
    "message": "missing required field"
  }
}
{
  "error": {
    "code": "unauthorized",
    "message": "missing or invalid authorization token"
  }
}

{
  "error": {
    "code": "forbidden",
    "message": "token does not have the required scope"
  }
}

{
  "error": {
    "code": "too_large",
    "message": "file exceeds maximum allowed size"
  }
}
{
  "error": {
    "code": "quota_exceeded",
    "message": "tier quota exceeded for storage_bytes",
    "metric": "storage_bytes",
    "quotas": [
      {
        "metric": "storage_bytes",
        "used": 10737418240,
        "limit": 10737418240,
        "cumulative": true
      }
    ]
  }
}
{
  "error": {
    "code": "internal",
    "message": "an unexpected error occurred"
  }
}
{
  "error": {
    "code": "storage_error",
    "message": "failed to write to storage"
  }
}