# Productboard on boxd

> Productboard is a product management platform that gathers feedback, prioritizes features, and aligns roadmaps based on customer insights and strategic goals.

- Page: https://boxd.sh/integrations/productboard/
- CLI: `run productboard` (99 commands, 45 marked common)
- SDK: `import { productboard } from "@boxd/run"`; every parameter and response type is at `@boxd/run/productboard`
- Triggers: none
- Connect: `run auth productboard` (Sign in with Productboard), or https://app.boxd.sh/integrations/detail/productboard
- All integrations: https://boxd.sh/integrations/ (Markdown: https://boxd.sh/integrations/index.md)

## From the shell

```sh
run auth productboard      # once: prints a link to connect your account
run productboard           # list its commands
run productboard list-users
```

Parameters are flags (`--flag value`); object and array parameters take a JSON string. Output is YAML, or JSON with `--json`. Calls use your own connection; `--scope <name>` uses a connection shared with your team.

## From a script

```ts
import { every, productboard } from "@boxd/run";

every("1 hour", async () => {
  const result = await productboard.listUsers({});
  console.log(result);
});
```

Run it with `run productboard.run.ts`. Productboard has no triggers; `every()` polls on a schedule, keeps the script running as a job, and wakes the machine when it is due.

## Commands

Required flags are listed; `run productboard <command> --help` lists the optional ones. "common" marks what `run productboard` shows without `--all`.

