SAP On-Premise & SAP BTP Cloud ready

The most affordable way to turn SAP data into PDF documents

Invoices, credit notes, order confirmations and delivery notes — rendered on demand, multi-tenant by design, and priced so you only ever pay for the documents you actually generate.

Delivered and operated by the pdf4sap team.

Cheapest per document on the market, by design
Multi-tenant isolated API keys & quotas
EN / DE / PL documents out of the box
Pay per success failed renders cost nothing

NetWeaver AS Java reaches end of mainstream maintenance on 31 December 2027

Adobe Document Services (ADS) running on NetWeaver AS Java 7.5 needs a successor before then. SAP's own migration paths aren't cheap — a lower-cost alternative already exists, as SaaS or on-premise.

SAP's cloud path

SAP Forms service by Adobe

The official cloud successor to ADS, delivered through SAP BTP. Solves the end-of-maintenance deadline, but comes with BTP consumption-based pricing and a migration project.

SAP's on-premise path

ADS on SAP HANA XSA, advanced model

The official on-premise successor — ADS moved off NetWeaver AS Java onto SAP HANA Extended Application Services, advanced model (XSA). Still Adobe-based infrastructure to license, run, and maintain yourself.

Both official paths solve the deadline. Neither solves the cost. pdf4sap.com does.

Two ways to run it — one team behind both

Whether your SAP landscape is on-premise, in SAP BTP, or a hybrid of both, pdf4sap fits into it without forcing you to change how your systems already work.

Option A

Dedicated SaaS tenant

A private, isolated tenant hosted and operated by the pdf4sap team. Your SAP system (on-premise or cloud) calls a single HTTPS endpoint with your own API key — nothing to install, patch or scale.

  • Live in days, not months
  • Your own rate limits and document quotas
  • Zero infrastructure on your side
Option B

Microservice inside your SAP BTP

The pdf4sap team configures and hands over the same service as a microservice running inside your own SAP BTP subaccount. Your document data never has to leave your cloud landscape.

  • Deployed & configured by the pdf4sap team
  • Runs under your BTP entitlements
  • Fits existing SAP BTP security & networking policies

From SAP document data to a finished PDF

A simple, predictable request/response flow — easy to call from ABAP, a BTP extension app, or any middleware you already use.

1

Send the document as JSON

Your system posts the SAP document (invoice, credit note, order confirmation, delivery note) to the API, authenticated with your customer API key.

2

Validated against your rules

The payload is schema-checked, and only the document types and limits you've been assigned are accepted.

3

Rendered on the fly

A branded, print-ready A4 PDF is generated in your document language of choice.

4

Only success counts

Rejected or failed requests never consume your daily or monthly document quota — you only pay for PDFs you actually receive.

Three ways to plug this into your SAP landscape

Real configuration examples for the three most common integration paths — copy them, adapt the hostname and API key, and you're calling the service.

Set up a plain HTTP connection to the service in SM59 — no custom ABAP report or Z-class required — then verify it end-to-end from SA38 using the standard connection test program FP_TEST_00.

SM59 → HTTP Connection to External Server
Transaction         SM59
RFC Destination     ZPDF4SAP_SERVICE
Connection Type     G  (HTTP Connection to External Server)

Technical Settings
  Target Host       www.pdf4sap.com
  Service No.       443
  Path Prefix       /api/v1/pdf

Logon & Security
  SSL               Active
  SSL Certificate   DFAULT SSL Client (Standard)

Special Options -> HTTP Fields (Header Fields)
  X-API-Key         <your-customer-api-key>
  Content-Type      application/json

Connection Test     "Connection Test" button in SM59
                     -> expects HTTP 200 or 404 (reachable)
SA38 → FP_TEST_00
Transaction         SA38
Program             FP_TEST_00
Destination         ZPDF4SAP_SERVICE

Run the program and confirm:
  - the connection is established (no ICM / SSL handshake errors)
  - a valid HTTP response is returned from www.pdf4sap.com

Once green, any ABAP program in your system can call the
destination via cl_http_client=>create_by_destination( ... ).

