PaperApi 1.0.0

dotnet add package PaperApi --version 1.0.0
                    
NuGet\Install-Package PaperApi -Version 1.0.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="PaperApi" Version="1.0.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="PaperApi" Version="1.0.0" />
                    
Directory.Packages.props
<PackageReference Include="PaperApi" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add PaperApi --version 1.0.0
                    
#r "nuget: PaperApi, 1.0.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package PaperApi@1.0.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=PaperApi&version=1.0.0
                    
Install as a Cake Addin
#tool nuget:?package=PaperApi&version=1.0.0
                    
Install as a Cake Tool

PaperAPI .NET SDK

The PaperAPI .NET SDK is a lightweight, dependency-free HTTP client that wraps the official PaperAPI endpoints and is ready to be published to NuGet.

Account, API key, and pricing

  • Create a free account and grab your sandbox API key at https://paperapi.de/ (no card required).
  • Sandbox includes 50 PDFs/month and 5 requests per minute for prototyping; no overages.
  • Paid plans increase quotas and performance: Starter (1k PDFs/month), Pro (5k PDFs/month), Business (20k+ PDFs/month with burst traffic). See full details and overage rates at https://paperapi.de/pricing.

Requirements

  • .NET 8.0 SDK (the library targets netstandard2.0 for broad compatibility).

Development workflow

# Restore dependencies
cd sdk/dotnet
 dotnet restore

# Build and run analyzers
 dotnet build --configuration Release

# Create a NuGet package
 dotnet pack --configuration Release --include-symbols --output ./artifacts

The generated .nupkg file includes XML documentation and the README file for rich NuGet UI rendering.

Usage

using System.IO;
using PaperApi;
using PaperApi.Models;

var client = new PaperApiClient(new PaperApiOptions
{
    ApiKey = Environment.GetEnvironmentVariable("PAPERAPI_API_KEY")!,
    BaseUrl = Environment.GetEnvironmentVariable("PAPERAPI_BASE_URL")
});

var pdfBytes = await client.GeneratePdfAsync(new PdfGenerateRequest
{
    Html = "<html><body><h1>Hello from PaperAPI</h1></body></html>",
    Options = new PdfOptions
    {
        PageSize = "A4",
        MarginTop = 5,
        MarginBottom = 5
    }
});

await File.WriteAllBytesAsync("invoice.pdf", pdfBytes);
Console.WriteLine("PDF written to invoice.pdf");

Tip: keep both PAPERAPI_BASE_URL and PAPERAPI_API_KEY in a .env file (as shown in the root README) so every environment resolves the correct API endpoint without hardcoding it.

ASP.NET Core DI

// appsettings.json
// "PaperApi": { "ApiKey": "...", "BaseUrl": "https://api.paperapi.de/" }

builder.Services.AddPaperApiClient(builder.Configuration);

var app = builder.Build();

app.MapGet("/pdf", async (IPaperApiClient client) =>
{
    var bytes = await client.GeneratePdfAsync(new PdfGenerateRequest { Html = "<h1>Hello</h1>" });
    return Results.File(bytes, "application/pdf", "hello.pdf");
});

Testing

  • Use IPaperApiClient to mock the SDK in unit tests.
  • For integration-style tests, construct PaperApiClient with a custom HttpMessageHandler to return canned responses without hitting the network.

Supported endpoints

PaperApiClient wraps every public API route:

Method SDK call Description
POST /v1/generate GeneratePdfAsync Immediate PDF generation (returns bytes).
POST /v1/generate-async EnqueuePdfJobAsync Queue a job and receive a job envelope.
GET /jobs/{id} GetJobStatusAsync Poll job state (queued, running, succeeded, failed).
GET /jobs/{id}/result DownloadJobResultAsync Download the completed PDF.
GET /v1/usage GetUsageSummaryAsync Inspect current-plan usage counters.
GET /v1/whoami GetWhoAmIAsync Retrieve the authenticated account + plan details.
GET /health CheckHealthAsync Sanity check the service availability.

Every method throws PaperApiException when the API returns a non-success status, exposing the HTTP status code, optional error code, and response body so you can log or retry intelligently.

Publishing

Publishing is handled by GitHub Actions (.github/workflows/sdk-ci.yml). The workflow:

  1. Restores, builds, and packs the SDK for every PR and push to main.
  2. When main is updated, the second job pushes the .nupkg to NuGet if the NUGET_API_KEY secret exists.
  3. You can also run the workflow manually via workflow_dispatch to validate artifacts before tagging a release.

Versioning

Increment the Version property in PaperApi.csproj following semantic versioning. CI automatically fails if you forget to update the version when the API surface changes.

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.0 90 12/30/2025
0.2.4 96 12/30/2025
0.1.1-preview 125 12/26/2025
0.1.0-preview 133 12/26/2025