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

# Juro API

Jentic publishes the only available OpenAPI specification for Juro API, keeping it validated and agent-ready. Juro is a contract automation platform. The v3 API exposes 12 endpoints to list and load templates, create contracts from templates or PDF uploads, update and delete contracts, route them for signing through one or more signing sides, and download the executed PDF. It fits agent and backend workflows that need to spin up, sign, and archive contracts without driving the Juro UI.

## For AI agents

Generate, route for signing, and download contracts on Juro from code or an AI agent.

## Scope

Does not handle CRM data, e-billing, or matter management - use for contract generation, signing, and archive only.

## Capabilities

- List and load contract templates via GET /templates and GET /templates/{template_id}
- Create contracts from a template through POST /contracts with merge-field values
- Upload existing PDFs as Juro contracts using POST /contracts/upload
- Retrieve, patch, or delete a contract by id through /contracts/{contract_id}
- Send contracts for signing per signing side and per signatory via /contracts/{contract_id}/signing-request paths
- Download the binary PDF of an executed contract using GET /contracts/{contract_id}/pdf/binary

## Use cases

### Sales-Quote-To-Contract

Sales teams want every closed-won quote to generate a fully populated contract for signing. The integration calls GET /templates to find the right master template, POST /contracts with merge fields like buyer, value, and term, then POST /contracts/{contract_id}/sign to dispatch it. This collapses the typical CRM-to-contract handoff from hours to seconds.

Example prompt: On opportunity stage 'Closed Won', call POST /contracts with template_id 'tpl-msa' and the deal merge fields, then POST /contracts/{contract_id}/sign to start the signing flow.

### Bulk PDF Migration to Juro

Legal ops migrating a back catalogue of executed PDFs into Juro use POST /contracts/upload to register each PDF as a Juro contract for searchable storage. GET /contracts/{contract_id} confirms metadata and PATCH /contracts/{contract_id} adds counterparties or tags. A 1,000-document migration becomes a scripted job rather than a manual upload.

Example prompt: For each PDF in 's3://legal-archive/', call POST /contracts/upload with the file and metadata, then PATCH /contracts/{contract_id} to set the counterparty and contract type.

### Multi-Party Signing Orchestration

For deals with multiple signatories on each side, the contract owner wants to trigger signing for the buyer side first and the seller side second. POST /contracts/{contract_id}/signing-request/{signing_side_uid} sends to a signing side, and POST /contracts/{contract_id}/signing-request/{signing_side_uid}/signatures/{signature_uid} drills down to a specific signatory. This avoids parallel emails that confuse the audit trail.

Example prompt: For contract 'ctr-100', call POST /contracts/ctr-100/signing-request/{buyer_side_uid} first, then on completion call POST /contracts/ctr-100/signing-request/{seller_side_uid}.

### Agent-Driven Contract Drafting

An AI legal assistant can draft a contract from a chat conversation, send it for signing, and return a download link. Through Jentic the agent searches 'create a contract', loads POST /contracts, and executes with template and merge fields. The signed binary is then pulled via GET /contracts/{contract_id}/pdf/binary for archiving.

Example prompt: Through Jentic, search 'create a contract from a template', load POST /contracts, execute with template_id 'tpl-nda' and the counterparty's email, then call POST /contracts/{contract_id}/sign.

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| GET | /templates | List contract templates |
| POST | /contracts | Create a contract from a template |
| POST | /contracts/upload | Upload a PDF as a contract |
| PATCH | /contracts/{contract_id} | Update a contract |
| POST | /contracts/{contract_id}/sign | Send a contract for signing |
| POST | /contracts/{contract_id}/signing-request/{signing_side_uid} | Send to a specific signing side |
| GET | /contracts/{contract_id}/pdf/binary | Download the contract PDF |

## Key resources

- **Templates** — List and load contract templates available in the workspace
- **Contracts** — Create from template or PDF upload, retrieve, patch, and delete contracts
- **Signing** — Trigger signing per side and per signatory and download executed PDFs

## Why Jentic

- **Setup:** Wiring the Juro API by hand means learning its API key auth, working through its v3 contract lifecycle, and threading contract ids through generation, signing, and archive calls yourself. Through Jentic you install once, import the Juro API from the API Directory, store the key once, and your agent calls it.
- **Permission scoping:** Juro puts the contract id in the URL path (/contracts/{contract_id}/...), so a rule can pin your agent to one contract: it can update, send for signing, and fetch the PDF for that contract and nothing else. You choose the operations it may call, so ones like creating contracts from templates are not included unless you add them.
- **Credential handling:** Your Juro 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 'create a contract from a template' or 'send a contract for signing', and Jentic returns the matching Juro operation with its input schema so the agent calls the right endpoint without browsing the reference docs.

## Related APIs

- **PandaDoc API** — Document automation platform with template-based contract generation and signing.
- **Adobe AEM** — Adobe content and document services that pair with Juro contracts in larger Adobe stacks.
- **Salesforce API** — Pair Salesforce opportunities with Juro contracts to drive close-to-signed automation.

## FAQ

### Why is there no official OpenAPI spec for Juro API?

Juro does not publish an OpenAPI specification. Jentic generates and maintains this spec so that AI agents and developers can call Juro API via structured tooling. It is validated against the live API and kept up to date. Get started with Jentic One, the self-hosted execution layer.

### What authentication does the Juro API use?

The Juro v3 API uses an API key auth scheme. The key is sent on each request and scopes access to the workspace. Through Jentic the key sits in the encrypted vault and is injected at execution time, not at prompt time.

### Can I create a contract from a template with the Juro API?

Yes. GET /templates lists available templates and POST /contracts creates a new contract from a chosen template_id with merge-field values. POST /contracts/upload covers the alternative path of registering an existing PDF as a contract.

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

Juro applies per-workspace rate limits that vary with plan; the spec does not enumerate fixed values. Use exponential backoff on 429 responses and stagger bulk creates.

### How do I send a contract for signing with the Juro API through Jentic?

Search Jentic for 'send a contract for signing', load POST /contracts/{contract_id}/sign, and execute with the contract_id. For multi-party deals, target a specific side via /contracts/{contract_id}/signing-request/{signing_side_uid}.

### Can I download the executed PDF after signing?

Yes. GET /contracts/{contract_id}/pdf/binary returns the binary PDF of the contract, including the signed version once all parties have completed signing.

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

Yes. Because you run Jentic One yourself, your own rules decide which Juro operations and credentials the agent may use. Since Juro puts the contract id in the URL path, a rule can pin the agent to a single contract so it can only update it, send it for signing, and download its PDF, and nothing else. You choose the operations it may call, so actions like creating contracts from templates or uploading PDFs are excluded unless you explicitly add them.
