Skip to content

E-Signature

Penneo
API integration

Ship E-Signature features without building the integration. Full Penneo API access via Proxy and 20+ MCP-ready tools for AI agents — extend models and mappings to fit your product.

Talk to us
Penneo

Use Cases

Why integrate with Penneo

Common scenarios for SaaS companies building Penneo integrations for their customers.

01

Automate KYC onboarding for accounting and audit platforms

Practice management SaaS can dispatch prefilled KYC forms and engagement letters to new clients the moment they're added in the platform, then pull structured AML answers back without manual data entry.

02

Trigger employment contracts from ATS and HR workflows

When a candidate moves to a 'Hired' stage, the SaaS can generate a contract, push it to Penneo as a casefile with signer roles, and sync the executed document back into the candidate profile.

03

Embed eIDAS-compliant signing into legal and contract tools

Legal case management platforms can route multi-party resolutions through Penneo's national eID signing flows, enforcing signing order and retrieving cryptographically sealed documents for an audit trail.

04

Sync signed documents and form data into a system of record

SaaS platforms can poll completed casefiles, download finalized PDFs, and extract submission answers to keep their CRM, ERP, or compliance records continuously up to date.

05

Manage form versions and templates across customer tenants

Product teams can programmatically create, publish, and archive form versions on behalf of customers so every signing request runs against the legally approved template.

What You Can Build

Ship these features with Truto + Penneo

Concrete product features your team can ship faster by leveraging Truto’s Penneo integration instead of building from scratch.

01

OAuth-based Penneo account connection

Let end users connect their own Penneo workspace via OAuth so all signing actions execute under their credentials and audit log.

02

Prefilled KYC and onboarding form dispatch

Send Penneo form requests with answers prefilled from your SaaS data so signers complete onboarding in fewer clicks.

03

Asynchronous casefile creation with status tracking

Push PDFs and signer assignments into Penneo casefiles and poll job status by UUID to confirm staging before notifying the user.

04

Structured signature data extraction

Pull casefile and form submission answers back into your platform to update records, trigger downstream automations, or populate audit logs.

05

Signed document archiving

Retrieve finalized casefile files once all signers have completed so the executed PDFs land directly inside your customer's workspace.

06

Form lifecycle management

Create, update, publish, archive, and restore form versions programmatically to keep customer-facing templates governed and consistent.

SuperAI

Penneo AI agent tools

Comprehensive AI agent toolset with fine-grained control. Integrates with MCP clients like Cursor and Claude, or frameworks like LangChain.

create_a_penneo_oauth

Exchange credentials for a Penneo access token using the authorization code, refresh token, or API keys grant. Returns: grant_type. Required: grant_type, client_id, client_secret.

delete_a_penneo_oauth_by_id

Revoke a Penneo refresh token, rendering it permanently invalid. Returns an empty 200 response on success regardless of whether the token existed or was already invalid. Required: token.

list_all_penneo_oauth

Initiate the Penneo OAuth 2.0 authorization flow by redirecting the user's browser to Penneo's authorization endpoint. Returns a 302 redirect to the registered redirect_uri with an authorization code appended as a query parameter. Required: response_type, redirect_uri, client_id, code_challenge.

list_all_penneo_version

Get Penneo API version information for the running app. Returns: language, additionalSignersConfig.

list_all_penneo_casefile_answers

List all submission answers for a penneo casefile. Returns answer records whose fields are specific to the casefile's form question schema defined in penneo; the response shape is form-schema-specific and cannot be enumerated from the API reference — consult the upstream penneo Collect docs for the field-level breakdown. Required: casefile_id.

list_all_penneo_casefile_files

List files attached to a penneo casefile by casefile id. Returns a list of file metadata objects; the available source documents the response as file metadata without enumerating individual fields beyond the universal identifiers id, created_at, and updated_at. Required: casefile_id.

list_all_penneo_forms

List penneo forms with optional status filtering and sorting. Returns: id, language, additionalSignersConfig, createdAt, updatedAt.

get_single_penneo_form_by_id

Get a single penneo form by id, including its sections and signer configuration. Returns: id, language, additionalSignersConfig, createdAt, updatedAt. Required: id.

create_a_penneo_form

Create a new penneo form with sections and input fields. Returns: id, language, additionalSignersConfig, createdAt, updatedAt. Required: language, sections.

update_a_penneo_form_by_id

Update an existing penneo form by id. If the form is in DRAFT status, updates the existing draft; if ACTIVE, creates a new DRAFT version. Returns: id, language, additionalSignersConfig, createdAt, updatedAt. Required: id, language, sections.

delete_a_penneo_form_by_id

Archive a penneo form by id, setting its status to ARCHIVED. Returns an empty 200 response on success. Required: id.

update_a_penneo_form_version_by_id

Update a specific version of a Penneo form with sections and input fields. If the version is DRAFT, updates the existing draft; if ACTIVE, creates a new DRAFT version. Returns the updated form object including language and additionalSignersConfig. Required: external_id, version, language, sections.

create_a_penneo_form_request

Create a prefilled form request in Penneo for a specified form, with pre-populated field values. Returns a 200 success response when the form request is created. Required: form_id, answers.

list_all_penneo_form_request_answers

