Developer guide / REST API
Homies Paperwork
REST API.
Use one REST API from any HTTP-capable tool harness. Browse Ontario and British Columbia forms, validate explicit facts and generate editable PDFs with your chosen model.
API BASE URL
LIVE APIhttps://homies-paperwork.vercel.app
Append the endpoint path below. Protected endpoints require your Homies Paperwork access key.
Use Claude, Codex, Grok, OpenClaw, Hermes or another harness that can execute HTTP tools.
The API makes no model calls and requires no model-provider key.
Download links expire after 15 minutes. Drafts require human review.
Connect your harness
Import the OpenAPI schema if your harness supports it, or map its operations to normal server-side HTTP calls. Let your model request those tools through the harness. The API contract is the same whichever model you choose.
Use Bearer authentication for protected API operations. Each member needs their own issued Homies Paperwork key so generated documents remain associated with the correct member.
Authorization: Bearer $HOMIES_PAPERWORK_API_KEY
Content-Type: application/json
The variable above represents your stored key; your HTTP client must send its actual value. Keep it in your backend secret store and inject the header there. Do not put the key in a chat prompt, model tool arguments or browser code.
One short starter
“Help me prepare my real estate paperwork.”
The harness gathers the property’s province and the intended document, reuses verified saved facts, and asks for one missing detail at a time. Configure HTTP tools and secrets behind this experience. No native Homies platform adapter or MCP connection is required.
These names identify possible harnesses, not verified product-specific connectors. Your harness must provide a backend HTTP tool runner or support OpenAPI import. Browser JavaScript from other origins is not supported; use your backend to protect the key.
BCFSA publisher terms
Before inspecting BCFSA fields, validating or drafting, call GET /v1/terms. Show the authenticated member the current BCFSA terms, version and acceptance requirement.
The human must read and explicitly accept the terms. A drafting request is not consent. The model must never auto-accept terms to clear an error. Only after the member agrees may the harness send POST /v1/terms/accept with:
{"publisher":"BCFSA","version":"2026-09-05","accepted":true}
Always use the current version returned by the terms endpoint. HTTP 428 with terms_required means this acceptance is needed. It also applies to explicit test drafts. Ontario access continues to follow its own form permissions.
Make your first request
Load your issued key into the HOMIES_PAPERWORK_API_KEY environment variable through your secret manager, then list the available forms and bundles:
HOMIES_PAPERWORK_BASE_URL='https://homies-paperwork.vercel.app'
curl --fail-with-body \
"$HOMIES_PAPERWORK_BASE_URL/v1/forms?jurisdiction=BC" \
--header "Authorization: Bearer $HOMIES_PAPERWORK_API_KEY"
The response is JSON with forms and bundles. Opening a protected endpoint in a browser tab does not supply the Bearer header, so an authentication error is expected there.
REST endpoints
Protected operations below use your Bearer key. Send JSON bodies for validation and drafting. The signed download route has its own access token.
| Method and path | What it returns or does |
|---|---|
GET/v1/forms | Lists held forms and bundles with aliases, revisions, status and jurisdiction. Optional filter: ?jurisdiction=ON or ?jurisdiction=BC. |
GET/v1/forms/{formId}?page=1 | Shows mapped fields and allowed choices for one page. Page numbers start at 1. |
GET/v1/schema?section=property | Returns a deal-schema section. Omit section for the full schema. |
GET/v1/terms | Returns current publisher terms and the member’s acceptance status. |
POST/v1/terms/accept | Records the member’s explicit human acceptance of the current publisher and version. |
POST/v1/validate | Checks supplied facts and returns a validation report. It does not create PDFs. |
POST/v1/drafts | Creates unsigned PDFs from a complete request or an explicitly marked test draft; returns a review report and signed file URLs. |
DELETE/v1/files/{documentId} | Deletes a PDF generated under your member key. Use the ID returned in files. |
GET/v1/files/{documentId}?token=… | Signed download. Fetch the exact returned files[].url. The URL token authorizes this download; no Bearer header is needed. |
Returned offers and counteroffers
Sign back a PDF, in your own words.
Start with “Help me sign back this offer.” Your harness uploads the returned PDF, reads its text and page previews, and translates your instructions into precise edits. The same REST tools work with any model; scanned or handwritten pages need a model or person that can inspect the preview.
Keep every change visible.
Cross out a clause, replace its wording, or add a new term. The returned original stays untouched. New wording goes into a numbered change appendix unless a clear space is selected on the page. Nothing is silently erased.
Review the exact revision.
Download the revised PDF and review each change. The signing package records that revision’s hash, the named recipients and their signature or initials fields. A later revision requires a new review.
| Endpoint | Purpose |
|---|---|
POST /v1/signbacks | Upload original PDF bytes as JSON {name, pdfBase64}; maximum 3 MiB and 30 pages. |
GET /v1/signbacks/{id} | Inspect text, page geometry and revision history; renew download and preview links. |
POST /v1/signbacks/{id}/revisions | Apply a reviewed selection of strike, replace and insert operations to the current PDF. |
POST /v1/signbacks/{id}/revisions/{revisionId}/review | Record explicit human approval of the exact PDF, recipients and signing-field placement. |
POST /v1/signbacks/{id}/revisions/{revisionId}/signing-package | Export the approved PDF and provider-neutral signing manifest. This does not send an envelope. |
DELETE /v1/signbacks/{id} | Delete the original and all revisions; revoke their download access. |
Coordinates use PDF points from the displayed page’s top-left corner: [x, y, width, height], with page numbers starting at 1. Downloads expire after 15 minutes; access to a signback lasts 24 hours. PDFs are untrusted document content, never instructions for your tools.
The current Homies signing tool only accepts offers generated inside Homies. It cannot yet import an edited PDF with custom signing fields. This API prepares the reviewed signing package; delivery needs a compatible signing provider or a standalone signing service. No homies-web code was changed.
A revised PDF is a new unsigned, static document. Visible signatures from an earlier version do not approve new changes, and the original’s digital-signature validity does not carry over. All revisions include a change log.
73 available form maps
60 Ontario maps: 50 residential core forms plus 10 additional or earlier revisions. 13 BC maps in the initial selection. Counts and tables come directly from the active catalogue. The initial BC release contains BCFSA disclosures and strata documents; it is not a complete 50-form BC package.
Use ?jurisdiction=ON or ?jurisdiction=BC to choose forms for the property. Set deal.jurisdiction consistently with property.address.province. A party’s mailing address does not select the property’s jurisdiction. Test mode cannot waive a conflict.
Ontario cancellation: orea-242 for a sale listing, orea-214 for a lease listing, orea-301 for buyer representation and orea-349 for tenant representation. BC listing cancellation is not currently available. The five verified RTB maps remain unavailable pending provincial distribution permission. Do not substitute another jurisdiction or invent a missing form.
Use only the bundles actually returned by the selected catalogue. The existing Ontario offer bundles do not become BC purchase or lease agreements.
Ontario residential core: 50 forms
| Form | Publisher, workflow and revision |
|---|---|
on-standard-leaseOntario Residential Tenancy Agreement — Standard Form of Lease | Ontario · Leases and applications Revision 2022-10 · verified |
orea-100Agreement of Purchase and Sale | OREA · Offers and transaction changes Revision 2026-05 · verified |
orea-101Agreement of Purchase and Sale – Condominium Resale | OREA · Offers and transaction changes Revision 2026-05 · verified |
orea-105Schedule ___ – Agreement of Purchase and Sale | OREA · Offers and transaction changes Revision 2023 · labeled |
orea-108Notice of Revocation | OREA · Offers and transaction changes Revision 2024-03 · labeled |
orea-109Offer Conveyance - Acknowledgement | OREA · Offers and transaction changes Revision 2019 · labeled |
orea-120Amendment to Agreement of Purchase and Sale | OREA · Offers and transaction changes Revision 2020 · verified |
orea-121Notice to Remove Condition(s) – Agreement of Purchase and Sale | OREA · Offers and transaction changes Revision 2019 · labeled |
orea-122Mutual Release – Agreement of Purchase and Sale | OREA · Offers and transaction changes Revision 2020 · labeled |
orea-123Waiver – Agreement of Purchase and Sale | OREA · Offers and transaction changes Revision 2024 · labeled |
orea-124Notice of Fulfillment of Condition(s) | OREA · Offers and transaction changes Revision 2019 · verified |
orea-125Termination of Agreement by Buyer – Agreement of Purchase and Sale | OREA · Offers and transaction changes Revision 2019 · labeled |
orea-126Termination of Agreement by Seller – Agreement of Purchase and Sale | OREA · Offers and transaction changes Revision 2019 · labeled |
orea-127Condition(s) In Offer - Buyer Acknowledgement | OREA · Offers and transaction changes Revision 2019 · labeled |
orea-128Condition(s) In Offer - Seller Acknowledgement | OREA · Offers and transaction changes Revision 2019 · labeled |
orea-150Assignment of Agreement of Purchase and Sale – Condominium | OREA · Offers and transaction changes Revision 2024-02 · labeled |
orea-160Registrant Disclosure of Interest – Acquisition of Property | OREA · Disclosure and compliance Revision 2026 · labeled |
orea-161Registrant Disclosure of Interest – Disposition of Property | OREA · Disclosure and compliance Revision 2026 · labeled |
orea-170Consent to Advertise – Buyer and Seller | OREA · Disclosure and compliance Revision 2026 · labeled |
orea-171Consent to Advertise – Tenant and Landlord | OREA · Disclosure and compliance Revision 2026 · labeled |
orea-200Listing Agreement – Seller Representation Agreement Authority to Offer for Sale | OREA · Listings and listing changes Revision 2026 · verified |
orea-203Schedule ___ – Listing Agreement Authority to Offer for Sale | OREA · Listings and listing changes Revision 2023 · verified |
orea-209Seller Direction to Share Substance of Offers | OREA · Listings and listing changes Revision 2026 · verified |
orea-210Listing Agreement – Landlord Representation Agreement Authority to Offer for Lease | OREA · Listings and listing changes Revision 2026 · verified |
orea-211Schedule ___ – Listing Agreement Authority to Offer for Lease | OREA · Listings and listing changes Revision 2023 · verified |
orea-212Amendment to Listing Agreement – Authority to Offer for Lease Price Change/Extension/Amendment(s) | OREA · Listings and listing changes Revision 2024 · verified |
orea-213Suspension of Listing Agreement – Authority to Offer for Lease | OREA · Listings and listing changes Revision 2020 · verified |
orea-214Cancellation of Listing Agreement – Authority to Offer for Lease | OREA · Listings and listing changes Revision 2020 · verified |
orea-240Amendment to Listing Agreement – Authority to Offer for Sale Price Change/Extension/Amendment(s) | OREA · Listings and listing changes Revision 2024 · verified |
orea-241Suspension of Listing Agreement – Authority to Offer for Sale | OREA · Listings and listing changes Revision 2020 · verified |
orea-242Cancellation of Listing Agreement – Authority to Offer for Sale | OREA · Listings and listing changes Revision 2020 · verified |
orea-271Listing Agreement – Seller Designated Representation Agreement Authority to Offer for Sale | OREA · Listings and listing changes Revision 2026 · verified |
orea-272Listing Agreement – Landlord Designated Representation Agreement Authority to Offer for Lease | OREA · Listings and listing changes Revision 2026 · verified |
orea-300Buyer Representation Agreement – Authority for Purchase or Lease | OREA · Representation Revision 2026 · verified |
orea-301Cancellation of Buyer Representation Agreement | OREA · Representation Revision 2020 · verified |
orea-304Suspension of Buyer Representation Agreement | OREA · Representation Revision 2026 · verified |
orea-305Amendment to Buyer Representation Agreement | OREA · Representation Revision 2024 · verified |
orea-320Confirmation of Co-operation and Representation — Buyer/Seller | OREA · Representation Revision 2026 · verified |
orea-324Confirmation of Co-operation and Representation — Tenant/Landlord | OREA · Representation Revision 2026 · verified |
orea-349Cancellation of Tenant Representation Agreement | OREA · Representation Revision 2020 · verified |
orea-371Buyer Designated Representation Agreement — Authority for Purchase or Lease | OREA · Representation Revision 2026 · verified |
orea-372Tenant Designated Representation Agreement — Authority for Lease or Purchase | OREA · Representation Revision 2026 · verified |
orea-400Agreement to Lease — Residential | OREA · Leases and applications Revision 2026 · verified |
orea-401Schedule ___ – Agreement to Lease - Residential | OREA · Leases and applications Revision 2023 · verified |
orea-410Rental Application – Residential | OREA · Leases and applications Revision 2026 · verified |
orea-630Individual Identification Information Record | OREA · Disclosure and compliance Revision 2025-v1.0 · verified |
orea-801-r2024Offer Summary Document — Agreement of Purchase and Sale | OREA · Offers and transaction changes Revision 2024 · verified |
proptx-290-r2025Freehold Sale MLS Data Information Form | PropTx · MLS data sheets Revision 2025-11 · verified |
reco-info-guideRECO Information Guide | RECO · Disclosure and compliance Revision 2023-12-01 · verified |
trreb-291-flatCondo/Co-op/Co-ownership/Time Share – Sale MLS Data Information Form | TRREB · MLS data sheets Revision 2014-01 · verified |
Additional Ontario maps: 10
| Form | Publisher, workflow and revision |
|---|---|
orea-100-r2024Agreement of Purchase and Sale | OREA · Additional or earlier revision Revision 2024 · verified |
orea-101-r2024Agreement of Purchase and Sale — Condominium Resale | OREA · Additional or earlier revision Revision 2024 · verified |
orea-120-r2014Amendment to Agreement of Purchase and Sale | OREA · Additional or earlier revision Revision 2014 · verified |
orea-151Notice to Remove Condition(s) – Assignment of Agreement of Purchase and Sale | OREA · Additional or earlier revision Revision 2019 · labeled |
orea-152Mutual Release – Assignment of Agreement of Purchase and Sale | OREA · Additional or earlier revision Revision 2020 · labeled |
orea-153Waiver – Assignment of Agreement of Purchase and Sale | OREA · Additional or earlier revision Revision 2024 · labeled |
orea-154Notice of Fulfillment of Condition(s) – Assignment of Agreement of Purchase and Sale | OREA · Additional or earlier revision Revision 2019 · labeled |
orea-155Termination of Agreement by Assignee – Assignment of Agreement of Purchase and Sale | OREA · Additional or earlier revision Revision 2019 · labeled |
orea-156Termination of Agreement by Assignor – Assignment of Agreement of Purchase and Sale | OREA · Additional or earlier revision Revision 2019 · labeled |
trreb-290Residential Freehold Sale MLS Data Information Form | TRREB · Additional or earlier revision Revision 2007-02 · verified |
Initial British Columbia selection: 13 forms
| Form | Publisher, workflow and revision |
|---|---|
bc-bcfsa-authorization-deliver-strata-documentationAuthorization to Licensee to Deliver Strata Documentation | BCFSA · BC strata documents Revision 2021-06 · verified |
bc-bcfsa-authorization-obtain-strata-documentationAuthorization to Licensee to Obtain Strata Documentation | BCFSA · BC strata documents Revision 2021-06 · verified |
bc-bcfsa-disclosure-buyers-right-rescissionDisclosure: Buyer's Right of Rescission | BCFSA · BC rescission and assignment Revision 2023-02 · verified |
bc-bcfsa-disclosure-interest-trade-buying-sellingDisclosure of Interest in Trade (Buying or Selling) | BCFSA · BC agency and disclosure Revision not printed · verified |
bc-bcfsa-disclosure-interest-trade-leasing-rentingDisclosure of Interest in Trade (Leasing or Renting) | BCFSA · BC agency and disclosure Revision not printed · verified |
bc-bcfsa-disclosure-remuneration-trading-servicesDisclosure of Remuneration: Trading Services | BCFSA · BC agency and disclosure Revision 2021-06 · verified |
bc-bcfsa-disclosure-representation-trading-servicesDisclosure of Representation in Trading Services | BCFSA · BC agency and disclosure Revision not printed · verified |
bc-bcfsa-disclosure-residential-tenanciesDisclosure for Residential Tenancies | BCFSA · BC agency and disclosure Revision not printed · verified |
bc-bcfsa-disclosure-risks-unrepresented-partiesDisclosure of Risks to Unrepresented Parties | BCFSA · BC agency and disclosure Revision not printed · verified |
bc-bcfsa-disclosure-sellers-expected-remunerationDisclosure to Sellers of Expected Remuneration (Payment) | BCFSA · BC agency and disclosure Revision not printed · verified |
bc-bcfsa-notice-seller-assignment-termsNotice to Seller Regarding Assignment Terms | BCFSA · BC rescission and assignment Revision 2021-06 · verified |
bc-bcfsa-receipt-strata-documentationReceipt of Strata Corporation Documentation | BCFSA · BC strata documents Revision 2021-06 · verified |
bc-bcfsa-rescission-noticeHome Buyer Rescission Period: Rescission Notice | BCFSA · BC rescission and assignment Revision not printed · verified |
A complete fictional BC example
This example uses the verified bc-bcfsa-rescission-notice fixture. It identifies the property and sellers using fictional facts. It does not calculate a rescission deadline or fee, sign the notice, deliver it or exercise a legal right.
After the member has explicitly accepted the current BCFSA terms, save this JSON as bc-notice.json:
{
"formIds": [
"bc-bcfsa-rescission-notice"
],
"draftMode": "standard",
"deal": {
"kind": "condo_sale",
"jurisdiction": "BC",
"property": {
"address": {
"street": "100 Example Street",
"city": "Victoria",
"province": "BC",
"postal": "V8W 1A1"
}
},
"parties": {
"buyers": [
{
"legalName": "Jordan Sample"
}
],
"sellers": [
{
"legalName": "Avery Example"
},
{
"legalName": "Morgan Example"
}
]
}
}
}
curl --fail-with-body \
"$HOMIES_PAPERWORK_BASE_URL/v1/validate" \
--header "Authorization: Bearer $HOMIES_PAPERWORK_API_KEY" \
--header "Content-Type: application/json" \
--data-binary @bc-notice.json
Read the report. For this standard example, require valid: true and draftable: true, then send the same body to POST /v1/drafts. Show the resulting review requirements and download the PDFs from files[].url.
Test with unknown facts left blank
When the user explicitly asks for an API test, send "draftMode": "test". This produces the actual selected form with TEST DRAFT - NOT FOR SIGNATURE on every page. Only missing required facts are permitted. Invalid inputs, conflicting choices, overflowing text and signing overrides remain blocked.
{
"formIds": ["orea-242"],
"draftMode": "test",
"deal": {
"kind": "freehold_sale",
"jurisdiction": "ON",
"property": {"mls": "DEMO123"},
"agreementChange": {"effectiveDate": "2026-09-05"}
}
}
Send that body to POST /v1/validate, then POST /v1/drafts if draftable: true. An incomplete test correctly reports valid: false, draftMode: "test" and its missing_required issues. Standard mode continues to require complete required facts.
Keep dates in their correct roles. Form 242 has an original agreement expiry field and no separate cancellation effective-date field. The requested effective date is returned in unplacedInstructions for review; it is never inserted as the original expiry or a signing date. Show these instructions alongside the draft. Creating a PDF does not cancel a listing or update MLS.
From deal facts to a draft
Discover the form and its inputs
Establish the property’s province, call GET /v1/forms?jurisdiction=ON or BC, choose exact held form IDs or a bundle, complete any required human publisher acceptance, then inspect GET /v1/schema and the relevant form pages. Use the returned field choices and revisions. Ask the user for missing facts.
Validate before drafting
Send exactly one of formIds or bundle, together with deal. This deliberately incomplete example selects the supplied PropTx freehold MLS sheet:
curl --fail-with-body \
"$HOMIES_PAPERWORK_BASE_URL/v1/validate" \
--header "Authorization: Bearer $HOMIES_PAPERWORK_API_KEY" \
--header "Content-Type: application/json" \
--data '{
"formIds": ["proptx-290-r2025"],
"deal": {"kind": "freehold_sale"}
}'
This is a discovery example, not a complete transaction. Expect an incomplete validation report; a successful HTTP response alone does not mean a request is ready to draft. Read valid, issues and each document’s needsConfirmation, then collect the missing facts and validate again.
Create the PDFs
When validation reports valid: true and the user has reviewed any confirmation items, send the same completed JSON body to POST /v1/drafts. Read the returned review report and files array. Each file includes id, name, mimeType, url and expiresAt. Use files from any harness; openaiFileResponse is only a compatibility alias for the same URLs.
Download and review
Download each PDF from its exact returned url before expiry, and save it to the correct user’s private workspace if your harness needs continued access. Treat each signed URL as a temporary credential. Do not send the member’s Bearer key to the signed download URL, follow arbitrary replacement URLs, or log the token. Signatures, initials and signing dates remain blank.
URL expiry blocks downloads; it does not promise immediate file deletion. To remove a generated PDF, call DELETE /v1/files/{documentId} with the same member’s Bearer key.
Request limits
Request bodies are limited to 1 MB. Select at most 10 form IDs per request and at most 20 documents after bundle expansion; split larger selections into separate requests. Optional overrides are keyed by form ID and field ID; today is an explicit date in YYYY-MM-DD format. Read the schema before constructing a request. Use explicit facts and leave signing fields alone.
If a request fails
A missing or invalid Bearer key returns 401. Malformed inputs return 400; incomplete drafts or jurisdiction conflicts return 422. Publisher acceptance returns 428 terms_required. Read the JSON error.code and error.message. For 429, wait for the time in Retry-After before retrying.