canonical: https://jentic.com/apis/penlydoc.com/penlydoc

# PenlyDoc API

The PenlyDoc API sends documents for electronic signature from your own product, shows the signing page inside it, and returns the signed PDF. You create an envelope from PDF or DOCX files, or from a reusable template with roles and data fields, then send it, remind signers, void it, or duplicate it into a new draft. Each recipient can sign by email or through an embedded signing link, envelopes can be found by externalRef or status, and every envelope keeps a hash-chained audit trail. Account endpoints manage the webhook URL and its signing secret, delivery retries, branding with embed origins, and default reminder intervals, and a public verify endpoint checks a signed PDF without a key.

## For AI agents

Send PDF or DOCX documents and templates for e-signature, embed the signing page, track envelope status, download signed PDFs and audit trails, and verify a signed PDF.

## Scope

Does not generate documents from data, store files long term as a document library, or handle payments. Use for sending, embedding, tracking, and verifying e-signatures only.

## Capabilities

- Send a document for signature from a template by filling its roles with signer name and email and its data keys
- Create an envelope from uploaded PDF or DOCX files and send it as a draft or straight away
- Generate an embedded signing link for one recipient with a returnUrl so they sign inside your app
- Find envelopes by externalRef or status such as SENT, PARTIALLY_SIGNED, or COMPLETED
- Remind everyone who has not signed, void an envelope with a reason, or duplicate it into a new draft
- Download the signed PDF and the hash-chained audit history once an envelope completes
- Check whether a signed PDF is valid through the public verify endpoint, which needs no API key

## Use cases

### Agent-sent agreements through Jentic

An operations agent finds the PenlyDoc template send operation through Jentic, fills the template's roles with the signer's name and email and its data keys with deal values, and sends the envelope with an externalRef pointing at the deal. It later searches by that externalRef to check status and downloads the signed PDF. Jentic injects the bearer key at call time, so the key stays on your server side as the PenlyDoc docs advise.

Example prompt: Call POST `/v1/templates/{id}/envelopes` with roles filled with name 'Jana Novak' and email 'jana@example.com', data containing the contract amount, externalRef 'deal-1042', and send true, then GET `/v1/envelopes` with externalRef 'deal-1042'

### Embedded signing inside your product

To keep signers in your app, create a recipient with EMBEDDED delivery and request POST `/v1/envelopes/{id}/recipients/{recipientId}/signing-url` with a returnUrl when they are ready. The link is valid for an hour and should be requested on demand. Branding settings control the brand name, accent color, default language, and the embedOrigins allowed to frame the signing page.

Example prompt: Call POST `/v1/envelopes/{id}/recipients/{recipientId}/signing-url` with returnUrl 'https://app.example.com/signed' and return the signing URL to the frontend

### Signature follow-up and record keeping

GET `/v1/envelopes` with status PARTIALLY_SIGNED or SENT lists envelopes waiting on signers, and POST `/v1/envelopes/{id}/remind` nudges everyone who has not signed. Once complete, GET `/v1/envelopes/{id}/documents/signed` returns the signed PDF and GET `/v1/envelopes/{id}/audit` returns the hash-chained history for the record.

Example prompt: List GET `/v1/envelopes` with status 'PARTIALLY_SIGNED', call POST `/v1/envelopes/{id}/remind` for each, and for COMPLETED envelopes download `/v1/envelopes/{id}/documents/signed` and `/v1/envelopes/{id}/audit`

### Signed PDF verification

Anyone holding a signed PDF can check it with POST `/api/verify` by uploading the document. The endpoint needs no API key, so a support or compliance agent can confirm a document's signatures without account access.

Example prompt: Upload the received PDF to POST `/api/verify` in the document field and report whether its signatures check out

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| POST | `/v1/templates/{id}/envelopes` | Send a document from a template |
| POST | `/v1/envelopes` | Create an envelope from PDF or DOCX files |
| POST | `/v1/envelopes/{id}/recipients/{recipientId}/signing-url` | Get an embedded signing link |
| GET | `/v1/envelopes` | Find envelopes by externalRef or status |
| POST | `/v1/envelopes/{id}/remind` | Remind unsigned recipients |
| GET | `/v1/envelopes/{id}/documents/signed` | Download the signed PDF |
| GET | `/v1/envelopes/{id}/audit` | Hash-chained envelope history |
| POST | `/api/verify` | Check a signed PDF |

## Key resources

- **Envelopes** — Create, send, remind, void, duplicate, delete, and search envelopes, and download original and signed PDFs and audit history
- **Templates** — Create templates from PDF or DOCX, set their fields, send envelopes from them, and archive them
- **Recipients** — Embedded signing links per recipient and link revocation
- **Webhooks** — Set the webhook URL, list recent deliveries, retry one, or send a test event
- **Branding and settings** — Brand name, accent color, logo, embed origins, and default reminder interval

