Partner API SDKs
Official, zero-dependency clients for the Partner API. Each wraps the full loop — import a blank PDF, wait for the template, mint a fill link, retrieve submissions and completed PDFs — plus webhook signature verification.
| Language | Install | Source |
|---|---|---|
| Go | go get github.com/easydocforms/easydocforms-go | easydocforms-go |
| Node.js | npm install easydocforms | easydocforms-node |
| Python | pip install easydocforms | easydocforms-python |
| Ruby | gem "easydocforms" | easydocforms-ruby |
API keys are created in the EasyDocForms app under Settings → Integrations → Partner API (shown exactly once).
Node.js
js
import { Client } from "easydocforms";
const client = new Client(process.env.EASYDOCFORMS_API_KEY);
// 1. Import a blank PDF (async — resolves immediately).
let importJob = await client.createImport({
pdfUrl: "https://example.com/new-patient-intake.pdf",
filename: "new-patient-intake.pdf",
blankFormAttestation: true, // you attest the PDF is a blank template — no PHI
});
// 2. Wait for processing (typically 1–10 minutes).
importJob = await client.waitForImport(importJob.import_id);
// 3. Mint a hosted fill link and hand the URL to the patient.
const link = await client.createFillLink({
templateId: importJob.template_id,
externalRef: "visit-8675309",
});
console.log(link.url);Python
python
import os
import easydocforms
client = easydocforms.Client(os.environ["EASYDOCFORMS_API_KEY"])
import_job = client.create_import(
pdf_url="https://example.com/new-patient-intake.pdf",
filename="new-patient-intake.pdf",
blank_form_attestation=True,
)
import_job = client.wait_for_import(import_job["import_id"])
link = client.create_fill_link(
template_id=import_job["template_id"],
external_ref="visit-8675309",
)
print(link["url"])Go
go
package main
import (
"context"
"fmt"
"log"
"os"
easydocforms "github.com/easydocforms/easydocforms-go"
)
func main() {
client := easydocforms.NewClient(os.Getenv("EASYDOCFORMS_API_KEY"))
pong, err := client.Ping(context.Background())
if err != nil {
log.Fatal(err)
}
fmt.Printf("org %s, key %q, scopes %v\n", pong.OrgID, pong.KeyName, pong.Scopes)
}Ruby
ruby
require "easydocforms"
client = EasyDocForms::Client.new(ENV["EASYDOCFORMS_API_KEY"])
import = client.create_import(
pdf_url: "https://example.com/new-patient-intake.pdf",
filename: "new-patient-intake.pdf",
blank_form_attestation: true
)
import = client.wait_for_import(import[:import_id])
link = client.create_fill_link(
template_id: import[:template_id],
external_ref: "visit-8675309"
)
puts link[:url]Each repository's README documents the full surface, including submission retrieval, completed-PDF downloads, and webhook signature verification. The API's single source of truth is the OpenAPI 3.1 spec.