Adobe · Arazzo Workflow

Adobe Protect a PDF With a Password

Version 1.0.0

Upload a PDF, apply password protection and encryption, poll the job, and fetch the result.

1 workflow 3 source APIs 1 provider
View Spec View on GitHub Fortune 1000AnalyticsCreative CloudDigital Asset ManagementDocument ServicesE-CommerceE-SignaturesExperience CloudGenerative AIMarketingPDFWork ManagementArazzoWorkflows

Provider

adobe

Workflows

protect-pdf
Add password protection and encryption to an uploaded PDF.
Requests an upload slot for the source PDF, submits a protectPDF job that applies the supplied user password and encryption algorithm, polls job status until protection finishes, and retrieves the download URI for the protected PDF.
4 steps inputs: accessToken, encryptionAlgorithm, jobID, ownerPassword, userPassword outputs: downloadUri, outputAssetID, sourceAssetID
1
requestUpload
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
submitProtect
Submit an asynchronous protectPDF job that password-protects the uploaded PDF. Returns 201 with an in-progress job status.
3
pollStatus
Poll the protectPDF job until it is no longer in progress, looping back while the status remains "in progress".
4
getOutput
Resolve a pre-signed download URI for the protected output PDF.

Source API Descriptions

Arazzo Workflow Specification

Raw ↑
arazzo: 1.0.1
info:
  title: Adobe Protect a PDF With a Password
  summary: Upload a PDF, apply password protection and encryption, poll the job, and fetch the result.
  description: >-
    Drives the Adobe PDF Services asynchronous protect pipeline that adds
    password protection, encryption, and permissions to a PDF. The workflow
    registers the source PDF by requesting a pre-signed upload URI and asset
    ID, submits a protectPDF job with the supplied passwords and encryption
    algorithm, polls the job until it reports done, and resolves a download URI
    for the protected 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: assetsApi
  url: ../openapi/adobe-assets-api-openapi.yml
  type: openapi
- name: jobsApi
  url: ../openapi/adobe-jobs-api-openapi.yml
  type: openapi
- name: protectPdfApi
  url: ../openapi/adobe-protect-pdf-api-openapi.yml
  type: openapi
workflows:
- workflowId: protect-pdf
  summary: Add password protection and encryption to an uploaded PDF.
  description: >-
    Requests an upload slot for the source PDF, submits a protectPDF job that
    applies the supplied user password and encryption algorithm, polls job
    status until protection finishes, and retrieves the download URI for the
    protected PDF.
  inputs:
    type: object
    required:
    - accessToken
    - userPassword
    - jobID
    properties:
      accessToken:
        type: string
        description: OAuth 2.0 bearer access token from Adobe IMS.
      userPassword:
        type: string
        description: Password required to open the protected PDF.
      ownerPassword:
        type: string
        description: Password required to change permissions or remove protection.
      encryptionAlgorithm:
        type: string
        description: Encryption algorithm to apply (AES_128 or AES_256).
        default: AES_256
      jobID:
        type: string
        description: The job identifier taken from the protectPDF 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: asset.uploadpresignedurl
    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: submitProtect
    description: >-
      Submit an asynchronous protectPDF job that password-protects the uploaded
      PDF. Returns 201 with an in-progress job status.
    operationId: pdfoperations.protectpdf
    parameters:
    - name: Authorization
      in: header
      value: "Bearer $inputs.accessToken"
    requestBody:
      contentType: application/json
      payload:
        assetID: $steps.requestUpload.outputs.assetID
        passwordProtection:
          userPassword: $inputs.userPassword
          ownerPassword: $inputs.ownerPassword
        encryptionAlgorithm: $inputs.encryptionAlgorithm
    successCriteria:
    - condition: $statusCode == 201
    outputs:
      status: $response.body#/status
  - stepId: pollStatus
    description: >-
      Poll the protectPDF 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: protectpdf
    - 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 protected 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

Work with this as data

Every workflow here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for arazzo workflows

4 MCP tools reach this
  • find_arazzoBrowse and filter every workflow in the catalog.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This workflow
curl "https://apis.io/api/v1/arazzo/adobe-protect-pdf-workflow"
All arazzo workflows
curl "https://apis.io/api/v1/arazzo?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.