---
title: "Rest PKI quick reference (legacy)"
description: "Rest PKI (legacy) on one page: client packages, access token, PAdES, CAdES and XML signatures with Web PKI, validation, timestamps and errors."
canonical: "https://docs.lacunasoftware.com/en-us/articles/rest-pki/quick-reference"
locale: "en"
product: "Rest PKI (legacy)"
last_updated: "2026-10-12"
---

# Rest PKI quick reference (legacy)

The essentials of Rest PKI on one page, with links to the full articles.

> **Warning: Legacy product**
>
> Rest PKI, the cloud service at [pki.rest](https://pki.rest/), is a legacy product: it still receives bug and security fixes, but for a new cloud integration, use [Rest PKI Core](https://docs.lacunasoftware.com/en-us/articles/rest-pki/core/quick-reference). Rest PKI Core also serves most of the APIs of the classic Rest PKI (PAdES, CAdES and XML signatures, certificate authentication and PDF marks), which eases moving an application to it.

TODO(docs): there is no guide to moving an application from Rest PKI to Rest PKI Core. Rest PKI still gets releases (1.33.9 on 2026-09-08). 

## What it is for

Rest PKI is a cloud service for PKI operations such as digital signatures and certificate authentication, used from virtually any programming language through client libraries; you can also host your own instance on Windows Server or Azure App Service. 
In a web application it works with Web PKI: your backend starts the operation and gets a single-use token, Web PKI's `signWithRestPki()` signs in the browser, and your backend finishes the operation with that token. 

| Choose instead | When it fits better |
| --- | --- |
| [Rest PKI Core](https://docs.lacunasoftware.com/en-us/articles/rest-pki/core/quick-reference) | You start a new cloud integration: signatures, validation, timestamps and biometric checks through a REST API, at core.pki.rest or on your own instance, with signing pages it hosts for you. |
| [PKI Express](https://docs.lacunasoftware.com/en-us/articles/pki-express/quick-reference) | You sign on your own Windows or Linux servers from virtually any language. For Linux, the Rest PKI on-premises article recommends PKI Express instead. |
| [PKI SDK](https://docs.lacunasoftware.com/en-us/articles/pki-sdk/quick-reference) | Your backend is .NET: the PKI guide recommends PKI SDK for server signatures in .NET, and it can do the server side of web signatures with Web PKI. |
| [Web PKI](https://docs.lacunasoftware.com/en-us/articles/web-pki/quick-reference) | You need only the browser side: list the user's certificates, read them and sign with them in JavaScript. Rest PKI uses it for that step. |

## Install

| Language | Package | Current major | Registry |
| --- | --- | --- | --- |
| .NET (C#, VB.NET, C++.NET) | `Lacuna.RestPki.Client` | 5 (latest 5.0.0); 1.24.1 for .NET Framework 3.5 to 4.6 | [NuGet](https://www.nuget.org/packages/Lacuna.RestPki.Client/) |
| Java 7+ | `com.lacunasoftware.restpki:restpki-client` | 1 (latest 1.15.11, for Java 8+; on Java 7, 1.15.7) | [Maven Central](https://search.maven.org/artifact/com.lacunasoftware.restpki/restpki-client) |
| Java 6 | `com.lacunasoftware.restpki:restpki-client-java6` | 1 (latest 1.9.0) | [Maven Central](https://search.maven.org/artifact/com.lacunasoftware.restpki/restpki-client-java6) |
| PHP 5.5+ | `lacuna/restpki-client` | 2 (latest 2.9.10) | [Packagist](https://packagist.org/packages/lacuna/restpki-client) |
| PHP 5.3 and 5.4 | `lacuna/restpki-client-legacy` | 1 (latest 1.1.0) | [Packagist](https://packagist.org/packages/lacuna/restpki-client-legacy) |
| Node.js | `restpki-client` | 2 (latest 2.3.8) | [npm](https://www.npmjs.com/package/restpki-client) |
| Python | `restpki-client` | 1 (latest 1.3.1) | [PyPI](https://pypi.org/project/restpki-client/) |
| Ruby | `rest_pki` | 1 (latest 1.1.0) | [RubyGems](https://rubygems.org/gems/rest_pki) |

- .NET has two lines of versions: 1.24.1, the last 1.x, targets .NET Framework 3.5 to 4.6 and .NET Standard 1.3 and 2.0; 2.2.0 and later target only .NET Standard 2.0, are released with Rest PKI Core and share version numbers with its client, `Lacuna.RestPkiCore.Client`. Both lines work with pki.rest, so choose by target framework. See [.NET](https://docs.lacunasoftware.com/en-us/articles/rest-pki/dotnet#versions). 
- Java: `restpki-client` 1.15.9 and later are compiled for Java 8; on Java 7, use 1.15.7. See [Java](https://docs.lacunasoftware.com/en-us/articles/rest-pki/java). 
- PHP 5.2 has no package: use the file `RestPkiLegacy52.php` with the Composer package `educoder/pest`. See [PHP](https://docs.lacunasoftware.com/en-us/articles/rest-pki/php). 
- The REST APIs are not meant to be called directly: use a client library. API references: [.NET](https://docs.lacunasoftware.com/en-us/api/Lacuna.RestPki.Client), [Java](https://docs.lacunasoftware.com/en-us/content/javadocs/restpki-client/) and the [OpenAPI copy](https://docs.lacunasoftware.com/openapi/rest-pki.json). 

## Configuration and authentication

- **Access token**: create an account at [pki.rest](https://pki.rest/), sign in and, on the **Control Panel**, click **Generate new access token**. 
- **Client**: a `RestPkiClient` takes the endpoint and the access token, and every starter, finisher and explorer takes the client. In direct HTTP calls, send the token in the header `Authorization: Bearer <token>`. 
- **Endpoint**: `https://pki.rest/` in the cloud; Web PKI calls the alternative address `https://restpki.lacunasoftware.com/` by default, which firewalls are less likely to block.  On-premises, the endpoint is the address of your instance, ending in `/`, and the page passes it to Web PKI's `init()` as `restPkiUrl`. 
- **Security context**: each operation names a security context, which decides the trusted root CAs; in production the samples use `StandardSecurityContexts.PkiBrazil` (ICP-Brasil). 
- **Licenses**: the cloud service uses no license file, and Web PKI needs no license with it, even in production. An on-premises instance needs a PKI SDK license, and Web PKI then needs its own license. See [Licensing](https://docs.lacunasoftware.com/en-us/articles/welcome/licensing#rest-pki). 
- **Dates on PDF signatures**: culture, time zone and date format come from **Region and Date** in your account. See [Configure date and time](https://docs.lacunasoftware.com/en-us/articles/rest-pki/configure-date). 

```cs
var accessToken = ConfigurationManager.AppSettings["RestPkiAccessToken"];
var endpoint = ConfigurationManager.AppSettings["RestPkiEndpoint"];
if (string.IsNullOrEmpty(endpoint)) {
	endpoint = "https://pki.rest/";
}
return new RestPkiClient(endpoint, accessToken);
```

## Core operations

The code is C# from the ASP.NET MVC samples project; the other languages follow the same flow, see [Samples availability](https://docs.lacunasoftware.com/en-us/articles/rest-pki/samples-availability). 

### Sign a PDF

PAdES signature with the user's certificate: `PadesSignatureStarter.StartWithWebPkiAsync()` returns the token, the page calls Web PKI's `signWithRestPki({ token, thumbprint })`, and `PadesSignatureFinisher2.FinishAsync()` returns the signed PDF and the signer's certificate. The token is not the access token and works once, so the sample sends no-cache headers. For the visual representation, see [PAdES tags](https://docs.lacunasoftware.com/en-us/articles/rest-pki/pades-tags). See [PAdES signature](https://docs.lacunasoftware.com/en-us/articles/rest-pki/dotnet/mvc#pades). 

```cs
// GET action
var signatureStarter = new PadesSignatureStarter(Util.GetRestPkiClient()) {
	SignaturePolicyId = StandardPadesSignaturePolicies.Basic,
	SecurityContextId = Util.GetSecurityContextId()
};
signatureStarter.SetPdfToSign(userfilePath);
var token = await signatureStarter.StartWithWebPkiAsync();

// POST action, after signWithRestPki() in the browser
var signatureFinisher = new PadesSignatureFinisher2(Util.GetRestPkiClient()) {
	Token = model.Token
};
var result = await signatureFinisher.FinishAsync();
var signerCert = result.Certificate;
```

### Sign any file with CAdES

CMS/CAdES signature of any file, stored as `.p7s`: `CadesSignatureStarter`, then `CadesSignatureFinisher2` as in the PDF flow. To co-sign, call `SetCmsToCoSign()` with the existing CMS instead of `SetFileToSign()`. See [CAdES signature](https://docs.lacunasoftware.com/en-us/articles/rest-pki/dotnet/mvc#cades). 

```cs
var signatureStarter = new CadesSignatureStarter(Util.GetRestPkiClient()) {
	SignaturePolicyId = StandardCadesSignaturePolicies.PkiBrazil.AdrBasica,
	SecurityContextId = Util.GetSecurityContextId(),
	EncapsulateContent = true
};
signatureStarter.SetFileToSign(userfilePath);
var token = await signatureStarter.StartWithWebPkiAsync();
```

### Sign an XML document

`FullXmlSignatureStarter` signs the whole document; `XmlElementSignatureStarter` with `SetToSignElementId()` signs one element, as in the NF-e sample. Both finish with `XmlSignatureFinisher`. See [XML signature](https://docs.lacunasoftware.com/en-us/articles/rest-pki/dotnet/mvc#xml-full). 

```cs
var signatureStarter = new FullXmlSignatureStarter(Util.GetRestPkiClient());
signatureStarter.SetXml(StorageMock.GetSampleXmlDocumentPath());
signatureStarter.SetSignaturePolicy(StandardXmlSignaturePolicies.XadesBes);
signatureStarter.SetSecurityContext(Util.GetSecurityContextId());
var token = await signatureStarter.StartWithWebPkiAsync();
```

### Validate a signature

Open a signed file and validate its signatures: `PadesSignatureExplorer` with `Validate = true`, then `OpenAsync()`. For CAdES use `CadesSignatureExplorer`, for XML `XmlSignatureExplorer`. See [Open a PAdES signature](https://docs.lacunasoftware.com/en-us/articles/rest-pki/dotnet/mvc#open-pades). 

```cs
var sigExplorer = new PadesSignatureExplorer(Util.GetRestPkiClient()) {
	Validate = true,
	DefaultSignaturePolicyId = StandardPadesSignaturePolicies.Basic,
	SecurityContextId = Util.GetSecurityContextId()
};
sigExplorer.SetSignatureFile(userfilePath);
var signature = await sigExplorer.OpenAsync();
```

### Make a printer-friendly version

A PDF stamped with the signers and a verification code: upload the file with `UploadFile()`, validate it with `PadesSignatureExplorer` as above, then add marks with `PdfMarker`, built with the fluent `PdfHelper`; `AlphaCode` generates the code. See [Printer-friendly version](https://docs.lacunasoftware.com/en-us/articles/rest-pki/dotnet/mvc#print). 

```cs
var client = Util.GetRestPkiClient();
var blob = client.UploadFile(pdfContent);
var pdfMarker = new PdfMarker(client);
pdfMarker.SetFile(blob);
pdfMarker.Marks.Add(manifestMark);
var result = pdfMarker.Apply();
```

### Authenticate with a certificate

Certificate login: `GetAuthentication()`, then `StartWithWebPkiAsync()` with the security context; after Web PKI signs the token, `CompleteWithWebPkiAsync()` returns the validation results. See [Authentication](https://docs.lacunasoftware.com/en-us/articles/rest-pki/dotnet/mvc#auth). 

```cs
// GET action
var auth = Util.GetRestPkiClient().GetAuthentication();
var token = await auth.StartWithWebPkiAsync(Util.GetSecurityContextId());

// POST action, after signWithRestPki() in the browser
var auth = Util.GetRestPkiClient().GetAuthentication();
var validationResults = await auth.CompleteWithWebPkiAsync(model.Token);
if (!validationResults.IsValid) {
	return View("Failed", validationResults);
}
```

### Request a timestamp

ICP-Brasil timestamps with the access token as `Bearer`: TSP (RFC 3161) at `POST https://pki.rest/tsp/a402df41-8559-47b2-a05c-be555bf66310`, or REST at `POST https://pki.rest/Api/TimestampPlans/a402df41-8559-47b2-a05c-be555bf66310/Issue`, which returns `encodedValue` (the timestamp, in Base64) and `info`. Algorithms: SHA-1 and SHA-256. See [Requesting timestamps](https://docs.lacunasoftware.com/en-us/articles/rest-pki/requesting-timestamps). 

```json
{
	"algorithm": "SHA256",
	"value": "L80RIvFw2jwpiObzFQN+tuEQQ4E9qnGeYYYd+4DrM8M="
}
```

## Errors

Rest PKI answers with an HTTP status: 401 when the access token is not valid, 422 with a return code when an operation fails, and 500 for an unexpected error. See [Return codes](https://docs.lacunasoftware.com/en-us/articles/rest-pki/return-codes). 
The .NET client throws `ValidationException` for the error code `ValidationError`, whose `ValidationResults` say what failed, and `RestPkiException` for the other codes, with the code in `ErrorCode`. For HTTP 401 and other error statuses it throws `RestErrorException`, with the status in `StatusCode`, and when no response arrives (network failure or timeout), `RestUnreachableException`. All of them derive from `RestException`. See [Errors](https://docs.lacunasoftware.com/en-us/articles/rest-pki/dotnet#errors) in the .NET article. The Java client also has `RestErrorException` and `RestUnreachableException`. 

| Error | What it means |
| --- | --- |
| HTTP 401 | The access token is not valid. |
| `ValidationError` | The signing certificate was not valid during the signature or authentication; the validation errors tell why, such as `CertificateChainRootNotTrusted`. |
| `SecurityContextRequired` | No security context was given. |
| "Could not get pending signature" (in the browser) | Web PKI could not reach Rest PKI. Check that the user's computer opens `/Api/System/Info` on the instance and, on-premises, the `restPkiUrl`. See [the article](https://docs.lacunasoftware.com/en-us/articles/rest-pki/troubleshoot/could-not-get-pending-sig). |

## Test certificates and credentials

- [Test certificates](https://docs.lacunasoftware.com/en-us/articles/pki-guide/test-certs#configuring-rest-pki): PKCS #12 files with password `1234`, from the Lacuna Test PKI, which must never be trusted in production. 
- To accept them, use the Lacuna Test PKI security context `803517ad-3bbc-4169-b085-60053a8f6dbf`. The .NET samples use `StandardSecurityContexts.LacunaTest` in debug builds only, and warn that an on-premises installation might not have it; the other samples use it when `trustLacunaTestRoot` (`TRUST_LACUNA_TEST_ROOT` in Python) is on in their configuration. 
- **Access token**: the PkiSuiteSamples projects come with a trial access token for pki.rest, with its expiry date in a comment next to it (in the ASP.NET MVC sample, `RestPkiAccessToken` in `Web.config`). For your own application, generate a token as in [Configuration and authentication](https://docs.lacunasoftware.com/en-us/articles/rest-pki/quick-reference#configuration). 

TODO(docs): no separate test environment for pki.rest is documented.

## Try it

Demos and the Rest PKI samples in each language:

**Demos and samples**

- Live demo: [Sign a file with your certificate](https://try.lacunasoftware.com/en/pki-suite/sign-a-file)
- Live demo: [Validate a signed file](https://try.lacunasoftware.com/en/pki-suite/validate-a-signed-file)
- Live demo: [Make a printer-friendly version](https://try.lacunasoftware.com/en/pki-suite/printer-friendly-version)
- Live demo: [Your certificates in the browser](https://try.lacunasoftware.com/en/web-pki/certificates-in-the-browser)
- Sign a PDF with Rest PKI: [.NET](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/dotnet/mvc/PkiSuiteAspNetMvcSample/Controllers/PadesSignatureRestController.cs) · [Java](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/java/springmvc/src/main/java/com/lacunasoftware/pkisuite/controller/PadesSignatureRestController.java) · [Node.js](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/nodejs/expressmvc/routes/pades-signature-restpki.js) · [PHP](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/php/plain/public/pades-signature-rest/index.php) · [Python](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/python/flask/sample/views/pades_signature_rest.py) · [Ruby](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/ruby/rails/app/controllers/pades_signature_rest_controller.rb)
- Sign a PDF with Rest PKI without browser access to Rest PKI: [Node.js](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/nodejs/expressmvc/routes/pades-wo-communication-restpki.js)
- Sign multiple PDFs with Rest PKI: [.NET](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/dotnet/mvc/PkiSuiteAspNetMvcSample/Controllers/BatchPadesSignatureRestController.cs) · [Java](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/java/springmvc/src/main/java/com/lacunasoftware/pkisuite/controller/BatchPadesSignatureRestController.java) · [Node.js](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/nodejs/expressmvc/routes/batch-pades-signature-restpki.js) · [PHP](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/php/plain/public/batch-pades-signature-rest/index.php) · [Python](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/python/flask/sample/views/batch_pades_rest.py) · [Ruby](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/ruby/rails/app/controllers/batch_pades_rest_controller.rb)
- Sign a PDF with a server key using Rest PKI: [PHP](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/php/plain/public/pades-server-key-rest/index.php)
- Sign a file with CAdES using Rest PKI: [.NET](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/dotnet/mvc/PkiSuiteAspNetMvcSample/Controllers/CadesSignatureRestController.cs) · [Java](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/java/springmvc/src/main/java/com/lacunasoftware/pkisuite/controller/CadesSignatureRestController.java) · [Node.js](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/nodejs/expressmvc/routes/cades-signature-restpki.js) · [PHP](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/php/plain/public/cades-signature-rest/index.php) · [Python](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/python/flask/sample/views/cades_signature_rest.py) · [Ruby](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/ruby/rails/app/controllers/cades_signature_rest_controller.rb)
- Sign multiple files with CAdES using Rest PKI: [.NET](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/dotnet/mvc/PkiSuiteAspNetMvcSample/Controllers/BatchCadesSignatureRestController.cs) · [Java](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/java/springmvc/src/main/java/com/lacunasoftware/pkisuite/controller/BatchCadesSignatureRestControler.java) · [Node.js](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/nodejs/expressmvc/routes/batch-cades-signature-restpki.js) · [Python](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/python/flask/sample/views/batch_cades_rest.py) · [Ruby](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/ruby/rails/app/controllers/batch_cades_rest_controller.rb)
- Sign an XML document using Rest PKI: [.NET](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/dotnet/mvc/PkiSuiteAspNetMvcSample/Controllers/XmlSignatureRestController.cs) · [Java](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/java/springmvc/src/main/java/com/lacunasoftware/pkisuite/controller/XmlSignatureRestController.java) · [Node.js](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/nodejs/expressmvc/routes/xml-signature-restpki.js) · [PHP](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/php/plain/public/xml-signature-rest/index.php) · [Python](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/python/flask/sample/views/xml_signature_rest.py) · [Ruby](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/ruby/rails/app/controllers/xml_signature_rest_controller.rb)
- Sign one element of an XML document using Rest PKI: [.NET](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/dotnet/mvc/PkiSuiteAspNetMvcSample/Controllers/XmlContractSignatureRestController.cs)
- Sign a Brazilian NF-e using Rest PKI: [.NET](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/dotnet/mvc/PkiSuiteAspNetMvcSample/Controllers/XmlNFeSignatureRestController.cs) · [Java](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/java/springmvc/src/main/java/com/lacunasoftware/pkisuite/controller/XmlNFeSignatureRestController.java) · [Node.js](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/nodejs/expressmvc/routes/xml-nfe-signature-restpki.js) · [PHP](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/php/plain/public/xml-nfe-signature-rest/index.php) · [Python](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/python/flask/sample/views/xml_nfe_signature_rest.py) · [Ruby](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/ruby/rails/app/controllers/xml_nfe_signature_rest_controller.rb)
- Sign a COD XML using Rest PKI: [.NET](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/dotnet/mvc/PkiSuiteAspNetMvcSample/Controllers/XmlCodSignatureRestController.cs) · [PHP](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/php/plain/public/xml-cod-signature-rest/index.php)
- Sign a Brazilian digital diploma XML using Rest PKI: [Java](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/java/springmvc/src/main/java/com/lacunasoftware/pkisuite/controller/XmlDiplomaSignatureRestController.java)
- Validate a signed PDF using Rest PKI: [.NET](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/dotnet/mvc/PkiSuiteAspNetMvcSample/Controllers/OpenPadesSignatureRestController.cs) · [Java](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/java/springmvc/src/main/java/com/lacunasoftware/pkisuite/controller/OpenPadesRestController.java) · [Node.js](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/nodejs/expressmvc/routes/open-pades-restpki.js) · [PHP](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/php/plain/public/open-pades-rest/index.php) · [Python](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/python/flask/sample/views/open_pades_rest.py) · [Ruby](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/ruby/rails/app/controllers/open_pades_rest_controller.rb)
- Validate a CMS/CAdES signature using Rest PKI: [.NET](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/dotnet/mvc/PkiSuiteAspNetMvcSample/Controllers/OpenCadesSignatureRestController.cs) · [Node.js](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/nodejs/expressmvc/routes/open-cades-restpki.js) · [PHP](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/php/plain/public/open-cades-rest/index.php)
- Validate a signed XML using Rest PKI: [.NET](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/dotnet/mvc/PkiSuiteAspNetMvcSample/Controllers/OpenXmlSignatureRestController.cs) · [Java](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/java/springmvc/src/main/java/com/lacunasoftware/pkisuite/controller/OpenXmlRestController.java) · [PHP](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/php/plain/public/open-xml-rest/index.php)
- Make a printer-friendly version of a signed PDF using Rest PKI: [.NET](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/dotnet/mvc/PkiSuiteAspNetMvcSample/Controllers/PrinterFriendlyPadesRestController.cs) · [Java](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/java/springmvc/src/main/java/com/lacunasoftware/pkisuite/controller/PrinterFriendlyPadesRestController.java) · [Node.js](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/nodejs/expressmvc/routes/printer-version-pades-restpki.js) · [PHP](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/php/plain/public/printer-friendly-pades-rest/index.php) · [Python](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/python/flask/sample/views/printer_version_pades_rest.py) · [Ruby](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/ruby/rails/app/controllers/printer_version_pades_rest_controller.rb)
- Make a printer-friendly version of a CMS/CAdES signature using Rest PKI: [.NET](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/dotnet/mvc/PkiSuiteAspNetMvcSample/Controllers/PrinterFriendlyCadesRestController.cs)
- Authenticate with a digital certificate using Rest PKI: [.NET](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/dotnet/mvc/PkiSuiteAspNetMvcSample/Controllers/AuthenticationRestController.cs) · [Java](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/java/springmvc/src/main/java/com/lacunasoftware/pkisuite/controller/AuthenticationRestController.java) · [Node.js](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/nodejs/expressmvc/routes/authentication-restpki.js) · [PHP](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/php/plain/public/authentication-rest/index.php) · [Python](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/python/flask/sample/views/authentication_rest.py) · [Ruby](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/ruby/rails/app/controllers/authentication_rest_controller.rb)
- Sign a medical prescription (Receita Simples) using Rest PKI: [Java](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/java/springmvc/src/main/java/com/lacunasoftware/pkisuite/controller/ReceitaSimplesRestController.java) · [PHP](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/php/plain/public/receita-simples-rest/index.php) · [Python](https://github.com/LacunaSoftware/PkiSuiteSamples/blob/master/python/django/sample/receita_simples_rest/views.py)
