> ## 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.

# Bulk create, upsert, or delete relationships

> Bulk create, upsert, or delete relationships. The request body should contain a list of operations.
All operations will be processed even if some of them fail.




## OpenAPI

````yaml /api-reference/registry.yml post /sources/{sourceKey}/v1/relationships/bulk
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/relationships/bulk:
    post:
      tags:
        - Bulk
      summary: Bulk create, upsert, or delete relationships
      description: >
        Bulk create, upsert, or delete relationships. The request body should
        contain a list of operations.

        All operations will be processed even if some of them fail.
      operationId: BulkRelationships
      parameters:
        - name: sourceKey
          in: path
          description: The source key.
          required: true
          schema:
            type: string
      requestBody:
        description: >
          The request body should contain a list of relationships to create,
          upsert, or delete.

          Operations of different types (e.g., "CREATE", "UPSERT") can be mixed
          and will be processed in the order they are provided.
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - operations
              properties:
                operations:
                  type: array
                  items:
                    $ref: '#/components/schemas/v1RelationshipOperation'
              additionalProperties: false
      responses:
        '202':
          description: The bulk operation is valid and accepted with a status 'ACCEPTED'.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/v1TaskSubmissionAcceptedResponse'
        '400':
          description: Returned when the request is malformed or invalid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/v1Error'
        '413':
          description: The request body exceeds the 5 GB limit.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/v1Error'
        '429':
          $ref: '#/components/responses/v1TooManyRequestError'
        '504':
          $ref: '#/components/responses/v1GatewayTimeoutError'
components:
  schemas:
    v1RelationshipOperation:
      oneOf:
        - $ref: '#/components/schemas/v1RelationshipOperationCreate'
        - $ref: '#/components/schemas/v1RelationshipOperationUpsert'
        - $ref: '#/components/schemas/v1RelationshipOperationDelete'
      discriminator:
        propertyName: action
        mapping:
          CREATE:
            $ref: '#/components/schemas/v1RelationshipOperationCreate'
          UPSERT:
            $ref: '#/components/schemas/v1RelationshipOperationUpsert'
          DELETE:
            $ref: '#/components/schemas/v1RelationshipOperationDelete'
    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.
    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
    v1RelationshipOperationCreate:
      allOf:
        - $ref: '#/components/schemas/v1RelationshipOperationBase'
        - type: object
          required:
            - create
          properties:
            create:
              $ref: '#/components/schemas/v1RelationshipOperationCreateContent'
    v1RelationshipOperationUpsert:
      allOf:
        - $ref: '#/components/schemas/v1RelationshipOperationBase'
        - type: object
          required:
            - upsert
          properties:
            upsert:
              $ref: '#/components/schemas/v1RelationshipOperationUpsertContent'
    v1RelationshipOperationDelete:
      allOf:
        - $ref: '#/components/schemas/v1RelationshipOperationBase'
        - type: object
          required:
            - delete
          properties:
            delete:
              $ref: '#/components/schemas/v1RelationshipOperationDeleteContent'
    v1BaseTaskSubmissionResponse:
      type: object
      required:
        - status
        - taskId
      properties:
        taskId:
          $ref: '#/components/schemas/v1TaskId'
          readOnly: true
        status:
          $ref: '#/components/schemas/v1TaskSubmissionStatus'
          readOnly: true
    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
    v1RelationshipOperationBase:
      type: object
      required:
        - action
      properties:
        action:
          $ref: '#/components/schemas/v1OperationAction'
    v1RelationshipOperationCreateContent:
      description: The relationship to create.
      type: object
      required:
        - type
        - from
        - to
        - data
      properties:
        type:
          type: string
        from:
          $ref: '#/components/schemas/v1RelationshipRef'
        to:
          $ref: '#/components/schemas/v1RelationshipRef'
        meta:
          $ref: '#/components/schemas/v1Meta'
        data:
          type: object
          x-is-generic: true
      additionalProperties: false
    v1RelationshipOperationUpsertContent:
      description: The relationship to upsert.
      type: object
      required:
        - type
        - from
        - to
        - data
      properties:
        type:
          type: string
        from:
          $ref: '#/components/schemas/v1RelationshipRef'
        to:
          $ref: '#/components/schemas/v1RelationshipRef'
        data:
          type: object
          x-is-generic: true
        meta:
          $ref: '#/components/schemas/v1Meta'
      additionalProperties: false
    v1RelationshipOperationDeleteContent:
      type: object
      required:
        - from
        - to
        - type
      properties:
        from:
          $ref: '#/components/schemas/v1RelationshipRef'
        to:
          $ref: '#/components/schemas/v1RelationshipRef'
        type:
          type: string
          description: The type of relationship to delete.
    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
    v1OperationAction:
      type: string
      enum:
        - CREATE
        - UPSERT
        - DELETE
        - UPDATE
      description: The action to perform.
    v1RelationshipRef:
      type: object
      required:
        - id
        - type
      properties:
        id:
          type: string
        type:
          type: string
      additionalProperties: false
    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
    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
    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
    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.
  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

````