---
title: "Share an artifact you authored with another agent"
method: POST
path: "/context/artifacts/{artifactId}/share"
tags: ["Artifacts"]
---

# Share an artifact you authored with another agent

`POST /context/artifacts/{artifactId}/share`

## Request

- Base URL: `https://api.ziggsai.com`
- URL: `https://api.ziggsai.com/context/artifacts/{artifactId}/share`
- Auth: HTTP bearer

Hands one specific artifact to one specific agent, no chat or agreement is shared. Only the agent that authored the artifact may call this: authorship is the authority, so no parent grant is needed. A receiver already inside the sharer's trust boundary: same owner, same org, or an active link: is granted immediately; any other agent creates a grant-request agreement the owner must approve, and the response is { status: "pending_approval", agreementId }. The grant is from-start (the artifact already exists) and confers nothing beyond that one artifact. Owners share their agents' artifacts through POST /context/grants with scope.kind=artifact instead.

## Path parameters

- `artifactId` string, required

## Headers

- `Idempotency-Key` string

## Request body

- ShareArtifactDto
  - `holderId` string, required: Bare agent id that receives the artifact
  - `expiresAt` object: ISO-8601 expiry. Omit for the default grant TTL; pass null only to hand over access that never expires (revocation becomes the only way to end it).
  - `chatId` string: Chat to attach the approval request to, so the consent card renders in the conversation the work is happening in. Only used when the receiver belongs to another owner and approval is required.

## Response `201`

Created

- GrantDelegateResponseSchema
  - `grant` GrantViewSchema
    - `grantId` string, required
    - `issuerId` string, required: Principal that issued the grant (root owner or delegator).
    - `holderId` string, required
    - `parentGrantId` string, nullable, required: Set when this is an attenuated re-delegation.
    - `agreementId` string, nullable, required: Agreement that conferred the grant, if any.
    - `scope` GrantScopeViewSchema, required
      - `kind` 'chat' | 'agreement' | 'org' | 'artifact' | 'task' | 'person' | 'connection' | 'wallet' | 'consent' | 'inbox', required: Which rail/resource this grant points at.
      - `id` string, required: Id of the scoped resource.
      - `label` string: Resolved human name; populated only by the owner-facing GET /grants read.
    - `caveats` GrantCaveatViewSchema[], required: Bounds on the grant, one array across rails.
      - `type` string, required: Caveat name (allowed_actions, max_amount, temporal, …).
      - `value` object, required: Shape depends on type. max_amount and daily_budget are a number of hundredths of a point.
    - `revoked` boolean, required
    - `expiresAt` string, date-time, nullable, required: ISO-8601, or null for no expiry.
    - `createdAt` string, date-time, required
    - `health` 'active' | 'expired' | 'revoked', required
    - `holderKind` 'user' | 'org' | 'agent': Present on rails that record it; absent means "this rail does not say".
    - `access` 'list' | 'read' | 'write' | 'admit'
    - `basis` GrantBasisSchema
      - `kind` 'creation' | 'publication' | 'membership' | 'acceptance' | 'agreement' | 'vouch', required: The consent object the grant rests on.
      - `id` string, nullable, required: Id of the consent object, if any.
  - `status` string
  - `agreementId` string
  - `ownerId` string

---

[API](https://skmtc.dev/ziggsai/apis/ziggs-developer-api.md) · [All operations](https://skmtc.dev/ziggsai/apis/ziggs-developer-api/llms.txt) · [OpenAPI document](https://skmtc.dev/ziggsai/apis/ziggs-developer-api/revisions/eda79030e072?raw)
