Skip to main content
From a lead or a case, one call makes the agreement from a template and sends it for e-signature. Your system can follow it to the end: who opened it, who signed, and the signed PDF. Webhooks tell you when each step happens. All calls go to https://api.vflo.app/api/public with your X-API-Key header.

Before you start

  1. Create the lead (or use a case): Create a lead.
  2. Open the template (Settings > Templates > Agreements), then its Settings tab, and open API for the template ID and a request with the template’s own field names.
  3. For the API to send a template, it needs sign areas. A Word template with sign-here placeholders (client_signature, client_sign_date, rcic_signature and so on) has them. GET /template/list says sendable: true for those that do.

Make it and send it

  • The client signs first; the firm signs after, in VisaFlo. Until then the status is awaiting_countersign.
  • values sets the template’s variables by exact name. Whatever you leave out fills from the record, the lead’s customFields of the same name, or the template’s default. Money and dates are written the way your workspace writes them.
  • signers is optional: without it, the record’s own contact signs. For more people, send "signers": [{ "role": "Client", "name": "Jane Doe", "email": "jane@example.com" }, { "role": "Spouse", "email": "sam@example.com" }].
  • subject and message change the invitation email.
  • metadata is your own reference. It comes back on every read and in every webhook event.
  • The same call within 24 hours returns the first agreement with "duplicate": true and sends nothing twice, so retries are safe.
  • Everything is checked before anything is sent. If it can’t go, you get a 422 with a code (missing_fields, no_sign_areas, no_signer_email and so on) and the list of problems in data.issues.
Sending renders the PDF, so it takes a few seconds.

Follow it

status is draft, sent, awaiting_countersign or completed. Each signer is pending, viewed or signed, with viewedAt and signedAt. documents[].downloadUrl and certificateUrl need your API key. Rather than asking again and again, set up a webhook.

Download the signed PDF

version=original (the default) is the document as sent. version=signed is the copy everyone has signed so far, and answers 409 not_signed until someone has.

Zapier and Make

  • Send "send": "true" as text if your tool only sends text.
  • Map fields to values__consultation_fee, signers__Spouse__email and metadata__booking_id when the tool can’t build nested JSON.
  • Numbers and booleans can be sent as text.

Limits

  • No cancel or delete through the API yet. Do that in VisaFlo.
  • 50 values keys, 20 metadata keys, 6 signers.