---
title: "Add a team or org member as a collaborator on one package in the organization this request is bound to, or change the..."
method: POST
path: "/v1/packages/{package_id}/collaborators"
tags: ["packages"]
---

# Add a team or org member as a collaborator on one package in the organization this request is bound to, or change the...

`POST /v1/packages/{package_id}/collaborators`

## Request

- Base URL: `https://api.kody.codes`
- URL: `https://api.kody.codes/v1/packages/{package_id}/collaborators`
- Auth: HTTP bearer

Add a team or org member as a collaborator on one package in the organization this request is bound to, or change the preset of one who already is. Pass exactly one of team_slug, team_id, username, or user_id, and a preset (use, contribute, or manage). Only teams and members of this organization are accepted; Owners already have full access. You need manage access on the package. Audited like accessGrant.

Org permission: none (touches no org data).

## Path parameters

- `package_id` string, required: Package id or kody id.

## Request body

- object
  - `team_slug` string
  - `team_id` string
  - `username` string: Username of an org member, without the leading @.
  - `user_id` string
  - `preset` 'use' | 'contribute' | 'manage', required

## Response `200`

Success.

- object
  - `package` object, required
    - `id` string, required
    - `kody_id` string, required
    - `name` string, required
  - `collaborator` object, required
    - `grant_id` string, required
    - `subject_type` 'user' | 'team', required
    - `subject_id` string, required
    - `kind` 'team' | 'member' | 'outside', required: team: a team in this org. member: an org member. outside: holds this grant without membership (granted elsewhere).
    - `username` string, nullable, required
    - `display_name` string, nullable, required
    - `team_slug` string, nullable, required
    - `team_name` string, nullable, required
    - `preset` 'use' | 'contribute' | 'manage', nullable, required: Null for an advanced grant; see permissions.
    - `permissions` string[], required
    - `created_at` string, required

## Other responses

- `400`: Error envelope `{ "error": { "code", "message", "details"? } }`.
- `401`: Error envelope `{ "error": { "code", "message", "details"? } }`.
- `403`: Error envelope `{ "error": { "code", "message", "details"? } }`.
- `404`: Error envelope `{ "error": { "code", "message", "details"? } }`.
- `409`: Error envelope `{ "error": { "code", "message", "details"? } }`.
- `413`: Error envelope `{ "error": { "code", "message", "details"? } }`.
- `429`: Too many requests (edge IP/token limit) or an entitlement / plan-cap limit. Wait at least `Retry-After` seconds before retrying.
- `500`: Error envelope `{ "error": { "code", "message", "details"? } }`.
- `503`: Error envelope `{ "error": { "code", "message", "details"? } }`.
- `default`: Error envelope `{ "error": { "code", "message", "details"? } }`.

---

[API](https://skmtc.dev/kody/apis/kody-api.md) · [All operations](https://skmtc.dev/kody/apis/kody-api/llms.txt) · [OpenAPI document](https://skmtc.dev/kody/apis/kody-api/revisions/705f4f022728?raw)
