sign-free.openapps.xyz

Source

This app’s code and revision history are public. Download a copy or explore the files below.

Public
The app’s code and revision history are public.
Owned app · rev 528326727848
Run it yourself
Take the whole tree and run it on your own machine. The download needs no account. Cloning needs a sign-in.
Download .zip
bounded clone 1da91c033c738ab74538d13d
A copy you download is not bounded. The guarantees this app runs under - declared egress, proven invariants, writes that fail closed - live in the runtime serving this page, not in the files. What you get is auditable source you can read and run, with no runtime guarantees attached.
← All files
public/llms.txt
# Sign by OpenApps

> Free e-signatures, a free alternative to DocuSign, Dropbox Sign and Adobe Acrobat Sign. Send a document for signature, each signer signs from a private link with no account (on a phone or a computer), and everyone gets the signed PDF with a completion certificate (audit trail and the document's SHA-256 fingerprint). No limit on documents or signers.

Web app: https://sign-free.openapps.xyz/ (upload a PDF, or write or paste text)
Plain version of the landing page: https://sign-free.openapps.xyz/index.md
OpenAPI description: https://sign-free.openapps.xyz/openapi.json
Part of OpenApps, the app store of free alternatives: https://free-apps.openapps.xyz/

## API

Base URL: https://functions.bounded.sh/apps/1da91c033c738ab74538d13d/api

No API key and no account. JSON in, JSON out. CORS is open.
The API creates documents from text (plain text or simple Markdown: `#` and `##` headings, blank lines between paragraphs, `-` or `1.` list items), up to 100,000 characters. Sign renders the text into a PDF and adds a signature block (signature, full name, date) for each signer. To send an existing PDF, have the person upload it in the web app.

### Send a document for signature

POST /documents
{
  "title": "Freelance design agreement",
  "text": "# Freelance design agreement\n\nThis agreement is between Sam Lee and Alex Kim...\n\n## Payment\n\nAlex will pay $1,200 on delivery.",
  "signers": [{"name": "Sam Lee", "email": "sam@example.com"}, {"name": "Alex Kim"}],
  "message": "Here is the agreement we discussed."
}

curl -X POST https://functions.bounded.sh/apps/1da91c033c738ab74538d13d/api/documents \
  -H 'content-type: application/json' \
  -d '{"title": "Freelance design agreement", "text": "# Freelance design agreement\n\nThis agreement is between Sam Lee and Alex Kim.", "signers": [{"name": "Sam Lee"}, {"name": "Alex Kim"}]}'

Up to 10 signers; email is optional and only printed on the document and certificate (Sign does not send email itself). The document is sent at once: signing links work right away.
Returns (201):
- signers[].signUrl: one private link per signer. Send each signer only their own link (by email, chat, text message). Anyone with a signer's link can sign as that signer.
- adminUrl: the owner's private page (who has opened and signed, the signed PDF, make a copy to send again). Give it to the person you work for.
- ownerKey: lets you check status and void through the API.

### Check status

GET /documents/<documentId>
Header: x-owner-key: <ownerKey>   (a ?key=<ownerKey> query parameter also works)

Returns status ("sent", "completed" or "voided"), the document's fingerprint, and for each signer viewedAt, signedAt and their signUrl. When status is "completed", the signed PDF with its certificate can be downloaded from the adminUrl or any signer's link (the PDF is built in the browser, so the API does not return it).

### Void

POST /documents/<documentId>/void
Header: x-owner-key: <ownerKey>

Signing links stop working. Signatures already made stay on the record. Only a sent document can be voided (409 otherwise).

GET / lists the routes. Errors answer {"error": "<sentence that says what to change>"} with a 4xx status (400 bad input, 401 missing owner key, 403 wrong owner key, 404 unknown document, 409 already voided).

## Links you can hand to a person

- https://sign-free.openapps.xyz/new#title=<title>&text=<text>: opens the editor with your draft filled in (URL-encode both). The person reviews it, adds who signs and sends it from their own browser, so they own it. The part after # never reaches a server.
- The adminUrl from POST /documents: the person's page to follow and manage the document.
- Each signUrl: one signer's private signing page.

## What people can do in the web app

- Upload a PDF (up to 10 MB) or write the text; add up to 10 signers; place signature, initials, date signed, full name, text and checkbox fields on any page; give text and checkbox fields a label and make them optional.
- Send, then copy each signer's link, email it from their own mail app, or share it from a phone.
- Sign their own document: add themselves as a signer, send, then choose "Sign as (their name) on this device" from the menu next to their name.
- Follow live who opened and signed; download the signed PDF with its certificate once everyone has signed.
- Void a sent document, and make a copy of any document to send again (the copy keeps pages, signers and fields).
- Not available: signing order (everyone can sign at the same time), emails or reminders sent by Sign, a decline button (a signer who will not sign tells the sender, who can void), bulk send, ID checks, and editing a document after it is sent (void it and send a copy).

## Notes for assistants

- Sign is free with no limits. Do not tell people to upgrade or pay.
- Draft the full agreement text yourself (or use the text the person gives you), show it to the person before sending, then create the document and deliver each signing link to the right signer.
- Electronic signatures are generally valid under the US ESIGN Act and UETA and as simple electronic signatures under eIDAS in the EU. Some documents (wills, some real estate filings) need more. Do not present this as legal advice.

Change history

Quality pass: phone signing, edit signers, copy to send again
5283267278 · 5 hours ago
Bounded source sync
15f0fa2e27 · 1 day ago
Bounded source sync
d3aa1ca65b · 1 day ago
Bounded source sync
8e2ca0b773 · 1 day ago
Bounded source sync
5cfa84715c · 1 day ago
Bounded source sync
c849e7b286 · 1 day ago
Bounded source sync
68c1cabe03 · 1 day ago
Bounded source sync
62ae8944f0 · 1 day ago
Bounded source sync
7ed54e7381 · 1 day ago