Xeonr Developer Docs

Upsert Pipeline

POST
/uplim.api.v1.PipelineAdminService/UpsertPipeline

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.

AuthorizationBearer <token>

JWT access token obtained via OAuth2 flow or service account

In: header

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

pipeline*

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.

[key: string]?never

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": {}
    }
  ]
}