Adobe · OpenAPI Overlay 1.0.0

API Evangelist enhancements for Adobe PDF Services API

5 actions 5 updates security extends openapi/_original/adobe-pdf-services-api-openapi-official.json
Generated by API Evangelist Written by API Evangelist tooling for Adobe's API. It is a proposal applied on top of the contract, not a document Adobe publishes.
View Overlay File View on GitHub Overlay Specification

What the actions change

contacttermsOfServicex-apievangelist-providerx-apievangelist-artifactssecuritySchemessecurityx-regionsx-region-note

Targets 4

$.info
$.components
$
$.servers

OpenAPI Overlay

Raw ↑
overlay: 1.0.0
info:
  title: API Evangelist enhancements for Adobe PDF Services API
  version: 1.0.0
x-generated: '2026-08-13'
x-method: generated
x-source: openapi/_original/adobe-pdf-services-api-openapi-official.json
x-note: >-
  Non-destructive enhancements to the OFFICIAL Adobe-published spec (harvested verbatim from
  AdobeDocs/pdfservices-api-documentation). Adobe's document declares no securitySchemes, no
  contact, no termsOfService and no top-level security requirement even though every operation
  carries Authorization + x-api-key header parameters. This overlay records the auth model as
  first-class OpenAPI security so a generated client and an agent can both see it, and annotates the
  runtime facts that live in the docs but not the contract. The original file is never mutated.
extends: openapi/_original/adobe-pdf-services-api-openapi-official.json
actions:

- target: $.info
  update:
    contact:
      name: Adobe Developer Support
      url: https://developer.adobe.com/developer-support/
    termsOfService: https://www.adobe.com/legal/terms.html
    x-apievangelist-provider: adobe
    x-apievangelist-artifacts:
      conventions: conventions/adobe-conventions.yml
      errors: errors/adobe-problem-types.yml
      lifecycle: lifecycle/adobe-lifecycle.yml
      authentication: authentication/adobe-authentication.yml
      rate-limits: rate-limits/adobe-rate-limits.yml
      data-model: data-model/adobe-data-model.yml
      sandbox: sandbox/adobe-sandbox.yml
      webhooks: asyncapi/adobe-pdf-services-webhooks.yml
      skills: skills/_index.yml

- target: $.components
  update:
    securitySchemes:
      bearerAuth:
        type: http
        scheme: bearer
        bearerFormat: JWT
        description: >-
          Adobe IMS OAuth 2.0 Server-to-Server (client credentials) access token, minted via
          POST /token (operationId authentication.generatetoken) from a client_id/client_secret pair
          issued in the Adobe Developer Console.
      apiKeyAuth:
        type: apiKey
        in: header
        name: x-api-key
        description: >-
          The client_id from the Adobe Developer Console. Required IN ADDITION to the bearer token —
          omitting it returns 401 even with a valid token.

- target: $
  update:
    security:
    - bearerAuth: []
      apiKeyAuth: []

- target: $.servers
  update:
    x-regions:
    - {code: ue1, name: United States (default), url: 'https://pdf-services-ue1.adobe.io'}
    - {code: ew1, name: Europe, url: 'https://pdf-services-ew1.adobe.io'}
    x-region-note: >-
      Region is selected by hostname. Assets are region-scoped and are not addressable across
      regions. Region configuration requires a paid plan; the Free Tier processes in the US.

- target: $.info
  update:
    x-rate-limits:
      free_tier_rpm: 25
      enterprise_rpm: 100
      monthly_free_quota: 500 Document Transactions
      status_on_exhaustion: 429
      response_headers: none
      note: >-
        Two distinct error codes share HTTP 429 — TOO_MANY_REQUESTS (transient, back off) and
        INSUFFICIENT_QUOTA (monthly allowance consumed, do NOT retry). No RateLimit-*, X-RateLimit-*
        or Retry-After headers are published.
    x-idempotency:
      supported: false
      note: >-
        No idempotency key. Billing is per Document Transaction on the initial endpoint request, so
        a blind retry of a submit is a second billable job. Use the echoed x-request-id to correlate
        before resubmitting.
    x-usage-limits:
      max_file_size: 100MB
      max_documents_combine_insert_replace_split: 20
      max_output_images_export: 50
      max_pages_extract_and_markdown: 400
      max_pages_autotag: 200
      max_pages_scanned: 150
      max_json_size: 10MB
    x-async-model:
      pattern: submit-then-poll
      submit_response: 201 with empty body
      job_uri_header: location
      correlation_header: x-request-id
      terminal_states: [done, failed]
      webhook_alternative: notifiers[] with type CALLBACK