## AI readiness

This API is usable in Jentic One now. Its AI-readiness score against Jentic's framework shows where it stands today and where improvements would make it even easier for agents to use.

- **Score:** 55 / 100
- **Maturity:** Foundational
- **Dimensions:**
  - Foundational Compliance: 99 / 100
  - Developer Experience & Jentic Compatibility: 56 / 100
  - AI-Readiness & Agent Experience: 32 / 100
  - Agent Usability: 94 / 100
  - Security: 60 / 100
  - AI Discoverability: 62 / 100
- **View full report:** https://jentic.com/apis/penlydoc.com/penlydoc/scorecard
- **How the score is calculated:** https://docs.jentic.com/reference/api-readiness-framework/overview/
- **More about the dimensions:** https://docs.jentic.com/reference/api-readiness-framework/specification/#dimensional-model-overview

### Score it yourself

Every API in the directory is allowlisted, so you can re-score it with no key required.

- **Score your own API:** https://jentic.com/scorecard.md
- **Scoring CLI agent skill:** https://github.com/jentic/jentic-api-scorecard/blob/main/skills/jentic-api-scorecard/SKILL.md

```sh
npx @jentic/api-scorecard-cli score <openapi-url>
```

## Why Jentic

- **Setup:** Wiring PenlyDoc by hand means keeping its bearer key server-side, uploading PDF or DOCX files as multipart parts, sending Idempotency-Key headers, and verifying webhook signatures yourself. Through Jentic you install once, import PenlyDoc from the API Directory, store the key once, and your agent calls it.
- **Permission scoping:** PenlyDoc puts the envelope id and template id in the URL path (`/v1/envelopes/{id}/...` and `/v1/templates/{id}/...`), so a rule can pin your agent to one template for sending or one envelope for follow-up. You choose the operations it may call, so destructive ones like voiding or permanently deleting an envelope are not included unless you add them.
- **Credential handling:** Your PenlyDoc API key is stored once, encrypted, by your own Jentic One instance and injected at execution time. It never enters the agent's prompt, logs, or context.
- **Discovery method:** Agents search Jentic by intent such as 'send a document for signature' or 'download the signed PDF', and Jentic returns the matching PenlyDoc operation with its input schema so the agent calls the right endpoint without browsing the reference docs.

## Related APIs

- **BoldSign API** — E-signature API with templates, embedded signing, and status tracking
- **SignWell API** — E-signature documents, templates, and signing links
- **PandaDoc API** — Document generation, proposals, and e-signature in one platform
- **pdfs.build API** — Renders PDFs from templates with JSON data

## FAQ

### What authentication does the PenlyDoc API use?

Per its OpenAPI spec, the PenlyDoc API takes an API key (for example sk_live_...) as an HTTP bearer token in the Authorization header, created under Console and Developers. The signed PDF check at POST `/api/verify` is declared with no security requirement. Through Jentic the key is stored encrypted by your own Jentic One instance and injected at call time, so it never enters the agent's context.

### Can signers sign inside my own app?

Yes. Set a recipient's delivery to EMBEDDED, then request POST `/v1/envelopes/{id}/recipients/{recipientId}/signing-url` with an optional returnUrl when the signer is ready. The link is valid for one hour, so request it on demand. Allow your domain in the embedOrigins branding setting so the page can be framed.

### How do I send a template for signature through Jentic?

Search Jentic for 'send a document for signature', load the schema for POST `/v1/templates/{id}/envelopes`, and pass roles with each signer's name and email plus any data values, with send set to true. An Idempotency-Key header guards against duplicate sends on retry. To run it on your own infrastructure, install Jentic One from its GitHub repo.

### What are the rate limits for the PenlyDoc API?

The OpenAPI spec does not specify request rate limits. GET `/v1/me` returns a sendLimit object describing your account's sending allowance. Check https://penlydoc.com/docs for current limits.

### Is there a PenlyDoc MCP server?

You don't need an MCP server to give your agent the PenlyDoc API. Jentic connects it directly from the API Directory: import it, store your API key once, and your agent calls it. Operations are discovered on demand, so no extra tool definitions sit in the agent's context.

### Can I limit what my agent is allowed to do with the PenlyDoc API?

Yes. For example, write a rule that allows only GET `/v1/envelopes`, GET `/v1/envelopes/{id}`, and POST `/v1/envelopes/{id}/remind`, so a follow-up agent can find pending envelopes and nudge signers but cannot send new documents, void envelopes, or delete them. Every call it makes is logged by your Jentic One instance.