Store the URL and the API key as a destination in the BTP cockpit (or via the Destination service API). Custom headers such as the API key are added as additional properties — no code ever hard-codes the key.

BTP Cockpit → Connectivity → Destinations
Name              ZPDF4SAP-SERVICE
Type              HTTP
Description       pdf4sap SAP PDF document service
URL               https://www.pdf4sap.com
Proxy Type        Internet
Authentication    NoAuthentication

Additional Properties
  URL.headers.X-API-Key      <your-customer-api-key>
  URL.headers.Content-Type   application/json
  HTML5.DynamicDestination   true

In Cloud Integration, a Content Modifier sets the headers and JSON body, then a Request-Reply step with an HTTPS receiver adapter calls the service — optionally through Cloud Connector if your BTP account needs to reach an on-premise-hosted tenant.

Cloud Integration → iFlow → HTTPS Receiver
iFlow step         Request-Reply -> HTTPS Receiver Adapter
Address            https://www.pdf4sap.com/api/v1/pdf
                   (or bind to destination ZPDF4SAP-SERVICE)
Proxy Type         Internet  (or On-Premise via Cloud Connector)
Authentication     None - key is sent as a header, see below

Content Modifier (before Request-Reply) - Message Headers
  Content-Type     application/json
  X-API-Key        <read from Security Material -> User Credentials>

Timeout            30000 ms

Example only — adjust naming conventions, credential storage and proxy type to your own landscape and security policy.

API reference

Everything your integration needs to call the endpoint correctly on the first try.

Authentication

Every request must include your customer API key in the X-API-Key header. Missing, invalid or disabled keys are rejected with 401 UNAUTHORIZED.

Request header
X-API-Key: <your-customer-api-key>

Custom branded templates

This isn't a generic text-to-PDF converter. Every customer can have their own document layout — logo, brand colors, structure — resolved automatically from the authenticated API key. No extra field in the request: the same POST /api/v1/pdf call renders with your template.

This is what lets an SAP S/4HANA customer replace their NetWeaver Java stack and Adobe Document Services (ADS) with a plain HTTP call from ABAP — the visual output stays as branded as the original SAP Form, but rendering happens entirely outside SAP. Templates are designed by the pdf4sap team as part of onboarding, not a self-service upload.

Template resolution
templates/<your-customer-id>/<documentType>.hbs   (most specific)
templates/<your-customer-id>/document.hbs           (your general layout)
templates/document.hbs                               (shared default)
POST /api/v1/pdf

Renders one SAP business document to PDF. The daily and monthly quota is only consumed once rendering succeeds.

Request body

application/json
{
  "documentType": "INVOICE",
  "documentNumber": "9000123456",
  "documentDate": "2026-07-30",
  "language": "en",
  "currency": "EUR",
  "company": {
    "name": "Example Energy Sp. z o.o.",
    "country": "Poland",
    "vatId": "PL1234567890"
  },
  "recipient": {
    "name": "SAP Customer A/S",
    "country": "Denmark"
  },
  "items": [
    {
      "position": "10",
      "description": "Electric energy settlement",
      "quantity": 1250.5,
      "unit": "MWH",
      "unitPrice": 82.75,
      "netAmount": 103479.88
    }
  ],
  "totals": { "net": 103479.88, "tax": 23800.37, "gross": 127280.25 }
}
curl
curl --fail-with-body \
  -X POST https://www.pdf4sap.com/api/v1/pdf \
  -H "Content-Type: application/json" \
  -H "X-API-Key: YOUR_API_KEY" \
  --data-binary @invoice.json \
  --output invoice.pdf

Success response

On success, the response body is the binary PDF itself. Rate-limit and quota headers are attached to every response, success or error.

