Adobe Creative Cloud · Arazzo Workflow

Adobe Creative Cloud PDF OCR then Protect

Version 1.0.0

Upload a scanned PDF, make it searchable with OCR, then password-protect the result.

1 workflow 1 source API 1 provider
View Spec View on GitHub AI/MLCloudCreativeDesignDocumentsPhotographySaaSVideoArazzoWorkflows

Provider

adobe-creative-cloud

Workflows

pdf-ocr-then-protect
OCR an uploaded scanned PDF, then password-protect the OCR result.
Creates an upload asset, submits an OCR job, then submits a protect job on the OCR result asset, surfacing both job status Location headers.
3 steps inputs: accessToken, apiKey, encryptionAlgorithm, ocrLang, ocrResultAssetID, ocrType, ownerPassword, userPassword outputs: ocrJobLocation, protectJobLocation, sourceAssetID
1
createUploadAsset
createAsset
Create an upload asset for the scanned PDF, obtaining an asset ID and a presigned upload URI.
2
submitOcr
ocrPdf
Submit the OCR job for the uploaded asset to make its text searchable. Responds 201 with a Location header for job status.
3
submitProtect
protectPdf
Submit the protect-PDF job for the OCR result asset, applying password protection and the chosen encryption algorithm. Responds 201 with a Location header for job status.

Source API Descriptions

Arazzo Workflow Specification

adobe-creative-cloud-pdf-ocr-then-protect-workflow.yml Raw ↑
arazzo: 1.0.1
info:
  title: Adobe Creative Cloud PDF OCR then Protect
  summary: Upload a scanned PDF, make it searchable with OCR, then password-protect the result.
  description: >-
    Chains two Adobe PDF Services operations to prepare a scanned document for
    distribution. The workflow creates an upload asset for the scanned PDF,
    submits the OCR job to make its text searchable, and captures the 201
    Location header for the OCR job. It then submits a protect-PDF job that
    applies password protection and an encryption algorithm to the OCR result
    asset. The job status URLs are not modeled as operations in the
    description, so the workflow surfaces each Location header for the caller to
    poll. Every step spells out its request inline, including the bearer token
    and x-api-key, so the flow can be read and run without opening the
    underlying OpenAPI description.
  version: 1.0.0
sourceDescriptions:
- name: pdfServicesApi
  url: ../openapi/adobe-pdf-services-api-openapi-original.yml
  type: openapi
workflows:
- workflowId: pdf-ocr-then-protect
  summary: OCR an uploaded scanned PDF, then password-protect the OCR result.
  description: >-
    Creates an upload asset, submits an OCR job, then submits a protect job on
    the OCR result asset, surfacing both job status Location headers.
  inputs:
    type: object
    required:
    - accessToken
    - apiKey
    - ocrResultAssetID
    - userPassword
    - ownerPassword
    properties:
      accessToken:
        type: string
        description: OAuth 2.0 bearer access token from the Adobe IMS token endpoint.
      apiKey:
        type: string
        description: Client ID (x-api-key) from the Adobe Developer Console.
      ocrLang:
        type: string
        description: OCR language code.
        default: en-US
      ocrType:
        type: string
        description: OCR type (searchable_image or searchable_image_exact).
        default: searchable_image
      ocrResultAssetID:
        type: string
        description: Asset ID of the searchable OCR result asset to protect.
      userPassword:
        type: string
        description: Password required to open the protected document.
      ownerPassword:
        type: string
        description: Password required to change document permissions.
      encryptionAlgorithm:
        type: string
        description: Encryption algorithm (AES_128 or AES_256).
        default: AES_256
  steps:
  - stepId: createUploadAsset
    description: >-
      Create an upload asset for the scanned PDF, obtaining an asset ID and a
      presigned upload URI.
    operationId: createAsset
    parameters:
    - name: Authorization
      in: header
      value: "Bearer $inputs.accessToken"
    - name: x-api-key
      in: header
      value: $inputs.apiKey
    requestBody:
      contentType: application/json
      payload:
        mediaType: application/pdf
    successCriteria:
    - condition: $statusCode == 200
    outputs:
      assetID: $response.body#/assetID
      uploadUri: $response.body#/uploadUri
  - stepId: submitOcr
    description: >-
      Submit the OCR job for the uploaded asset to make its text searchable.
      Responds 201 with a Location header for job status.
    operationId: ocrPdf
    parameters:
    - name: Authorization
      in: header
      value: "Bearer $inputs.accessToken"
    - name: x-api-key
      in: header
      value: $inputs.apiKey
    requestBody:
      contentType: application/json
      payload:
        assetID: $steps.createUploadAsset.outputs.assetID
        ocrLang: $inputs.ocrLang
        ocrType: $inputs.ocrType
    successCriteria:
    - condition: $statusCode == 201
    outputs:
      ocrJobLocation: $response.headers.Location
  - stepId: submitProtect
    description: >-
      Submit the protect-PDF job for the OCR result asset, applying password
      protection and the chosen encryption algorithm. Responds 201 with a
      Location header for job status.
    operationId: protectPdf
    parameters:
    - name: Authorization
      in: header
      value: "Bearer $inputs.accessToken"
    - name: x-api-key
      in: header
      value: $inputs.apiKey
    requestBody:
      contentType: application/json
      payload:
        assetID: $inputs.ocrResultAssetID
        passwordProtection:
          userPassword: $inputs.userPassword
          ownerPassword: $inputs.ownerPassword
        encryptionAlgorithm: $inputs.encryptionAlgorithm
    successCriteria:
    - condition: $statusCode == 201
    outputs:
      protectJobLocation: $response.headers.Location
  outputs:
    sourceAssetID: $steps.createUploadAsset.outputs.assetID
    ocrJobLocation: $steps.submitOcr.outputs.ocrJobLocation
    protectJobLocation: $steps.submitProtect.outputs.protectJobLocation