Adobe · Arazzo Workflow

Adobe Auto-tag a PDF For Accessibility

Version 1.0.0

Upload a PDF, auto-tag it for accessibility, poll the job, and fetch the tagged result.

1 workflow 1 source API 1 provider
View Spec View on GitHub AnalyticsCreative CloudDigital Asset ManagementDocument ServicesE-CommerceE-SignaturesExperience CloudGenerative AIMarketingPDFWork ManagementArazzoWorkflows

Provider

adobe

Workflows

auto-tag-pdf
Add accessibility tags to an uploaded PDF with AI.
Requests an upload slot for the source PDF, submits an autoTagPDF job that tags the document for accessibility, polls job status until tagging finishes, and retrieves the download URI for the tagged PDF.
4 steps inputs: accessToken, generateReport, jobID, shiftHeadings outputs: downloadUri, outputAssetID, sourceAssetID
1
requestUpload
uploadAsset
Request a pre-signed upload URI and asset ID for the source PDF, which is then PUT to the returned uploadUri out of band.
2
submitAutoTag
autoTagPDF
Submit an asynchronous autoTagPDF job that adds accessibility tags to the uploaded PDF. Returns 201 with an in-progress job status.
3
pollStatus
getJobStatus
Poll the autoTagPDF job until it is no longer in progress, looping back while the status remains "in progress".
4
getOutput
getAsset
Resolve a pre-signed download URI for the tagged output PDF.

Source API Descriptions

Arazzo Workflow Specification

adobe-auto-tag-pdf-workflow.yml Raw ↑
arazzo: 1.0.1
info:
  title: Adobe Auto-tag a PDF For Accessibility
  summary: Upload a PDF, auto-tag it for accessibility, poll the job, and fetch the tagged result.
  description: >-
    Drives the Adobe PDF Services asynchronous accessibility auto-tag pipeline
    that adds WCAG 2.0 / PDF/UA accessibility tags to a PDF using Adobe Sensei.
    The workflow registers the source PDF by requesting a pre-signed upload URI
    and asset ID, submits an autoTagPDF job with report and heading options,
    polls the job until it reports done, and resolves a download URI for the
    tagged output. Each step spells out its request inline. The polling job
    identifier is supplied as a workflow input because the submit response
    exposes only an opaque Location header.
  version: 1.0.0
sourceDescriptions:
- name: pdfServicesApi
  url: ../openapi/adobe-pdf-services-api-openapi.yml
  type: openapi
workflows:
- workflowId: auto-tag-pdf
  summary: Add accessibility tags to an uploaded PDF with AI.
  description: >-
    Requests an upload slot for the source PDF, submits an autoTagPDF job that
    tags the document for accessibility, polls job status until tagging
    finishes, and retrieves the download URI for the tagged PDF.
  inputs:
    type: object
    required:
    - accessToken
    - jobID
    properties:
      accessToken:
        type: string
        description: OAuth 2.0 bearer access token from Adobe IMS.
      generateReport:
        type: boolean
        description: Whether to generate an accessibility tagging report.
        default: true
      shiftHeadings:
        type: boolean
        description: Whether to shift heading levels to start at H1.
        default: false
      jobID:
        type: string
        description: The job identifier taken from the autoTagPDF response Location header, used to poll status.
  steps:
  - stepId: requestUpload
    description: >-
      Request a pre-signed upload URI and asset ID for the source PDF, which is
      then PUT to the returned uploadUri out of band.
    operationId: uploadAsset
    parameters:
    - name: Authorization
      in: header
      value: "Bearer $inputs.accessToken"
    requestBody:
      contentType: application/json
      payload:
        mediaType: application/pdf
    successCriteria:
    - condition: $statusCode == 200
    outputs:
      assetID: $response.body#/assetID
      uploadUri: $response.body#/uploadUri
  - stepId: submitAutoTag
    description: >-
      Submit an asynchronous autoTagPDF job that adds accessibility tags to the
      uploaded PDF. Returns 201 with an in-progress job status.
    operationId: autoTagPDF
    parameters:
    - name: Authorization
      in: header
      value: "Bearer $inputs.accessToken"
    requestBody:
      contentType: application/json
      payload:
        assetID: $steps.requestUpload.outputs.assetID
        generateReport: $inputs.generateReport
        shiftHeadings: $inputs.shiftHeadings
    successCriteria:
    - condition: $statusCode == 201
    outputs:
      status: $response.body#/status
  - stepId: pollStatus
    description: >-
      Poll the autoTagPDF job until it is no longer in progress, looping back
      while the status remains "in progress".
    operationId: getJobStatus
    parameters:
    - name: Authorization
      in: header
      value: "Bearer $inputs.accessToken"
    - name: operationType
      in: path
      value: accessibilitychecker
    - name: jobID
      in: path
      value: $inputs.jobID
    successCriteria:
    - condition: $statusCode == 200
    outputs:
      status: $response.body#/status
      outputAssetID: $response.body#/asset/assetID
    onSuccess:
    - name: stillRunning
      type: goto
      stepId: pollStatus
      criteria:
      - context: $response.body
        condition: $.status == "in progress"
        type: jsonpath
    - name: finished
      type: goto
      stepId: getOutput
      criteria:
      - context: $response.body
        condition: $.status == "done"
        type: jsonpath
  - stepId: getOutput
    description: >-
      Resolve a pre-signed download URI for the tagged output PDF.
    operationId: getAsset
    parameters:
    - name: Authorization
      in: header
      value: "Bearer $inputs.accessToken"
    - name: assetID
      in: path
      value: $steps.pollStatus.outputs.outputAssetID
    successCriteria:
    - condition: $statusCode == 200
    outputs:
      downloadUri: $response.body#/downloadUri
  outputs:
    sourceAssetID: $steps.requestUpload.outputs.assetID
    outputAssetID: $steps.pollStatus.outputs.outputAssetID
    downloadUri: $steps.getOutput.outputs.downloadUri