Compliance Evidence API · v1

Feed the city the compliance data it needs — keep your product.

Your platform already collects inspections, certificates, and test reports. Send them to GuestMate and they land as compliance evidence in the city's system of record — mapped to the right obligation, in the right jurisdiction, automatically.

You keep your product

GuestMate is the compliance layer the building subscribes to underneath — not a replacement for your software. Your customer keeps using you; you just route their evidence to the city.

One shape, every city

Publish against a stable evidence type once. We map it to each city's obligations — you don't track local codes.

Signed & auditable

Every submission carries your identity and a timestamp. The city sees exactly who attested what, and when.

How it works

You send a fact. We turn it into compliance.

You bind to an evidence type — a stable data shape. What that evidence satisfies under a given city's code lives inside GuestMate. You never touch the compliance engine.

1

Pick an evidence type

Choose from the catalog — e.g. sprinkler_inspection. Each has a published schema.

2

POST the data

Send the fields for a property you're authorized to submit for. JSON in, receipt out.

GuestMate
3

We map it

Our engine resolves which obligation(s) this satisfies for that property's jurisdiction — privately.

GuestMate
4

The city sees it

The obligation turns current in the city's dashboard, with your attestation on the record.

Evidence catalog

Every evidence type you can submit

The complete, authoritative reference. Each type below lists its full field schema — key, data type, and whether it's required. Bind to the ones your platform already produces.

This list is generated from GuestMate's live evidence-type registry, so it stays current as types are added. Missing one you produce? Tell us and we'll add it.

Submitting the document

Send the actual file — PDF, JPG, or PNG

Every submission is a document: the signed inspection report, the certificate, the COI. You send the structured fields and the file together in one request — exactly what a person does in the GuestMate dashboard, just over the API.

multipart/form-data
# One request carries the fields AND the file.
# Send as multipart/form-data, not JSON.
curl https://guestmate.us/developers/api/v1/evidence \
  -H "Authorization: Bearer gm_sandbox_…" \
  -F 'community_ref=DMO01' \
  -F 'evidence_type=fire_extinguisher_service' \
  -F 'property_ref=OCEANBREEZE-UNIT-208' \
  -F 'values={"service_date":"2026-03-01",
           "next_service_due":"2027-03-01",
           "overall_result":"pass"};type=application/json \
  -F 'file=@/path/to/service-report.pdf'

# The structured values go in the "values" part.
# The document goes in the "file" part.

One document per submission. Each evidence record is one file plus its fields. To submit several reports, make several requests. Re-uploading the identical file is de-duplicated automatically (files are content-addressed by SHA-256), so retries are safe.

Accepted formatsPDFJPGPNGHEIC
Detected bycontent sniffing, not file extension
Max size25 MB per file
Transportmultipart/form-data
File fieldfile
Fields fieldvalues (JSON)
IntegritySHA-256 hash, stored & deduped
Retainedfilename, MIME type, size, hash

Wrong type or over the limit? You get a specific error — unsupported_file_type (with the detected MIME) or file_too_large_25mb — never a silent failure.

Live validator

Check a payload before you write a line of integration code

Paste or edit an evidence payload. We validate its shape against the published schema — the same check the API runs on ingest. Runs entirely in your browser; nothing is sent anywhere.

Request body
Validation result
Paste a payload and press Validate to see field-by-field results.

This checks the values part only. In a real request the document (PDF/JPG/PNG) rides alongside as a multipart file — see Submitting the document. Whether valid evidence satisfies an obligation is decided by the compliance engine and returned by the live API — not exposed here.

Reference integration

End to end: a fire extinguisher service report

The most common submission. Here's the exact schema and a request that lands as evidence on a Delray Beach property — with no knowledge of Delray's fire code required on your side.

fire_extinguisher_service — fields

FieldTypeReq

Request & response

POST /developers/api/v1/evidence · multipart
# file part → the service report PDF
file          = @service-report.pdf
community_ref = DMO01
evidence_type = fire_extinguisher_service
property_ref  = OCEANBREEZE-UNIT-208
# values part → the structured fields (JSON)
values = {
  "service_date": "2026-03-01",
  "next_service_due": "2027-03-01",
  "contractor_name": "Acme Fire",
  "contractor_certification_number": "FE-12345",
  "extinguisher_count_total": 12,
  "extinguisher_count_passed": 12,
  "extinguisher_count_failed": 0,
  "overall_result": "pass"
}
202 Accepted
{
  "status": "accepted",
  "submission_id": "ev_9Fk2…",
  "obligation_satisfied": true,
  "valid_until": "2027-03-01",
  "attested_by": "Acme Fire (vendor)",
  "file": {
    "mime_type": "application/pdf",
    "size_bytes": 184320,
    "sha256": "7d9f…c2a1"
  }
}
Get started

Create a sandbox key

Get a working sandbox key instantly — no review, no waiting. It submits against demo properties with zero risk to real data. Production keys are issued by our team once you're ready to go live.

Get your sandbox key

Instant and free. The key is issued right here and works immediately against the sandbox.

Your Sandbox API key
gm_sandbox_…
⚠ Copy this now — it's shown only once. This sandbox key works against demo properties only.

What a key gets you

  • Sandbox city. Submit against demo properties and watch obligations resolve — the full round trip.
  • Scoped access. A key can only submit for the properties and cities you're authorized for.
  • Generous limits. We want your data — quotas exist for safety, not metering. You're never billed for submitting; the building's compliance subscription covers the connection.
  • Provenance built in. Every submission is stamped with your identity for the city's audit trail.
Questions

The parts vendors ask about first

Do you take over my customer?

No. The building subscribes to GuestMate for compliance — that subscription is what enables this API connection — but GuestMate doesn't replace your product or run your customer relationship. You keep collecting data and serving the building the way you do today; we're the compliance layer underneath.

Do I need to understand each city's regulations?

No — that's the point. You bind to an evidence type (a data shape). GuestMate decides what that evidence satisfies under each jurisdiction's code. When a city changes its rules, nothing changes on your side.

What does the API cost me as a vendor?

Nothing. You don't pay GuestMate — the building does, through its GuestMate compliance subscription, and that's what enables the connection you feed. We don't meter your submissions: the more evidence flows in, the more complete the city's compliance picture, which is what the subscription actually pays for.

How do you decide if my data is valid?

Two layers. Shape validation (public — you can run it yourself, above, and in the sandbox) checks the payload against the schema. Obligation validation (private, in our engine) decides what a valid submission satisfies. You get a clear accepted/rejected result plus the outcome, never the internal rules.

How do I attach the actual document?

Send it in the same request. Evidence submissions are multipart/form-data: the structured fields go in a values part and the document goes in a file part. Accepted formats are PDF, JPG, PNG, and HEIC, up to 25 MB, detected by content (not file extension). Every file is hashed (SHA-256), stored, and deduplicated. See Submitting the document for the full spec.

What happens if I submit bad or stale data?

It's recorded with your identity and can be marked disputed or superseded. You're the attester; GuestMate is the ledger. The city's audit trail shows exactly what was submitted, by whom, and when.