| Command | SDK method | Required flags | Optional | Description |
|---|---|---|---|---|
| `add-note-followers` | `productboard.addNoteFollowers()` | `--emails` `--noteId` | 0 | Add multiple followers to a Productboard note |
| `add-note-tag` | `productboard.addNoteTag()` | `--noteId` `--tagName` | 0 | Adds a tag to a Productboard note for categorization and organization |
| `create-company` ·common | `productboard.createCompany()` | `--name` | 3 | Create a new company in Productboard |
| `create-company-field` ·common | `productboard.createCompanyField()` | `--body` | 0 | Create a new custom field for companies |
| `create-component` ·common | `productboard.createComponent()` | `--data` | 0 | Create a new (sub)component under a product or component |
| `create-entities-relationships-v2` | `productboard.createEntitiesRelationshipsV2()` | `--data` `--id` | 0 | Create a relationship between two entities in Productboard |
| `create-entities-v2` ·common | `productboard.createEntitiesV2()` | `--data` | 0 | Create a new entity in Productboard using the v2 API |
| `create-feature` ·common | `productboard.createFeature()` | `--data` | 0 | Create a new feature or subfeature in Productboard |
| `create-feature-objective-link` | `productboard.createFeatureObjectiveLink()` | `--id` `--objectiveId` | 0 | Create a link between a feature and an objective (OKR) |
| `create-note-link` | `productboard.createNoteLink()` | `--entityId` `--noteId` | 0 | Create a link between a note and an entity |
| `create-notes-v2` ·common | `productboard.createNotesV2()` | `--data` | 0 | Create a new note in Productboard using the v2 API |
| `create-objectives` ·common | `productboard.createObjectives()` | `--data` | 0 | Create a new objective in Productboard |
| `create-objectives-links-features` | `productboard.createObjectivesLinksFeatures()` | `--featureId` `--id` | 0 | Create a new link between an objective and a feature |
| `create-release` ·common | `productboard.createRelease()` | `--data` | 0 | Create a new release in Productboard |
| `create-users` ·common | `productboard.createUsers()` | `--data` | 0 | Create a new user in Productboard |
| `create-webhook` ·common | `productboard.createWebhook()` | `--events` `--name` `--notification-version` `--url` | 1 | Create a new webhook subscription |
| `delete-company` | `productboard.deleteCompany()` | `--id` | 0 | Delete a specific company |
| `delete-company-field` | `productboard.deleteCompanyField()` | `--id` | 0 | Delete a specific company custom field |
| `delete-custom-field-value` | `productboard.deleteCustomFieldValue()` | `--customField.id` `--hierarchyEntity.id` | 0 | Delete a custom field value from a hierarchy entity in Productboard |
| `delete-entities-relationships-v2` | `productboard.deleteEntitiesRelationshipsV2()` | `--id` `--targetId` `--type` | 0 | Delete a relationship between two entities |
| `delete-entities-v2` | `productboard.deleteEntitiesV2()` | `--id` | 0 | Delete a PM entity using the v2 API |
| `delete-feature` | `productboard.deleteFeature()` | `--id` | 0 | Delete a specific feature |
| `delete-feature-objective-link` | `productboard.deleteFeatureObjectiveLink()` | `--id` `--objectiveId` | 0 | Delete a link between a feature and an objective |
| `delete-initiatives` | `productboard.deleteInitiatives()` | `--id` | 0 | Delete a specific initiative |
| `delete-key-results` | `productboard.deleteKeyResults()` | `--id` | 0 | Delete a specific key result from Productboard |
| `delete-note-tag` | `productboard.deleteNoteTag()` | `--noteId` `--tagName` | 0 | Remove a tag from a Productboard note |
| `delete-notes-relationships-v2` | `productboard.deleteNotesRelationshipsV2()` | `--id` `--targetId` `--targetType` | 0 | Delete a note relationship |
| `delete-notes-v2` | `productboard.deleteNotesV2()` | `--id` | 0 | Delete a note using the v2 API |
| `delete-objectives` | `productboard.deleteObjectives()` | `--id` | 0 | Delete a specific objective from Productboard |
| `delete-objectives-links-features` | `productboard.deleteObjectivesLinksFeatures()` | `--feature-id` `--id` | 0 | Delete a link between an objective and a feature |
| `delete-release` | `productboard.deleteRelease()` | `--id` | 0 | Delete a specific release |
| `delete-user` | `productboard.deleteUser()` | `--id` | 0 | Delete a specific user |
| `delete-webhook` | `productboard.deleteWebhook()` | `--id` | 0 | Delete a webhook subscription |
| `get-component` ·common | `productboard.getComponent()` | `--id` | 0 | Retrieve details of a specific component |
| `get-custom-field-value` | `productboard.getCustomFieldValue()` | `--customField.id` `--hierarchyEntity.id` | 0 | Retrieve a custom field's value for a specific hierarchy entity |
| `get-entities-configurations-v2` | `productboard.getEntitiesConfigurationsV2()` | `--type` | 0 | Retrieve entity configuration for a specific type |
| `get-entities-v2` | `productboard.getEntitiesV2()` | `--id` | 1 | Retrieve a PM entity using the v2 API |
| `get-feature-release-assignment` | `productboard.getFeatureReleaseAssignment()` | `--feature.id` `--release.id` | 0 | Retrieve a specific feature release assignment |
| `get-hierarchy-entities-custom-fields` ·common | `productboard.getHierarchyEntitiesCustomFields()` | `--id` | 0 | Retrieve a specific custom field definition for hierarchy entities |
| `get-notes-configurations-v2` ·common | `productboard.getNotesConfigurationsV2()` | `--type` | 0 | Retrieve note configuration by type (simple, conversation, or opportunity) |
| `get-notes-v2` | `productboard.getNotesV2()` | `--id` | 1 | Retrieve a note using the v2 API |
| `get-objective` ·common | `productboard.getObjective()` | `--id` | 0 | Retrieve details of a specific objective |
| `get-release` | `productboard.getRelease()` | `--id` | 0 | Retrieve details of a specific release by ID |
| `get-release-group` | `productboard.getReleaseGroup()` | `--id` | 0 | Retrieve details of a specific release group |
| `get-webhooks` | `productboard.getWebhooks()` | `--id` | 0 | Retrieve details of a specific webhook subscription |
| `list-analytics-member-activities-v2` | `productboard.listAnalyticsMemberActivitiesV2()` | — | 4 | Retrieve member activity analytics data from Productboard |
| `list-companies` ·common | `productboard.listCompanies()` | — | 5 | List companies |
| `list-company-fields` | `productboard.listCompanyFields()` | — | 0 | Lists all custom field definitions for companies in your Productboard workspace |
| `list-custom-field-values` ·common | `productboard.listCustomFieldValues()` | — | 5 | Lists custom field values for hierarchy entities (products, components, features) in Productboard |
| `list-custom-fields` ·common | `productboard.listCustomFields()` | `--type` | 2 | Lists custom field definitions for hierarchy entities (Products, Components, Features) |
| `list-entities-configurations-v2` | `productboard.listEntitiesConfigurationsV2()` | — | 1 | Retrieve configurations for all entity types in Productboard |
| `list-entities-relationships-v2` | `productboard.listEntitiesRelationshipsV2()` | `--id` | 3 | Retrieve relationships for an entity in Productboard |
| `list-entities-v2` ·common | `productboard.listEntitiesV2()` | `--type` | 9 | List entities from Productboard using the v2 API |
| `list-feature-initiatives` ·common | `productboard.listFeatureInitiatives()` | `--id` | 1 | List initiatives linked to a given feature |
| `list-feature-objectives` ·common | `productboard.listFeatureObjectives()` | `--id` | 1 | Lists all objectives (OKRs) linked to a top-level feature |
| `list-feature-release-assignments` ·common | `productboard.listFeatureReleaseAssignments()` | — | 7 | List feature–release assignments |
| `list-feature-statuses` ·common | `productboard.listFeatureStatuses()` | — | 1 | List feature statuses |
| `list-feedback-form-configurations` ·common | `productboard.listFeedbackFormConfigurations()` | — | 2 | List feedback form configurations |
| `list-initiatives` ·common | `productboard.listInitiatives()` | — | 6 | List initiatives from Productboard |
| `list-jira-integrations` ·common | `productboard.listJiraIntegrations()` | — | 1 | List Jira integrations |
| `list-key-results` ·common | `productboard.listKeyResults()` | — | 7 | List key results from Productboard |
| `list-note-tags` | `productboard.listNoteTags()` | `--noteId` | 0 | Retrieve all tags associated with a specific Productboard note |
| `list-notes-configurations-v2` | `productboard.listNotesConfigurationsV2()` | — | 1 | List note configurations from Productboard v2 API |
| `list-notes-links` | `productboard.listNotesLinks()` | `--noteId` | 0 | List links associated with a note |
| `list-notes-relationships-v2` | `productboard.listNotesRelationshipsV2()` | `--id` | 2 | Retrieve relationships associated with a note |
| `list-notes-v2` ·common | `productboard.listNotesV2()` | — | 13 | Retrieve a paginated list of notes from Productboard using the v2 API |
| `list-objectives-links-features` ·common | `productboard.listObjectivesLinksFeatures()` | `--id` | 1 | Lists all features linked to a specific objective |
| `list-objectives-links-initiatives` ·common | `productboard.listObjectivesLinksInitiatives()` | `--id` | 1 | List initiatives linked to a specific objective |
| `list-plugin-integrations` ·common | `productboard.listPluginIntegrations()` | — | 1 | List all plugin integrations in the Productboard workspace |
| `list-release-groups` | `productboard.listReleaseGroups()` | — | 2 | Lists all release groups in the Productboard workspace |
| `list-releases` ·common | `productboard.listReleases()` | — | 1 | List all releases in Productboard |
| `list-users` ·common | `productboard.listUsers()` | — | 1 | Retrieves a paginated list of all users in the Productboard workspace |
| `list-webhooks` | `productboard.listWebhooks()` | — | 0 | List all webhook subscriptions |
| `remove-note-follower` | `productboard.removeNoteFollower()` | `--email` `--noteId` | 0 | Remove a follower from a Productboard note |
| `retrieve-company` ·common | `productboard.retrieveCompany()` | `--id` | 0 | Retrieve details of a specific company |
| `retrieve-company-field` | `productboard.retrieveCompanyField()` | `--id` | 0 | Retrieve details of a specific company custom field |
| `retrieve-company-field-value` | `productboard.retrieveCompanyFieldValue()` | `--companyCustomFieldId` `--companyId` | 0 | Retrieve a specific company custom field value |
| `retrieve-feature` | `productboard.retrieveFeature()` | `--id` | 0 | Retrieve details of a specific feature |
| `retrieve-product` ·common | `productboard.retrieveProduct()` | `--id` | 0 | Retrieve details of a specific product |
| `retrieve-user` ·common | `productboard.retrieveUser()` | `--id` | 0 | Retrieve details of a specific user |
| `scim-list-users` ·common | `productboard.scimListUsers()` | — | 5 | List users via SCIM |
| `search-entities-v2` ·common | `productboard.searchEntitiesV2()` | `--data` | 1 | Search for entities across Productboard using the v2 API |
| `set-company-field-value` | `productboard.setCompanyFieldValue()` | `--companyCustomFieldId` `--companyId` `--value` | 0 | Set or replace a specific company custom field's value |
| `set-custom-field-value` | `productboard.setCustomFieldValue()` | `--customField.id` `--hierarchyEntity.id` `--value` | 0 | Set a custom field value on a hierarchy entity |
| `set-entities-relationships-parent-v2` | `productboard.setEntitiesRelationshipsParentV2()` | `--data` `--id` | 0 | Set parent relationship on an entity |
| `set-feature-release-assignment` ·common | `productboard.setFeatureReleaseAssignment()` | `--assigned` `--feature.id` `--release.id` | 0 | Update a feature release assignment |
| `set-features` | `productboard.setFeatures()` | `--data` `--id` | 0 | Update a feature by ID |
| `set-notes-relationships-customer-v2` | `productboard.setNotesRelationshipsCustomerV2()` | `--data` `--id` | 0 | Set a customer relationship on a note in Productboard |
| `set-product` | `productboard.setProduct()` | `--data` `--id` | 0 | Update a product using PUT method in Productboard |
| `update-companies-custom-fields` | `productboard.updateCompaniesCustomFields()` | `--id` `--name` | 0 | Update a company custom field name |
| `update-company` ·common | `productboard.updateCompany()` | `--data` `--id` | 0 | Update an existing company in Productboard |
| `update-component` ·common | `productboard.updateComponent()` | `--data` `--id` | 0 | Update an existing component |
| `update-entities-v2` | `productboard.updateEntitiesV2()` | `--data` `--id` | 0 | Update a PM entity using the v2 API |
| `update-features` | `productboard.updateFeatures()` | `--data` `--id` | 0 | Update a feature in Productboard |
| `update-notes-v2` ·common | `productboard.updateNotesV2()` | `--id` | 2 | Update a note using the v2 API |
| `update-objectives` ·common | `productboard.updateObjectives()` | `--data` `--id` | 0 | Update an existing objective in Productboard |
| `update-product` ·common | `productboard.updateProduct()` | `--data` `--id` | 0 | Update a product in Productboard |
| `update-release` ·common | `productboard.updateRelease()` | `--id` | 6 | Update an existing release in Productboard |
| `update-user` ·common | `productboard.updateUser()` | `--data` `--id` | 0 | Update a user's information |

## Docs

- [run CLI](https://docs.boxd.sh/cli/run): Call connected integrations from the shell, connect new ones, and run automations.
- [Quickstart](https://docs.boxd.sh/guides/integrations/quickstart): Connect an integration, call it from the shell, and turn a script into an automation.
- [Connections](https://docs.boxd.sh/guides/integrations/connections): Connect an account once, for yourself or for your whole organization.
- [Scripts](https://docs.boxd.sh/guides/automations/scripts): Typed integrations, triggers, schedules and state in a .run.ts file.
- [Jobs](https://docs.boxd.sh/guides/automations/jobs): How a script becomes a background job: states, retries, sleep and wake.
- [Beyond the catalog](https://docs.boxd.sh/guides/automations/beyond-the-catalog): Reach your own APIs, databases and cloud accounts from a script.
