Autodesk · Arazzo Workflow

Autodesk Onboard a Project and Its First Member

Version 1.0.0

Create an ACC project, resolve industry roles and the member's company, add the user, and confirm the roster.

1 workflow 1 source API 1 provider
View Spec View on GitHub Fortune 10003D ModelingArchitectureBIMCADConstructionDesignDigital TwinsEngineeringManufacturingMedia and EntertainmentSustainabilityArazzoWorkflows

Provider

autodesk

Workflows

onboard-project-and-member
Stand up a new construction project and seat its first member.
Creates the project in the account, lists the project's industry roles, finds the member's company in the account directory, adds the user with an industry role and product access, and confirms the user appears on the project roster.
5 steps inputs: accountId, companyName, country, endDate, jobNumber, projectName, projectType, startDate, timezone, userEmail outputs: projectId, userId, userStatus
1
createNewProject
createProject
Create the project in the account. Everything downstream, including roles, is scoped to the id this returns.
2
listIndustryRoles
getIndustryRoles
List the industry roles the new project exposes. Roles are project-scoped ids, so they cannot be assigned by name.
3
resolveCompany
getCompanies
Find the member's partner company in the account directory so the user is seated against the right company rather than left unattributed.
4
seatMember
addProjectUser
Add the user to the project with their company, industry role, and product access. An invitation is sent if the email is not already in the account directory.
5
confirmRoster
getProjectUsers
Read the project roster filtered to the member's email to confirm the seat exists and to capture the access levels the service actually recorded.

Source API Descriptions

Arazzo Workflow Specification

Raw ↑
arazzo: 1.0.1
info:
  title: Autodesk Onboard a Project and Its First Member
  summary: Create an ACC project, resolve industry roles and the member's company, add the user, and confirm the roster.
  description: >-
    The Autodesk Construction Cloud administration flow that replaces clicking through
    the Account Admin UI for every new job. The workflow creates the project, resolves
    the industry roles that project exposes and the partner company the member belongs
    to, adds the user with the right product access, and reads the roster back to
    confirm the assignment landed. Roles and company are resolved from the account
    directory rather than guessed, because both are ids, not names. Every step spells
    out its request inline so the flow can be read and executed without opening the
    underlying OpenAPI description.
  version: 1.0.0
sourceDescriptions:
- name: accAccountAdminApi
  url: ../openapi/autodesk-acc-account-admin-openapi.yml
  type: openapi
workflows:
- workflowId: onboard-project-and-member
  summary: Stand up a new construction project and seat its first member.
  description: >-
    Creates the project in the account, lists the project's industry roles, finds the
    member's company in the account directory, adds the user with an industry role and
    product access, and confirms the user appears on the project roster.
  inputs:
    type: object
    required:
    - accountId
    - projectName
    - userEmail
    - companyName
    properties:
      accountId:
        type: string
        description: The ACC account (hub) id the project is created in.
      projectName:
        type: string
        description: Name of the new project.
      projectType:
        type: string
        description: Project type (e.g. "Commercial", "Office").
      jobNumber:
        type: string
        description: Internal job or cost code for the project.
      startDate:
        type: string
        description: Project start date (YYYY-MM-DD).
      endDate:
        type: string
        description: Project end date (YYYY-MM-DD).
      country:
        type: string
        description: Country the project is located in.
      timezone:
        type: string
        description: Project timezone (e.g. "America/New_York").
      userEmail:
        type: string
        description: Email of the first member to seat on the project.
      companyName:
        type: string
        description: Partner company the member belongs to, resolved to an id.
  steps:
  - stepId: createNewProject
    description: >-
      Create the project in the account. Everything downstream, including roles, is
      scoped to the id this returns.
    operationId: createProject
    parameters:
    - name: accountId
      in: path
      value: $inputs.accountId
    requestBody:
      contentType: application/json
      payload:
        name: $inputs.projectName
        type: $inputs.projectType
        status: active
        jobNumber: $inputs.jobNumber
        startDate: $inputs.startDate
        endDate: $inputs.endDate
        country: $inputs.country
        timezone: $inputs.timezone
    successCriteria:
    - condition: $statusCode == 201
    outputs:
      projectId: $response.body#/id
      projectName: $response.body#/name
      status: $response.body#/status
  - stepId: listIndustryRoles
    description: >-
      List the industry roles the new project exposes. Roles are project-scoped ids,
      so they cannot be assigned by name.
    operationId: getIndustryRoles
    parameters:
    - name: projectId
      in: path
      value: $steps.createNewProject.outputs.projectId
    successCriteria:
    - condition: $statusCode == 200
    outputs:
      roles: $response.body#/results
      roleId: $response.body#/results/0/id
      roleName: $response.body#/results/0/name
  - stepId: resolveCompany
    description: >-
      Find the member's partner company in the account directory so the user is seated
      against the right company rather than left unattributed.
    operationId: getCompanies
    parameters:
    - name: accountId
      in: path
      value: $inputs.accountId
    - name: filter[name]
      in: query
      value: $inputs.companyName
    - name: limit
      in: query
      value: 10
    successCriteria:
    - condition: $statusCode == 200
    outputs:
      companyId: $response.body#/results/0/id
      resolvedCompanyName: $response.body#/results/0/name
  - stepId: seatMember
    description: >-
      Add the user to the project with their company, industry role, and product
      access. An invitation is sent if the email is not already in the account
      directory.
    operationId: addProjectUser
    parameters:
    - name: accountId
      in: path
      value: $inputs.accountId
    - name: projectId
      in: path
      value: $steps.createNewProject.outputs.projectId
    requestBody:
      contentType: application/json
      payload:
        email: $inputs.userEmail
        companyId: $steps.resolveCompany.outputs.companyId
        industryRoles:
        - $steps.listIndustryRoles.outputs.roleId
        products:
        - key: projectAdministration
          access: administrator
        - key: docs
          access: member
    successCriteria:
    - condition: $statusCode == 201
    outputs:
      userId: $response.body#/id
      userStatus: $response.body#/status
      userEmail: $response.body#/email
  - stepId: confirmRoster
    description: >-
      Read the project roster filtered to the member's email to confirm the seat
      exists and to capture the access levels the service actually recorded.
    operationId: getProjectUsers
    parameters:
    - name: accountId
      in: path
      value: $inputs.accountId
    - name: projectId
      in: path
      value: $steps.createNewProject.outputs.projectId
    - name: filter[email]
      in: query
      value: $inputs.userEmail
    successCriteria:
    - condition: $statusCode == 200
    - context: $response.body
      condition: $.results.length > 0
      type: jsonpath
    outputs:
      userId: $response.body#/results/0/id
      status: $response.body#/results/0/status
      accessLevels: $response.body#/results/0/accessLevels
      companyName: $response.body#/results/0/companyName
  outputs:
    projectId: $steps.createNewProject.outputs.projectId
    userId: $steps.confirmRoster.outputs.userId
    userStatus: $steps.confirmRoster.outputs.status