Header Example Meaning
Content-Typeapplication/pdfBinary PDF payload
Content-Dispositioninline; filename="INVOICE-9000123456.pdf"Suggested filename for the browser or caller
X-Customer-IDcustomer-aThe authenticated customer's id
X-RateLimit-Limit-Minute / X-RateLimit-Remaining-Minute30 / 29Per-minute request budget and what's left
X-Quota-Limit-Day / X-Quota-Remaining-Day / X-Quota-Day500 / 499 / 2026-07-31Daily successful-document quota, remaining, and the day it applies to
X-Quota-Limit-Month / X-Quota-Remaining-Month / X-Quota-Month10000 / 9999 / 2026-07Monthly successful-document quota, remaining, and the month it applies to
X-Correlation-IDclient-supplied or generated UUIDTrace id echoed on every response, useful for support requests

Error responses

Status Error When
400INVALID_SAP_DOCUMENTThe document payload fails schema validation (see details in the response)
401UNAUTHORIZEDMissing, invalid or disabled API key
403DOCUMENT_TYPE_NOT_ALLOWEDdocumentType isn't enabled for this customer
413PAYLOAD_TOO_LARGERequest body exceeds your maxPayloadBytes limit
413TOO_MANY_DOCUMENT_ITEMSitems.length exceeds your maxItemsPerDocument limit
429RATE_LIMIT_EXCEEDEDPer-minute request limit exceeded
429DAILY_QUOTA_EXCEEDEDDaily successful-document quota exceeded
429MONTHLY_QUOTA_EXCEEDEDMonthly successful-document quota exceeded
500INTERNAL_ERRORUnexpected server-side failure
GET /api/v1/usage

Returns the current rate-limit and quota status for the authenticated customer — call it any time, it never consumes quota.

200 OK
{
  "customer": { "id": "customer-a", "name": "Customer A" },
  "usage": {
    "minute": { "used": 1, "limit": 30, "remaining": 29 },
    "day": { "key": "2026-07-31", "used": 12, "limit": 500, "remaining": 488 },
    "month": { "key": "2026-07", "used": 340, "limit": 10000, "remaining": 9660 },
    "allowed": true
  }
}

Built for finance and IT teams, not just developers

Everything a shared, multi-customer document service needs — nothing you have to build yourself.

Per-customer isolation

Every customer gets its own hashed API key, its own rate limits and its own document quotas — never shared, never mixed up.

Daily & monthly quotas

Set exactly how many documents a customer can generate per day and per calendar month — ideal for tiered commercial plans.

Multi-language output

Documents render natively in English, German and Polish, with correct date, number and currency formatting per language.

Document type control

Invoices, credit notes, order confirmations, delivery notes — enable exactly the types each customer is allowed to generate.

Secure by default

Hardened HTTP headers, constant-time key comparison, request correlation IDs and structured audit logging out of the box.

Fast, predictable rendering

Print-ready A4 PDFs with a bounded rendering timeout, so a slow document never blocks your process.

Pricing built around the document, not the seat

No platform licenses, no per-user fees. You get a plan sized to your document volume — and a straight promise: we work hard to keep the cost per document the lowest you'll find for SAP.

Starter

For a single company code getting started

  • Low, fixed daily & monthly document quota
  • Dedicated SaaS tenant
  • Standard document types

Enterprise

For multi-entity or high-volume landscapes

  • Custom quotas per legal entity
  • Runs inside your own SAP BTP subaccount
  • Priority support & onboarding

Tell us your expected document volume and we'll come back with a per-document price that beats building and maintaining this in-house — guaranteed.

Get a tailored quote

Enterprise habits, without the enterprise price tag

Built the way SAP teams expect a shared service to behave: predictable, auditable, and strict about tenant boundaries.

  • API keys are never stored in plain text — only their SHA-256 hash is kept
  • Every request carries a correlation ID for end-to-end traceability
  • Hardened HTTP headers and strict payload validation on every call
  • Hosted in the EU or deployed directly inside your own SAP BTP subaccount

"We believe great SAP document output shouldn't require an enterprise budget or a multi-month project. pdf4sap makes it a single API call — fast to set up, and still fully your own brand."

— The pdf4sap team

Ready to stop overpaying for SAP document output?

Tell us about your SAP landscape and expected document volume. We'll recommend the deployment option and plan that fits — usually within one working day.

Contact AGG Systems

sap@agg-systems.eu · replies within one business day

+48 661 923 280 · English / Polish