Xeonr Developer Docs

Upsert integration content type

POST
/uplim.api.v1.IntegrationAdminService/UpsertIntegrationContentType

Creates or updates a content type for an integration, with ownership verification.

Authorization

OAuth2 upl:private
AuthorizationBearer <token>

OAuth 2.0 authorization

In: header

Scope: upl:private

Header Parameters

Connect-Protocol-Version?number

Define the version of the Connect protocol

Connect-Timeout-Ms?number

Define the timeout, in ms

Request Body

application/json

integrationId?string

The parent integration that owns this content type. Accepts a UUID (admin UI / legacy callers) or a slug (URN prefix — CLI publishers that read URNs out of yaml). Server detects which by UUID-parse.

Length1 <= length
updateMask?string
contentTypeId?string|null

Existing content type ID (omit for create)

Formatuuid
criteria?|null
renderer?|null

INTERACTIVE renderer bind (persisted to renderer_config). The archive must ship a dashboard/portal surface — the server rejects a bind to a thumbnail-only archive (it would mount an iframe that 404s). Include "renderer" in update_mask to set/clear.

openWith?|null
worker?|null

THUMBNAIL/worker renderer bind (persisted to worker_config) — the archive whose worker.html the puppeteer thumbnail pipeline drives, resolved via the step's content_type_urn late-bind. Publishers route a worker-bearing archive here (and to renderer too, same archive, when it also ships an interactive surface). Include "worker" in update_mask to set/clear.

priority?integer

Lower number = higher priority Deprecated: the column was dropped; the server accepts and ignores it. validate:skip accepted but ignored by the server (column dropped)

Formatint32
name?string|null

Immutable URN local part (e.g., "image" in "default:image"). Set on create; immutable thereafter. Sending a different name on update returns InvalidArgument. Format: lowercase letter + lowercase alphanumeric/hyphen, 2-64 chars.

Match^[a-z][a-z0-9-]{0,62}[a-z0-9]$
Length2 <= length <= 64
displayLabel?string|null

Human-readable label shown in the admin UI.

Lengthlength <= 255
iconName?string|null

FontAwesome key for the file icon (e.g., "faFileImage").

Lengthlength <= 64
matcher?string|null

Serialized ContentTypeMatcher proto. Pipeline evaluates it against the upload's detection result to decide which content type matches.

Formatbyte
Lengthlength <= 1048576
matcherPriority?integer|null

Higher wins. Source of truth is ContentTypeMatcher.priority; this field is denormalized for index-driven ordering during retrieval. validate:skip stored verbatim in an int column; any int32 (incl. negative) is a valid priority

Formatint32
iconUploadId?string|null

Upload ID of a custom icon image (PNG/SVG/JPG/etc) the user has uploaded into the internal bucket via CreateIntegrationContentTypeIconUploadIntent. When set, takes precedence over icon_name — the frontend renders the image rather than the FontAwesome icon. Send empty string in the update mask path to clear (revert to icon_name / generic fallback).

Match^$|^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$
[key: string]?never

Response Body

application/json

application/json

curl -X POST "https://uploads-api.xeonr.io/uplim.api.v1.IntegrationAdminService/UpsertIntegrationContentType" \  -H "Connect-Protocol-Version: 1" \  -H "Connect-Timeout-Ms: 1000" \  -H "Content-Type: application/json" \  -d '{}'
{
  "contentType": {
    "id": "string",
    "integrationId": "string",
    "criteria": {
      "kinds": [
        "CONTENT_TARGET_KIND_UNSPECIFIED"
      ]
    },
    "renderer": {
      "enabled": true,
      "archiveUploadId": "0f00a816-1fc2-4597-bbce-ea7af713750b",
      "entryPath": "string"
    },
    "openWith": {
      "enabled": true,
      "callbackUrl": "http://example.com"
    },
    "priority": 0,
    "createdAt": "2023-01-15T01:30:15.01Z",
    "updatedAt": "2023-01-15T01:30:15.01Z",
    "name": "string",
    "displayLabel": "string",
    "iconName": "string",
    "matcher": "string",
    "matcherPriority": 0,
    "iconUploadId": "string",
    "worker": {
      "enabled": true,
      "archiveUploadId": "0f00a816-1fc2-4597-bbce-ea7af713750b",
      "entryPath": "string"
    }
  }
}
{
  "code": "not_found",
  "message": "string",
  "details": [
    {
      "type": "string",
      "value": "string",
      "debug": {}
    }
  ]
}