Driftwatch

APIs / Asana

Asana API changes

Breaking changes, deprecations and new fields in the Asana API, as they ship.

Asana · 1ce3fcd910 additive
4 new response fields
  • CustomFieldCompact.is_lookup_field
  • CustomFieldBase.is_lookup_field
  • CustomFieldResponse.is_lookup_field
  • CustomFieldSettingResponse.custom_field.is_lookup_field
6 new request properties
  • CustomFieldCompact.is_lookup_field
  • CustomFieldBase.is_lookup_field
  • CustomFieldResponse.is_lookup_field
  • CustomFieldSettingResponse.custom_field.is_lookup_field
  • CustomFieldRequest.is_lookup_field
  • CustomFieldCreateRequest.is_lookup_field
Asana · cd062f4e5 additive
2 new response fields
  • TimeTrackingEntryCompact.assignee
  • TimeTrackingEntryBase.assignee
2 new request properties
  • CreateTimeTrackingEntryRequest.assignee
  • UpdateTimeTrackingEntryRequest.assignee
Asana · 196237801 additive
  • Additive

    limit is now optional

    No action needed.

    GET /workspaces/{workspace_gid}/projects/search · limit · 2 call sites
Asana · 1b1c15101 additive
  • Additive

    Response field automation added

    No action needed unless you validate responses against a closed schema.

    AiStudioRunResponse.automation · reachable from 1 operation
Asana · cdd7cb5f1 breaking
  • Breakingdirection flip: their tools call this safe

    html_custom_fields is no longer accepted

    Usually ignored rather than rejected, so the call succeeds and does something subtly different.

    8 places: GoalUpdateRequest.html_custom_fields, PortfolioUpdateRequest.html_custom_fields, ProjectRequest.html_custom_fields, ProjectUpdateRequest.html_custom_fields, TaskCreateRequest.html_custom_fields, TaskRequestBase.html_custom_fields +2 more
    Code that breaks
    await client.post("/…", {
      // html_custom_fields is now ignored, not rejected
      html_custom_fields: value,
    });
Asana · 322147be17 additive
3 new response fields
  • JobCompact.dates_rollup_progress
  • TaskBase.has_subtasks_date_mismatch
  • TaskResponse.has_subtasks_date_mismatch
12 new request properties
  • TaskBase.has_subtasks_date_mismatch
  • TaskRequestBase.has_subtasks_date_mismatch
  • ProjectRequest.html_custom_fields
  • TaskRequestBase.html_custom_fields
  • TaskCreateRequest.has_subtasks_date_mismatch
  • TaskCreateRequest.html_custom_fields
  • UserUpdateRequest.html_custom_fields
  • GoalUpdateRequest.html_custom_fields
  • PortfolioUpdateRequest.html_custom_fields
  • ProjectUpdateRequest.html_custom_fields
  • TaskUpdateRequest.has_subtasks_date_mismatch
  • TaskUpdateRequest.html_custom_fields
Asana · 6594c8a52 breaking
  • Breaking

    base_role_type no longer accepts "super_admin"

    A value you may have hardcoded is now rejected.

    RbacRoleRequest.base_role_type · reachable from 1 operation
    Code that breaks
    // sending "super_admin" for base_role_type is now rejected
  • Breaking

    workspace is now required

    Calls that omit it are rejected.

    GET /roles · workspace
    Code that breaks
    await client.post("/roles", {
      // …
      workspace: /* now required */,
    });
Asana · 2f33f7301 additive
Asana · f37e63d03 additive
  • Additive

    Response field public added

    No action needed unless you validate responses against a closed schema.

    PortfolioBase.public · reachable from 5 operations
2 new request properties
  • PortfolioBase.public
  • PortfolioUpdateRequest.public
Asana · a75e9c9d1 breaking
Asana · 13f29e0045 additive
26 new response fields
  • ProjectCompact.resource_subtype
  • CustomFieldSettingResponse.parent.resource_subtype
  • CustomFieldSettingResponse.project.resource_subtype
  • CustomTypeCompact.asana_created_type_identifier
  • PortfolioCompact.resource_subtype
  • ProjectResponse.resource_subtype
  • ProjectResponse.custom_type
  • ProjectBase.resource_subtype
  • TaskResponse.custom_type.asana_created_type_identifier
  • TimeTrackingEntryCompact.attributable_to.resource_subtype
  • PortfolioBase.resource_subtype
  • PortfolioResponse.resource_subtype
  • PortfolioResponse.custom_type
  • BudgetResponse.parent.resource_subtype
  • GoalRelationshipCompact.supporting_resource.resource_subtype
  • ProjectPortfolioSettingCompact.project.resource_subtype
  • ProjectPortfolioSettingCompact.portfolio.resource_subtype
  • ProjectBriefResponse.project.resource_subtype
  • TimeTrackingEntryBase.attributable_to.resource_subtype
  • GoalRelationshipBase.supporting_resource.resource_subtype
  • GoalRelationshipResponse.supporting_resource.resource_subtype
  • StatusUpdateResponse.parent.resource_subtype
  • CustomTypeResponse.asana_created_type_identifier
  • ProjectPortfolioSettingResponse.portfolio.resource_subtype
  • ProjectPortfolioSettingResponse.project.resource_subtype
  • TaskTemplateResponse.project.resource_subtype
17 new request properties
  • ProjectCompact.resource_subtype
  • CustomFieldSettingResponse.parent.resource_subtype
  • CustomFieldSettingResponse.project.resource_subtype
  • PortfolioCompact.resource_subtype
  • ProjectBase.resource_subtype
  • PortfolioBase.resource_subtype
  • GoalRelationshipCompact.supporting_resource.resource_subtype
  • ProjectRequest.custom_type
  • GoalRelationshipBase.supporting_resource.resource_subtype
  • ProjectRequest.resource_subtype
  • ProjectUpdateRequest.resource_subtype
  • ProjectUpdateRequest.custom_type
  • PortfolioRequest.resource_subtype
  • GoalRelationshipRequest.supporting_resource.resource_subtype
  • PortfolioRequest.custom_type
  • PortfolioUpdateRequest.resource_subtype
  • PortfolioUpdateRequest.custom_type