PaperApi 1.0.0
dotnet add package PaperApi --version 1.0.0
NuGet\Install-Package PaperApi -Version 1.0.0
<PackageReference Include="PaperApi" Version="1.0.0" />
<PackageVersion Include="PaperApi" Version="1.0.0" />
<PackageReference Include="PaperApi" />
paket add PaperApi --version 1.0.0
#r "nuget: PaperApi, 1.0.0"
#:package PaperApi@1.0.0
#addin nuget:?package=PaperApi&version=1.0.0
#tool nuget:?package=PaperApi&version=1.0.0
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.0for 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_URLandPAPERAPI_API_KEYin a.envfile (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
IPaperApiClientto mock the SDK in unit tests. - For integration-style tests, construct
PaperApiClientwith a customHttpMessageHandlerto 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:
- Restores, builds, and packs the SDK for every PR and push to
main. - When
mainis updated, the second job pushes the.nupkgto NuGet if theNUGET_API_KEYsecret exists. - You can also run the workflow manually via
workflow_dispatchto 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 | Versions 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. |
-
.NETStandard 2.0
- Microsoft.Extensions.Http (>= 8.0.0)
- Microsoft.Extensions.Options (>= 8.0.0)
- Microsoft.Extensions.Options.ConfigurationExtensions (>= 8.0.0)
- System.Text.Json (>= 8.0.6)
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 |