Upsert Pipeline
Creates or updates a pipeline keyed by id, or by (integration, content_type_urn, resource_kind) when id is empty. The integration is taken from integration_id (UUID or slug) or else from the URN's slug prefix. On update, content_type_urn and resource_kind are immutable (InvalidArgument), the policy is replaced, the status drops back to DRAFT, and the step list is replaced atomically in request order. InvalidArgument when pipeline is missing.
Access: authenticated caller who owns the integration's OAuth client (and its application, when the client belongs to one), or any caller holding the upl:admin scope. System integrations such as Default require upl:admin. Missing integrations return NotFound; other callers get PermissionDenied.
JWT access token obtained via OAuth2 flow or service account
In: header
Header Parameters
Define the version of the Connect protocol
Define the timeout, in ms
Request Body
application/json
The pipeline to write. id may be empty for create. integration_id,
content_type_urn, and resource_kind together identify the row;
those three are immutable post-create (changing them = new pipeline).
version, status, created_at, updated_at, published_at are
server-controlled and ignored on writes.
steps is the full ordered list — replaces any prior steps atomically.
Response Body
application/json
application/json
curl -X POST "https://uploads-api.xeonr.io/uplim.api.v1.PipelineAdminService/UpsertPipeline" \ -H "Connect-Protocol-Version: 1" \ -H "Connect-Timeout-Ms: 1000" \ -H "Content-Type: application/json" \ -d '{ "pipeline": {} }'{
"pipeline": {
"id": "string",
"integrationId": "string",
"contentTypeUrn": "string",
"resourceKind": "PIPELINE_RESOURCE_KIND_UNSPECIFIED",
"version": 0,
"status": "PIPELINE_STATUS_UNSPECIFIED",
"steps": [
{
"stepId": "string",
"kind": "PIPELINE_STEP_KIND_UNSPECIFIED",
"exec": {
"ref": "string",
"inputs": {
"property1": "string",
"property2": "string"
},
"configJson": "string",
"outputs": [
{
"slot": "string",
"required": true,
"blob": {
"name": "string",
"mimeHint": "string",
"maxSizeBytes": "string"
}
}
],
"secrets": [
{
"name": "string",
"from": "string"
}
]
}
}
],
"policy": {
"maxRetriesPerStep": 5,
"stepTimeoutSec": 1,
"pipelineTimeoutSec": 0
},
"createdAt": "2023-01-15T01:30:15.01Z",
"updatedAt": "2023-01-15T01:30:15.01Z",
"publishedAt": "2023-01-15T01:30:15.01Z"
}
}{
"code": "not_found",
"message": "string",
"details": [
{
"type": "string",
"value": "string",
"debug": {}
}
]
}