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

# UpdateArtifact

> Add a version to an artifact, changing only the fields named in update_mask.



## OpenAPI

````yaml /openapi.json patch /api/v1/artifacts/{artifactId}
openapi: 3.0.0
info:
  title: Sift API
  version: '1.0'
servers:
  - url: https://api.siftstack.com
    description: Production
  - url: https://gov.api.siftstack.com
    description: Gov
security:
  - BearerAuth: []
tags:
  - name: TagService
    description: Service to programmatically interact with [tags](/glossary#tag).
  - name: ProtobufDescriptorService
    description: >-
      Service to programmatically interact with protobuf descriptors used for
      protobuf ingestion.
    externalDocs:
      description: Read more about what protobuf ingestion.
      url: /ingestion/protobuf_ingestion
  - name: PanelConfigurationService
    description: Service to programmatically interact with panel configurations.
  - name: PrincipalAttributeService
    description: Service to manage ABAC principal attributes.
  - name: DlqErrorsService
  - name: UserGroupService
  - name: ArtifactService
  - name: MetadataService
  - name: ExternalSyncService
  - name: PolicyService
    description: Service to manage ABAC policies.
  - name: UserService
    description: Service to programmatically interact with user objects.
  - name: DataImportService
  - name: FamilyService
    description: Service to programmatically interact with family configurations.
  - name: AnnotationService
    description: Service to programmatically interact with annotations.
    externalDocs:
      description: Read more about annotations.
      url: >-
        https://customer.support.siftstack.com/servicedesk/customer/portal/2/article/265486685
  - name: ReportService
  - name: ResourceAttributeService
    description: Service to manage ABAC resource attributes (entity attributes).
  - name: PingService
  - name: TestReportService
    description: Service to manage test reports
  - name: ApiKeyService
  - name: AssetService
    description: Service to programmatically interact with [assets](/glossary#asset).
    externalDocs:
      description: Read more about what assets are.
      url: /data-model
  - name: CommentService
    description: >-
      Service to programmatically interact with comments attached to resources
      in the platform.
  - name: ChannelService
    description: Service to programmatically interact with [channels](/glossary#channel).
    externalDocs:
      description: Read more about what channels are.
      url: >-
        https://customer.support.siftstack.com/servicedesk/customer/portal/2/article/265453943
  - name: JobService
  - name: DataService
    description: Service to query data
  - name: ChannelSchemaService
    description: Service to programmatically interact with channel schemas
  - name: SavedSearchService
  - name: RuleService
    description: Service to programmatically interact with rules.
    externalDocs:
      description: Read more about what rules are.
      url: >-
        https://customer.support.siftstack.com/servicedesk/customer/portal/2/article/265421102
  - name: CalculatedChannelsService
    description: Service to programmatically interact with calculated channels.
    externalDocs:
      description: Read more about calculated channels.
      url: >-
        https://customer.support.siftstack.com/servicedesk/customer/portal/2/article/265421153
  - name: CalculatedChannelService
  - name: AnnotationLogService
    description: >-
      Service to programmatically interact with [annotation
      logs](/glossary#annotation).
    externalDocs:
      description: Read more about annotations.
      url: >-
        https://customer.support.siftstack.com/servicedesk/customer/portal/2/article/265486685
  - name: AutomationService
  - name: RunService
    description: Service to programmatically interact with [runs](/glossary#run).
    externalDocs:
      description: Read more about what runs are.
      url: >-
        https://customer.support.siftstack.com/servicedesk/customer/portal/2/article/265454053
  - name: RuleEvaluationService
    description: Service to evaluate rules.
    externalDocs:
      description: Read more about what rules are.
      url: >-
        https://customer.support.siftstack.com/servicedesk/customer/portal/2/article/265421102
  - name: IngestionConfigService
    description: >-
      Service to programmatically interact with [ingestion
      configs](/glossary#ingestion-config).
    externalDocs:
      description: Read more about what ingestion configs are.
      url: /ingestion/creating-amend-ingestion-config
  - name: UnitService
  - name: UserDefinedFunctionService
  - name: RoleService
  - name: ReportTemplateService
  - name: DocsService
  - name: RemoteFileService
  - name: MeService
  - name: WebhookService
  - name: CampaignService
  - name: ExportService
  - name: NotificationService
    description: Service to programmatically interact with in-app notifications.
  - name: IngestService
  - name: ViewService
    description: Service to programmatically interact with views.
    externalDocs:
      description: Read more about what views are.
      url: >-
        https://customer.support.siftstack.com/servicedesk/customer/portal/2/article/298188809
paths:
  /api/v1/artifacts/{artifactId}:
    patch:
      tags:
        - ArtifactService
      summary: UpdateArtifact
      description: >-
        Add a version to an artifact, changing only the fields named in
        update_mask.
      operationId: ArtifactService_UpdateArtifactV1
      parameters:
        - name: artifactId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                artifact:
                  $ref: '#/components/schemas/v1ArtifactDetails'
                links:
                  type: array
                  items:
                    $ref: '#/components/schemas/v1ArtifactLinkInput'
                  description: >-
                    Links written at the new version, when update_mask names
                    `links`. The

                    previous version's ATTACHED_TO rows carry forward and these
                    are added to

                    them.
                updateMask:
                  type: string
                  description: >-
                    The fields to write. Available paths are
                    `artifact_version.title`,

                    `artifact_version.summary`, `artifact_version.payload`,

                    `artifact_version.metadata`,
                    `artifact_version.remote_file_id`, and

                    `links`. A path the service does not know is rejected.


                    `artifact_version.remote_file_id` is a declaration, not a
                    value: it says

                    the caller is about to upload new bytes for the returned
                    version, so the

                    previous version's remote_files rows are not carried
                    forward. The current

                    version stays unchanged until the upload commits. The
                    request value is

                    ignored. Leave the path out to keep the existing bytes.
              required:
                - updateMask
        required: true
      responses:
        '200':
          description: A successful response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/v1UpdateArtifactResponse'
        default:
          description: An unexpected error response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/rpcStatus'
components:
  schemas:
    v1ArtifactDetails:
      type: object
      properties:
        artifact:
          $ref: '#/components/schemas/v1Artifact'
        artifactVersion:
          $ref: '#/components/schemas/v1ArtifactVersion'
      description: >-
        An artifact and one of its versions: the one artifact_version_id pinned,
        or

        the latest.
    v1ArtifactLinkInput:
      type: object
      properties:
        relation:
          $ref: '#/components/schemas/v1ArtifactLinkRelation'
        entityType:
          $ref: '#/components/schemas/v1ArtifactEntityType'
        entityId:
          type: string
      required:
        - relation
        - entityType
        - entityId
    v1UpdateArtifactResponse:
      type: object
      properties:
        artifact:
          $ref: '#/components/schemas/v1ArtifactDetails'
    rpcStatus:
      type: object
      properties:
        code:
          type: integer
          format: int32
        message:
          type: string
        details:
          type: array
          items:
            $ref: '#/components/schemas/protobufAny'
    v1Artifact:
      type: object
      properties:
        artifactId:
          type: string
          readOnly: true
        organizationId:
          type: string
          readOnly: true
        createdByUserId:
          type: string
          readOnly: true
        createdDate:
          type: string
          format: date-time
          readOnly: true
        archivedDate:
          type: string
          format: date-time
          description: Unset while the artifact is active.
          readOnly: true
        storageClass:
          $ref: '#/components/schemas/v1ArtifactStorageClass'
        createdVia:
          $ref: '#/components/schemas/v1ArtifactCreatedVia'
        currentVersionId:
          type: string
          description: >-
            The artifact's latest version. A pinned read reports it too, so a
            client

            holding an older version can tell that it is behind.
          readOnly: true
      description: >-
        The container. Everything that varies by version lives on
        ArtifactVersion,

        and the two travel together in ArtifactDetails.
    v1ArtifactVersion:
      type: object
      properties:
        artifactVersionId:
          type: string
          readOnly: true
        artifactId:
          type: string
          readOnly: true
        version:
          type: integer
          format: int64
          readOnly: true
        title:
          type: string
        summary:
          type: string
        authoringMessageId:
          type: string
          description: >-
            Set only for versions authored inside a conversation, and there only

            after the introducing message persists: uploads attach before the
            user

            sends, and agent turns persist messages only at end of turn.
          readOnly: true
        sourceToolUseIds:
          type: array
          items:
            type: string
          readOnly: true
        remoteFileId:
          type: string
          description: Unset until bytes are uploaded.
        createdDate:
          type: string
          format: date-time
          readOnly: true
        fileName:
          type: string
          description: >-
            From the version's remote_files record. Unset until bytes are
            uploaded.

            Clients infer preview behavior from file_name / file_mime_type.
          readOnly: true
        fileMimeType:
          type: string
          readOnly: true
        payload:
          type: object
          description: Set by GetArtifact for STRUCTURED artifacts. The listings omit it.
        metadata:
          type: array
          items:
            $ref: '#/components/schemas/v1MetadataValue'
          description: Metadata attached to this version.
    v1ArtifactLinkRelation:
      type: string
      enum:
        - ARTIFACT_LINK_RELATION_UNSPECIFIED
        - ARTIFACT_LINK_RELATION_ATTACHED_TO
        - ARTIFACT_LINK_RELATION_SOURCE
        - ARTIFACT_LINK_RELATION_DERIVED_FROM
      default: ARTIFACT_LINK_RELATION_UNSPECIFIED
      description: |2-
         - ARTIFACT_LINK_RELATION_UNSPECIFIED: The link relation is not specified.
         - ARTIFACT_LINK_RELATION_ATTACHED_TO: Placement, where the artifact surfaces.
         - ARTIFACT_LINK_RELATION_SOURCE: Provenance, what the artifact was produced from; immutable.
         - ARTIFACT_LINK_RELATION_DERIVED_FROM: Artifact-to-artifact.
    v1ArtifactEntityType:
      type: string
      enum:
        - ARTIFACT_ENTITY_TYPE_UNSPECIFIED
        - ARTIFACT_ENTITY_TYPE_CONVERSATION
        - ARTIFACT_ENTITY_TYPE_CANVAS
        - ARTIFACT_ENTITY_TYPE_RUN
        - ARTIFACT_ENTITY_TYPE_ASSET
        - ARTIFACT_ENTITY_TYPE_ARTIFACT
        - ARTIFACT_ENTITY_TYPE_TOOL_USE
      default: ARTIFACT_ENTITY_TYPE_UNSPECIFIED
      description: >-
        The kind of entity an artifact link points at. entity_id is opaque: a
        UUID

        for Sift entities, or the provider tool_use_id for TOOL_USE.

         - ARTIFACT_ENTITY_TYPE_UNSPECIFIED: The entity type is not specified.
    protobufAny:
      type: object
      properties:
        '@type':
          type: string
          description: >-
            A URL/resource name that uniquely identifies the type of the
            serialized

            protocol buffer message. This string must contain at least

            one "/" character. The last segment of the URL's path must represent

            the fully qualified name of the type (as in

            `path/google.protobuf.Duration`). The name should be in a canonical
            form

            (e.g., leading "." is not accepted).


            In practice, teams usually precompile into the binary all types that
            they

            expect it to use in the context of Any. However, for URLs which use
            the

            scheme `http`, `https`, or no scheme, one can optionally set up a
            type

            server that maps type URLs to message definitions as follows:


            * If no scheme is provided, `https` is assumed.

            * An HTTP GET on the URL must yield a [google.protobuf.Type][]
              value in binary format, or produce an error.
            * Applications are allowed to cache lookup results based on the
              URL, or have them precompiled into a binary to avoid any
              lookup. Therefore, binary compatibility needs to be preserved
              on changes to types. (Use versioned type names to manage
              breaking changes.)

            Note: this functionality is not currently available in the official

            protobuf release, and it is not used for type URLs beginning with

            type.googleapis.com. As of May 2023, there are no widely used type
            server

            implementations and no plans to implement one.


            Schemes other than `http`, `https` (or the empty scheme) might be

            used with implementation specific semantics.
      additionalProperties: {}
      description: >-
        `Any` contains an arbitrary serialized protocol buffer message along
        with a

        URL that describes the type of the serialized message.


        Protobuf library provides support to pack/unpack Any values in the form

        of utility functions or additional generated methods of the Any type.


        Example 1: Pack and unpack a message in C++.

            Foo foo = ...;
            Any any;
            any.PackFrom(foo);
            ...
            if (any.UnpackTo(&foo)) {
              ...
            }

        Example 2: Pack and unpack a message in Java.

            Foo foo = ...;
            Any any = Any.pack(foo);
            ...
            if (any.is(Foo.class)) {
              foo = any.unpack(Foo.class);
            }
            // or ...
            if (any.isSameTypeAs(Foo.getDefaultInstance())) {
              foo = any.unpack(Foo.getDefaultInstance());
            }

         Example 3: Pack and unpack a message in Python.

            foo = Foo(...)
            any = Any()
            any.Pack(foo)
            ...
            if any.Is(Foo.DESCRIPTOR):
              any.Unpack(foo)
              ...

         Example 4: Pack and unpack a message in Go

             foo := &pb.Foo{...}
             any, err := anypb.New(foo)
             if err != nil {
               ...
             }
             ...
             foo := &pb.Foo{}
             if err := any.UnmarshalTo(foo); err != nil {
               ...
             }

        The pack methods provided by protobuf library will by default use

        'type.googleapis.com/full.type.name' as the type URL and the unpack

        methods only use the fully qualified type name after the last '/'

        in the type URL, for example "foo.bar.com/x/y.z" will yield type

        name "y.z".


        JSON

        ====

        The JSON representation of an `Any` value uses the regular

        representation of the deserialized, embedded message, with an

        additional field `@type` which contains the type URL. Example:

            package google.profile;
            message Person {
              string first_name = 1;
              string last_name = 2;
            }

            {
              "@type": "type.googleapis.com/google.profile.Person",
              "firstName": <string>,
              "lastName": <string>
            }

        If the embedded message type is well-known and has a custom JSON

        representation, that representation will be embedded adding a field

        `value` which holds the custom JSON in addition to the `@type`

        field. Example (for message [google.protobuf.Duration][]):

            {
              "@type": "type.googleapis.com/google.protobuf.Duration",
              "value": "1.212s"
            }
    v1ArtifactStorageClass:
      type: string
      enum:
        - ARTIFACT_STORAGE_CLASS_UNSPECIFIED
        - ARTIFACT_STORAGE_CLASS_FILE
        - ARTIFACT_STORAGE_CLASS_STRUCTURED
        - ARTIFACT_STORAGE_CLASS_BLOB
      default: ARTIFACT_STORAGE_CLASS_UNSPECIFIED
      description: |2-
         - ARTIFACT_STORAGE_CLASS_UNSPECIFIED: The storage class is not specified.
         - ARTIFACT_STORAGE_CLASS_FILE: Bytes in remote_files, previewable by MIME type.
         - ARTIFACT_STORAGE_CLASS_STRUCTURED: Content is the JSON payload, no file.
         - ARTIFACT_STORAGE_CLASS_BLOB: Bytes in remote_files, opaque, download only.
    v1ArtifactCreatedVia:
      type: string
      enum:
        - ARTIFACT_CREATED_VIA_UNSPECIFIED
        - ARTIFACT_CREATED_VIA_AGENT
        - ARTIFACT_CREATED_VIA_CANVAS
        - ARTIFACT_CREATED_VIA_UPLOAD
      default: ARTIFACT_CREATED_VIA_UNSPECIFIED
      description: |-
        Which surface wrote the artifact.

         - ARTIFACT_CREATED_VIA_UNSPECIFIED: The producing surface is not specified.
         - ARTIFACT_CREATED_VIA_AGENT: An agent wrote the artifact.
         - ARTIFACT_CREATED_VIA_CANVAS: Canvas wrote the artifact.
         - ARTIFACT_CREATED_VIA_UPLOAD: A direct upload wrote the artifact.
    v1MetadataValue:
      type: object
      properties:
        key:
          $ref: '#/components/schemas/v1MetadataKey'
        stringValue:
          type: string
        numberValue:
          type: number
          format: double
        booleanValue:
          type: boolean
        relationValue:
          $ref: '#/components/schemas/v1MetadataRelationValue'
        archivedDate:
          type: string
          format: date-time
        isArchived:
          type: boolean
          description: >-
            Whether the metadata value is archived. This is inferred from
            whether archived_date is set.
      required:
        - key
    v1MetadataKey:
      type: object
      properties:
        name:
          type: string
        type:
          $ref: '#/components/schemas/v1MetadataKeyType'
        archivedDate:
          type: string
          format: date-time
        isArchived:
          type: boolean
          description: >-
            Whether the metadata key is archived. This is inferred from whether
            archived_date is set.


            The filter field type this key maps to, so a client can build a CEL
            filter
             against it (`metadata["<name>"]`) and resolve its operators and functions
             from FilterGrammarService. Derived from `type`.
      required:
        - name
        - type
    v1MetadataRelationValue:
      type: object
      properties:
        resourceType:
          type: string
        resourceId:
          type: string
      required:
        - resourceType
        - resourceId
    v1MetadataKeyType:
      type: string
      enum:
        - METADATA_KEY_TYPE_UNSPECIFIED
        - METADATA_KEY_TYPE_STRING
        - METADATA_KEY_TYPE_NUMBER
        - METADATA_KEY_TYPE_BOOLEAN
        - METADATA_KEY_TYPE_RELATION
      default: METADATA_KEY_TYPE_UNSPECIFIED
      description: |-
        Metadata key type.

         - METADATA_KEY_TYPE_STRING: string
         - METADATA_KEY_TYPE_NUMBER: number
         - METADATA_KEY_TYPE_BOOLEAN: boolean
         - METADATA_KEY_TYPE_RELATION: relation — references another resource by UUID (e.g. folder membership)
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT

````