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 usUse Cases
Why integrate with Penneo
Common scenarios for SaaS companies building Penneo integrations for their customers.
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.
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.
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.
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.
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.
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.
Prefilled KYC and onboarding form dispatch
Send Penneo form requests with answers prefilled from your SaaS data so signers complete onboarding in fewer clicks.
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.
Structured signature data extraction
Pull casefile and form submission answers back into your platform to update records, trigger downstream automations, or populate audit logs.
Signed document archiving
Retrieve finalized casefile files once all signers have completed so the executed PDFs land directly inside your customer's workspace.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.