[New] Portfolio Duplication
Summary
You can now duplicate portfolios via the Asana API. This new endpoint allows you to create a new portfolio based on an existing one, carrying over specific settings and configurations to reduce setup friction for repeated workflows.
Why we’re making this change
Creating portfolios from scratch can be a manual, time-consuming process—especially when reconfiguring custom fields, rules, child work items, and saved views (dashboards). This duplication endpoint serves as a powerful bridge to enable consistency across your portfolio structures.
Who is affected
Any developer or user with read access to an existing portfolio can now use this endpoint to duplicate it.
Timeline
Portfolio duplication is now available in the public API.
Usage
The duplication process follows the established pattern used for Project and Task duplication. You can specify which elements to copy by passing them in the include parameter.
Endpoint
POST /portfolios/{portfolio_gid}/duplicate
Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
portfolio_gid |
string | Yes | GID of the portfolio to duplicate. |
name |
string | No | The name of the new portfolio. |
include |
string | No | A comma-separated list of optional elements to include. |
Content Inclusion Rules
Some elements are automatically included to maintain the portfolio’s structure, while others must be explicitly requested.
| Status | Fields Included |
|---|---|
| Always Included | custom_fields, saved_views |
| Optional | description, members, permissions, templates, rules, child_projects, child_portfolios |
Note on Child Items: When including child_projects or child_portfolios, the API performs an “all-or-nothing” duplication of those containers. It is not currently possible to specify a subset of specific children to copy over.
Code Examples
Basic Duplication
Creates a copy with only the default settings (custom fields and saved views).
// POST /portfolios/12345/duplicate
{
"data": {
"name": "Q2 Strategic Portfolio (Copy)"
}
}
Advanced Duplication
Creates a copy including members, rules, and child projects.
// POST /portfolios/12345/duplicate
{
"data": {
"name": "Regional Expansion Portfolio",
"include": "description, members, rules, child_projects"
}
}
Response
The endpoint returns a job object, as the duplication happens asynchronously.
{
"data": {
"gid": "98765",
"resource_type": "job",
"resource_subtype": "duplicate_portfolio",
"status": "in_progress",
"new_portfolio": {
"gid": "54321",
"resource_type": "portfolio",
"name": "Regional Expansion Portfolio"
}
}
}