{"openapi":"3.1.0","info":{"title":"Apartment Fax","description":"The supported public integration routes use a major version in the URL, currently `/v1`. Backward-compatible additions stay within that version; breaking changes use a new `/vN` prefix. Before Apartment Fax retires a version, it will publish at least 180 days of notice in the OpenAPI description, developer page, and llms.txt. Deprecated version responses will include `Deprecation` and `Sunset` headers. No v1 retirement is scheduled. Quota-managed REST responses include RateLimit-Policy, RateLimit, RateLimit-Limit, RateLimit-Remaining, and RateLimit-Reset. A 429 response also includes Retry-After.","version":"1.0.0"},"paths":{"/v1/addresses/resolve":{"post":{"tags":["Public API"],"summary":"Resolve Guest Address","operationId":"resolve_guest_address_v1_addresses_resolve_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string","minLength":1,"maxLength":255},{"type":"null"}],"description":"A caller-generated key that makes a retried write return the original resource instead of creating or charging for a duplicate.","title":"Idempotency-Key"},"description":"A caller-generated key that makes a retried write return the original resource instead of creating or charging for a duplicate."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddressResolveRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Resolve Guest Address V1 Addresses Resolve Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/guest/resolve":{"post":{"summary":"Resolve Guest Address","operationId":"resolve_guest_address_api_guest_resolve_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string","minLength":1,"maxLength":255},{"type":"null"}],"description":"A caller-generated key that makes a retried write return the original resource instead of creating or charging for a duplicate.","title":"Idempotency-Key"},"description":"A caller-generated key that makes a retried write return the original resource instead of creating or charging for a duplicate."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddressResolveRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Resolve Guest Address Api Guest Resolve Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/guest/checkout":{"post":{"summary":"Create Guest Checkout","operationId":"create_guest_checkout_api_guest_checkout_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string","minLength":1,"maxLength":255},{"type":"null"}],"description":"A caller-generated key that makes a retried write return the original resource instead of creating or charging for a duplicate.","title":"Idempotency-Key"},"description":"A caller-generated key that makes a retried write return the original resource instead of creating or charging for a duplicate."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GuestCheckoutRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Create Guest Checkout Api Guest Checkout Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/guest/checkout/embedded":{"post":{"summary":"Create Guest Embedded Checkout","operationId":"create_guest_embedded_checkout_api_guest_checkout_embedded_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string","minLength":1,"maxLength":255},{"type":"null"}],"description":"A caller-generated key that makes a retried write return the original resource instead of creating or charging for a duplicate.","title":"Idempotency-Key"},"description":"A caller-generated key that makes a retried write return the original resource instead of creating or charging for a duplicate."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GuestCheckoutRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Create Guest Embedded Checkout Api Guest Checkout Embedded Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/guest/order/{order_id}/email":{"post":{"summary":"Capture Guest Email","operationId":"capture_guest_email_api_guest_order__order_id__email_post","parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string","minLength":1,"maxLength":255},{"type":"null"}],"description":"A caller-generated key that makes a retried write return the original resource instead of creating or charging for a duplicate.","title":"Idempotency-Key"},"description":"A caller-generated key that makes a retried write return the original resource instead of creating or charging for a duplicate."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GuestEmailCaptureRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"boolean"},"title":"Response Capture Guest Email Api Guest Order  Order Id  Email Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/guest/order/{order_id}":{"get":{"summary":"Get Guest Order","operationId":"get_guest_order_api_guest_order__order_id__get","parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}},{"name":"token","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Guest Order Api Guest Order  Order Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/guest/order/{order_id}/pdf":{"get":{"summary":"Get Guest Order Pdf","operationId":"get_guest_order_pdf_api_guest_order__order_id__pdf_get","parameters":[{"name":"order_id","in":"path","required":true,"schema":{"type":"string","title":"Order Id"}},{"name":"token","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token"}},{"name":"download","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Download"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/report":{"post":{"summary":"Create Report","description":"Start a compile. Costs the caller one report.\n\nThis route took no ``authorization`` at all until 2026-08-08 and never asked who was\ncalling, so anyone could compile without limit at our cost and attribute the result to\nany account. Order matters below: everything that can turn a request away for *our*\nreasons happens before the debit, so a rejected request never costs a credit.","operationId":"create_report_api_report_post","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string","minLength":1,"maxLength":255},{"type":"null"}],"description":"A caller-generated key that makes a retried write return the original resource instead of creating or charging for a duplicate.","title":"Idempotency-Key"},"description":"A caller-generated key that makes a retried write return the original resource instead of creating or charging for a duplicate."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportRequest"}}}},"responses":{"202":{"description":"Report compile accepted. Poll the URL in the Location header or statusUrl until status is done or error.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AcceptedReportJob"}}},"headers":{"Location":{"description":"Relative URL of the report job resource to poll.","schema":{"type":"string","example":"/api/report/{job_id}"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/balance":{"get":{"summary":"Get Balance","description":"Reports this account has left, for the header to show.","operationId":"get_balance_api_balance_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Balance Api Balance Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/report/{job_id}":{"get":{"summary":"Get Report","operationId":"get_report_api_report__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Report Api Report  Job Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/report/{job_id}/pdf":{"get":{"summary":"Get Report Pdf","operationId":"get_report_pdf_api_report__job_id__pdf_get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}},{"name":"download","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Download"}},{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/reports":{"get":{"summary":"List Reports","description":"This account's reports. Unlike the per-id routes there is no unowned case to fall\nback on, so an unverified caller gets nothing rather than everything.\n\nThe dashboard draws itself entirely from this, so a row has to carry everything a row\nshows. It used to fetch each report's whole body to find the score; now the listing\nbrings it, and the live job table is overlaid on top for the two things a stored row\ncannot know: that a compile is still running rather than interrupted, and the result of\none that finished moments ago and has not been read back yet.","operationId":"list_reports_api_reports_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Reports Api Reports Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/previews/batch":{"post":{"tags":["Public API"],"summary":"Get multiple public previews","description":"Accepts an array of 1 to 25 public preview lookup operations and returns one result per operation in request order. Each result is the same free, read-only preview available from GET /v1/previews/{slug}; this endpoint cannot access paid reports or customer data.","operationId":"preview_batch_v1_previews_batch_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string","minLength":1,"maxLength":255},{"type":"null"}],"description":"A caller-generated key that makes a retried write return the original resource instead of creating or charging for a duplicate.","title":"Idempotency-Key"},"description":"A caller-generated key that makes a retried write return the original resource instead of creating or charging for a duplicate."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PreviewBatchOperation"},"minItems":1,"maxItems":25,"description":"Public preview lookup operations to execute in one request.","title":"Operations"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PreviewBatchResult"},"title":"Response Preview Batch V1 Previews Batch Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/previews/{slug}":{"get":{"tags":["Public API"],"summary":"Preview Page","description":"The free half of a report, for the generated page at ``/{slug}``.\n\nUnlike ``POST /api/report`` this is synchronous. A preview is not a job: it is a\ndocument a crawler asks for and expects a body from, and returning 202 plus a poll\nURL to Googlebot would leave every generated page indexing as an empty shell.","operationId":"preview_page_v1_previews__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Preview Page V1 Previews  Slug  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/preview/{slug}":{"get":{"summary":"Preview Page","description":"The free half of a report, for the generated page at ``/{slug}``.\n\nUnlike ``POST /api/report`` this is synchronous. A preview is not a job: it is a\ndocument a crawler asks for and expects a body from, and returning 202 plus a poll\nURL to Googlebot would leave every generated page indexing as an empty shell.","operationId":"preview_page_api_preview__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Preview Page Api Preview  Slug  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/seo/{slug}":{"get":{"summary":"Seo Preview Page","description":"The complete initial HTML for the public ``/{slug}`` address page.\n\nThis route is intentionally corpus-only. A random or stale URL must return a real 404,\nnot trigger a 66-request report compile and eventually become a client-side soft 404.","operationId":"seo_preview_page_seo__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/seo-path/{borough_slug}/{part2}/{part3}/{part4}":{"get":{"summary":"Seo Hierarchical Preview Page","description":"Serve borough/neighborhood/address/apartment paths from the corpus.","operationId":"seo_hierarchical_preview_page_seo_path__borough_slug___part2___part3___part4__get","parameters":[{"name":"borough_slug","in":"path","required":true,"schema":{"type":"string","title":"Borough Slug"}},{"name":"part2","in":"path","required":true,"schema":{"type":"string","title":"Part2"}},{"name":"part3","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Part3"}},{"name":"part4","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Part4"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/seo-path/{borough_slug}/{part2}/{part3}":{"get":{"summary":"Seo Hierarchical Preview Page","description":"Serve borough/neighborhood/address/apartment paths from the corpus.","operationId":"seo_hierarchical_preview_page_seo_path__borough_slug___part2___part3__get","parameters":[{"name":"borough_slug","in":"path","required":true,"schema":{"type":"string","title":"Borough Slug"}},{"name":"part2","in":"path","required":true,"schema":{"type":"string","title":"Part2"}},{"name":"part3","in":"path","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Part3"}},{"name":"part4","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Part4"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/seo-path/{borough_slug}/{part2}":{"get":{"summary":"Seo Hierarchical Preview Page","description":"Serve borough/neighborhood/address/apartment paths from the corpus.","operationId":"seo_hierarchical_preview_page_seo_path__borough_slug___part2__get","parameters":[{"name":"borough_slug","in":"path","required":true,"schema":{"type":"string","title":"Borough Slug"}},{"name":"part2","in":"path","required":true,"schema":{"type":"string","title":"Part2"}},{"name":"part3","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Part3"}},{"name":"part4","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Part4"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/seo-directory":{"get":{"summary":"Seo Directory","operationId":"seo_directory_seo_directory_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/seo-directory/{borough_slug}":{"get":{"summary":"Seo Borough Directory","operationId":"seo_borough_directory_seo_directory__borough_slug__get","parameters":[{"name":"borough_slug","in":"path","required":true,"schema":{"type":"string","title":"Borough Slug"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Page"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/sitemap.xml":{"get":{"summary":"Sitemap Index","description":"The staged launch index: permanent pages plus 25,000 high-value addresses.","operationId":"sitemap_index_sitemap_xml_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/sitemaps/foundation.xml":{"get":{"summary":"Foundation Sitemap","description":"Homepage, focused guides and the public borough directory hierarchy.","operationId":"foundation_sitemap_sitemaps_foundation_xml_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/sitemaps/elite-search.xml":{"get":{"summary":"Elite Landing Sitemap","description":"The four focused lookup pages, independent of the generated corpus.","operationId":"elite_landing_sitemap_sitemaps_elite_search_xml_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/sitemaps/core-search.xml":{"get":{"summary":"Core Landing Sitemap","description":"The three 75+ Core-tier lookup pages, independent of the generated corpus.","operationId":"core_landing_sitemap_sitemaps_core_search_xml_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/sitemaps/second-wave-search.xml":{"get":{"summary":"Second Wave Landing Sitemap","description":"The eight additional lookup pages backed by current report sources.","operationId":"second_wave_landing_sitemap_sitemaps_second_wave_search_xml_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/sitemaps/address-launch.xml":{"get":{"summary":"Address Launch Sitemap","description":"The deterministic 25,000-URL cohort used for the first search submission.","operationId":"address_launch_sitemap_sitemaps_address_launch_xml_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/sitemaps/{batch_id}/{tier}-{shard}.xml":{"get":{"summary":"Sitemap Shard","description":"One immutable weekly-batch shard.","operationId":"sitemap_shard_sitemaps__batch_id___tier___shard__xml_get","parameters":[{"name":"batch_id","in":"path","required":true,"schema":{"type":"integer","title":"Batch Id"}},{"name":"tier","in":"path","required":true,"schema":{"type":"string","title":"Tier"}},{"name":"shard","in":"path","required":true,"schema":{"type":"integer","title":"Shard"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/robots.txt":{"get":{"summary":"Robots","operationId":"robots_robots_txt_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/health":{"get":{"tags":["Public API"],"summary":"Health","operationId":"health_v1_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Health V1 Health Get"}}}}}}},"/api/health":{"get":{"summary":"Health","operationId":"health_api_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Health Api Health Get"}}}}}}},"/api/stripe/webhook":{"post":{"summary":"Stripe Webhook","description":"Where a payment turns into a balance.\n\nThe raw body is required: the signature covers the exact bytes Stripe sent, so parsing\nto JSON first and re-serialising would fail verification. An event that does not\nverify gets a 400 and no side effect.\n\nReturning 200 on an event we chose not to act on is deliberate. Stripe retries\nnon-2xx, and retrying an event this endpoint will always ignore achieves nothing.","operationId":"stripe_webhook_api_stripe_webhook_post","parameters":[{"name":"Stripe-Signature","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stripe-Signature"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string","minLength":1,"maxLength":255},{"type":"null"}],"description":"A caller-generated key that makes a retried write return the original resource instead of creating or charging for a duplicate.","title":"Idempotency-Key"},"description":"A caller-generated key that makes a retried write return the original resource instead of creating or charging for a duplicate."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Stripe Webhook Api Stripe Webhook Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"AcceptedReportJob":{"properties":{"id":{"type":"string","title":"Id","description":"Report identifier retained for existing clients; equal to jobId."},"jobId":{"type":"string","title":"Jobid","description":"Job identifier used in the polling URL."},"statusUrl":{"type":"string","title":"Statusurl","description":"Relative URL to poll until status is done or error."},"status":{"type":"string","title":"Status","description":"Current job status; initially running."},"stage":{"type":"string","title":"Stage"},"step":{"type":"integer","title":"Step"},"address":{"type":"string","title":"Address"},"unit":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Unit"},"elapsedMs":{"type":"integer","title":"Elapsedms"},"report":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Report"},"detail":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Detail"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["id","jobId","statusUrl","status","stage","step","address","unit","elapsedMs","report","detail","error"],"title":"AcceptedReportJob","description":"A newly accepted report compile and the resource agents should poll."},"AddressResolveRequest":{"properties":{"address":{"type":"string","maxLength":500,"title":"Address"},"unit":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Unit"}},"type":"object","required":["address"],"title":"AddressResolveRequest"},"GuestCheckoutRequest":{"properties":{"address":{"type":"string","maxLength":500,"title":"Address"},"unit":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Unit"},"email":{"type":"string","maxLength":320,"title":"Email","default":""}},"type":"object","required":["address"],"title":"GuestCheckoutRequest"},"GuestEmailCaptureRequest":{"properties":{"token":{"type":"string","maxLength":512,"title":"Token"},"email":{"type":"string","maxLength":320,"title":"Email"}},"type":"object","required":["token","email"],"title":"GuestEmailCaptureRequest"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"PreviewBatchOperation":{"properties":{"slug":{"type":"string","maxLength":200,"minLength":1,"title":"Slug","description":"An Apartment Fax public preview slug, for example 117-w-13th-st-apt-4r."}},"type":"object","required":["slug"],"title":"PreviewBatchOperation","description":"One public preview lookup in ``POST /v1/previews/batch``."},"PreviewBatchResult":{"properties":{"slug":{"type":"string","title":"Slug"},"status":{"type":"integer","title":"Status"},"preview":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Preview"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["slug","status"],"title":"PreviewBatchResult","description":"The result for one operation, kept in request order."},"ReportRequest":{"properties":{"address":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Address"},"unit":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Unit"},"ask":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Ask"},"email":{"anyOf":[{"type":"string","maxLength":320},{"type":"null"}],"title":"Email"},"replay":{"anyOf":[{"type":"boolean"},{"type":"string"},{"type":"null"}],"title":"Replay"}},"type":"object","title":"ReportRequest","description":"Body of ``POST /api/report``. Either ``address`` or ``ask`` must be present.\n\nThe length caps are a second line of defence behind the raw body-size check in\n``_enforce_request_limits``: that check rejects an oversized request outright, this\nkeeps any single field from being unreasonably large even inside a body that is\ntechnically under the cap."},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}