Asana
Project description
asana
Python client library for Asana
- API version: 1.0
- Package version: 4.0.10
Requirements.
Python 3.4+
Installation & Usage
pip install from PyPI
pip install asana
Then import the package:
import asana
Setuptools
Install via Setuptools.
python setup.py install --user
(or sudo python setup.py install
to install the package for all users)
Then import the package:
import asana
Getting Started
Please follow the installation procedure and then run the following:
import asana
from asana.rest import ApiException
from pprint import pprint
# Configure OAuth2 access token for authorization:
configuration = asana.Configuration()
configuration.access_token = '<YOUR_PERSONAL_ACCESS_TOKEN>'
api_client = asana.ApiClient(configuration)
# create an instance of the API class
users_api_instance = asana.UsersApi(api_client)
user_gid = 'me' # str | A string identifying a user. This can either be the string \"me\", an email, or the gid of a user.
opt_fields = ["email","name","photo","photo.image_1024x1024","photo.image_128x128","photo.image_21x21","photo.image_27x27","photo.image_36x36","photo.image_60x60","workspaces","workspaces.name"] # list[str] | Properties to include in the response. Set this query parameter to a comma-separated list of the properties you wish to include. (optional)
try:
# Get a user
api_response = users_api_instance.get_user(user_gid, opt_fields=opt_fields)
pprint(api_response)
except ApiException as e:
print("Exception when calling UsersApi->get_user: %s\n" % e)
Example: GET, POST, PUT, DELETE on tasks
GET - get multiple tasks
import asana
from asana.rest import ApiException
from pprint import pprint
# Configure OAuth2 access token for authorization:
configuration = asana.Configuration()
configuration.access_token = '<YOUR_PERSONAL_ACCESS_TOKEN>'
api_client = asana.ApiClient(configuration)
# create an instance of the API class
tasks_api_instance = asana.TasksApi(api_client)
limit = 50
project = "<YOUR_PROJECT_GID>"
opt_fields = [
"assignee_section",
"due_at",
"name",
"completed_at",
"completed_by",
"tags",
"dependents",
"hearts",
"liked",
"projects",
"completed",
"num_hearts",
"permalink_url",
"parent",
"assignee",
"assignee_status",
"num_subtasks",
"start_on",
"dependencies",
"is_rendered_as_separator",
"modified_at",
"approval_status",
"notes",
"memberships",
"workspace",
"due_on",
"hearted",
"created_at",
"likes",
"num_likes",
"custom_fields",
"external",
"html_notes",
"followers",
"start_at",
"resource_subtype",
"actual_time_minutes",
]
try:
# GET - get multiple tasks
api_response = tasks_api_instance.get_tasks(
limit=limit, project=project, opt_fields=opt_fields
)
pprint(api_response)
except ApiException as e:
print("Exception when calling TasksApi->get_tasks: %s\n" % e)
POST - create a task
import asana
from asana.rest import ApiException
from pprint import pprint
# Configure OAuth2 access token for authorization:
configuration = asana.Configuration()
configuration.access_token = '<YOUR_PERSONAL_ACCESS_TOKEN>'
api_client = asana.ApiClient(configuration)
# create an instance of the API class
tasks_api_instance = asana.TasksApi(api_client)
body = asana.TasksBody(
{
"name": "New Task",
"projects": ["<YOUR_PROJECT_GID>"],
}
)
try:
# POST - create a task
api_response = tasks_api_instance.create_task(body)
pprint(api_response)
except ApiException as e:
print("Exception when calling TasksApi->create_task: %s\n" % e)
PUT - update a task
import asana
from asana.rest import ApiException
from pprint import pprint
# Configure OAuth2 access token for authorization:
configuration = asana.Configuration()
configuration.access_token = '<YOUR_PERSONAL_ACCESS_TOKEN>'
api_client = asana.ApiClient(configuration)
# create an instance of the API class
tasks_api_instance = asana.TasksApi(api_client)
task_gid = "<YOUR_TASK_GID>"
body = asana.TasksBody(
{
"name": "Updated Task",
}
)
try:
# PUT - update a task
api_response = tasks_api_instance.update_task(body, task_gid)
pprint(api_response)
except ApiException as e:
print("Exception when calling TasksApi->update_task: %s\n" % e)
DELETE - delete a task
import asana
from asana.rest import ApiException
from pprint import pprint
# Configure OAuth2 access token for authorization:
configuration = asana.Configuration()
configuration.access_token = '<YOUR_PERSONAL_ACCESS_TOKEN>'
api_client = asana.ApiClient(configuration)
# create an instance of the API class
tasks_api_instance = asana.TasksApi(api_client)
task_gid = "<YOUR_TASK_GID>"
try:
# DELETE - delete a task
api_response = tasks_api_instance.delete_task(task_gid)
pprint(api_response)
except ApiException as e:
print("Exception when calling TasksApi->delete_task: %s\n" % e)
Documentation for API Endpoints
All URIs are relative to https://app.asana.com/api/1.0
Class | Method | HTTP request | Description |
---|---|---|---|
AttachmentsApi | create_attachment_for_object | POST /attachments | Upload an attachment |
AttachmentsApi | delete_attachment | DELETE /attachments/{attachment_gid} | Delete an attachment |
AttachmentsApi | get_attachment | GET /attachments/{attachment_gid} | Get an attachment |
AttachmentsApi | get_attachments_for_object | GET /attachments | Get attachments from an object |
AuditLogAPIApi | get_audit_log_events | GET /workspaces/{workspace_gid}/audit_log_events | Get audit log events |
BatchAPIApi | create_batch_request | POST /batch | Submit parallel requests |
CustomFieldSettingsApi | get_custom_field_settings_for_portfolio | GET /portfolios/{portfolio_gid}/custom_field_settings | Get a portfolio's custom fields |
CustomFieldSettingsApi | get_custom_field_settings_for_project | GET /projects/{project_gid}/custom_field_settings | Get a project's custom fields |
CustomFieldsApi | create_custom_field | POST /custom_fields | Create a custom field |
CustomFieldsApi | create_enum_option_for_custom_field | POST /custom_fields/{custom_field_gid}/enum_options | Create an enum option |
CustomFieldsApi | delete_custom_field | DELETE /custom_fields/{custom_field_gid} | Delete a custom field |
CustomFieldsApi | get_custom_field | GET /custom_fields/{custom_field_gid} | Get a custom field |
CustomFieldsApi | get_custom_fields_for_workspace | GET /workspaces/{workspace_gid}/custom_fields | Get a workspace's custom fields |
CustomFieldsApi | insert_enum_option_for_custom_field | POST /custom_fields/{custom_field_gid}/enum_options/insert | Reorder a custom field's enum |
CustomFieldsApi | update_custom_field | PUT /custom_fields/{custom_field_gid} | Update a custom field |
CustomFieldsApi | update_enum_option | PUT /enum_options/{enum_option_gid} | Update an enum option |
EventsApi | get_events | GET /events | Get events on a resource |
GoalRelationshipsApi | add_supporting_relationship | POST /goals/{goal_gid}/addSupportingRelationship | Add a supporting goal relationship |
GoalRelationshipsApi | get_goal_relationship | GET /goal_relationships/{goal_relationship_gid} | Get a goal relationship |
GoalRelationshipsApi | get_goal_relationships | GET /goal_relationships | Get goal relationships |
GoalRelationshipsApi | remove_supporting_relationship | POST /goals/{goal_gid}/removeSupportingRelationship | Removes a supporting goal relationship |
GoalRelationshipsApi | update_goal_relationship | PUT /goal_relationships/{goal_relationship_gid} | Update a goal relationship |
GoalsApi | add_followers | POST /goals/{goal_gid}/addFollowers | Add a collaborator to a goal |
GoalsApi | create_goal | POST /goals | Create a goal |
GoalsApi | create_goal_metric | POST /goals/{goal_gid}/setMetric | Create a goal metric |
GoalsApi | delete_goal | DELETE /goals/{goal_gid} | Delete a goal |
GoalsApi | get_goal | GET /goals/{goal_gid} | Get a goal |
GoalsApi | get_goals | GET /goals | Get goals |
GoalsApi | get_parent_goals_for_goal | GET /goals/{goal_gid}/parentGoals | Get parent goals from a goal |
GoalsApi | remove_followers | POST /goals/{goal_gid}/removeFollowers | Remove a collaborator from a goal |
GoalsApi | update_goal | PUT /goals/{goal_gid} | Update a goal |
GoalsApi | update_goal_metric | POST /goals/{goal_gid}/setMetricCurrentValue | Update a goal metric |
JobsApi | get_job | GET /jobs/{job_gid} | Get a job by id |
MembershipsApi | create_membership | POST /memberships | Create a membership |
MembershipsApi | delete_membership | DELETE /memberships/{membership_gid} | Delete a membership |
MembershipsApi | get_membership | GET /memberships/{membership_gid} | Get a membership |
MembershipsApi | get_memberships | GET /memberships | Get multiple memberships |
OrganizationExportsApi | create_organization_export | POST /organization_exports | Create an organization export request |
OrganizationExportsApi | get_organization_export | GET /organization_exports/{organization_export_gid} | Get details on an org export request |
PortfolioMembershipsApi | get_portfolio_membership | GET /portfolio_memberships/{portfolio_membership_gid} | Get a portfolio membership |
PortfolioMembershipsApi | get_portfolio_memberships | GET /portfolio_memberships | Get multiple portfolio memberships |
PortfolioMembershipsApi | get_portfolio_memberships_for_portfolio | GET /portfolios/{portfolio_gid}/portfolio_memberships | Get memberships from a portfolio |
PortfoliosApi | add_custom_field_setting_for_portfolio | POST /portfolios/{portfolio_gid}/addCustomFieldSetting | Add a custom field to a portfolio |
PortfoliosApi | add_item_for_portfolio | POST /portfolios/{portfolio_gid}/addItem | Add a portfolio item |
PortfoliosApi | add_members_for_portfolio | POST /portfolios/{portfolio_gid}/addMembers | Add users to a portfolio |
PortfoliosApi | create_portfolio | POST /portfolios | Create a portfolio |
PortfoliosApi | delete_portfolio | DELETE /portfolios/{portfolio_gid} | Delete a portfolio |
PortfoliosApi | get_items_for_portfolio | GET /portfolios/{portfolio_gid}/items | Get portfolio items |
PortfoliosApi | get_portfolio | GET /portfolios/{portfolio_gid} | Get a portfolio |
PortfoliosApi | get_portfolios | GET /portfolios | Get multiple portfolios |
PortfoliosApi | remove_custom_field_setting_for_portfolio | POST /portfolios/{portfolio_gid}/removeCustomFieldSetting | Remove a custom field from a portfolio |
PortfoliosApi | remove_item_for_portfolio | POST /portfolios/{portfolio_gid}/removeItem | Remove a portfolio item |
PortfoliosApi | remove_members_for_portfolio | POST /portfolios/{portfolio_gid}/removeMembers | Remove users from a portfolio |
PortfoliosApi | update_portfolio | PUT /portfolios/{portfolio_gid} | Update a portfolio |
ProjectBriefsApi | create_project_brief | POST /projects/{project_gid}/project_briefs | Create a project brief |
ProjectBriefsApi | delete_project_brief | DELETE /project_briefs/{project_brief_gid} | Delete a project brief |
ProjectBriefsApi | get_project_brief | GET /project_briefs/{project_brief_gid} | Get a project brief |
ProjectBriefsApi | update_project_brief | PUT /project_briefs/{project_brief_gid} | Update a project brief |
ProjectMembershipsApi | get_project_membership | GET /project_memberships/{project_membership_gid} | Get a project membership |
ProjectMembershipsApi | get_project_memberships_for_project | GET /projects/{project_gid}/project_memberships | Get memberships from a project |
ProjectStatusesApi | create_project_status_for_project | POST /projects/{project_gid}/project_statuses | Create a project status |
ProjectStatusesApi | delete_project_status | DELETE /project_statuses/{project_status_gid} | Delete a project status |
ProjectStatusesApi | get_project_status | GET /project_statuses/{project_status_gid} | Get a project status |
ProjectStatusesApi | get_project_statuses_for_project | GET /projects/{project_gid}/project_statuses | Get statuses from a project |
ProjectTemplatesApi | delete_project_template | DELETE /project_templates/{project_template_gid} | Delete a project template |
ProjectTemplatesApi | get_project_template | GET /project_templates/{project_template_gid} | Get a project template |
ProjectTemplatesApi | get_project_templates | GET /project_templates | Get multiple project templates |
ProjectTemplatesApi | get_project_templates_for_team | GET /teams/{team_gid}/project_templates | Get a team's project templates |
ProjectTemplatesApi | instantiate_project | POST /project_templates/{project_template_gid}/instantiateProject | Instantiate a project from a project template |
ProjectsApi | add_custom_field_setting_for_project | POST /projects/{project_gid}/addCustomFieldSetting | Add a custom field to a project |
ProjectsApi | add_followers_for_project | POST /projects/{project_gid}/addFollowers | Add followers to a project |
ProjectsApi | add_members_for_project | POST /projects/{project_gid}/addMembers | Add users to a project |
ProjectsApi | create_project | POST /projects | Create a project |
ProjectsApi | create_project_for_team | POST /teams/{team_gid}/projects | Create a project in a team |
ProjectsApi | create_project_for_workspace | POST /workspaces/{workspace_gid}/projects | Create a project in a workspace |
ProjectsApi | delete_project | DELETE /projects/{project_gid} | Delete a project |
ProjectsApi | duplicate_project | POST /projects/{project_gid}/duplicate | Duplicate a project |
ProjectsApi | get_project | GET /projects/{project_gid} | Get a project |
ProjectsApi | get_projects | GET /projects | Get multiple projects |
ProjectsApi | get_projects_for_task | GET /tasks/{task_gid}/projects | Get projects a task is in |
ProjectsApi | get_projects_for_team | GET /teams/{team_gid}/projects | Get a team's projects |
ProjectsApi | get_projects_for_workspace | GET /workspaces/{workspace_gid}/projects | Get all projects in a workspace |
ProjectsApi | get_task_counts_for_project | GET /projects/{project_gid}/task_counts | Get task count of a project |
ProjectsApi | project_save_as_template | POST /projects/{project_gid}/saveAsTemplate | Create a project template from a project |
ProjectsApi | remove_custom_field_setting_for_project | POST /projects/{project_gid}/removeCustomFieldSetting | Remove a custom field from a project |
ProjectsApi | remove_followers_for_project | POST /projects/{project_gid}/removeFollowers | Remove followers from a project |
ProjectsApi | remove_members_for_project | POST /projects/{project_gid}/removeMembers | Remove users from a project |
ProjectsApi | update_project | PUT /projects/{project_gid} | Update a project |
RulesApi | trigger_rule | POST /rule_triggers/{rule_trigger_gid}/run | Trigger a rule |
SectionsApi | add_task_for_section | POST /sections/{section_gid}/addTask | Add task to section |
SectionsApi | create_section_for_project | POST /projects/{project_gid}/sections | Create a section in a project |
SectionsApi | delete_section | DELETE /sections/{section_gid} | Delete a section |
SectionsApi | get_section | GET /sections/{section_gid} | Get a section |
SectionsApi | get_sections_for_project | GET /projects/{project_gid}/sections | Get sections in a project |
SectionsApi | insert_section_for_project | POST /projects/{project_gid}/sections/insert | Move or Insert sections |
SectionsApi | update_section | PUT /sections/{section_gid} | Update a section |
StatusUpdatesApi | create_status_for_object | POST /status_updates | Create a status update |
StatusUpdatesApi | delete_status | DELETE /status_updates/{status_update_gid} | Delete a status update |
StatusUpdatesApi | get_status | GET /status_updates/{status_update_gid} | Get a status update |
StatusUpdatesApi | get_statuses_for_object | GET /status_updates | Get status updates from an object |
StoriesApi | create_story_for_task | POST /tasks/{task_gid}/stories | Create a story on a task |
StoriesApi | delete_story | DELETE /stories/{story_gid} | Delete a story |
StoriesApi | get_stories_for_task | GET /tasks/{task_gid}/stories | Get stories from a task |
StoriesApi | get_story | GET /stories/{story_gid} | Get a story |
StoriesApi | update_story | PUT /stories/{story_gid} | Update a story |
TagsApi | create_tag | POST /tags | Create a tag |
TagsApi | create_tag_for_workspace | POST /workspaces/{workspace_gid}/tags | Create a tag in a workspace |
TagsApi | delete_tag | DELETE /tags/{tag_gid} | Delete a tag |
TagsApi | get_tag | GET /tags/{tag_gid} | Get a tag |
TagsApi | get_tags | GET /tags | Get multiple tags |
TagsApi | get_tags_for_task | GET /tasks/{task_gid}/tags | Get a task's tags |
TagsApi | get_tags_for_workspace | GET /workspaces/{workspace_gid}/tags | Get tags in a workspace |
TagsApi | update_tag | PUT /tags/{tag_gid} | Update a tag |
TasksApi | add_dependencies_for_task | POST /tasks/{task_gid}/addDependencies | Set dependencies for a task |
TasksApi | add_dependents_for_task | POST /tasks/{task_gid}/addDependents | Set dependents for a task |
TasksApi | add_followers_for_task | POST /tasks/{task_gid}/addFollowers | Add followers to a task |
TasksApi | add_project_for_task | POST /tasks/{task_gid}/addProject | Add a project to a task |
TasksApi | add_tag_for_task | POST /tasks/{task_gid}/addTag | Add a tag to a task |
TasksApi | create_subtask_for_task | POST /tasks/{task_gid}/subtasks | Create a subtask |
TasksApi | create_task | POST /tasks | Create a task |
TasksApi | delete_task | DELETE /tasks/{task_gid} | Delete a task |
TasksApi | duplicate_task | POST /tasks/{task_gid}/duplicate | Duplicate a task |
TasksApi | get_dependencies_for_task | GET /tasks/{task_gid}/dependencies | Get dependencies from a task |
TasksApi | get_dependents_for_task | GET /tasks/{task_gid}/dependents | Get dependents from a task |
TasksApi | get_subtasks_for_task | GET /tasks/{task_gid}/subtasks | Get subtasks from a task |
TasksApi | get_task | GET /tasks/{task_gid} | Get a task |
TasksApi | get_tasks | GET /tasks | Get multiple tasks |
TasksApi | get_tasks_for_project | GET /projects/{project_gid}/tasks | Get tasks from a project |
TasksApi | get_tasks_for_section | GET /sections/{section_gid}/tasks | Get tasks from a section |
TasksApi | get_tasks_for_tag | GET /tags/{tag_gid}/tasks | Get tasks from a tag |
TasksApi | get_tasks_for_user_task_list | GET /user_task_lists/{user_task_list_gid}/tasks | Get tasks from a user task list |
TasksApi | remove_dependencies_for_task | POST /tasks/{task_gid}/removeDependencies | Unlink dependencies from a task |
TasksApi | remove_dependents_for_task | POST /tasks/{task_gid}/removeDependents | Unlink dependents from a task |
TasksApi | remove_follower_for_task | POST /tasks/{task_gid}/removeFollowers | Remove followers from a task |
TasksApi | remove_project_for_task | POST /tasks/{task_gid}/removeProject | Remove a project from a task |
TasksApi | remove_tag_for_task | POST /tasks/{task_gid}/removeTag | Remove a tag from a task |
TasksApi | search_tasks_for_workspace | GET /workspaces/{workspace_gid}/tasks/search | Search tasks in a workspace |
TasksApi | set_parent_for_task | POST /tasks/{task_gid}/setParent | Set the parent of a task |
TasksApi | update_task | PUT /tasks/{task_gid} | Update a task |
TeamMembershipsApi | get_team_membership | GET /team_memberships/{team_membership_gid} | Get a team membership |
TeamMembershipsApi | get_team_memberships | GET /team_memberships | Get team memberships |
TeamMembershipsApi | get_team_memberships_for_team | GET /teams/{team_gid}/team_memberships | Get memberships from a team |
TeamMembershipsApi | get_team_memberships_for_user | GET /users/{user_gid}/team_memberships | Get memberships from a user |
TeamsApi | add_user_for_team | POST /teams/{team_gid}/addUser | Add a user to a team |
TeamsApi | create_team | POST /teams | Create a team |
TeamsApi | get_team | GET /teams/{team_gid} | Get a team |
TeamsApi | get_teams_for_user | GET /users/{user_gid}/teams | Get teams for a user |
TeamsApi | get_teams_for_workspace | GET /workspaces/{workspace_gid}/teams | Get teams in a workspace |
TeamsApi | remove_user_for_team | POST /teams/{team_gid}/removeUser | Remove a user from a team |
TeamsApi | update_team | PUT /teams/{team_gid} | Update a team |
TimePeriodsApi | get_time_period | GET /time_periods/{time_period_gid} | Get a time period |
TimePeriodsApi | get_time_periods | GET /time_periods | Get time periods |
TimeTrackingEntriesApi | create_time_tracking_entry | POST /tasks/{task_gid}/time_tracking_entries | Create a time tracking entry |
TimeTrackingEntriesApi | delete_time_tracking_entry | DELETE /time_tracking_entries/{time_tracking_entry_gid} | Delete a time tracking entry |
TimeTrackingEntriesApi | get_time_tracking_entries_for_task | GET /tasks/{task_gid}/time_tracking_entries | Get time tracking entries for a task |
TimeTrackingEntriesApi | get_time_tracking_entry | GET /time_tracking_entries/{time_tracking_entry_gid} | Get a time tracking entry |
TimeTrackingEntriesApi | update_time_tracking_entry | PUT /time_tracking_entries/{time_tracking_entry_gid} | Update a time tracking entry |
TypeaheadApi | typeahead_for_workspace | GET /workspaces/{workspace_gid}/typeahead | Get objects via typeahead |
UserTaskListsApi | get_user_task_list | GET /user_task_lists/{user_task_list_gid} | Get a user task list |
UserTaskListsApi | get_user_task_list_for_user | GET /users/{user_gid}/user_task_list | Get a user's task list |
UsersApi | get_favorites_for_user | GET /users/{user_gid}/favorites | Get a user's favorites |
UsersApi | get_user | GET /users/{user_gid} | Get a user |
UsersApi | get_users | GET /users | Get multiple users |
UsersApi | get_users_for_team | GET /teams/{team_gid}/users | Get users in a team |
UsersApi | get_users_for_workspace | GET /workspaces/{workspace_gid}/users | Get users in a workspace or organization |
WebhooksApi | create_webhook | POST /webhooks | Establish a webhook |
WebhooksApi | delete_webhook | DELETE /webhooks/{webhook_gid} | Delete a webhook |
WebhooksApi | get_webhook | GET /webhooks/{webhook_gid} | Get a webhook |
WebhooksApi | get_webhooks | GET /webhooks | Get multiple webhooks |
WebhooksApi | update_webhook | PUT /webhooks/{webhook_gid} | Update a webhook |
WorkspaceMembershipsApi | get_workspace_membership | GET /workspace_memberships/{workspace_membership_gid} | Get a workspace membership |
WorkspaceMembershipsApi | get_workspace_memberships_for_user | GET /users/{user_gid}/workspace_memberships | Get workspace memberships for a user |
WorkspaceMembershipsApi | get_workspace_memberships_for_workspace | GET /workspaces/{workspace_gid}/workspace_memberships | Get the workspace memberships for a workspace |
WorkspacesApi | add_user_for_workspace | POST /workspaces/{workspace_gid}/addUser | Add a user to a workspace or organization |
WorkspacesApi | get_workspace | GET /workspaces/{workspace_gid} | Get a workspace |
WorkspacesApi | get_workspaces | GET /workspaces | Get multiple workspaces |
WorkspacesApi | remove_user_for_workspace | POST /workspaces/{workspace_gid}/removeUser | Remove a user from a workspace or organization |
WorkspacesApi | update_workspace | PUT /workspaces/{workspace_gid} | Update a workspace |
Documentation For Models
- AddCustomFieldSettingRequest
- AddFollowersRequest
- AddMembersRequest
- AllOfProjectResponseOwner
- AllOfProjectTemplateBaseOwner
- AllOfProjectTemplateResponseOwner
- AllOfStoryResponseNewDateValue
- AllOfStoryResponseOldDateValue
- AllOfUserTaskListBaseOwner
- AllOfUserTaskListBaseWorkspace
- AllOfUserTaskListCompactOwner
- AllOfUserTaskListCompactWorkspace
- AllOfUserTaskListRequestOwner
- AllOfUserTaskListRequestWorkspace
- AllOfUserTaskListResponseOwner
- AllOfUserTaskListResponseWorkspace
- AllOfWorkspaceMembershipResponseUserTaskListOwner
- AllOfWorkspaceMembershipResponseUserTaskListWorkspace
- AsanaNamedResource
- AsanaNamedResourceArray
- AsanaResource
- AttachmentBase
- AttachmentCompact
- AttachmentRequest
- AttachmentResponse
- AttachmentResponseArray
- AttachmentResponseData
- AttachmentResponseParent
- AttachmentResponseParentCreatedBy
- AuditLogEvent
- AuditLogEventActor
- AuditLogEventArray
- AuditLogEventContext
- AuditLogEventDetails
- AuditLogEventResource
- BatchBody
- BatchRequest
- BatchRequestAction
- BatchRequestActions
- BatchRequestOptions
- BatchResponse
- BatchResponseArray
- CreateMembershipRequest
- CreateTimeTrackingEntryRequest
- CustomFieldBase
- CustomFieldBaseDateValue
- CustomFieldBaseEnumOptions
- CustomFieldBaseEnumValue
- CustomFieldCompact
- CustomFieldGidEnumOptionsBody
- CustomFieldRequest
- CustomFieldResponse
- CustomFieldResponseArray
- CustomFieldResponseCreatedBy
- CustomFieldResponseData
- CustomFieldResponsePeopleValue
- CustomFieldSettingBase
- CustomFieldSettingCompact
- CustomFieldSettingResponse
- CustomFieldSettingResponseArray
- CustomFieldSettingResponseCustomField
- CustomFieldSettingResponseData
- CustomFieldSettingResponseParent
- CustomFieldSettingResponseProject
- CustomFieldsBody
- CustomFieldsCustomFieldGidBody
- DateVariableCompact
- DateVariableRequest
- EmptyResponse
- EmptyResponseData
- EnumOption
- EnumOptionBase
- EnumOptionData
- EnumOptionInsertRequest
- EnumOptionRequest
- EnumOptionsEnumOptionGidBody
- EnumOptionsInsertBody
- Error
- ErrorResponse
- ErrorResponseErrors
- EventResponse
- EventResponseArray
- EventResponseChange
- EventResponseParent
- EventResponseResource
- EventResponseUser
- GoalAddSubgoalRequest
- GoalAddSupportingRelationshipRequest
- GoalAddSupportingWorkRequest
- GoalBase
- GoalCompact
- GoalGidAddFollowersBody
- GoalGidAddSupportingRelationshipBody
- GoalGidRemoveFollowersBody
- GoalGidRemoveSupportingRelationshipBody
- GoalGidSetMetricBody
- GoalGidSetMetricCurrentValueBody
- GoalMembershipBase
- GoalMembershipCompact
- GoalMembershipResponse
- GoalMembershipResponseUser
- GoalMembershipResponseWorkspace
- GoalMetricBase
- GoalMetricCurrentValueRequest
- GoalMetricRequest
- GoalRelationshipBase
- GoalRelationshipBaseSupportedGoal
- GoalRelationshipBaseSupportingResource
- GoalRelationshipCompact
- GoalRelationshipRequest
- GoalRelationshipResponse
- GoalRelationshipResponseArray
- GoalRelationshipResponseData
- GoalRelationshipsGoalRelationshipGidBody
- GoalRemoveSubgoalRequest
- GoalRemoveSupportingRelationshipRequest
- GoalRequest
- GoalRequestBase
- GoalResponse
- GoalResponseArray
- GoalResponseCurrentStatusUpdate
- GoalResponseData
- GoalResponseLikes
- GoalResponseMetric
- GoalResponseTeam
- GoalResponseTimePeriod
- GoalResponseWorkspace
- GoalUpdateRequest
- GoalsBody
- GoalsGoalGidBody
- InlineResponse412
- InlineResponse412Errors
- JobBase
- JobBaseNewProject
- JobBaseNewProjectTemplate
- JobBaseNewTask
- JobCompact
- JobResponse
- JobResponseData
- Like
- MemberCompact
- MembershipCompact
- MembershipCompactGoal
- MembershipCompactMember
- MembershipCompactParent
- MembershipRequest
- MembershipResponse
- MembershipResponseArray
- MembershipResponseData
- MembershipsBody
- ModifyDependenciesRequest
- ModifyDependentsRequest
- NextPage
- OrganizationExportBase
- OrganizationExportCompact
- OrganizationExportRequest
- OrganizationExportResponse
- OrganizationExportResponseData
- OrganizationExportsBody
- PortfolioAddItemRequest
- PortfolioBase
- PortfolioCompact
- PortfolioGidAddCustomFieldSettingBody
- PortfolioGidAddItemBody
- PortfolioGidAddMembersBody
- PortfolioGidRemoveCustomFieldSettingBody
- PortfolioGidRemoveItemBody
- PortfolioGidRemoveMembersBody
- PortfolioMembershipBase
- PortfolioMembershipBasePortfolio
- PortfolioMembershipCompact
- PortfolioMembershipResponse
- PortfolioMembershipResponseArray
- PortfolioMembershipResponseData
- PortfolioRemoveItemRequest
- PortfolioRequest
- PortfolioResponse
- PortfolioResponseArray
- PortfolioResponseCurrentStatusUpdate
- PortfolioResponseCustomFieldSettings
- PortfolioResponseCustomFields
- PortfolioResponseData
- PortfolioResponseWorkspace
- PortfoliosBody
- PortfoliosPortfolioGidBody
- Preview
- ProjectBase
- ProjectBaseCurrentStatus
- ProjectBaseCurrentStatusUpdate
- ProjectBriefBase
- ProjectBriefCompact
- ProjectBriefRequest
- ProjectBriefResponse
- ProjectBriefResponseData
- ProjectBriefResponseProject
- ProjectBriefsProjectBriefGidBody
- ProjectCompact
- ProjectDuplicateRequest
- ProjectDuplicateRequestScheduleDates
- ProjectGidAddCustomFieldSettingBody
- ProjectGidAddFollowersBody
- ProjectGidAddMembersBody
- ProjectGidDuplicateBody
- ProjectGidProjectBriefsBody
- ProjectGidProjectStatusesBody
- ProjectGidRemoveCustomFieldSettingBody
- ProjectGidRemoveFollowersBody
- ProjectGidRemoveMembersBody
- ProjectGidSaveAsTemplateBody
- ProjectGidSectionsBody
- ProjectMembershipBase
- ProjectMembershipCompact
- ProjectMembershipCompactArray
- ProjectMembershipCompactResponse
- ProjectMembershipCompactResponseData
- ProjectMembershipNormalResponse
- ProjectMembershipNormalResponseData
- ProjectRequest
- ProjectResponse
- ProjectResponseArray
- ProjectResponseCompletedBy
- ProjectResponseCreatedFromTemplate
- ProjectResponseData
- ProjectResponseProjectBrief
- ProjectResponseTeam
- ProjectResponseWorkspace
- ProjectSaveAsTemplateRequest
- ProjectSectionInsertRequest
- ProjectStatusBase
- ProjectStatusCompact
- ProjectStatusRequest
- ProjectStatusResponse
- ProjectStatusResponseArray
- ProjectStatusResponseData
- ProjectTemplateBase
- ProjectTemplateBaseRequestedDates
- ProjectTemplateBaseRequestedRoles
- ProjectTemplateBaseTeam
- ProjectTemplateCompact
- ProjectTemplateGidInstantiateProjectBody
- ProjectTemplateInstantiateProjectRequest
- ProjectTemplateInstantiateProjectRequestRequestedDates
- ProjectTemplateInstantiateProjectRequestRequestedRoles
- ProjectTemplateResponse
- ProjectTemplateResponseArray
- ProjectTemplateResponseData
- ProjectUpdateRequest
- ProjectsBody
- ProjectsProjectGidBody
- RemoveCustomFieldSettingRequest
- RemoveFollowersRequest
- RemoveMembersRequest
- RequestedRoleRequest
- RuleTriggerGidRunBody
- RuleTriggerRequest
- RuleTriggerResponse
- RuleTriggerResponseData
- SectionBase
- SectionCompact
- SectionGidAddTaskBody
- SectionRequest
- SectionResponse
- SectionResponseArray
- SectionResponseData
- SectionTaskInsertRequest
- SectionsInsertBody
- SectionsSectionGidBody
- StatusUpdateBase
- StatusUpdateCompact
- StatusUpdateRequest
- StatusUpdateResponse
- StatusUpdateResponseArray
- StatusUpdateResponseData
- StatusUpdateResponseParent
- StatusUpdatesBody
- StoriesStoryGidBody
- StoryBase
- StoryCompact
- StoryRequest
- StoryResponse
- StoryResponseArray
- StoryResponseAssignee
- StoryResponseCustomField
- StoryResponseData
- StoryResponseDates
- StoryResponseOldDates
- StoryResponseOldEnumValue
- StoryResponseOldSection
- StoryResponsePreviews
- StoryResponseProject
- StoryResponseStory
- StoryResponseTag
- StoryResponseTarget
- StoryResponseTask
- TagBase
- TagCompact
- TagRequest
- TagResponse
- TagResponseArray
- TagResponseData
- TagsBody
- TaskAddFollowersRequest
- TaskAddProjectRequest
- TaskAddTagRequest
- TaskBase
- TaskBaseCompletedBy
- TaskBaseDependencies
- TaskBaseExternal
- TaskBaseMemberships
- TaskBaseSection
- TaskCompact
- TaskCountResponse
- TaskCountResponseData
- TaskDuplicateRequest
- TaskGidAddDependenciesBody
- TaskGidAddDependentsBody
- TaskGidAddFollowersBody
- TaskGidAddProjectBody
- TaskGidAddTagBody
- TaskGidDuplicateBody
- TaskGidRemoveDependenciesBody
- TaskGidRemoveDependentsBody
- TaskGidRemoveFollowersBody
- TaskGidRemoveProjectBody
- TaskGidRemoveTagBody
- TaskGidSetParentBody
- TaskGidStoriesBody
- TaskGidSubtasksBody
- TaskGidTimeTrackingEntriesBody
- TaskRemoveFollowersRequest
- TaskRemoveProjectRequest
- TaskRemoveTagRequest
- TaskRequest
- TaskResponse
- TaskResponseArray
- TaskResponseAssigneeSection
- TaskResponseCustomFields
- TaskResponseData
- TaskResponseParent
- TaskResponseTags
- TaskResponseWorkspace
- TaskSetParentRequest
- TasksBody
- TasksTaskGidBody
- TeamAddUserRequest
- TeamBase
- TeamCompact
- TeamGidAddUserBody
- TeamGidProjectsBody
- TeamGidRemoveUserBody
- TeamMembershipBase
- TeamMembershipCompact
- TeamMembershipResponse
- TeamMembershipResponseArray
- TeamMembershipResponseData
- TeamRemoveUserRequest
- TeamRequest
- TeamResponse
- TeamResponseArray
- TeamResponseData
- TeamResponseOrganization
- TeamsBody
- TeamsTeamGidBody
- TemplateRole
- TimePeriodBase
- TimePeriodCompact
- TimePeriodResponse
- TimePeriodResponseArray
- TimePeriodResponseData
- TimeTrackingEntriesTimeTrackingEntryGidBody
- TimeTrackingEntryBase
- TimeTrackingEntryBaseData
- TimeTrackingEntryCompact
- TimeTrackingEntryCompactArray
- UpdateTimeTrackingEntryRequest
- UserBase
- UserBaseResponse
- UserBaseResponseData
- UserBaseResponsePhoto
- UserCompact
- UserRequest
- UserResponse
- UserResponseArray
- UserResponseData
- UserTaskListBase
- UserTaskListCompact
- UserTaskListRequest
- UserTaskListResponse
- UserTaskListResponseData
- WebhookCompact
- WebhookCompactResource
- WebhookFilter
- WebhookRequest
- WebhookRequestFilters
- WebhookResponse
- WebhookResponseArray
- WebhookResponseData
- WebhookUpdateRequest
- WebhooksBody
- WebhooksWebhookGidBody
- WorkspaceAddUserRequest
- WorkspaceBase
- WorkspaceCompact
- WorkspaceGidAddUserBody
- WorkspaceGidProjectsBody
- WorkspaceGidRemoveUserBody
- WorkspaceGidTagsBody
- WorkspaceMembershipBase
- WorkspaceMembershipCompact
- WorkspaceMembershipRequest
- WorkspaceMembershipResponse
- WorkspaceMembershipResponseArray
- WorkspaceMembershipResponseData
- WorkspaceMembershipResponseUserTaskList
- WorkspaceMembershipResponseVacationDates
- WorkspaceRemoveUserRequest
- WorkspaceRequest
- WorkspaceResponse
- WorkspaceResponseArray
- WorkspaceResponseData
- WorkspacesWorkspaceGidBody
Documentation For Authorization
oauth2
- Type: OAuth
- Flow: accessCode
- Authorization URL: https://app.asana.com/-/oauth_authorize
- Scopes:
- default: Provides access to all endpoints documented in our API reference. If no scopes are requested, this scope is assumed by default.
- openid: Provides access to OpenID Connect ID tokens and the OpenID Connect user info endpoint.
- email: Provides access to the user’s email through the OpenID Connect user info endpoint.
- profile: Provides access to the user’s name and profile photo through the OpenID Connect user info endpoint.
Getting events
In order to get events you will need a sync token. This sync token can be acquired in the error message from the initial request to get_events.
import asana
from asana.rest import ApiException
from pprint import pprint
# Configure OAuth2 access token for authorization:
configuration = asana.Configuration()
configuration.access_token = '<YOUR_PERSONAL_ACCESS_TOKEN>'
api_client = asana.ApiClient(configuration)
# create an instance of the API class
events_api_instance = asana.EventsApi(api_client)
resource = '12345' # str | A resource ID to subscribe to. The resource can be a task or project.
sync = '' # str | A sync token received from the last request, or none on first sync. Events will be returned from the point in time that the sync token was generated. *Note: On your first request, omit the sync token. The response will be the same as for an expired sync token, and will include a new valid sync token.If the sync token is too old (which may happen from time to time) the API will return a `412 Precondition Failed` error, and include a fresh sync token in the response.* (optional)
try:
# Initial request to get the sync token
api_response = events_api_instance.get_events(resource, sync=sync)
except ApiException as e:
# Set the sync token
sync = json.loads(e.body.decode('utf-8'))['sync']
try:
# Follow up request to get events
api_response = events_api_instance.get_events(resource, sync=sync)
pprint(api_response)
except ApiException as e:
print("Exception when calling EventsApi->get_events: %s\n" % e)
Pagination
import asana
from asana.rest import ApiException
from pprint import pprint
# Configure OAuth2 access token for authorization:
configuration = asana.Configuration()
configuration.access_token = '<YOUR_PERSONAL_ACCESS_TOKEN>'
api_client = asana.ApiClient(configuration)
# create an instance of the API class
task_api_instance = asana.TasksApi(api_client)
limit = 10 # int | Results per page. The number of objects to return per page. The value must be between 1 and 100. (optional)
project = '321654' # str | The project to filter tasks on. (optional)
try:
# Get multiple tasks with next_page
offset = None
while True:
# If the "offset" is None make a request without providing the offset query parameter
# Asana throws an error if we make a request with a "offset" query param of None
if offset is None:
api_response = task_api_instance.get_tasks(limit=limit, project=project)
else:
api_response = task_api_instance.get_tasks(limit=limit, project=project, offset=offset)
# Do something
# EX: print response
pprint(api_response)
# Check to see if there is a next_page
if api_response.next_page:
offset = api_response.next_page.offset
else:
break
except ApiException as e:
print("Exception when calling TasksApi->get_tasks: %s\n" % e)
Accessing repsonse data
By default, the client library returns a class object of the resource. You can use dot notation to access the response data.
TIP: look at the "Return type" section of the documented endpoint to understand which properties are accessible. (EX: get_task)
Example: Accessing task data (dot notation)
.
.
.
try:
task = tasks_api_instance.get_task(task_gid).data
task_name = task.name
task_notes = task.notes
except ApiException as e:
.
.
.
If you would like to convert the class object into a dictionary and access the data via bracket notation, you can use the to_dict()
method.
Example: Accessing task data (bracket notation)
.
.
.
try:
task_dict = tasks_api_instance.get_task(task_gid).to_dict()
task_dict_data = task_dict['data']
task_name = task_dict_data['name']
task_notes = task_dict_data['notes']
except ApiException as e:
.
.
.
Accessing response status code and headers
In the scenario you want to access the response headers or the status code along with the response data you can
provide the _return_http_data_only
parameter argument in the request method and set the value to False
import asana
from asana.rest import ApiException
from pprint import pprint
# Configure OAuth2 access token for authorization:
configuration = asana.Configuration()
configuration.access_token = '<YOUR_PERSONAL_ACCESS_TOKEN>'
api_client = asana.ApiClient(configuration)
# create an instance of the API class
api_instance = asana.UsersApi(api_client)
user_gid = 'me' # str | A string identifying a user. This can either be the string \"me\", an email, or the gid of a user.
try:
# Get a user - Add asana-enable in the request
api_response = api_instance.get_user(user_gid, _return_http_data_only=False) # returns a tuple: (object, status, headers)
pprint(api_response)
except ApiException as e:
print("Exception when calling UsersApi->get_user: %s\n" % e)
Adding deprecation flag to your "asana-enable" header
On the client
import asana
from asana.rest import ApiException
from pprint import pprint
# Configure OAuth2 access token for authorization:
configuration = asana.Configuration()
configuration.access_token = '<YOUR_PERSONAL_ACCESS_TOKEN>'
api_client = asana.ApiClient(configuration)
# Add asana-enable header for the client
api_client.default_headers['asana-enable'] = 'string_ids'
OR
On the request
import asana
from asana.rest import ApiException
from pprint import pprint
# Configure OAuth2 access token for authorization:
configuration = asana.Configuration()
configuration.access_token = '<YOUR_PERSONAL_ACCESS_TOKEN>'
api_client = asana.ApiClient(configuration)
# create an instance of the API class
api_instance = asana.UsersApi(api_client)
user_gid = 'me' # str | A string identifying a user. This can either be the string \"me\", an email, or the gid of a user.
try:
# Get a user - Add asana-enable in the request
api_response = api_instance.get_user(user_gid, header_params={'asana-enable': 'string_ids'})
pprint(api_response)
except ApiException as e:
print("Exception when calling UsersApi->get_user: %s\n" % e)
Documentation for Using the call_api
method
Use this to make HTTP calls when the endpoint does not exist in the current library version or has bugs
Example: GET, POST, PUT, DELETE on tasks
GET - get a task
import asana
from asana.rest import ApiException
from pprint import pprint
# Configure OAuth2 access token for authorization:
configuration = asana.Configuration()
configuration.access_token = '<YOUR_PERSONAL_ACCESS_TOKEN>'
api_client = asana.ApiClient(configuration)
try:
# GET - get a task
api_response = api_client.call_api(
"/tasks/{task_gid}",
"GET",
path_params={"task_gid": "<YOUR_TASK_GID>"},
query_params=[],
header_params={"Accept": "application/json; charset=utf-8"},
body=None,
post_params=[],
files={},
response_type=object, # If there is an existing response model for the resource you can use that EX: "TaskResponseData" or you can specify one of the following types: float, bool, bytes, str, object
auth_settings=["oauth2"],
async_req=None,
_return_http_data_only=True,
_preload_content=True,
_request_timeout=None,
collection_formats={},
)
pprint(api_response)
except ApiException as e:
print("Exception: %s\n" % e)
GET - get multiple tasks -> with opt_fields
import asana
from asana.rest import ApiException
from pprint import pprint
# Configure OAuth2 access token for authorization:
configuration = asana.Configuration()
configuration.access_token = '<YOUR_PERSONAL_ACCESS_TOKEN>'
api_client = asana.ApiClient(configuration)
try:
# GET - get multiple tasks
api_response = api_client.call_api(
"/tasks",
"GET",
path_params={},
query_params=[('opt_fields', 'name,notes,projects')],
header_params={"Accept": "application/json; charset=utf-8"},
body=None,
post_params=[],
files={},
response_type=object, # If there is an existing response model for the resource you can use that EX: "TaskResponseData" or you can specify one of the following types: float, bool, bytes, str, object
auth_settings=["oauth2"],
async_req=None,
_return_http_data_only=True,
_preload_content=True,
_request_timeout=None,
collection_formats={},
)
pprint(api_response)
except ApiException as e:
print("Exception: %s\n" % e)
POST - create a task
import asana
from asana.rest import ApiException
from pprint import pprint
# Configure OAuth2 access token for authorization:
configuration = asana.Configuration()
configuration.access_token = '<YOUR_PERSONAL_ACCESS_TOKEN>'
api_client = asana.ApiClient(configuration)
try:
# POST - create a task
api_response = api_client.call_api(
"/tasks",
"POST",
path_params={},
query_params=[],
header_params={
"Accept": "application/json; charset=utf-8",
"Content-Type": "application/json; charset=utf-8",
},
body={
"data": {
"name": "New Task",
"projects": ["<YOUR_PROJECT_GID>"],
}
},
post_params=[],
files={},
response_type=object, # If there is an existing response model for the resource you can use that EX: "TaskResponseData" or you can specify one of the following types: float, bool, bytes, str, object
auth_settings=["oauth2"],
async_req=None,
_return_http_data_only=True,
_preload_content=True,
_request_timeout=None,
collection_formats={},
)
pprint(api_response)
except ApiException as e:
print("Exception: %s\n" % e)
PUT - update a task
import asana
from asana.rest import ApiException
from pprint import pprint
# Configure OAuth2 access token for authorization:
configuration = asana.Configuration()
configuration.access_token = '<YOUR_PERSONAL_ACCESS_TOKEN>'
api_client = asana.ApiClient(configuration)
try:
# PUT - update a task
api_response = api_client.call_api(
"/tasks/{task_gid}",
"PUT",
path_params={"task_gid": "<YOUR_TASK_GID>"},
query_params=[],
header_params={
"Accept": "application/json; charset=utf-8",
"Content-Type": "application/json; charset=utf-8",
},
body={
"data": {
"name": "Updated Task",
}
},
post_params=[],
files={},
response_type=object, # If there is an existing response model for the resource you can use that EX: "TaskResponseData" or you can specify one of the following types: float, bool, bytes, str, object
auth_settings=["oauth2"],
async_req=None,
_return_http_data_only=True,
_preload_content=True,
_request_timeout=None,
collection_formats={},
)
pprint(api_response)
except ApiException as e:
print("Exception: %s\n" % e)
DELETE - delete a task
import asana
from asana.rest import ApiException
from pprint import pprint
# Configure OAuth2 access token for authorization:
configuration = asana.Configuration()
configuration.access_token = '<YOUR_PERSONAL_ACCESS_TOKEN>'
api_client = asana.ApiClient(configuration)
try:
# DELETE - delete a task
api_response = api_client.call_api(
"/tasks/{task_gid}",
"DELETE",
path_params={"task_gid": "<YOUR_TASK_GID>"},
query_params=[],
header_params={"Accept": "application/json; charset=utf-8"},
body=None,
post_params=[],
files={},
response_type=object, # If there is an existing response model for the resource you can use that EX: "EmptyResponseData" or you can specify one of the following types: float, bool, bytes, str, object
auth_settings=["oauth2"],
async_req=None,
_return_http_data_only=True,
_preload_content=True,
_request_timeout=None,
collection_formats={},
)
pprint(api_response)
except ApiException as e:
print("Exception: %s\n" % e)
Author
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.