{"openapi":"3.1.0","info":{"title":"Verdant Applicant API","description":"Discover jurisdictions and application types, upload directly to Storage, submit full JSON packages and track your permits. Start at /docs/api.","version":"1.0.0"},"servers":[{"url":"/api","description":"Website API"}],"paths":{"/v1/jurisdictions/{jurisdiction_slug}/application-types":{"get":{"tags":["Applicant API v1"],"summary":"List Application Types","description":"Discover active application types. This catalog does not require an API token.","operationId":"listApplicationTypes","parameters":[{"name":"jurisdiction_slug","in":"path","required":true,"schema":{"type":"string","title":"Jurisdiction Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response Listapplicationtypes"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/jurisdictions/{jurisdiction_slug}/submission-schema":{"get":{"tags":["Applicant API v1"],"summary":"Get Submission Schema","description":"Get the full composed package schema, file slots, constraints and example.\n\nRepeat application_type to compose several types. An existing correction\nrequires a bearer API token with permits:read and current applicant ownership.","operationId":"getSubmissionSchema","security":[{"ApplicantApiToken":[]},{},{"ApplicantApiToken":[]}],"parameters":[{"name":"jurisdiction_slug","in":"path","required":true,"schema":{"type":"string","title":"Jurisdiction Slug"}},{"name":"application_type","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"},"maxItems":100},{"type":"null"}],"title":"Application Type"}},{"name":"correction_request_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Correction Request Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PackageSchema"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/jurisdictions/{jurisdiction_slug}/uploads":{"post":{"tags":["Applicant API v1"],"summary":"Create Upload","description":"Reserve a file and obtain a temporary signed TUS grant for direct Storage transfer.","operationId":"createUpload","security":[{"ApplicantApiToken":[]}],"parameters":[{"name":"jurisdiction_slug","in":"path","required":true,"schema":{"type":"string","title":"Jurisdiction Slug"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadGrantResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/jurisdictions/{jurisdiction_slug}/uploads/{upload_id}/complete":{"post":{"tags":["Applicant API v1"],"summary":"Complete Upload","description":"Queue content verification after a transfer. Poll the upload until ready.","operationId":"completeUpload","security":[{"ApplicantApiToken":[]}],"parameters":[{"name":"upload_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Upload Id"}},{"name":"jurisdiction_slug","in":"path","required":true,"schema":{"type":"string","title":"Jurisdiction Slug"}}],"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/jurisdictions/{jurisdiction_slug}/uploads/{upload_id}":{"get":{"tags":["Applicant API v1"],"summary":"Get Upload","description":"Read upload verification status; file_id is usable only when ready.","operationId":"getUpload","security":[{"ApplicantApiToken":[]}],"parameters":[{"name":"upload_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Upload Id"}},{"name":"jurisdiction_slug","in":"path","required":true,"schema":{"type":"string","title":"Jurisdiction Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/jurisdictions/{jurisdiction_slug}/submissions":{"post":{"tags":["Applicant API v1"],"summary":"Submit Application","description":"Submit a complete JSON package or correction. validate_only performs a preflight.\n\nReuse the same Idempotency-Key only for identical JSON retries. Files are\nverified file IDs from the upload workflow, never URLs or binary request bodies.\nA receipt with accepted_at=null is not yet a filed application.","operationId":"submitApplication","security":[{"ApplicantApiToken":[]}],"parameters":[{"name":"jurisdiction_slug","in":"path","required":true,"schema":{"type":"string","title":"Jurisdiction Slug"}},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"type":"string","minLength":1,"maxLength":200,"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmissionPackage"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/SubmissionReceipt"},{"type":"object","additionalProperties":true}],"title":"Response Submitapplication"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/jurisdictions/{jurisdiction_slug}/submissions/{submission_id}":{"get":{"tags":["Applicant API v1"],"summary":"Get Submission","description":"Track approval, durable acceptance and resulting permit IDs.","operationId":"getSubmission","security":[{"ApplicantApiToken":[]}],"parameters":[{"name":"submission_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Submission Id"}},{"name":"jurisdiction_slug","in":"path","required":true,"schema":{"type":"string","title":"Jurisdiction Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmissionReceipt"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/jurisdictions/{jurisdiction_slug}/permits/{permit_id}":{"get":{"tags":["Applicant API v1"],"summary":"Get Permit","description":"Read applicant-visible permit status and the current correction request.","operationId":"getPermit","security":[{"ApplicantApiToken":[]}],"parameters":[{"name":"permit_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Permit Id"}},{"name":"jurisdiction_slug","in":"path","required":true,"schema":{"type":"string","title":"Jurisdiction Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Getpermit"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/jurisdictions":{"get":{"tags":["Applicant API v1"],"summary":"List Jurisdictions","description":"Discover active tenant jurisdictions with the applicant API enabled. No token required.","operationId":"listJurisdictions","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/PublicApiJurisdiction"},"type":"array","title":"Response Listjurisdictions"}}}}}}}},"components":{"schemas":{"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"PackageAttestation":{"properties":{"attestation":{"type":"string","enum":["confirmed","disputed"],"title":"Attestation"},"dispute_reason":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Dispute Reason"}},"additionalProperties":false,"type":"object","required":["attestation"],"title":"PackageAttestation"},"PackageFileSlot":{"properties":{"id":{"type":"string","title":"Id"},"kind":{"type":"string","enum":["field","signed_form"],"title":"Kind"},"field_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Field Key"},"form_slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Form Slug"},"prompt":{"type":"string","title":"Prompt"},"required":{"type":"boolean","title":"Required"},"accepted_media_types":{"items":{"type":"string"},"type":"array","title":"Accepted Media Types"},"max_file_bytes":{"type":"integer","title":"Max File Bytes"},"max_files":{"type":"integer","title":"Max Files"},"conditions":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Conditions"},"source_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Url"}},"type":"object","required":["id","kind","prompt","required","accepted_media_types","max_file_bytes","max_files"],"title":"PackageFileSlot"},"PackageOwnerSignoff":{"properties":{"method":{"type":"string","enum":["email_owner","applicant_self_attestation"],"title":"Method"},"owner_name":{"anyOf":[{"type":"string","maxLength":300,"minLength":1},{"type":"null"}],"title":"Owner Name"},"owner_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner Email"}},"additionalProperties":false,"type":"object","required":["method"],"title":"PackageOwnerSignoff"},"PackageSchema":{"properties":{"schema_revision":{"type":"string","title":"Schema Revision"},"application_types":{"items":{"type":"string"},"type":"array","title":"Application Types"},"package_schema":{"additionalProperties":true,"type":"object","title":"Package Schema"},"form_definitions":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Form Definitions"},"file_slots":{"items":{"$ref":"#/components/schemas/PackageFileSlot"},"type":"array","title":"File Slots"},"required_approvals":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Required Approvals"},"domain_constraints":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Domain Constraints"},"example_package":{"additionalProperties":true,"type":"object","title":"Example Package"},"baseline_package":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Baseline Package"},"correction_scope":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Correction Scope"},"site_facts":{"additionalProperties":{"additionalProperties":true,"type":"object"},"type":"object","title":"Site Facts"}},"type":"object","required":["schema_revision","application_types","package_schema","form_definitions","file_slots","required_approvals","domain_constraints","example_package"],"title":"PackageSchema"},"PublicApiJurisdiction":{"properties":{"name":{"type":"string","title":"Name"},"state":{"type":"string","title":"State"},"slug":{"type":"string","title":"Slug"},"application_types_url":{"type":"string","title":"Application Types Url"}},"type":"object","required":["name","state","slug","application_types_url"],"title":"PublicApiJurisdiction"},"SubmissionPackage":{"properties":{"schema_revision":{"type":"string","maxLength":200,"minLength":1,"title":"Schema Revision"},"application_types":{"anyOf":[{"items":{"type":"string"},"type":"array","maxItems":100,"minItems":1},{"type":"null"}],"title":"Application Types"},"correction_request_id":{"anyOf":[{"type":"string","maxLength":200,"minLength":1},{"type":"null"}],"title":"Correction Request Id"},"answers":{"additionalProperties":true,"type":"object","title":"Answers"},"files":{"additionalProperties":{"items":{"type":"string","format":"uuid"},"type":"array"},"type":"object","title":"Files","description":"At most 16 distinct file IDs across all slots, including retained files."},"site_fact_attestations":{"additionalProperties":{"$ref":"#/components/schemas/PackageAttestation"},"type":"object","title":"Site Fact Attestations"},"owner_signoff":{"anyOf":[{"$ref":"#/components/schemas/PackageOwnerSignoff"},{"type":"null"}]},"validate_only":{"type":"boolean","title":"Validate Only","default":false},"replaces_pending_submission_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Replaces Pending Submission Id"}},"additionalProperties":false,"type":"object","required":["schema_revision","answers"],"title":"SubmissionPackage"},"SubmissionReceipt":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"status":{"type":"string","enum":["preparing","awaiting_approval","processing","submitted","needs_action","superseded","expired"],"title":"Status"},"accepted_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Accepted At"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"project_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Project Id"},"permits":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Permits"},"required_actions":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Required Actions"},"error_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Code"},"links":{"additionalProperties":{"type":"string"},"type":"object","title":"Links"}},"type":"object","required":["id","status","accepted_at","expires_at","links"],"title":"SubmissionReceipt"},"TusUploadGrant":{"properties":{"protocol":{"type":"string","const":"tus","title":"Protocol","default":"tus"},"endpoint":{"type":"string","title":"Endpoint"},"headers":{"additionalProperties":{"type":"string"},"type":"object","title":"Headers"},"metadata":{"additionalProperties":{"type":"string"},"type":"object","title":"Metadata"},"chunk_size":{"type":"integer","title":"Chunk Size","default":6291456},"expires_at":{"type":"string","format":"date-time","title":"Expires At"}},"type":"object","required":["endpoint","headers","metadata","expires_at"],"title":"TusUploadGrant"},"UploadCreateRequest":{"properties":{"schema_revision":{"type":"string","maxLength":200,"minLength":1,"title":"Schema Revision"},"application_types":{"items":{"type":"string"},"type":"array","maxItems":100,"minItems":1,"title":"Application Types"},"correction_request_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Correction Request Id"},"slot_id":{"type":"string","maxLength":250,"minLength":1,"title":"Slot Id"},"filename":{"type":"string","maxLength":250,"minLength":1,"title":"Filename"},"content_type":{"type":"string","maxLength":150,"minLength":1,"title":"Content Type"},"byte_size":{"type":"integer","maximum":1073741824.0,"exclusiveMinimum":0.0,"title":"Byte Size"}},"additionalProperties":false,"type":"object","required":["schema_revision","application_types","slot_id","filename","content_type","byte_size"],"title":"UploadCreateRequest"},"UploadGrantResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"status":{"type":"string","enum":["pending","verifying","ready","claimed","expired","rejected"],"title":"Status"},"file_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"File Id"},"slot_id":{"type":"string","title":"Slot Id"},"filename":{"type":"string","title":"Filename"},"content_type":{"type":"string","title":"Content Type"},"byte_size":{"type":"integer","title":"Byte Size"},"sha256":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sha256"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"error_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Code"},"upload":{"$ref":"#/components/schemas/TusUploadGrant"},"limits":{"additionalProperties":{"type":"integer"},"type":"object","title":"Limits"}},"type":"object","required":["id","status","slot_id","filename","content_type","byte_size","expires_at","upload","limits"],"title":"UploadGrantResponse"},"UploadResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"status":{"type":"string","enum":["pending","verifying","ready","claimed","expired","rejected"],"title":"Status"},"file_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"File Id"},"slot_id":{"type":"string","title":"Slot Id"},"filename":{"type":"string","title":"Filename"},"content_type":{"type":"string","title":"Content Type"},"byte_size":{"type":"integer","title":"Byte Size"},"sha256":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sha256"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"error_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Code"}},"type":"object","required":["id","status","slot_id","filename","content_type","byte_size","expires_at"],"title":"UploadResponse"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}},"securitySchemes":{"ApplicantApiToken":{"type":"http","scheme":"bearer"}}}}