List all submitted answers for a specific Penneo form request. Returns the submission data object; the field structure is form-specific and depends on the form's field definitions in Penneo. Required: form_id, id.

list_all_penneo_form_submissions

List Penneo form submissions for a specific form. Returns: id, created_at, grant_type. Required: form_id. Supports filtering by completedAfter and completedBefore ISO-8601 UTC datetimes.

list_all_penneo_form_submission_answers

List all answers for a Penneo form submission. Returns: id, grant_type. Required: form_id, id.

create_a_penneo_casefile

Create a new Penneo case file with documents and signers via a multipart/form-data POST. PDF file uploads are supported as part of the request body. Processing is asynchronous; the returned job reference can be used to poll progress via the Penneo Queue Status Check endpoint. Returns: jobs, status, message. Required: data, files.

create_a_penneo_job_status

Check the status of an asynchronous Penneo case file creation job by polling with its UUID and payload hash. Returns: uuid, result, payload, retries, createdAt, jobStatus, updatedAt, maxRetries, payloadHash, errorMessage. Required: uuid, payloadHash.

create_a_penneo_form_version_archive

Archive a specific version of a penneo form, allowing management of existing form versions without affecting the currently published version. Returns an empty 200 response on success. Required: external_id, version.

create_a_penneo_form_version_publish

Publish a specific version of a Penneo form, making it the active published version. Returns a 200 response on success. Required: external_id, version.

create_a_penneo_form_version_restore

Restore a penneo form to a specific previous version. Returns a 200 response on success. Required: external_id, version.

create_a_penneo_form_publish

Publish a Penneo form by its external ID to make it available for end-users. Returns: id, language, additionalSignersConfig, createdAt, updatedAt, grant_type. Required: external_id.

Why Truto

Why use Truto’s MCP server for Penneo

Other MCP servers give you a static tool list for one app. Truto gives you a managed, multi-tenant MCP infrastructure across 550+ integrations.

01

Auto-generated, always up to date

Tools are dynamically generated from curated documentation — not hand-coded. As integrations evolve, tools stay current without manual maintenance.

02

Fine-grained access control

Scope each MCP server to read-only, write-only, specific methods, or tagged tool groups. Expose only what your AI agent needs — nothing more.

03

Multi-tenant by design

Each MCP server is scoped to a single connected account with its own credentials. The URL itself is the auth token — no shared secrets, no credential leaking across tenants.

04

Works with every MCP client

Standard JSON-RPC 2.0 protocol. Paste the URL into Claude, ChatGPT, Cursor, or any MCP-compatible agent framework — tools are discovered automatically.

05

Built-in auth, rate limits, and error handling

Tool calls execute through Truto’s proxy layer with automatic OAuth refresh, rate-limit handling, and normalized error responses. No raw API plumbing in your agent.

06

Expiring and auditable servers

Create time-limited MCP servers for contractors or automated workflows. Optional dual-auth requires both the URL and a Truto API token for high-security environments.

How It Works

From zero to integrated

Go live with Penneo in under an hour. No boilerplate, no maintenance burden.

01

Link your customer’s Penneo account

Use Truto’s frontend SDK to connect your customer’s Penneo account. We handle all OAuth and API key flows — you don’t need to create the OAuth app.

02

We handle authentication

Don’t spend time refreshing access tokens or figuring out secure storage. We handle it and inject credentials into every API request.

03

Call our API, we call Penneo

Truto’s Proxy API is a 1-to-1 mapping of the Penneo API. You call us, we call Penneo, and pass the response back in the same cycle.

04

Unified response format

Every response follows a single format across all integrations. We translate Penneo’s pagination into unified cursor-based pagination. Data is always in the result attribute.

FAQs

Common questions about Penneo on Truto

Authentication, rate limits, data freshness, and everything else you need to know before you integrate.

How do end users authenticate their Penneo account?

Truto handles Penneo authentication via OAuth. Your users connect their Penneo workspace once, and Truto manages token storage, refresh, and revocation behind a single connection object.

How are large document uploads and casefile creation handled?

Casefile creation is asynchronous and uses multipart/form-data to accept PDFs and signer assignments. After submission, you poll the job status endpoint with the returned UUID to confirm the casefile was successfully staged before proceeding.

Can we prefill data into forms sent to signers?

Yes. When creating a form request, you can pass an answers payload populated with data from your SaaS, so the signer sees a partially completed form and only fills in what's missing.

How do we retrieve structured answers from completed signings?

You can list answers tied to a casefile or to a specific form submission, giving you machine-readable responses rather than only the rendered PDF, which is useful for syncing back to CRM fields or compliance systems.

Does the integration support managing form templates and versions?

Yes. You can list, create, update, and delete forms, and manage their lifecycle through version-level publish, archive, and restore actions to ensure signing requests always run against an approved template.

How do we know when a casefile is fully signed and ready to archive?

Because Penneo processes signing asynchronously, integrations rely on polling job status and listing casefile files to detect completion, then download the finalized, cryptographically sealed PDFs back into your platform.

Penneo

Get Penneo integrated into your app

Our team understands what it takes to make a Penneo integration successful. A short, crisp 30 minute call with folks who understand the problem.