> ## Documentation Index
> Fetch the complete documentation index at: https://docs.clinia.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Upsert a contained resource in the registry

> Upsert a contained resource in the registry.




## OpenAPI

````yaml /api-reference/registry.yml put /sources/{sourceKey}/v1/resources/{resourceType}/{id}/{containKey}/{containedResourceId}
openapi: 3.0.1
info:
  title: Registry API
  version: 1.0.0
servers:
  - url: https://api.{workspaceId}.clinia.cloud
    variables:
      workspaceId:
        default: ''
        description: The workspace id.
security:
  - apiKey: []
  - basicHttpAuth: []
  - bearerHttpAuth: []
tags:
  - name: Collections
    description: Management of collections in a registry.
  - name: Relationships
    description: Management of relationships in a registry.
  - name: Resources
    description: Management of resources in a registry.
paths:
  /sources/{sourceKey}/v1/resources/{resourceType}/{id}/{containKey}/{containedResourceId}:
    put:
      tags:
        - Resources
      summary: Upsert a contained resource in the registry
      description: |
        Upsert a contained resource in the registry.
      operationId: UpsertContainedResource
      parameters:
        - name: sourceKey
          in: path
          description: The key of the source.
          required: true
          schema:
            type: string
        - name: resourceType
          in: path
          description: Type of the resource. Key of the profile.
          required: true
          schema:
            type: string
        - name: id
          in: path
          description: Id of the resource.
          required: true
          schema:
            type: string
        - name: containKey
          in: path
          description: >-
            Key of the contained resource. This is the key of the profile that
            defines the contained resource type.
          required: true
          schema:
            type: string
        - name: containedResourceId
          in: path
          description: Id of the contained resource.
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              required:
                - data
                - type
              type: object
              properties:
                type:
                  description: type for the contained resource.
                  type: string
                data:
                  type: object
                  x-is-generic: true
                  description: Dynamic data attributes, based on the resource type.
                contained:
                  description: >-
                    Resources contained in this top-level resource. Contained
                    resources exists only within the context of this top-level
                    resource.
                  type: object
                  additionalProperties:
                    type: array
                    items:
                      $ref: '#/components/schemas/v1SourceResource'
              additionalProperties: false
      responses:
        '200':
          description: >-
            A successful response when the contained resource was replaced with
            a status 'PERSISTED'. The root resource is returned.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/v1DomainResourceOperationResponse'
        '201':
          description: >-
            A successful response when the contained resource was created with a
            status 'PERSISTED'.  The root resource is returned.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/v1DomainResourceOperationResponse'
        '202':
          description: >-
            A successful response when the upsert resource task is accepted with
            a status 'ACCEPTED'.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/v1DomainResourceOperationResponse'
        '400':
          description: Returned when the request is malformed or invalid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/v1Error'
        '404':
          description: Returned when the resource type or the resource does not exist.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/v1RegistryError'
        '429':
          $ref: '#/components/responses/v1TooManyRequestError'
        '504':
          $ref: '#/components/responses/v1GatewayTimeoutError'
