Upsert integration content type
Creates or updates a content type for an integration, with ownership verification.
Authorization
OAuth2 upl:privateOAuth 2.0 authorization
In: header
Scope: upl:private
Header Parameters
Define the version of the Connect protocol
Define the timeout, in ms
Request Body
application/json
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.
1 <= lengthExisting content type ID (omit for create)
uuidINTERACTIVE 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.
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.
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)
int32Immutable 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.
^[a-z][a-z0-9-]{0,62}[a-z0-9]$2 <= length <= 64Human-readable label shown in the admin UI.
length <= 255FontAwesome key for the file icon (e.g., "faFileImage").
length <= 64Serialized ContentTypeMatcher proto. Pipeline evaluates it against the upload's detection result to decide which content type matches.
bytelength <= 1048576Higher 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
int32Upload 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).
^$|^[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}$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": {}
}
]
}