components:
  schemas:
    v1SourceResource:
      allOf:
        - $ref: '#/components/schemas/v1Resource'
    v1DomainResourceOperationResponse:
      allOf:
        - $ref: '#/components/schemas/v1SourceDomainResourceOperationResponse'
    v1Error:
      type: object
      required:
        - code
        - message
        - type
      properties:
        code:
          $ref: '#/components/schemas/v1ErrorCode'
        message:
          type: string
        type:
          $ref: '#/components/schemas/v1ErrorType'
        details:
          description: list of errors that occurred if applicable.
          type: array
          items:
            $ref: '#/components/schemas/v1Error'
        additionalContext:
          type: object
          additionalProperties: true
    v1RegistryError:
      allOf:
        - $ref: '#/components/schemas/v1Error'
        - type: object
          properties:
            code:
              $ref: '#/components/schemas/v1ErrorCode'
            applicationErrorCode:
              type: string
              enum:
                - REGISTRY_DUPLICATE_IDENTIFIER
                - REGISTRY_INVALID_COLLECTION_TYPE
                - REGISTRY_INVALID_CONTENT_TYPE
                - REGISTRY_INVALID_PIPELINE_STEP_DEFINITION
                - REGISTRY_INVALID_REQUEST_BODY
                - REGISTRY_INVALID_REVISION_ID
                - REGISTRY_PAYLOAD_PARSE_ERROR
                - REGISTRY_REQUIRED_FIELD_MISSING
                - REGISTRY_RESOURCE_TYPE_NOT_FOUND
                - REGISTRY_UNAVAILABLE_UPSTREAM_SERVICE
                - REGISTRY_BROWSE_SESSION_EXPIRED
                - REGISTRY_BULK_OPERATION_NOT_FOUND
                - REGISTRY_COLLECTION_NOT_FOUND
                - REGISTRY_CONTAINED_DEFINITION_NOT_FOUND
                - REGISTRY_PIPELINE_EXECUTION_NOT_FOUND
                - REGISTRY_PROFILE_NOT_FOUND
                - REGISTRY_PURGE_NOT_FOUND
                - REGISTRY_RELATIONSHIP_COLLECTION_NOT_FOUND
                - REGISTRY_RELATIONSHIP_DEFINITION_NOT_FOUND
                - REGISTRY_RELATIONSHIP_NOT_FOUND
                - REGISTRY_RESOURCE_NOT_FOUND
                - REGISTRY_RESOURCE_COLLECTION_NOT_FOUND
                - REGISTRY_SOURCE_NOT_FOUND
                - REGISTRY_TASK_NOT_FOUND
                - REGISTRY_VERSION_HISTORY_ITEM_NOT_FOUND
                - REGISTRY_REQUEST_CANCELLED
                - REGISTRY_REQUEST_TIMEOUT
                - REGISTRY_COLLECTION_ALREADY_EXISTS
                - REGISTRY_DUPLICATE_OPERATION_IN_BUNDLE
                - REGISTRY_IDENTIFIER_ALREADY_EXISTS
                - REGISTRY_RELATIONSHIP_ALREADY_EXISTS
                - REGISTRY_RELATIONSHIP_FROM_REF_ALREADY_EXISTS
                - REGISTRY_RELATIONSHIP_TO_REF_ALREADY_EXISTS
                - REGISTRY_RESOURCE_ALREADY_EXISTS
    v1Resource:
      required:
        - id
        - type
        - data
      type: object
      properties:
        id:
          title: The logical identifier
          type: string
        type:
          description: Type of the resource.
          type: string
        meta:
          $ref: '#/components/schemas/v1Meta'
        data:
          title: The dynamic attributes based on the resource type
          type: object
          x-is-generic: true
      additionalProperties: false
    v1SourceDomainResourceOperationResponse:
      oneOf:
        - $ref: >-
            #/components/schemas/v1SourceDomainResourcePersistedOperationResponse
        - $ref: '#/components/schemas/v1SourceDomainResourceAcceptedOperationResponse'
      discriminator:
        propertyName: status
        mapping:
          PERSISTED:
            $ref: >-
              #/components/schemas/v1SourceDomainResourcePersistedOperationResponse
          ACCEPTED:
            $ref: >-
              #/components/schemas/v1SourceDomainResourceAcceptedOperationResponse
    v1ErrorCode:
      type: integer
      format: int32
      enum:
        - 400
        - 401
        - 403
        - 404
        - 408
        - 409
        - 413
        - 429
        - 500
        - 501
        - 504
    v1ErrorType:
      type: string
      enum:
        - ALREADY_EXISTS
        - FAILED_PRECONDITION
        - INTERNAL
        - INVALID_ARGUMENT
        - NOT_FOUND
        - OUT_OF_RANGE
        - UNIMPLEMENTED
        - PERMISSION_DENIED
        - UNAUTHENTICATED
        - CONTENT_TOO_LARGE
        - REQUEST_TIMEOUT
        - TOO_MANY_REQUEST
        - GATEWAY_TIMEOUT
    v1Meta:
      type: object
      properties:
        createdAt:
          type: string
          description: Instant of creation of the resource.
          format: date-time
        identifier:
          type: array
          description: |
            Identifiers of the resource.
            Note: Combination of `source`, `value` and `use` must be unique.
          items:
            $ref: '#/components/schemas/v1Identifier'
        source:
          type: string
          description: The source of the resource.
          readOnly: true
        updatedAt:
          type: string
          description: Last update of the resource.
          format: date-time
      additionalProperties: false
    v1SourceDomainResourcePersistedOperationResponse:
      allOf:
        - $ref: '#/components/schemas/v1TaskSubmissionPersistedResponse'
        - type: object
          required:
            - resource
          properties:
            resource:
              $ref: '#/components/schemas/v1SourceDomainResource'
    v1SourceDomainResourceAcceptedOperationResponse:
      allOf:
        - $ref: '#/components/schemas/v1TaskSubmissionAcceptedResponse'
    v1Identifier:
      description: >-
        An identifier - identifies some entity uniquely and unambiguously.
        Typically this is used for business identifiers.
      properties:
        id:
          description: >-
            Unique id for the property within a resource (for internal
            references). This may be any string value that does not contain
            spaces.
          allOf:
            - $ref: '#/components/schemas/v1Symbol'
        system:
          description: >-
            Establishes the namespace for the value - that is, a URL that
            describes a set values that are unique.
          allOf:
            - $ref: '#/components/schemas/v1Uri'
        value:
          description: >-
            The portion of the identifier typically relevant to the user and
            which is unique within the context of the system.
          allOf:
            - $ref: '#/components/schemas/v1Symbol'
        use:
          description: The purpose of this identifier.
          allOf:
            - $ref: '#/components/schemas/v1Code'
        period:
          description: Time period when identifier was/is in use.
          allOf:
            - $ref: '#/components/schemas/v1Period'
      additionalProperties: false
    v1TaskSubmissionPersistedResponse:
      allOf:
        - $ref: '#/components/schemas/v1BaseTaskSubmissionResponse'
      description: >
        Response when a task has been executed synchronously and the results are
        immediately persisted.
    v1SourceDomainResource:
      type: object
      allOf:
        - $ref: '#/components/schemas/v1DomainResourceBase'
        - $ref: '#/components/schemas/v1SourceContainedResources'
    v1TaskSubmissionAcceptedResponse:
      allOf:
        - $ref: '#/components/schemas/v1BaseTaskSubmissionResponse'
      description: |
        Response when a task has been accepted for asynchronous processing.
        The task will be executed in the background.
    v1Symbol:
      pattern: ^[\s\S]+$
      type: string
      description: A sequence of Unicode characters.
    v1Uri:
      pattern: ^\S*$
      type: string
      description: String of characters used to identify a name or a resource.
    v1Code:
      pattern: ^[^\s]+( [^\s]+)*$
      type: string
      description: >-
        A string which has at least one character and no leading or trailing
        whitespace and where there is no whitespace other than single spaces in
        the contents.
    v1Period:
      type: object
      description: A time period defined by a start and end date and optionally time.
      properties:
        id:
          $ref: '#/components/schemas/v1Symbol'
          description: >-
            Unique id for the property within a resource (for internal
            references). This may be any string value that does not contain
            spaces.
        start:
          $ref: '#/components/schemas/v1DateTime'
          description: The start of the period. The boundary is inclusive.
        end:
          $ref: '#/components/schemas/v1DateTime'
          description: >-
            The end of the period. If the end of the period is missing, it means
            no end was known or planned at the time the instance was created.
            The start may be in the past, and the end date in the future, which
            means that period is expected/planned to end at that time.
      additionalProperties: false
    v1BaseTaskSubmissionResponse:
      type: object
      required:
        - status
        - taskId
      properties:
        taskId:
          $ref: '#/components/schemas/v1TaskId'
          readOnly: true
        status:
          $ref: '#/components/schemas/v1TaskSubmissionStatus'
          readOnly: true
    v1DomainResourceBase:
      required:
        - id
        - type
        - data
      type: object
      properties:
        id:
          title: The logical identifier
          type: string
          readOnly: true
        type:
          description: Type of the resource.
          type: string
          readOnly: true
        meta:
          $ref: '#/components/schemas/v1Meta'
        data:
          title: The dynamic attributes based on the resource type
          type: object
          x-is-generic: true
      additionalProperties: false
    v1SourceContainedResources:
      type: object
      properties:
        contained:
          description: >-
            Resources contained in this top-level resource. Contained resources
            exists only within the context of this top-level resource.
          type: object
          additionalProperties:
            type: array
            items:
              allOf:
                - $ref: '#/components/schemas/v1SourceResource'
      additionalProperties: false
    v1DateTime:
      pattern: >-
        ^([0-9]([0-9]([0-9][1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2][0-9]|3[0-1])(T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\.[0-9]{1,9})?)?)?(Z|(\+|-)((0[0-9]|1[0-3]):[0-5][0-9]|14:00)?)?)?$
      type: string
      description: >-
        A date, date-time or partial date (e.g. just year or year + month).  If
        hours and minutes are specified, a time zone SHALL be populated. The
        format is a union of the schema types gYear, gYearMonth, date and
        dateTime. Seconds must be provided due to schema type constraints but
        may be zero-filled and may be ignored. Dates SHALL be valid dates.
    v1TaskId:
      type: string
      description: >
        The task identifier. Used to track an async task in the system. Use the
        task ID to poll for completion status.

        The taskId holds different prefix to represent different tasks.

        - oneOf task: `s_<id>`.

        - bulk task: `bk_<id>` (deprecated: `<id>` only).

        - bundle task: `bd_<id>` (deprecated: `<id>` only).

        - purge task: `pg_<id>` (deprecated: `purge:<id>`).
    v1TaskSubmissionStatus:
      type: string
      description: >
        Status of the task submission.

        * `ACCEPTED`: The task has been accepted for asynchronous processing.
        The task will be executed in the background.

        * `PERSISTED`: The task has been executed synchronously and the results
        are immediately persisted.
      enum:
        - ACCEPTED
        - PERSISTED
  responses:
    v1TooManyRequestError:
      description: Returned when the server starts throttling the requests.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/v1Error'
    v1GatewayTimeoutError:
      description: Returned when the request exceeds the server timeout window.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/v1Error'
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: X-Clinia-API-Key
    basicHttpAuth:
      description: Basic HTTP authentication.
      type: http
      scheme: basic
    bearerHttpAuth:
      description: JWT Bearer authentication.
      type: http
      scheme: Bearer
      bearerFormat: JWT

````