{"openapi":"3.1.0","info":{"title":"Zyelra Developer API","version":"1.0.0","description":"Zyelra's Developer API allows agencies and approved integrations to access selected agency data and create leads and stay requests programmatically.\n\n## Authentication\n\nAll business endpoints require an agency-bound Developer API key:\n\n```http\nAuthorization: Bearer <API_KEY>\n```\n\n- API keys are created in Zyelra (agency settings).\n- The full secret is shown **only once** at creation time.\n- Keys can be revoked; revoked or expired keys return `401`.\n- Each key belongs to exactly one agency (tenancy is never taken from the request body).\n- **Session cookies are not valid** Developer API authentication.\n- Permissions are granted via scopes assigned to each key.\n\n## Scopes\n\n| Scope | Access |\n|-------|--------|\n| `agency:read` | Agency profile |\n| `properties:read` | List/get properties (published list by default; inventory via query) |\n| `properties:write` | Create, update, archive, and publish properties. Create leaves a draft unless `publish` is true |\n| `units:read` | List/get units for agency-owned properties |\n| `units:write` | Create/update/archive units |\n| `availability:read` | Short-term availability quotes and unavailable ranges |\n| `leads:write` | Create leads; update contact/source; link/clear property/unit; set/complete follow-up; assign/unassign; archive/restore; change lead status; **convert** Lead → Guest/Tenant |\n| `leads:read` | List/retrieve leads; get active lead follow-up |\n| `contacts:read` | List/retrieve CRM Contacts; possible-matches (warning only) |\n| `contacts:write` | Link/unlink Contact roles (explicit; no email/phone auto-merge) |\n| `channels:read` | Channel connections, listings, OTA status, and quarantined bookings |\n| `channels:write` | Connect channels, map listings, sync inventory, manage Airbnb and Booking.com |\n| `stays:write` | Create and update stays and guests; guest links; confirm/cancel/check-in/check-out |\n| `stays:read` | List/retrieve stays and cancellation requests |\n| `guests:read` | List/retrieve guests (address included; notes omitted) |\n| `tasks:read` | List/retrieve operational tasks |\n| `tasks:write` | Create and manage operational tasks |\n| `availability:write` | Create/update/cancel availability blocks |\n| `calendar:read` | Read agency calendar event projection |\n| `tenants:read` | List/retrieve tenant identity records |\n| `tenants:write` | Create/update/deactivate/reactivate tenants |\n| `landlords:read` | List/retrieve landlord identity records |\n| `landlords:write` | Create and update landlords, link properties, and add documents |\n| `inspections:read` | List/retrieve inspection schedule records |\n| `inspections:write` | Create inspections and drive reschedule, cancel, complete, no-show, notes, and task creation |\n| `tenancies:read` | List/retrieve tenancies (non-financial) |\n| `tenancies:write` | Create, update, activate, and terminate tenancies. Create leaves a draft unless `activate` is true |\n| `messages:read` | List conversations, message text, templates, and custom-channel metadata |\n| `messages:write` | Reply in conversations; send email/SMS/WhatsApp; manage templates; custom-channel ingest |\n| `webhooks:read` | Discover webhook event catalog; list/get agency webhook endpoints |\n| `webhooks:write` | Create/update/delete webhook endpoints; rotate signing secrets |\n| `payments:read` | Stay payments, collection requests, fee schedules, obligations, and receipts |\n| `payments:write` | Payment links, offline payments, collections, fee schedules, obligations, and receipts |\n| `accounting:read` | Chart of accounts, journals, ledger, receivables, vendor bills, vendors, customers, operating balances, disbursements, bank destinations, identity cases, statements, and account mappings |\n| `accounting:write` | Create and post journals, upload a partner chart, map accounts and parties, and report external accounting changes |\n\n## Data boundary\n\nOnly selected, integration-safe data is exposed.\n\n- **Creates:** `POST /properties` stays a draft unless `publish` is true.   `POST /properties/{property_id}/publish` and `/unpublish` change that later.   `POST /properties/{property_id}/units` stays a draft unless `status` is a live status such as available.   `POST /tenancies` stays a draft unless `activate` is true.\n- **Property list (default):** published storefront-safe listings only.\n- **Property list (`include_unpublished=true`):** agency inventory including drafts   (managed representation); archived excluded.\n- **Property/unit GET:** published resources keep the historical public projection   **plus additive** inventory fields (`status`, `published`, `address`, …).   Agency-owned drafts are readable for write round-trips. Archived → 404.\n- **Archive:** soft-archive only; property archive does **not** cascade to units;   unit/property archive does **not** rewrite stays.\n- **Messages:** metadata-only (channel, direction, status, related entity, timestamps).   Body, subject, addresses, sender, provider IDs, templates, and credentials are not exposed.   Read-only; no send API in V1.\n- **Payments:** stay/guest payments only. Amounts on payment-links are derived from   Zyelra's stay charge ledger minus successful payments. Rent and platform billing   are not exposed. Payment URLs are secret-equivalent.\n\nInternal CRM fields (notes, agents, landlord documents / government IDs / ownership embeds, credentials, automation, communications content, geo coordinates) are not part of this contract.\n\nThis API is **versioned** (`/api/v1/developer`) and is separate from Zyelra's internal application, admin, storefront, and webhook APIs.\n\n## Rate limits\n\nDeveloper API traffic is limited by **both**:\n\n1. **Per API key** (fixed defaults):\n   - **Reads:** 600 requests / minute / key\n   - **Writes:** 60 requests / minute / key\n2. **Per agency aggregate** (across all keys for that agency; configurable operational ceilings):\n   - Agency ceilings apply **in addition to** per-key limits\n   - Creating more keys does **not** multiply agency capacity\n\nSuccessful responses and **429** responses include `X-RateLimit-Limit`, `X-RateLimit-Remaining`, and `X-RateLimit-Reset` for the **bucket that applied** (per-key or agency). On **429**, also honor `Retry-After`.\n\nIf the rate-limit dependency is unavailable, the API returns **503** `rate_limit_unavailable` (fail-closed — requests are not allowed through).\n\nRequest bodies are bounded (default **1 MiB**; async bulk uses a larger finite limit). Oversized bodies return **413** `payload_too_large`.\n\nDeveloper requests may also return **504** `gateway_timeout` (request wall-clock) or **503** `db_timeout` (database statement timeout).\n\nOpen-ended **cursor sync** (`updated_after` without `updated_before` on the nine sync resources) may not look back more than the configured max lookback days (default **90**); use bounded windows for older history. See Incremental sync / Messages below.\n\n## Idempotency\n\nMutating endpoints use the `Idempotency-Key` header as follows (see each operation):\n\n- **Required** on all sync/async bulk lead & tenant accepts, `POST /messages` (custom outbound),   `POST /stays/{stay_id}/payment-link`, and accounting writes (journals, partner chart,   account and entity mappings, and external change notices).\n- **Optional** on most other mutating endpoints (properties, units, leads actions, stays   lifecycle, tasks, tenancies, availability blocks, webhook create/retry/test, etc.).\n- **Not used** on `POST /messages/inbound` (deduped by `external_message_id`),   `PATCH`/`DELETE /webhooks/{id}`, and `POST /webhooks/{id}/rotate-secret`.\n\nSame agency + key + same body returns the original result; same key + different body returns **409**. Successful sync idempotency records are retained for **72 hours**. Concurrent requests with the same agency + key are serialized.\n\n**E2 async jobs** use the same required `Idempotency-Key` on accept, but job identity and replay live in the Developer jobs store (separate from the synchronous 72h idempotency rows).\n\n## Incremental sync (E4)\n\n**Full cursor sync** (nine resources): `properties`, `units`, `leads`, `stays`, `tenants`, `tenancies`, `tasks`, `availability-blocks`, `payments`.\n\nA request enters full sync mode when any of `updated_after`, `updated_before`, or `cursor` is supplied on those endpoints:\n\n- Ordering: `updated_at ASC, id ASC`\n- Inclusive watermark bounds; opaque `meta.next_cursor`\n- Sync `page_size` max **100**; browse mode remains `page`/`page_size` max **50**\n- Soft-archived / inactive rows are included by default in sync mode\n- Do not combine `page` offsets with `cursor`\n- Open-ended lookback guard applies to full sync resources (default **90** days)\n\n**Messages** are **not** full cursor sync: `GET /messages` supports optional `updated_after` / `updated_before` as lightweight filters only (no `cursor` / `next_cursor`). Dual-bound windows still cannot exceed 90 days. Open-ended `updated_after` (without `updated_before`) is subject to the same configured E5 lookback (`DEVELOPER_SYNC_MAX_LOOKBACK_DAYS`, default **90** days) as the nine cursor-sync resources (`details.reason=sync_lookback_exceeded`). Messages remain distinct from those nine sync resources (browse offset pagination; no cursor).\n\n## Webhook events\n\nValid `subscribed_events` values are the event `type` strings returned by `GET /api/v1/developer/events` (authoritative catalog). Do not invent event names.\n\n## Errors\n\nErrors use:\n\n```json\n{\n  \"error\": { \"code\": \"not_found\", \"message\": \"...\", \"details\": {} },\n  \"request_id\": \"...\"\n}\n```\n\nSuccessful and error responses include `X-Request-Id` when the request middleware completes normally. Representative `error.code` values include: `unauthorized`, `forbidden`, `not_found`, `conflict`, `validation_error`, `rate_limited`, `rate_limit_unavailable`, `payload_too_large`, `gateway_timeout`, `db_timeout`. Sync/cursor validation failures use `validation_error` with `details.reason` such as `sync_lookback_exceeded`, `invalid_cursor`, or `pagination_conflict`.\n","x-scopes":["accounting:read","accounting:write","agency:read","availability:read","availability:write","calendar:read","channels:read","channels:write","contacts:read","contacts:write","guests:read","inspections:read","inspections:write","landlords:read","landlords:write","leads:read","leads:write","messages:read","messages:write","payments:read","payments:write","properties:read","properties:write","stays:read","stays:write","tasks:read","tasks:write","tenancies:read","tenancies:write","tenants:read","tenants:write","units:read","units:write","webhooks:read","webhooks:write"],"x-rate-limits":{"per_key":{"reads_per_minute":600,"writes_per_minute":60,"window_seconds":60},"agency_aggregate":{"description":"Additional agency-wide ceilings across all API keys. Configurable operational settings; creating more keys does not multiply capacity. Values are not fixed public guarantees.","applies_in_addition_to_per_key":true}},"x-pagination":{"browse":{"mode":"offset","page":"1-based","page_size_default":20,"page_size_max":50,"envelope":{"items":[],"meta":{"page":1,"page_size":20,"total":0,"pages":0}}},"sync":{"mode":"cursor","resources":["properties","units","leads","stays","tenants","tenancies","tasks","availability-blocks","payments"],"params":["updated_after","updated_before","cursor"],"page_size_max":100,"cursor_max_length":2048,"ordering":"updated_at ASC, id ASC","meta":{"page_size":100,"next_cursor":null}},"messages":{"mode":"offset_with_updated_window","params":["updated_after","updated_before"],"cursor":false,"page_size_max":50,"note":"Lightweight updated_at filters only; not full E4 cursor sync."}}},"servers":[{"url":"https://estateflow.smartlancedesigns.com","description":"Configured Developer API base URL (DEVELOPER_API_BASE_URL / PUBLIC_API_URL)"}],"paths":{"/api/v1/developer/jobs/{job_id}":{"get":{"tags":["Developer API"],"summary":"Get Developer job status","description":"Returns job status and progress summary. Scope depends on the job operation: `tenants:read` or `tenants:write` for tenant jobs; `leads:read` or `leads:write` for lead jobs. Cross-agency or expired → 404. Does not embed item results.\n\n**Required scope:** `tenants:read|tenants:write|leads:read|leads:write`","operationId":"developer_get_job","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperJob"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Job not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tenants:read|tenants:write|leads:read|leads:write"}},"/api/v1/developer/jobs/{job_id}/result":{"get":{"tags":["Developer API"],"summary":"Get Developer job results","description":"Paginated per-item results (max page_size 50), ordered by input index. Available while queued/running (partial) and after terminal success/failure. Same scope rules as job status. Cross-agency or expired → 404.\n\n**Required scope:** `tenants:read|tenants:write|leads:read|leads:write`","operationId":"developer_get_job_result","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Job Id"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":20,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperJobResultPage"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Job not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tenants:read|tenants:write|leads:read|leads:write"}},"/api/v1/developer/agency":{"get":{"tags":["Developer API"],"summary":"Get authenticated agency profile","description":"Returns the agency bound to the API key. Scope: `agency:read`.","operationId":"getDeveloperAgency","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperAgencyResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"security":[{"DeveloperApiKey":[]}],"x-required-scope":"agency:read"}},"/api/v1/developer/properties":{"get":{"tags":["Developer API"],"summary":"List properties","description":"Lists properties for the authenticated agency. Scope: `properties:read`. Default: published storefront-safe listings. Set `include_unpublished=true` for agency inventory (drafts included; managed shape). Filters: `page`, `page_size` (max 50), `city`, `property_type`, `rental_type` (`short_term`|`long_term`), `is_featured`, `sort` (`newest`|`featured`|`price_asc`|`price_desc`).","operationId":"listDeveloperProperties","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"description":"1-based page number","default":1,"title":"Page"},"description":"1-based page number"},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Page size (browse max 50; sync max 100)","default":20,"title":"Page Size"},"description":"Page size (browse max 50; sync max 100)"},{"name":"city","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Case-insensitive city contains filter","title":"City"},"description":"Case-insensitive city contains filter"},{"name":"property_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Exact property_type value","title":"Property Type"},"description":"Exact property_type value"},{"name":"rental_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(short_term|long_term)$"},{"type":"null"}],"description":"Only properties with at least one matching published unit","title":"Rental Type"},"description":"Only properties with at least one matching published unit"},{"name":"is_featured","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter featured listings","title":"Is Featured"},"description":"Filter featured listings"},{"name":"sort","in":"query","required":false,"schema":{"type":"string","pattern":"^(featured|price_asc|price_desc|newest)$","description":"Sort order","default":"newest","title":"Sort"},"description":"Sort order"},{"name":"include_unpublished","in":"query","required":false,"schema":{"type":"boolean","description":"When true, list all non-archived agency inventory (managed representation)","default":false,"title":"Include Unpublished"},"description":"When true, list all non-archived agency inventory (managed representation)"},{"name":"updated_after","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Sync mode: inclusive lower bound on updated_at (RFC 3339)","title":"Updated After"},"description":"Sync mode: inclusive lower bound on updated_at (RFC 3339)"},{"name":"updated_before","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Sync mode: inclusive upper bound on updated_at (RFC 3339)","title":"Updated Before"},"description":"Sync mode: inclusive upper bound on updated_at (RFC 3339)"},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"description":"Sync mode: opaque keyset cursor","title":"Cursor"},"description":"Sync mode: opaque keyset cursor"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DeveloperPropertyListResponse"},{"$ref":"#/components/schemas/DeveloperPropertyManagedListResponse"}],"title":"Response Listdeveloperproperties"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"properties:read"},"post":{"tags":["Developer API"],"summary":"Create a property","description":"Scope: `properties:write`. Creates a property for the authenticated agency. Set `publish` to true to list it on the website, or omit it to leave the property as a draft. Optional `images` adds a photo by public `url`, or a YouTube/Vimeo `video_url`, with caption, category, unit, and cover. Optional `Idempotency-Key`.","operationId":"createDeveloperProperty","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperPropertyCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperPropertyManagedResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"properties:write"}},"/api/v1/developer/properties/{property_id}":{"get":{"tags":["Developer API"],"summary":"Get a property","description":"Scope: `properties:read`. Published properties return the historical storefront-safe projection plus additive inventory fields (`status`, `published`, `address`, …). Agency-owned drafts are readable (Phase 4 write round-trip). Archived and cross-agency → 404.","operationId":"getDeveloperProperty","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"property_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Property Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DeveloperPropertyDetailResponse"},{"$ref":"#/components/schemas/DeveloperPropertyManagedResponse"}],"title":"Response Getdeveloperproperty"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"properties:read"},"patch":{"tags":["Developer API"],"summary":"Update a property","description":"Scope: `properties:write`. Partial update via existing property rules. `images` adds a photo by public `url` or a video by `video_url`, or updates an existing image by id (url, caption, category, cover, or delete). Omitted `images` leaves the gallery unchanged. Optional `Idempotency-Key`.","operationId":"updateDeveloperProperty","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"property_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Property Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperPropertyUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperPropertyManagedResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"properties:write"}},"/api/v1/developer/properties/{property_id}/media/{media_id}/file":{"get":{"tags":["Developer API"],"summary":"Get a property image file","description":"Scope: `properties:read`. Returns the uploaded property or unit image. External videos have no file and return 404.","operationId":"getDeveloperPropertyMediaFile","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"property_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Property Id"}},{"name":"media_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Media Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"properties:read"}},"/api/v1/developer/properties/{property_id}/publish":{"post":{"tags":["Developer API"],"summary":"Publish a property","description":"Scope: `properties:write`. Publishes the listing on the website and promotes a draft to available. Omit this call to leave the property as a draft. Optional `Idempotency-Key`.","operationId":"publishDeveloperProperty","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"property_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Property Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperPropertyManagedResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"properties:write"}},"/api/v1/developer/properties/{property_id}/unpublish":{"post":{"tags":["Developer API"],"summary":"Unpublish a property","description":"Scope: `properties:write`. Removes the listing from the website and leaves it unpublished. Optional `Idempotency-Key`.","operationId":"unpublishDeveloperProperty","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"property_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Property Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperPropertyManagedResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"properties:write"}},"/api/v1/developer/properties/{property_id}/archive":{"post":{"tags":["Developer API"],"summary":"Archive a property","description":"Scope: `properties:write`. Soft-archives the property (sets status=archived). Does **not** cascade-archive units. Existing stays are not rewritten. Archived properties are omitted from Developer list/get. Optional `Idempotency-Key`.","operationId":"archiveDeveloperProperty","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"property_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Property Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperPropertyManagedResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"properties:write"}},"/api/v1/developer/properties/{property_id}/units":{"get":{"tags":["Developer API"],"summary":"List units for a property","description":"Scope: `units:read`. Parent must belong to the authenticated agency and not be archived. Published parents return the historical public unit list shape (+ additive fields). Unpublished parents return managed unit inventory (including drafts).","operationId":"listDeveloperPropertyUnits","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"property_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Property Id"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":20,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DeveloperUnitListResponse"},{"$ref":"#/components/schemas/DeveloperUnitManagedListResponse"}],"title":"Response Listdeveloperpropertyunits"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"units:read"},"post":{"tags":["Developer API"],"summary":"Create a unit under a property","description":"Scope: `units:write`. Parent property must belong to the authenticated agency. Single-unit properties cannot gain additional units. `status` defaults to draft. Set a live status such as available to list the unit. Optional `Idempotency-Key`.","operationId":"createDeveloperPropertyUnit","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"property_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Property Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperUnitCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperUnitManagedResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"units:write"}},"/api/v1/developer/units":{"get":{"tags":["Developer API"],"summary":"List units (agency-wide)","description":"Scope: `units:read`. Agency-wide managed unit inventory. Browse: offset `page`/`page_size` (max 50); default excludes archived. Sync mode (`updated_after`/`updated_before`/`cursor`): keyset pagination, includes archived by default, `page_size` max 100.","operationId":"listDeveloperUnits","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Page Size"}},{"name":"include_archived","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Archived"}},{"name":"updated_after","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated After"}},{"name":"updated_before","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated Before"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Cursor"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperUnitManagedListResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"units:read"}},"/api/v1/developer/units/{unit_id}":{"get":{"tags":["Developer API"],"summary":"Get a unit","description":"Scope: `units:read`. Units under published parents use the historical public projection plus additive inventory fields. Drafts under agency-owned unpublished parents are readable. Archived units / archived parents / cross-agency → 404.","operationId":"getDeveloperUnit","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"unit_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Unit Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DeveloperUnitDetailResponse"},{"$ref":"#/components/schemas/DeveloperUnitManagedResponse"}],"title":"Response Getdeveloperunit"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"units:read"},"patch":{"tags":["Developer API"],"summary":"Update a unit","description":"Scope: `units:write`. Partial update via existing unit rules. Cannot reassign parent property. Optional `Idempotency-Key`.","operationId":"updateDeveloperUnit","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"unit_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Unit Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperUnitUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperUnitManagedResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"units:write"}},"/api/v1/developer/units/{unit_id}/archive":{"post":{"tags":["Developer API"],"summary":"Archive a unit","description":"Scope: `units:write`. Soft-archives the unit. Default units cannot be archived. Existing stays are not rewritten; archived units are omitted from Developer list/get and are not bookable via availability. Optional `Idempotency-Key`.","operationId":"archiveDeveloperUnit","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"unit_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Unit Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperUnitManagedResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"units:write"}},"/api/v1/developer/units/{unit_id}/availability":{"get":{"tags":["Developer API"],"summary":"Check short-term availability and quote","description":"Scope: `availability:read`. Inputs: `check_in`, `check_out` (YYYY-MM-DD). Uses existing public availability semantics (max stay window, nightly quote).","operationId":"getDeveloperUnitAvailability","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"unit_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Unit Id"}},{"name":"check_in","in":"query","required":true,"schema":{"type":"string","minLength":10,"maxLength":10,"description":"YYYY-MM-DD","title":"Check In"},"description":"YYYY-MM-DD"},{"name":"check_out","in":"query","required":true,"schema":{"type":"string","minLength":10,"maxLength":10,"description":"YYYY-MM-DD","title":"Check Out"},"description":"YYYY-MM-DD"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperAvailabilityResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Invalid dates / not bookable"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"availability:read"}},"/api/v1/developer/leads":{"post":{"tags":["Developer API"],"summary":"Create a lead","description":"Scope: `leads:write`. Optional header `Idempotency-Key` (same key + same body replays; same key + different body → 409).","operationId":"createDeveloperLead","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperLeadCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperLeadResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"leads:write"},"get":{"tags":["Developer API"],"summary":"List leads","description":"Scope: `leads:read`. Newest first. Restricted external schema (no notes/comms).","operationId":"listDeveloperLeads","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Page Size"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Lead status filter","title":"Status"},"description":"Lead status filter"},{"name":"include_archived","in":"query","required":false,"schema":{"type":"boolean","description":"Include archived leads (browse)","default":false,"title":"Include Archived"},"description":"Include archived leads (browse)"},{"name":"updated_after","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated After"}},{"name":"updated_before","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated Before"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Cursor"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperLeadListResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"leads:read"}},"/api/v1/developer/leads/bulk":{"patch":{"tags":["Developer API"],"summary":"Bulk update lead contact fields","description":"Scope: `leads:write`. Synchronous bulk contact/source update (max 100 items). Partial success is allowed; HTTP 200 when the batch is processed. Required `Idempotency-Key` (operation `leads.bulk_contact_update`). Duplicate lead ids → 422. No DomainEvents or webhooks.","operationId":"developer_leads_bulk_contact_update","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"},"description":"Required for this endpoint."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperLeadBulkContactUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperBulkMutationResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"leads:write"}},"/api/v1/developer/leads/bulk/assign":{"post":{"tags":["Developer API"],"summary":"Bulk assign or unassign leads","description":"Scope: `leads:write`. Assign many leads to one active membership, or unassign when `assigned_membership_id` is null (max 100). Invalid assignee → 404/422 for the whole request. Partial lead failures return HTTP 200 with per-item errors. Required `Idempotency-Key` (operation `leads.bulk_assign`). No DomainEvents or webhooks.","operationId":"developer_leads_bulk_assign","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"},"description":"Required for this endpoint."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperLeadBulkAssignRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperBulkMutationResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Membership not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"leads:write"}},"/api/v1/developer/leads/bulk/archive":{"post":{"tags":["Developer API"],"summary":"Bulk archive leads","description":"Scope: `leads:write`. Soft-archive many leads (max 100). Partial success is allowed; already-archived leads fail per-item. Required `Idempotency-Key` (operation `leads.bulk_archive`). No DomainEvents or webhooks.","operationId":"developer_leads_bulk_archive","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"},"description":"Required for this endpoint."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperLeadBulkArchiveRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperBulkMutationResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"leads:write"}},"/api/v1/developer/leads/bulk/async":{"patch":{"tags":["Developer API"],"summary":"Accept async bulk lead contact update","description":"Scope: `leads:write`. Accepts async bulk contact/source update (1–5000 items). Required `Idempotency-Key` (operation `leads.bulk_contact_update_async`). Duplicate lead ids → 422. Poll job status/result.","operationId":"developer_leads_bulk_contact_update_async","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"},"description":"Required for this endpoint."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperLeadBulkContactUpdateAsyncRequest"}}}},"responses":{"202":{"description":"Job accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperJob"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Location":{"description":"URL of the accepted job status resource (`/api/v1/developer/jobs/{job_id}`).","schema":{"type":"string","format":"uri"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"leads:write"}},"/api/v1/developer/leads/bulk/assign/async":{"post":{"tags":["Developer API"],"summary":"Accept async bulk lead assign","description":"Scope: `leads:write`. Accepts async bulk assign/unassign (1–5000 lead ids). Assignee membership is validated before accept (404/422; no job created on failure). Required `Idempotency-Key` (operation `leads.bulk_assign_async`).","operationId":"developer_leads_bulk_assign_async","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"},"description":"Required for this endpoint."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperLeadBulkAssignAsyncRequest"}}}},"responses":{"202":{"description":"Job accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperJob"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Location":{"description":"URL of the accepted job status resource (`/api/v1/developer/jobs/{job_id}`).","schema":{"type":"string","format":"uri"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Membership not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"leads:write"}},"/api/v1/developer/leads/bulk/archive/async":{"post":{"tags":["Developer API"],"summary":"Accept async bulk lead archive","description":"Scope: `leads:write`. Accepts async bulk soft-archive (1–5000 lead ids). Required `Idempotency-Key` (operation `leads.bulk_archive_async`).","operationId":"developer_leads_bulk_archive_async","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"},"description":"Required for this endpoint."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperLeadBulkArchiveAsyncRequest"}}}},"responses":{"202":{"description":"Job accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperJob"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Location":{"description":"URL of the accepted job status resource (`/api/v1/developer/jobs/{job_id}`).","schema":{"type":"string","format":"uri"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"leads:write"}},"/api/v1/developer/leads/{lead_id}":{"get":{"tags":["Developer API"],"summary":"Get a lead","description":"Scope: `leads:read`. Cross-agency → 404.","operationId":"getDeveloperLead","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"lead_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Lead Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperLeadResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"leads:read"},"patch":{"tags":["Developer API"],"summary":"Update lead contact fields","description":"Scope: `leads:write`. Updates full_name, email, phone, and/or source only. Status uses POST …/status. Property/unit linking uses POST …/property. Assignment uses POST …/assign. Notes are not available on this endpoint. Follow-ups use POST/GET …/follow-up. No-op when values are unchanged (no activity). Optional `Idempotency-Key`.","operationId":"updateDeveloperLead","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"lead_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Lead Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperLeadUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperLeadResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"leads:write"}},"/api/v1/developer/leads/{lead_id}/property":{"post":{"tags":["Developer API"],"summary":"Link or clear lead property/unit","description":"Scope: `leads:write`. Links an interested property (optional unit) or clears both when `property_id` is null. Unit must belong to the property; unit-only linking is unsupported. Clearing with a non-null `unit_id` is rejected. Optional `Idempotency-Key`.","operationId":"linkDeveloperLeadProperty","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"lead_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Lead Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperLeadPropertyRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperLeadResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"leads:write"}},"/api/v1/developer/leads/{lead_id}/status":{"post":{"tags":["Developer API"],"summary":"Change lead status","description":"Scope: `leads:write`. Uses the same domain status transition as the dashboard. No-op when status is unchanged. Optional `Idempotency-Key`.","operationId":"changeDeveloperLeadStatus","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"lead_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Lead Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperLeadStatusRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperLeadResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"leads:write"}},"/api/v1/developer/leads/{lead_id}/convert":{"post":{"tags":["Developer API"],"summary":"Convert lead to Guest and/or Tenant","description":"Scope: `leads:write`. Explicit ADR-013 handoff — does **not** run when status is set to `closed` alone. Staff-selected targets: `guest`, `tenant`, or both. Optional `guest_id` / `tenant_id` link existing agency records; omit to create. Links roles to the Lead Contact. Does not create Stay or Tenancy. Does not mutate FollowUps. Already-converted leads return 409. Optional `Idempotency-Key` (operation `leads.convert`).","operationId":"convertDeveloperLead","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"lead_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Lead Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperLeadConvertRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperLeadConvertResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Lead or role not found"},"409":{"description":"Already converted or Idempotency-Key conflict"},"422":{"description":"Validation (e.g. no targets, archived Lead)"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"leads:write"}},"/api/v1/developer/leads/{lead_id}/follow-up":{"post":{"tags":["Developer API"],"summary":"Set, update, or clear lead follow-up","description":"Scope: `leads:write`. Upserts the Lead's active pending Follow-Up using the existing Lead Follow-Up service (agency-local `follow_up_date` semantics). `follow_up_date: null` cancels the pending Follow-Up and returns JSON null. Does not immediately send email, SMS, or WhatsApp; existing agency Lead Follow-Up reminder settings may send a reminder later when due. Optional `Idempotency-Key` (operation `leads.follow_up`).","operationId":"setDeveloperLeadFollowUp","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"lead_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Lead Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperLeadFollowUpRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DeveloperLeadFollowUpResponse"},{"type":"null"}],"title":"Response Setdeveloperleadfollowup"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Lead or membership not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation (e.g. archived Lead)"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"leads:write"},"get":{"tags":["Developer API"],"summary":"Get lead active follow-up","description":"Scope: `leads:read`. Returns the Lead's active pending Follow-Up only. No pending Follow-Up, wrong agency, or missing Lead → 404. Does not return completed/cancelled history.","operationId":"getDeveloperLeadFollowUp","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"lead_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Lead Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperLeadFollowUpResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"leads:read"}},"/api/v1/developer/leads/{lead_id}/follow-up/complete":{"post":{"tags":["Developer API"],"summary":"Complete lead follow-up","description":"Scope: `leads:write`. Completes the pending Lead Follow-Up via the existing Lead service. Sets `follow_up_completed_at` and preserves `follow_up_date` (existing product behavior). Empty body. Does not immediately send messages. Optional `Idempotency-Key` (operation `leads.follow_up_complete`).","operationId":"completeDeveloperLeadFollowUp","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"lead_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Lead Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperLeadFollowUpResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation (archived Lead, no follow-up)"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"leads:write"}},"/api/v1/developer/leads/{lead_id}/assign":{"post":{"tags":["Developer API"],"summary":"Assign or unassign a lead","description":"Scope: `leads:write`. Assigns the Lead to an active membership in the API key's agency via `assigned_membership_id`, or unassigns when null. Resolves membership → user and delegates to the existing Lead assignment service. Does not expose `assigned_agent_user_id`. Emits `lead.assigned` when assignment changes. Optional `Idempotency-Key` (operation `leads.assign`).","operationId":"assignDeveloperLead","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"lead_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Lead Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperLeadAssignRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperLeadResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Lead or membership not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation (e.g. archived Lead, not assignable)"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"leads:write"}},"/api/v1/developer/leads/{lead_id}/archive":{"post":{"tags":["Developer API"],"summary":"Archive a lead","description":"Scope: `leads:write`. Soft-archives the Lead via the existing archive service (`archived_at`). Empty body. Subsequent Developer browse lists exclude archived Leads unless `include_archived=true`. Emits `lead.archived`. Optional `Idempotency-Key` (operation `leads.archive`).","operationId":"archiveDeveloperLead","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"lead_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Lead Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperLeadArchiveRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperLeadResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation (e.g. already archived)"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"leads:write"}},"/api/v1/developer/leads/{lead_id}/restore":{"post":{"tags":["Developer API"],"summary":"Restore an archived lead","description":"Scope: `leads:write`. Restores a soft-archived Lead via the existing restore service. Empty body. Lead becomes visible again on Developer browse lists. Emits `lead.restored`. Optional `Idempotency-Key` (operation `leads.restore`).","operationId":"restoreDeveloperLead","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"lead_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Lead Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperLeadRestoreRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperLeadResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation (e.g. not archived)"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"leads:write"}},"/api/v1/developer/stay-requests":{"post":{"tags":["Developer API"],"summary":"Create a stay booking request","description":"Scope: `stays:write`. Reuses public stay-request availability rules. Optional `Idempotency-Key` header.","operationId":"createDeveloperStayRequest","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperStayRequestCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperStayRequestResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation / unavailable"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"stays:write"}},"/api/v1/developer/stays":{"get":{"tags":["Developer API"],"summary":"List stays","description":"Scope: `stays:read`. Restricted external schema (no internal notes).","operationId":"listDeveloperStays","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Page Size"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"property_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Property Id"}},{"name":"unit_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Unit Id"}},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Stay source, including OTA platform codes","title":"Source"},"description":"Stay source, including OTA platform codes"},{"name":"updated_after","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated After"}},{"name":"updated_before","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated Before"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Cursor"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperStayListResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"stays:read"},"post":{"tags":["Developer API"],"summary":"Create a stay","description":"Scope: `stays:write`. Creates a pending stay for an existing guest, matching the stays desk. Optional `Idempotency-Key`.","operationId":"createDeveloperStay","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperStayCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperStayResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"stays:write"}},"/api/v1/developer/stays/{stay_id}":{"get":{"tags":["Developer API"],"summary":"Get a stay","description":"Scope: `stays:read`. Cross-agency → 404.","operationId":"getDeveloperStay","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"stay_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Stay Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperStayResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"stays:read"},"patch":{"tags":["Developer API"],"summary":"Update a stay","description":"Scope: `stays:write`. Pending or confirmed stays only. Notes are stored and omitted from the response. Optional `Idempotency-Key`.","operationId":"updateDeveloperStay","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"stay_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Stay Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperStayUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperStayResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"stays:write"}},"/api/v1/developer/stays/{stay_id}/confirm":{"post":{"tags":["Developer API"],"summary":"Confirm a pending stay","description":"Scope: `stays:write`. Same rules as dashboard confirm. Optional `Idempotency-Key`.","operationId":"confirmDeveloperStay","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"stay_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Stay Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperStayResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation / unavailable"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"stays:write"}},"/api/v1/developer/stays/{stay_id}/cancel":{"post":{"tags":["Developer API"],"summary":"Cancel a pending or confirmed stay","description":"Scope: `stays:write`. Optional `Idempotency-Key`.","operationId":"cancelDeveloperStay","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"stay_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Stay Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperStayResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"stays:write"}},"/api/v1/developer/stays/{stay_id}/check-in":{"post":{"tags":["Developer API"],"summary":"Check in a confirmed stay","description":"Scope: `stays:write`. Optional `Idempotency-Key`.","operationId":"checkInDeveloperStay","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"stay_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Stay Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperStayResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"stays:write"}},"/api/v1/developer/stays/{stay_id}/check-out":{"post":{"tags":["Developer API"],"summary":"Check out a checked-in stay","description":"Scope: `stays:write`. Optional `Idempotency-Key`.","operationId":"checkOutDeveloperStay","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"stay_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Stay Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperStayResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"stays:write"}},"/api/v1/developer/stays/{stay_id}/no-show":{"post":{"tags":["Developer API"],"summary":"Mark a confirmed stay as no-show","description":"Scope: `stays:write`. Same rules as dashboard no-show (confirmed → no_show). Optional `Idempotency-Key`.","operationId":"markDeveloperStayNoShow","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"stay_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Stay Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperStayResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"stays:write"}},"/api/v1/developer/contacts":{"get":{"tags":["Developer API"],"summary":"List CRM contacts","description":"Scope: `contacts:read`. Agency Contact directory (ADR-012 identity/link layer). Optional `q` and `role_type` (`lead`|`guest`|`tenant`|`landlord`). Does not auto-merge by email/phone.","operationId":"listDeveloperContacts","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":20,"title":"Page Size"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search name/email/phone","title":"Q"},"description":"Search name/email/phone"},{"name":"role_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by linked role type: lead, guest, tenant, landlord","title":"Role Type"},"description":"Filter by linked role type: lead, guest, tenant, landlord"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperContactListResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"contacts:read"}},"/api/v1/developer/contacts/possible-matches":{"get":{"tags":["Developer API"],"summary":"Possible contact matches (warning only)","description":"Scope: `contacts:read`. Warning-only duplicate hints by email/phone. Does **not** merge identities.","operationId":"listDeveloperPossibleContactMatches","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"email","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},{"name":"phone","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"}},{"name":"exclude_entity_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Exclude Entity Type"}},{"name":"exclude_entity_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Exclude Entity Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperPossibleMatchesResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"contacts:read"}},"/api/v1/developer/contacts/{contact_id}":{"get":{"tags":["Developer API"],"summary":"Get CRM contact","description":"Scope: `contacts:read`. Contact hub projection with linked roles and stays. Omits communications content and composed timeline (session Hub only).","operationId":"getDeveloperContact","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Contact Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperContactDetailResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Contact not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"contacts:read"}},"/api/v1/developer/contacts/{contact_id}/links":{"post":{"tags":["Developer API"],"summary":"Link a role to a contact","description":"Scope: `contacts:write`. Explicit staff-assisted ContactLink (ADR-012). Moves an existing role link when needed; does not merge Contacts by email/phone. Optional `Idempotency-Key` (operation `contacts.link`).","operationId":"linkDeveloperContactRole","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Contact Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperContactLinkCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperContactLinkResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Contact or role not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"contacts:write"}},"/api/v1/developer/contacts/{contact_id}/links/{link_id}":{"delete":{"tags":["Developer API"],"summary":"Unlink a role from a contact","description":"Scope: `contacts:write`. Removes a ContactLink and restores a provisional 1:1 Contact for the role. Does not delete orphan Contacts.","operationId":"unlinkDeveloperContactRole","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Contact Id"}},{"name":"link_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Link Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperContactUnlinkResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Contact or link not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"contacts:write"}},"/api/v1/developer/channels/capabilities":{"get":{"tags":["Developer API"],"summary":"List OTA channel capability overlays","description":"Scope: `channels:read`. Read-only Channex discovery × Zyelra implementation overlay (same data as agency channel-capabilities). Optional `code` (e.g. `Airbnb`, `BookingCom`). Does not invent live VERIFIED.","operationId":"listDeveloperChannelCapabilities","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"code","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"OTA catalog code filter","title":"Code"},"description":"OTA catalog code filter"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperChannelCapabilitiesResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"channels:read"}},"/api/v1/developer/guests":{"get":{"tags":["Developer API"],"summary":"List guests","description":"Scope: `guests:read`. Restricted schema (no notes). Optional `q` search.","operationId":"listDeveloperGuests","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":20,"title":"Page Size"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search name/email/phone","title":"Q"},"description":"Search name/email/phone"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperGuestListResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"guests:read"},"post":{"tags":["Developer API"],"summary":"Create a guest","description":"Scope: `stays:write`. Notes are stored and omitted from the response. Optional `Idempotency-Key`.","operationId":"createDeveloperGuest","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperGuestWriteRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperGuestResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"stays:write"}},"/api/v1/developer/guests/{guest_id}":{"get":{"tags":["Developer API"],"summary":"Get a guest","description":"Scope: `guests:read`. Cross-agency → 404. Includes address. Notes are not returned.","operationId":"getDeveloperGuest","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"guest_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Guest Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperGuestResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"guests:read"},"patch":{"tags":["Developer API"],"summary":"Update a guest","description":"Scope: `stays:write`. Notes are stored and omitted from the response. Optional `Idempotency-Key`.","operationId":"updateDeveloperGuest","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"guest_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Guest Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperGuestUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperGuestResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"stays:write"}},"/api/v1/developer/tenants":{"get":{"tags":["Developer API"],"summary":"List tenants","description":"Scope: `tenants:read`. Agency-scoped tenant directory (identity only). Does not expose tenancies, rent, ID documents, notes, or address. Default list is active tenants; set `include_inactive=true` to include deactivated. Search `q` matches name/email/phone (and active tenancy property/unit titles).","operationId":"listDeveloperTenants","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Page Size"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search name/email/phone","title":"Q"},"description":"Search name/email/phone"},{"name":"include_inactive","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Inactive"}},{"name":"has_current_tenancy","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter by whether the tenant has an active tenancy","title":"Has Current Tenancy"},"description":"Filter by whether the tenant has an active tenancy"},{"name":"sort","in":"query","required":false,"schema":{"type":"string","pattern":"^(full_name|created_at)$","default":"full_name","title":"Sort"}},{"name":"order","in":"query","required":false,"schema":{"type":"string","pattern":"^(asc|desc)$","default":"asc","title":"Order"}},{"name":"updated_after","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated After"}},{"name":"updated_before","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated Before"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Cursor"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTenantListResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tenants:read"},"post":{"tags":["Developer API"],"summary":"Create a tenant","description":"Scope: `tenants:write`. Creates an agency-local tenant identity record. Does not create a tenancy. Duplicate email/phone/name are allowed. Optional `Idempotency-Key`.","operationId":"createDeveloperTenant","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTenantCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTenantResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tenants:write"}},"/api/v1/developer/tenants/bulk":{"post":{"tags":["Developer API"],"summary":"Bulk create tenants","description":"Scope: `tenants:write`. Synchronous bulk tenant create (max 100). Partial success is allowed; HTTP 200 when the batch is processed. Duplicate email/phone/name are allowed. Required `Idempotency-Key` (operation `tenants.bulk_create`). No DomainEvents or webhooks. Does not create tenancies.","operationId":"developer_tenants_bulk_create","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"},"description":"Required for this endpoint."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTenantBulkCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperBulkMutationResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tenants:write"},"patch":{"tags":["Developer API"],"summary":"Bulk update tenants","description":"Scope: `tenants:write`. Synchronous bulk tenant update (max 100). Partial success is allowed; item with only `id` is a successful no-op. Required `Idempotency-Key` (operation `tenants.bulk_update`). Duplicate tenant ids → 422. No DomainEvents or webhooks.","operationId":"developer_tenants_bulk_update","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"},"description":"Required for this endpoint."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTenantBulkUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperBulkMutationResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tenants:write"}},"/api/v1/developer/tenants/bulk/async":{"post":{"tags":["Developer API"],"summary":"Accept async bulk tenant create","description":"Scope: `tenants:write`. Accepts an async bulk tenant create job (1–5000 items). Returns 202 with job id; poll `GET /jobs/{job_id}` and `/result`. Required `Idempotency-Key` (operation `tenants.bulk_create_async`). No domain writes on accept. Max 3 concurrent queued/running jobs per agency. Prefer sync `POST /tenants/bulk` for ≤100 items.","operationId":"developer_tenants_bulk_create_async","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"},"description":"Required for this endpoint."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTenantBulkCreateAsyncRequest"}}}},"responses":{"202":{"description":"Job accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperJob"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Location":{"description":"URL of the accepted job status resource (`/api/v1/developer/jobs/{job_id}`).","schema":{"type":"string","format":"uri"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tenants:write"},"patch":{"tags":["Developer API"],"summary":"Accept async bulk tenant update","description":"Scope: `tenants:write`. Accepts an async bulk tenant update job (1–5000 items). Required `Idempotency-Key` (operation `tenants.bulk_update_async`). Duplicate tenant ids → 422. Poll job status/result endpoints.","operationId":"developer_tenants_bulk_update_async","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"},"description":"Required for this endpoint."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTenantBulkUpdateAsyncRequest"}}}},"responses":{"202":{"description":"Job accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperJob"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Location":{"description":"URL of the accepted job status resource (`/api/v1/developer/jobs/{job_id}`).","schema":{"type":"string","format":"uri"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tenants:write"}},"/api/v1/developer/tenants/{tenant_id}":{"get":{"tags":["Developer API"],"summary":"Get a tenant","description":"Scope: `tenants:read`. Cross-agency → 404. Includes deactivated tenants by id. No tenancy/rent/ID/notes/address fields.","operationId":"getDeveloperTenant","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tenant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTenantResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tenants:read"},"patch":{"tags":["Developer API"],"summary":"Update a tenant","description":"Scope: `tenants:write`. Updates full_name/email/phone only. No-op when values are unchanged (no activity event). Optional `Idempotency-Key`.","operationId":"updateDeveloperTenant","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tenant Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTenantUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTenantResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tenants:write"}},"/api/v1/developer/tenants/{tenant_id}/deactivate":{"post":{"tags":["Developer API"],"summary":"Deactivate a tenant","description":"Scope: `tenants:write`. Soft-deactivates the tenant. Rejected while an active tenancy exists, or if already inactive. Optional `Idempotency-Key`.","operationId":"deactivateDeveloperTenant","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tenant Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTenantResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tenants:write"}},"/api/v1/developer/tenants/{tenant_id}/reactivate":{"post":{"tags":["Developer API"],"summary":"Reactivate a tenant","description":"Scope: `tenants:write`. Reactivates a soft-deactivated tenant. Rejected if already active. Optional `Idempotency-Key`.","operationId":"reactivateDeveloperTenant","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tenant Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTenantResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tenants:write"}},"/api/v1/developer/landlords":{"get":{"tags":["Developer API"],"summary":"List landlords","description":"Scope: `landlords:read`. Agency-scoped landlord identity directory. Does not expose ownership embeds, tenancies, documents, address, government IDs, or notes. Default list is active landlords; set `include_inactive=true` to include deactivated. Search `q` matches name/email/phone only.","operationId":"listDeveloperLandlords","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":20,"title":"Page Size"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search name/email/phone","title":"Q"},"description":"Search name/email/phone"},{"name":"include_inactive","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Inactive"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","pattern":"^(full_name|created_at)$","default":"full_name","title":"Sort"}},{"name":"order","in":"query","required":false,"schema":{"type":"string","pattern":"^(asc|desc)$","default":"asc","title":"Order"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperLandlordListResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"landlords:read"},"post":{"tags":["Developer API"],"summary":"Create a landlord","description":"Scope: `landlords:write`. Optional `Idempotency-Key`.","operationId":"createDeveloperLandlord","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperLandlordCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperLandlordResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"landlords:write"}},"/api/v1/developer/landlords/{landlord_id}":{"get":{"tags":["Developer API"],"summary":"Get a landlord","description":"Scope: `landlords:read`. Cross-agency → 404. Includes deactivated landlords by id. No ownership/tenancy/document/ID/notes/address fields.","operationId":"getDeveloperLandlord","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"landlord_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Landlord Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperLandlordResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"landlords:read"},"patch":{"tags":["Developer API"],"summary":"Update a landlord","description":"Scope: `landlords:write`. Optional `Idempotency-Key`.","operationId":"updateDeveloperLandlord","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"landlord_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Landlord Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperLandlordUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperLandlordResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"landlords:write"}},"/api/v1/developer/inspections":{"get":{"tags":["Developer API"],"summary":"List inspections","description":"Scope: `inspections:read`. Agency-scoped Inspection schedule records (standalone `inspections` domain — not OperationalTask). IDs and schedule/status only; no notes, embeds, or external assignee names. Filters: `status`, `property_id`, `lead_id`, `tenant_id`, `assigned_agent_user_id`, `date_from`, `date_to`. Sort: `scheduled_date` (default) or `created_at`.","operationId":"listDeveloperInspections","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":20,"title":"Page Size"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"scheduled | rescheduled | completed | cancelled | no_show","title":"Status"},"description":"scheduled | rescheduled | completed | cancelled | no_show"},{"name":"property_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Property Id"}},{"name":"lead_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Lead Id"}},{"name":"tenant_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Tenant Id"}},{"name":"assigned_agent_user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Assigned Agent User Id"}},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Date From"}},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Date To"}},{"name":"sort","in":"query","required":false,"schema":{"type":"string","pattern":"^(scheduled_date|created_at)$","default":"scheduled_date","title":"Sort"}},{"name":"order","in":"query","required":false,"schema":{"type":"string","pattern":"^(asc|desc)$","default":"asc","title":"Order"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperInspectionListResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"inspections:read"},"post":{"tags":["Developer API"],"summary":"Create an inspection","description":"Scope: `inspections:write`. Assign either a team member or an external name, and either a lead or a tenant. Optional `Idempotency-Key`.","operationId":"createDeveloperInspection","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperInspectionCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperInspectionResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"inspections:write"}},"/api/v1/developer/inspections/{inspection_id}":{"get":{"tags":["Developer API"],"summary":"Get an inspection","description":"Scope: `inspections:read`. Cross-agency → 404. Returns any status including terminal. Same curated fields as list items.","operationId":"getDeveloperInspection","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"inspection_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Inspection Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperInspectionResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"inspections:read"},"patch":{"tags":["Developer API"],"summary":"Update inspection notes","description":"Scope: `inspections:write`. Optional `Idempotency-Key`.","operationId":"updateDeveloperInspection","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"inspection_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Inspection Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperInspectionUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperInspectionResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"inspections:write"}},"/api/v1/developer/tenancies":{"get":{"tags":["Developer API"],"summary":"List tenancies","description":"Scope: `tenancies:read`. Agency-scoped tenancy records (non-financial). Canonical statuses: draft, active, terminated, expired. Filter `status=expiring` is derived (active with end_date soon). Reads may lazily expire overdue active tenancies via the existing service. Rent, deposits, landlords, notes, and documents are not exposed. Create/update require `tenancies:write`; activation and termination are not exposed.","operationId":"listDeveloperTenancies","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Page Size"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"draft | active | terminated | expired | expiring (derived)","title":"Status"},"description":"draft | active | terminated | expired | expiring (derived)"},{"name":"property_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Property Id"}},{"name":"tenant_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Tenant Id"}},{"name":"unit_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Unit Id"}},{"name":"updated_after","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated After"}},{"name":"updated_before","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated Before"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Cursor"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTenancyListResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tenancies:read"},"post":{"tags":["Developer API"],"summary":"Create a tenancy","description":"Scope: `tenancies:write`. Creates a tenancy for the authenticated agency. Set `activate` to true to start it, or omit it to leave the tenancy as a draft. Requires same-agency tenant, property, and eligible long-term unit. Property must already have a landlord linked. Financial fields are not accepted. Optional `Idempotency-Key`.","operationId":"createDeveloperTenancy","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTenancyCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTenancyResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tenancies:write"}},"/api/v1/developer/tenancies/{tenancy_id}":{"get":{"tags":["Developer API"],"summary":"Get a tenancy","description":"Scope: `tenancies:read`. Cross-agency → 404. May lazily expire an overdue active tenancy. Non-financial curated schema only.","operationId":"getDeveloperTenancy","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"tenancy_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tenancy Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTenancyResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tenancies:read"},"patch":{"tags":["Developer API"],"summary":"Update a tenancy","description":"Scope: `tenancies:write`. Draft: tenant/property/unit/dates. Active: `end_date` only. Cannot set status, activate, terminate, or change financial fields. Expired/terminated cannot be edited. Optional `Idempotency-Key`.","operationId":"updateDeveloperTenancy","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"tenancy_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tenancy Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTenancyUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTenancyResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tenancies:write"}},"/api/v1/developer/tenancies/{tenancy_id}/activate":{"post":{"tags":["Developer API"],"summary":"Activate a draft tenancy","description":"Scope: `tenancies:write`. Transitions draft → active using the domain activation service. Empty body — operates on existing tenancy state. A successful response confirms activation and applicable financial setup have committed; channel/OTA synchronization is asynchronous and may still be pending. Rent obligations are created only when the tenancy already has a positive rent amount (not settable via this API). Optional `Idempotency-Key`.","operationId":"activateDeveloperTenancy","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"tenancy_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tenancy Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTenancyResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation / conflict (stay, block, active tenancy, not draft)"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tenancies:write"}},"/api/v1/developer/tenancies/{tenancy_id}/terminate":{"post":{"tags":["Developer API"],"summary":"Terminate an active tenancy","description":"Scope: `tenancies:write`. Transitions active → terminated using the domain termination service. Empty body — operates on existing tenancy state. A successful response confirms that the Zyelra termination transaction has committed (including rent wind-down and activity); channel/OTA synchronization is asynchronous and may still be pending. Optional `Idempotency-Key`.","operationId":"terminateDeveloperTenancy","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"tenancy_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tenancy Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTenancyResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation (not active / domain validation)"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tenancies:write"}},"/api/v1/developer/tasks":{"get":{"tags":["Developer API"],"summary":"List operational tasks","description":"Scope: `tasks:read`. Filters: status, priority, task_type, property_id, unit_id, stay_id, assigned_membership_id. Ordered by due_at asc, created_at desc.","operationId":"listDeveloperTasks","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Page Size"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"priority","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Priority"}},{"name":"task_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Task Type"}},{"name":"property_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Property Id"}},{"name":"unit_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Unit Id"}},{"name":"stay_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Stay Id"}},{"name":"assigned_membership_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Assigned Membership Id"}},{"name":"updated_after","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated After"}},{"name":"updated_before","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated Before"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Cursor"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTaskListResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tasks:read"},"post":{"tags":["Developer API"],"summary":"Create an operational task","description":"Scope: `tasks:write`. Requires unit_id; property is derived from the unit. Optional stay, assignee, task template, and vendor. Optional `Idempotency-Key`.","operationId":"createDeveloperTask","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTaskCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTaskResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tasks:write"}},"/api/v1/developer/tasks/{task_id}":{"get":{"tags":["Developer API"],"summary":"Get an operational task","description":"Scope: `tasks:read`. Cross-agency → 404.","operationId":"getDeveloperTask","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Task Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTaskResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tasks:read"},"patch":{"tags":["Developer API"],"summary":"Update an operational task","description":"Scope: `tasks:write`. Partial update of title, description, priority, due_at, and vendor. Send vendor_id null to clear. Lifecycle status changes use dedicated action endpoints. Optional `Idempotency-Key`.","operationId":"updateDeveloperTask","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Task Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTaskUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTaskResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tasks:write"}},"/api/v1/developer/tasks/{task_id}/assign":{"post":{"tags":["Developer API"],"summary":"Assign an operational task","description":"Scope: `tasks:write`. Assigns to an active agency membership that can view tasks. Optional `Idempotency-Key`.","operationId":"assignDeveloperTask","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Task Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTaskAssignRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTaskResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tasks:write"}},"/api/v1/developer/tasks/{task_id}/start":{"post":{"tags":["Developer API"],"summary":"Start an operational task","description":"Scope: `tasks:write`. Transitions pending → in_progress. Optional `Idempotency-Key`.","operationId":"startDeveloperTask","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Task Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTaskResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tasks:write"}},"/api/v1/developer/tasks/{task_id}/complete":{"post":{"tags":["Developer API"],"summary":"Complete an operational task","description":"Scope: `tasks:write`. Completes an open task (checklist rules apply). Optional `Idempotency-Key`.","operationId":"completeDeveloperTask","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Task Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTaskResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tasks:write"}},"/api/v1/developer/tasks/{task_id}/cancel":{"post":{"tags":["Developer API"],"summary":"Cancel an operational task","description":"Scope: `tasks:write`. Cancels an open task. Optional `Idempotency-Key`.","operationId":"cancelDeveloperTask","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Task Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTaskResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tasks:write"}},"/api/v1/developer/availability-blocks":{"get":{"tags":["Developer API"],"summary":"List availability blocks","description":"Scope: `availability:read`. Unit-level blocked periods (half-open [start_at, end_at)). Default status filter is active. Filters: property_id, unit_id, start_at+end_at, status.","operationId":"listDeveloperAvailabilityBlocks","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Page Size"}},{"name":"property_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Property Id"}},{"name":"unit_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Unit Id"}},{"name":"start_at","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Range filter start (requires end_at)","title":"Start At"},"description":"Range filter start (requires end_at)"},{"name":"end_at","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Range filter end (requires start_at)","title":"End At"},"description":"Range filter end (requires start_at)"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"active | cancelled (default: active)","title":"Status"},"description":"active | cancelled (default: active)"},{"name":"updated_after","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated After"}},{"name":"updated_before","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated Before"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Cursor"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperAvailabilityBlockListResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"availability:read"},"post":{"tags":["Developer API"],"summary":"Create an availability block","description":"Scope: `availability:write`. Blocks a unit for [start_at, end_at). Rejected when overlapping stays/tenancies/other blocks. Optional `Idempotency-Key`.","operationId":"createDeveloperAvailabilityBlock","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperAvailabilityBlockCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperAvailabilityBlockResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"availability:write"}},"/api/v1/developer/availability-blocks/{block_id}":{"get":{"tags":["Developer API"],"summary":"Get an availability block","description":"Scope: `availability:read`. Cross-agency → 404.","operationId":"getDeveloperAvailabilityBlock","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"block_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Block Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperAvailabilityBlockResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"availability:read"},"patch":{"tags":["Developer API"],"summary":"Update an availability block","description":"Scope: `availability:write`. Partial update of start_at, end_at, reason_type, notes. Active manual blocks only. Optional `Idempotency-Key`.","operationId":"updateDeveloperAvailabilityBlock","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"block_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Block Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperAvailabilityBlockUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperAvailabilityBlockResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"availability:write"}},"/api/v1/developer/availability-blocks/{block_id}/cancel":{"post":{"tags":["Developer API"],"summary":"Cancel an availability block","description":"Scope: `availability:write`. Soft-cancels an active block (same as dashboard). Optional `Idempotency-Key`.","operationId":"cancelDeveloperAvailabilityBlock","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"block_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Block Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperAvailabilityBlockResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"availability:write"}},"/api/v1/developer/calendar/events":{"get":{"tags":["Developer API"],"summary":"List calendar events","description":"Scope: `calendar:read`. Read-only projection of agency calendar events (stay, tenancy, block, inspection, task). Requires `start_at` and `end_at`; range cannot exceed 120 days. Same overlap semantics as the dashboard calendar. Guest/tenant names are not exposed.","operationId":"listDeveloperCalendarEvents","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"start_at","in":"query","required":true,"schema":{"type":"string","description":"Range start (ISO-8601; agency timezone if naive)","title":"Start At"},"description":"Range start (ISO-8601; agency timezone if naive)"},{"name":"end_at","in":"query","required":true,"schema":{"type":"string","description":"Range end (ISO-8601; exclusive upper bound for span checks)","title":"End At"},"description":"Range end (ISO-8601; exclusive upper bound for span checks)"},{"name":"property_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Property Id"}},{"name":"unit_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Unit Id"}},{"name":"event_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated: stay,tenancy,block,inspection,task","title":"Event Type"},"description":"Comma-separated: stay,tenancy,block,inspection,task"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperCalendarEventsResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"calendar:read"}},"/api/v1/developer/messages":{"get":{"tags":["Developer API"],"summary":"List messages","description":"Scope: `messages:read`. Read-only, metadata-only messages for the API key's agency. Does not expose body, subject, addresses, sender, provider IDs, templates, or credentials. Inbound and outbound share this resource (`direction`). Status may lag provider callbacks. Ordered by `created_at` desc, `id` desc. Agency-wide (not property-membership scoped). Filter `channel=custom` includes Custom Channel Gateway messages.\n\n**Pagination:** browse offset (`page` / `page_size`, max 50). Optional `updated_after` / `updated_before` apply lightweight `updated_at` window filters only. Messages are **not** a full E4 cursor-based sync resource: there is no `cursor` / `next_cursor`. Open-ended `updated_after` (without `updated_before`) is subject to the same configured E5 lookback as cursor sync (`DEVELOPER_SYNC_MAX_LOOKBACK_DAYS`). Dual-bound windows still cannot exceed 90 days.","operationId":"listDeveloperMessages","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":20,"title":"Page Size"}},{"name":"channel","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"email | sms | whatsapp | custom (rejects `any`)","title":"Channel"},"description":"email | sms | whatsapp | custom (rejects `any`)"},{"name":"direction","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"inbound | outbound","title":"Direction"},"description":"inbound | outbound"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"queued|accepted|sent|delivered|read|failed|bounced|received","title":"Status"},"description":"queued|accepted|sent|delivered|read|failed|bounced|received"},{"name":"related_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"lead|tenant|guest|landlord|stay|operational_task","title":"Related Type"},"description":"lead|tenant|guest|landlord|stay|operational_task"},{"name":"related_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Related Id"}},{"name":"conversation_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Opaque conversation correlator","title":"Conversation Id"},"description":"Opaque conversation correlator"},{"name":"property_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"Narrowing filter (not an auth boundary)","title":"Property Id"},"description":"Narrowing filter (not an auth boundary)"},{"name":"created_after","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Inclusive lower bound on created_at (ISO-8601)","title":"Created After"},"description":"Inclusive lower bound on created_at (ISO-8601)"},{"name":"created_before","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Exclusive upper bound on created_at (ISO-8601)","title":"Created Before"},"description":"Exclusive upper bound on created_at (ISO-8601)"},{"name":"updated_after","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Inclusive lower bound on updated_at (RFC 3339). Without updated_before, must be within the configured E5 sync lookback. Lightweight filter only — not full cursor sync.","title":"Updated After"},"description":"Inclusive lower bound on updated_at (RFC 3339). Without updated_before, must be within the configured E5 sync lookback. Lightweight filter only — not full cursor sync."},{"name":"updated_before","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Inclusive upper bound on updated_at (RFC 3339). With updated_after, dual-bound windows cannot exceed 90 days.","title":"Updated Before"},"description":"Inclusive upper bound on updated_at (RFC 3339). With updated_after, dual-bound windows cannot exceed 90 days."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperMessageListResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"messages:read"},"post":{"tags":["Developer API"],"summary":"Create a custom outbound message","description":"Scope: `messages:write`. Custom Channel Gateway outbound create only (`channel` must be `custom`). Zyelra persists the message and conversation but **does not** deliver to external networks (no Twilio/Meta/SMTP). Status is `accepted` (intent accepted, not externally delivered). Mandatory `Idempotency-Key`. Does not authorize native email/SMS/WhatsApp sending.","operationId":"createDeveloperCustomMessage","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"},"description":"Required for this endpoint."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperCustomMessageCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperCustomMessageResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Recipient or conversation not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"messages:write"}},"/api/v1/developer/messages/inbound":{"post":{"tags":["Developer API"],"summary":"Ingest a custom inbound message","description":"Scope: `messages:write`. Third-party systems report a message received on an external channel (`channel` must be `custom`). Deduped by `agency + channel_key + external_message_id`. Same identity + same payload returns the existing message; conflicting payload → 409. Status is `received`. Not a native provider webhook.","operationId":"ingestDeveloperCustomInboundMessage","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperCustomMessageInboundRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperCustomMessageResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Recipient not found"},"409":{"description":"external_message_id conflict with different payload"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"security":[{"DeveloperApiKey":[]}],"x-required-scope":"messages:write"}},"/api/v1/developer/messages/{message_id}":{"get":{"tags":["Developer API"],"summary":"Get a message","description":"Scope: `messages:read`. Metadata-only. Cross-agency or missing → 404. Does not expose body, addresses, provider internals, or credentials.","operationId":"getDeveloperMessage","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"message_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Message Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperMessageResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Message not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"messages:read"}},"/api/v1/developer/events":{"get":{"tags":["Developer API"],"summary":"List subscribable webhook events","description":"Scope: `webhooks:read`. Returns the authoritative webhook event catalog (`type`, `version`, derived `category`). Agency-level integration events — not per-user notifications. No descriptions.","operationId":"listDeveloperWebhookEvents","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperWebhookEventListResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"security":[{"DeveloperApiKey":[]}],"x-required-scope":"webhooks:read"}},"/api/v1/developer/webhooks":{"get":{"tags":["Developer API"],"summary":"List webhook endpoints","description":"Scope: `webhooks:read`. Lists webhook endpoints for the API key's agency. Never returns signing secrets.","operationId":"listDeveloperWebhooks","security":[{"DeveloperApiKey":[]}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperWebhookListResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"webhooks:read"},"post":{"tags":["Developer API"],"summary":"Create a webhook endpoint","description":"Scope: `webhooks:write`. Creates an agency-scoped webhook endpoint using the existing outbound webhook platform. Agency comes from the API key only. `signing_secret` is returned **once**. Optional `Idempotency-Key` (operation `webhooks.create`). Events must be catalog types; URL is SSRF-checked.","operationId":"createDeveloperWebhook","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperWebhookCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperWebhookResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"webhooks:write"}},"/api/v1/developer/webhooks/{webhook_id}":{"get":{"tags":["Developer API"],"summary":"Get a webhook endpoint","description":"Scope: `webhooks:read`. Cross-agency or missing → 404. Never returns the signing secret.","operationId":"getDeveloperWebhook","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Webhook Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperWebhookResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Webhook not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"webhooks:read"},"patch":{"tags":["Developer API"],"summary":"Update a webhook endpoint","description":"Scope: `webhooks:write`. Update url, subscribed_events, status (`active`|`inactive`), name, or description. Cannot set secrets or agency_id.","operationId":"updateDeveloperWebhook","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Webhook Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperWebhookUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperWebhookResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Webhook not found"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"webhooks:write"},"delete":{"tags":["Developer API"],"summary":"Delete a webhook endpoint","description":"Scope: `webhooks:write`. Hard-deletes the endpoint (existing lifecycle). Cross-agency → 404.","operationId":"deleteDeveloperWebhook","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Webhook Id"}}],"responses":{"204":{"description":"Successful Response","headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Webhook not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"webhooks:write"}},"/api/v1/developer/webhooks/{webhook_id}/rotate-secret":{"post":{"tags":["Developer API"],"summary":"Rotate webhook signing secret","description":"Scope: `webhooks:write`. Generates a new signing secret using the existing storage mechanism. Returns `signing_secret` **once**. Old secret is invalidated.","operationId":"rotateDeveloperWebhookSecret","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Webhook Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperWebhookResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Webhook not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"webhooks:write"}},"/api/v1/developer/webhooks/{webhook_id}/deliveries":{"get":{"tags":["Developer API"],"summary":"List webhook deliveries","description":"Scope: `webhooks:read`. Offset-paginated delivery history for one endpoint. Cross-agency → 404. Never returns signing secrets or full response bodies.","operationId":"listDeveloperWebhookDeliveries","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Webhook Id"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":20,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperWebhookDeliveryListResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Webhook not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"webhooks:read"}},"/api/v1/developer/webhooks/{webhook_id}/deliveries/{delivery_id}":{"get":{"tags":["Developer API"],"summary":"Get a webhook delivery","description":"Scope: `webhooks:read`. Cross-agency or missing → 404.","operationId":"getDeveloperWebhookDelivery","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Webhook Id"}},{"name":"delivery_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Delivery Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperWebhookDeliveryResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Delivery not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"webhooks:read"}},"/api/v1/developer/webhooks/{webhook_id}/deliveries/{delivery_id}/retry":{"post":{"tags":["Developer API"],"summary":"Retry a webhook delivery","description":"Scope: `webhooks:write`. Re-queues the same delivery id. Endpoint must be active. Optional `Idempotency-Key` (operation `webhooks.delivery_retry`).","operationId":"retryDeveloperWebhookDelivery","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Webhook Id"}},{"name":"delivery_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Delivery Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperWebhookDeliveryResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Delivery not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"webhooks:write"}},"/api/v1/developer/webhooks/{webhook_id}/test":{"post":{"tags":["Developer API"],"summary":"Send a test webhook delivery","description":"Scope: `webhooks:write`. Enqueues synthetic `webhook.test` for an active endpoint. Optional `Idempotency-Key` (operation `webhooks.test`).","operationId":"testDeveloperWebhook","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Webhook Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperWebhookDeliveryResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Webhook not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"webhooks:write"}},"/api/v1/developer/payments":{"get":{"tags":["Developer API"],"summary":"List stay payments","description":"Scope: `payments:read`. Curated StayPayment records for the API key agency. Does not include rent or platform billing. Filters: `stay_id`, `charge_id`, `status`, `provider`, `created_after`, `created_before`, `page`, `page_size`. Foreign `stay_id` → 404.","operationId":"listDeveloperPayments","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"stay_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Stay Id"}},{"name":"charge_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Charge Id"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"provider","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider"}},{"name":"created_after","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created After"}},{"name":"created_before","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created Before"}},{"name":"updated_after","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated After"}},{"name":"updated_before","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated Before"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Cursor"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperPaymentListResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Stay not found"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"payments:read"}},"/api/v1/developer/payments/{payment_id}":{"get":{"tags":["Developer API"],"summary":"Get a stay payment","description":"Scope: `payments:read`. Agency-scoped StayPayment detail. Cross-agency or missing → 404.","operationId":"getDeveloperPayment","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"payment_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Payment Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperPaymentResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Payment not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"payments:read"}},"/api/v1/developer/stays/{stay_id}/payment-summary":{"get":{"tags":["Developer API"],"summary":"Get stay payment summary","description":"Scope: `payments:read`. Curated outstanding balance and non-void charge breakdown from Zyelra's authoritative stay ledger (`total_open_charges` − `total_paid`). Cross-agency → 404. `stay_payment_status` is the stay rollup, distinct from payment record `status`.","operationId":"getDeveloperStayPaymentSummary","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"stay_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Stay Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperStayPaymentSummaryResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Stay not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"payments:read"}},"/api/v1/developer/stays/{stay_id}/payment-link":{"post":{"tags":["Developer API"],"summary":"Issue a stay payment link","description":"Scope: `payments:write`. Issues an Zyelra-hosted guest payment URL (`/pay/{token}`) for a payable stay. Amount and currency are derived server-side from open charges minus successful payments — never accept client amounts. Empty body only (`{}` or omitted). Mandatory `Idempotency-Key` (operation `stays.payment_link.create`). Does not create a provider checkout session.","operationId":"createDeveloperStayPaymentLink","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"stay_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Stay Id"}},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"},"description":"Required for this endpoint."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperStayPaymentLinkRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperStayPaymentLinkResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Stay not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"payments:write"}},"/api/v1/developer/tasks/{task_id}/reopen":{"post":{"tags":["Developer API"],"summary":"Reopen an operational task","description":"Scope: `tasks:write`. Moves a completed or in-progress task back to pending and clears completed steps. Cancelled tasks cannot be reopened. Optional `Idempotency-Key`.","operationId":"reopenDeveloperTask","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Task Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTaskResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tasks:write"}},"/api/v1/developer/tasks/{task_id}/activity":{"get":{"tags":["Developer API"],"summary":"List operational task activity","description":"Scope: `tasks:read`. Activity for this task only.","operationId":"listDeveloperTaskActivity","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Task Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTaskActivityResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tasks:read"}},"/api/v1/developer/tasks/{task_id}/steps":{"get":{"tags":["Developer API"],"summary":"List task steps","description":"Scope: `tasks:read`. Steps copied from a task template, if any.","operationId":"listDeveloperTaskSteps","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Task Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTaskStepsResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tasks:read"}},"/api/v1/developer/tasks/{task_id}/steps/{item_id}/toggle":{"post":{"tags":["Developer API"],"summary":"Toggle a task step","description":"Scope: `tasks:write`. Marks a step complete or incomplete. Optional `Idempotency-Key`.","operationId":"toggleDeveloperTaskStep","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Task Id"}},{"name":"item_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Item Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTaskStepItem"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tasks:write"}},"/api/v1/developer/tasks/{task_id}/attachments":{"get":{"tags":["Developer API"],"summary":"List task evidence","description":"Scope: `tasks:read`. Uploaded files and URL evidence.","operationId":"listDeveloperTaskAttachments","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Task Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTaskAttachmentListResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tasks:read"},"post":{"tags":["Developer API"],"summary":"Add task evidence by URL","description":"Scope: `tasks:write`. Records a public http(s) URL. The file is not downloaded. Optional `Idempotency-Key`.","operationId":"createDeveloperTaskAttachment","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Task Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTaskAttachmentCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTaskAttachmentResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tasks:write"}},"/api/v1/developer/tasks/{task_id}/attachments/{attachment_id}":{"delete":{"tags":["Developer API"],"summary":"Delete task evidence","description":"Scope: `tasks:write`. Optional `Idempotency-Key`.","operationId":"deleteDeveloperTaskAttachment","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Task Id"}},{"name":"attachment_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Attachment Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Deletedevelopertaskattachment"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tasks:write"}},"/api/v1/developer/tasks/{task_id}/attachments/{attachment_id}/file":{"get":{"tags":["Developer API"],"summary":"Download uploaded task evidence","description":"Scope: `tasks:read`. Stored uploads only. URL evidence returns 404.","operationId":"getDeveloperTaskAttachmentFile","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Task Id"}},{"name":"attachment_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Attachment Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tasks:read"}},"/api/v1/developer/task-templates":{"get":{"tags":["Developer API"],"summary":"List task templates","description":"Scope: `tasks:read`. Agency templates and system templates.","operationId":"listDeveloperTaskTemplates","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"task_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Task Type"}},{"name":"include_inactive","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Inactive"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTaskTemplateListResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tasks:read"},"post":{"tags":["Developer API"],"summary":"Create a task template","description":"Scope: `tasks:write`. Optional `Idempotency-Key`.","operationId":"createDeveloperTaskTemplate","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTaskTemplateCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTaskTemplateResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tasks:write"}},"/api/v1/developer/task-templates/{template_id}":{"get":{"tags":["Developer API"],"summary":"Get a task template","description":"Scope: `tasks:read`.","operationId":"getDeveloperTaskTemplate","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"template_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Template Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTaskTemplateResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tasks:read"},"patch":{"tags":["Developer API"],"summary":"Update a task template","description":"Scope: `tasks:write`. System templates cannot be edited. Optional `Idempotency-Key`.","operationId":"updateDeveloperTaskTemplate","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"template_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Template Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTaskTemplateUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTaskTemplateResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tasks:write"}},"/api/v1/developer/task-templates/{template_id}/duplicate":{"post":{"tags":["Developer API"],"summary":"Duplicate a task template","description":"Scope: `tasks:write`. Optional `Idempotency-Key`.","operationId":"duplicateDeveloperTaskTemplate","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"template_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Template Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTaskTemplateResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tasks:write"}},"/api/v1/developer/task-schedules/run":{"post":{"tags":["Developer API"],"summary":"Generate due scheduled tasks","description":"Scope: `tasks:write`. Creates tasks that are due from active schedules. Optional `Idempotency-Key`.","operationId":"runDeveloperTaskSchedules","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTaskScheduleRunResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tasks:write"}},"/api/v1/developer/task-schedules":{"get":{"tags":["Developer API"],"summary":"List task schedules","description":"Scope: `tasks:read`. Recurring task definitions.","operationId":"listDeveloperTaskSchedules","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"is_active","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},{"name":"unit_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Unit Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTaskScheduleListResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tasks:read"},"post":{"tags":["Developer API"],"summary":"Create a task schedule","description":"Scope: `tasks:write`. Optional `Idempotency-Key`.","operationId":"createDeveloperTaskSchedule","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTaskScheduleCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTaskScheduleResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tasks:write"}},"/api/v1/developer/task-schedules/{schedule_id}":{"get":{"tags":["Developer API"],"summary":"Get a task schedule","description":"Scope: `tasks:read`.","operationId":"getDeveloperTaskSchedule","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"schedule_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Schedule Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTaskScheduleResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tasks:read"},"patch":{"tags":["Developer API"],"summary":"Update a task schedule","description":"Scope: `tasks:write`. Send null to clear assignee, template, or vendor. Optional `Idempotency-Key`.","operationId":"updateDeveloperTaskSchedule","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"schedule_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Schedule Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTaskScheduleUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTaskScheduleResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tasks:write"}},"/api/v1/developer/task-vendors":{"get":{"tags":["Developer API"],"summary":"List task vendors","description":"Scope: `tasks:read`. Service contacts used on operational tasks.","operationId":"listDeveloperTaskVendors","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"include_inactive","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Inactive"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTaskVendorListResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tasks:read"},"post":{"tags":["Developer API"],"summary":"Create a task vendor","description":"Scope: `tasks:write`. Optional `Idempotency-Key`.","operationId":"createDeveloperTaskVendor","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTaskVendorCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTaskVendorResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tasks:write"}},"/api/v1/developer/task-vendors/{vendor_id}":{"get":{"tags":["Developer API"],"summary":"Get a task vendor","description":"Scope: `tasks:read`.","operationId":"getDeveloperTaskVendor","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"vendor_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Vendor Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTaskVendorResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tasks:read"},"patch":{"tags":["Developer API"],"summary":"Update a task vendor","description":"Scope: `tasks:write`. Optional `Idempotency-Key`.","operationId":"updateDeveloperTaskVendor","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"vendor_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Vendor Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTaskVendorUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTaskVendorResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tasks:write"}},"/api/v1/developer/units/{unit_id}/readiness":{"get":{"tags":["Developer API"],"summary":"Get unit readiness","description":"Scope: `tasks:read`. Whether the unit is ready for the next stay.","operationId":"getDeveloperUnitReadiness","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"unit_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Unit Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperUnitReadinessResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tasks:read"}},"/api/v1/developer/properties/{property_id}/readiness":{"get":{"tags":["Developer API"],"summary":"Get property unit readiness","description":"Scope: `tasks:read`. Readiness for each active unit on the property.","operationId":"getDeveloperPropertyReadiness","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"property_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Property Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperPropertyReadinessResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tasks:read"}},"/api/v1/developer/stays/{stay_id}/operations":{"get":{"tags":["Developer API"],"summary":"Get stay operations summary","description":"Scope: `tasks:read`. Open and completed tasks for the stay, plus unit readiness.","operationId":"getDeveloperStayOperations","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"stay_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Stay Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperStayOperationsResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tasks:read"}},"/api/v1/developer/inspections/{inspection_id}/activity":{"get":{"tags":["Developer API"],"summary":"List inspection activity","description":"Scope: `inspections:read`.","operationId":"listDeveloperInspectionActivity","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"inspection_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Inspection Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTaskActivityResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"inspections:read"}},"/api/v1/developer/inspections/{inspection_id}/attachments":{"get":{"tags":["Developer API"],"summary":"List inspection evidence","description":"Scope: `inspections:read`. Uploaded files and URL evidence.","operationId":"listDeveloperInspectionAttachments","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"inspection_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Inspection Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperInspectionAttachmentListResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"inspections:read"},"post":{"tags":["Developer API"],"summary":"Add inspection evidence by URL","description":"Scope: `inspections:write`. Records a public http(s) URL. The file is not downloaded. Optional `Idempotency-Key`.","operationId":"createDeveloperInspectionAttachment","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"inspection_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Inspection Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperInspectionAttachmentCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperInspectionAttachmentResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"inspections:write"}},"/api/v1/developer/inspections/{inspection_id}/attachments/{attachment_id}":{"delete":{"tags":["Developer API"],"summary":"Delete inspection evidence","description":"Scope: `inspections:write`. Optional `Idempotency-Key`.","operationId":"deleteDeveloperInspectionAttachment","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"inspection_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Inspection Id"}},{"name":"attachment_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Attachment Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Deletedeveloperinspectionattachment"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"inspections:write"}},"/api/v1/developer/inspections/{inspection_id}/attachments/{attachment_id}/file":{"get":{"tags":["Developer API"],"summary":"Download uploaded inspection evidence","description":"Scope: `inspections:read`. Stored uploads only. URL evidence returns 404.","operationId":"getDeveloperInspectionAttachmentFile","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"inspection_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Inspection Id"}},{"name":"attachment_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Attachment Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"inspections:read"}},"/api/v1/developer/inspections/{inspection_id}/reschedule":{"post":{"tags":["Developer API"],"summary":"Reschedule an inspection","description":"Scope: `inspections:write`. Optional `Idempotency-Key`.","operationId":"rescheduleDeveloperInspection","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"inspection_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Inspection Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperInspectionRescheduleRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperInspectionResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"inspections:write"}},"/api/v1/developer/inspections/{inspection_id}/cancel":{"post":{"tags":["Developer API"],"summary":"Cancel an inspection","description":"Scope: `inspections:write`. Optional `Idempotency-Key`.","operationId":"cancelDeveloperInspection","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"inspection_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Inspection Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DeveloperInspectionCancelRequest"},{"type":"null"}],"title":"Payload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperInspectionResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"inspections:write"}},"/api/v1/developer/inspections/{inspection_id}/complete":{"post":{"tags":["Developer API"],"summary":"Complete an inspection","description":"Scope: `inspections:write`. Optional `Idempotency-Key`.","operationId":"completeDeveloperInspection","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"inspection_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Inspection Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DeveloperInspectionCompleteRequest"},{"type":"null"}],"title":"Payload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperInspectionResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"inspections:write"}},"/api/v1/developer/inspections/{inspection_id}/no-show":{"post":{"tags":["Developer API"],"summary":"Mark an inspection as a no-show","description":"Scope: `inspections:write`. Optional `Idempotency-Key`.","operationId":"noShowDeveloperInspection","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"inspection_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Inspection Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DeveloperInspectionNoShowRequest"},{"type":"null"}],"title":"Payload"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperInspectionResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"inspections:write"}},"/api/v1/developer/inspections/{inspection_id}/tasks":{"post":{"tags":["Developer API"],"summary":"Create a task from an inspection","description":"Scope: `inspections:write`. Creates an operational task linked to the inspection. If an open task of the same type already exists, that task is returned. Optional `Idempotency-Key`.","operationId":"createDeveloperInspectionTask","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"inspection_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Inspection Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperInspectionTaskCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTaskResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"inspections:write"}},"/api/v1/developer/leads/{lead_id}/notes":{"post":{"tags":["Developer API"],"summary":"Add a lead note","description":"Scope: `leads:write`. Appends a timestamped note. Optional `Idempotency-Key`.","operationId":"addDeveloperLeadNote","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"lead_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Lead Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperLeadNoteRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperLeadResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"leads:write"},"get":{"tags":["Developer API"],"summary":"Read lead notes","description":"Scope: `leads:read`. The agency note log for this lead.","operationId":"getDeveloperLeadNotes","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"lead_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Lead Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperLeadNoteLogResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"leads:read"}},"/api/v1/developer/leads/{lead_id}/activity":{"get":{"tags":["Developer API"],"summary":"List lead activity","description":"Scope: `leads:read`. Agency events for this lead.","operationId":"listDeveloperLeadActivity","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"lead_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Lead Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTaskActivityResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"leads:read"}},"/api/v1/developer/leads/{lead_id}/status-history":{"get":{"tags":["Developer API"],"summary":"List lead status history","description":"Scope: `leads:read`.","operationId":"listDeveloperLeadStatusHistory","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"lead_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Lead Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperLeadStatusHistoryResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"leads:read"}},"/api/v1/developer/tenants/{tenant_id}/activity":{"get":{"tags":["Developer API"],"summary":"List tenant activity","description":"Scope: `tenants:read`.","operationId":"listDeveloperTenantActivity","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tenant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTaskActivityResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tenants:read"}},"/api/v1/developer/tenants/{tenant_id}/tenancies":{"get":{"tags":["Developer API"],"summary":"List tenancies for a tenant","description":"Scope: `tenancies:read`.","operationId":"listDeveloperTenantTenancies","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tenant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTenancyListResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tenancies:read"}},"/api/v1/developer/tenants/{tenant_id}/documents":{"get":{"tags":["Developer API"],"summary":"List tenant documents","description":"Scope: `tenants:read`. Uploaded files and URL documents.","operationId":"listDeveloperTenantDocuments","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tenant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperPersonDocumentListResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tenants:read"},"post":{"tags":["Developer API"],"summary":"Add a tenant document by URL","description":"Scope: `tenants:write`. Records a public http(s) URL. The file is not downloaded. Optional `Idempotency-Key`.","operationId":"createDeveloperTenantDocument","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tenant Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperPersonDocumentCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperPersonDocumentResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tenants:write"}},"/api/v1/developer/tenants/{tenant_id}/documents/{document_id}":{"delete":{"tags":["Developer API"],"summary":"Delete a tenant document","description":"Scope: `tenants:write`. Optional `Idempotency-Key`.","operationId":"deleteDeveloperTenantDocument","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tenant Id"}},{"name":"document_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Document Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Deletedevelopertenantdocument"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tenants:write"}},"/api/v1/developer/tenants/{tenant_id}/documents/{document_id}/file":{"get":{"tags":["Developer API"],"summary":"Download a stored tenant document","description":"Scope: `tenants:read`. Stored uploads only. URL documents return 404.","operationId":"getDeveloperTenantDocumentFile","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Tenant Id"}},{"name":"document_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Document Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tenants:read"}},"/api/v1/developer/landlords/{landlord_id}/deactivate":{"post":{"tags":["Developer API"],"summary":"Deactivate a landlord","description":"Scope: `landlords:write`. Optional `Idempotency-Key`.","operationId":"deactivateDeveloperLandlord","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"landlord_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Landlord Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperLandlordResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"landlords:write"}},"/api/v1/developer/landlords/{landlord_id}/reactivate":{"post":{"tags":["Developer API"],"summary":"Reactivate a landlord","description":"Scope: `landlords:write`. Optional `Idempotency-Key`.","operationId":"reactivateDeveloperLandlord","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"landlord_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Landlord Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperLandlordResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"landlords:write"}},"/api/v1/developer/landlords/{landlord_id}/properties":{"get":{"tags":["Developer API"],"summary":"List properties for a landlord","description":"Scope: `landlords:read`.","operationId":"listDeveloperLandlordProperties","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"landlord_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Landlord Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperLinkedPropertyListResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"landlords:read"},"post":{"tags":["Developer API"],"summary":"Link a property to a landlord","description":"Scope: `landlords:write`. Optional `Idempotency-Key`.","operationId":"linkDeveloperLandlordProperty","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"landlord_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Landlord Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperLandlordPropertyLinkRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperLinkedPropertyResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"landlords:write"}},"/api/v1/developer/landlords/{landlord_id}/properties/{property_id}":{"delete":{"tags":["Developer API"],"summary":"Unlink a property from a landlord","description":"Scope: `landlords:write`. Optional `Idempotency-Key`.","operationId":"unlinkDeveloperLandlordProperty","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"landlord_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Landlord Id"}},{"name":"property_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Property Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Unlinkdeveloperlandlordproperty"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"landlords:write"}},"/api/v1/developer/landlords/{landlord_id}/activity":{"get":{"tags":["Developer API"],"summary":"List landlord activity","description":"Scope: `landlords:read`.","operationId":"listDeveloperLandlordActivity","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"landlord_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Landlord Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTaskActivityResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"landlords:read"}},"/api/v1/developer/landlords/{landlord_id}/documents":{"get":{"tags":["Developer API"],"summary":"List landlord documents","description":"Scope: `landlords:read`.","operationId":"listDeveloperLandlordDocuments","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"landlord_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Landlord Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperPersonDocumentListResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"landlords:read"},"post":{"tags":["Developer API"],"summary":"Add a landlord document by URL","description":"Scope: `landlords:write`. Records a public http(s) URL. The file is not downloaded. Optional `Idempotency-Key`.","operationId":"createDeveloperLandlordDocument","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"landlord_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Landlord Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperPersonDocumentCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperPersonDocumentResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"landlords:write"}},"/api/v1/developer/landlords/{landlord_id}/documents/{document_id}":{"delete":{"tags":["Developer API"],"summary":"Delete a landlord document","description":"Scope: `landlords:write`. Optional `Idempotency-Key`.","operationId":"deleteDeveloperLandlordDocument","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"landlord_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Landlord Id"}},{"name":"document_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Document Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Deletedeveloperlandlorddocument"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key conflict"},"422":{"description":"Validation"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"landlords:write"}},"/api/v1/developer/landlords/{landlord_id}/documents/{document_id}/file":{"get":{"tags":["Developer API"],"summary":"Download a stored landlord document","description":"Scope: `landlords:read`. Stored uploads only. URL documents return 404.","operationId":"getDeveloperLandlordDocumentFile","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"landlord_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Landlord Id"}},{"name":"document_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Document Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"landlords:read"}},"/api/v1/developer/properties/{property_id}/tenancies/current":{"get":{"tags":["Developer API"],"summary":"Get the current tenancy for a property","description":"Scope: `tenancies:read`.","operationId":"getDeveloperCurrentPropertyTenancy","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"property_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Property Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTenancyResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tenancies:read"}},"/api/v1/developer/properties/{property_id}/units/{unit_id}/tenancies/current":{"get":{"tags":["Developer API"],"summary":"Get the current tenancy for a unit","description":"Scope: `tenancies:read`.","operationId":"getDeveloperCurrentUnitTenancy","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"property_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Property Id"}},{"name":"unit_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Unit Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperTenancyResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"tenancies:read"}},"/api/v1/developer/stays/{stay_id}/guest-link":{"post":{"tags":["Developer API"],"summary":"Issue a guest portal link","description":"Scope: `stays:write`. Returns the guest self-service URL. Treat that URL as a secret. Optional `Idempotency-Key`.","operationId":"issueDeveloperGuestPortalLink","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"stay_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Stay Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperGuestPortalLinkResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"stays:write"}},"/api/v1/developer/stays/{stay_id}/release-guest-access":{"post":{"tags":["Developer API"],"summary":"Release guest access instructions","description":"Scope: `stays:write`. Optional `Idempotency-Key`.","operationId":"releaseDeveloperGuestAccess","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"stay_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Stay Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperGuestAccessReleaseResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"stays:write"}},"/api/v1/developer/stays/{stay_id}/cancellation-requests":{"get":{"tags":["Developer API"],"summary":"List stay cancellation requests","description":"Scope: `stays:read`.","operationId":"listDeveloperStayCancellationRequests","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"stay_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Stay Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperCancellationRequestListResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"stays:read"}},"/api/v1/developer/stays/{stay_id}/cancellation-requests/{request_id}/approve":{"post":{"tags":["Developer API"],"summary":"Approve a cancellation request","description":"Scope: `stays:write`. Cancels the stay. Optional `Idempotency-Key`.","operationId":"approveDeveloperCancellationRequest","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"stay_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Stay Id"}},{"name":"request_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Request Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperCancellationReviewRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperStayResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"stays:write"}},"/api/v1/developer/stays/{stay_id}/cancellation-requests/{request_id}/reject":{"post":{"tags":["Developer API"],"summary":"Reject a cancellation request","description":"Scope: `stays:write`. Optional `Idempotency-Key`.","operationId":"rejectDeveloperCancellationRequest","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"stay_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Stay Id"}},{"name":"request_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Request Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperCancellationReviewRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperCancellationRequestResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"stays:write"}},"/api/v1/developer/units/{unit_id}/unavailable-ranges":{"get":{"tags":["Developer API"],"summary":"List unavailable date ranges","description":"Scope: `availability:read`. Calendar visualization for a unit. Dates are inclusive window bounds.","operationId":"listDeveloperUnavailableRanges","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"unit_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Unit Id"}},{"name":"start","in":"query","required":true,"schema":{"type":"string","minLength":8,"maxLength":40,"title":"Start"}},{"name":"end","in":"query","required":true,"schema":{"type":"string","minLength":8,"maxLength":40,"title":"End"}},{"name":"exclude_stay_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Exclude Stay Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperUnavailableRangesResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"availability:read"}},"/api/v1/developer/stays/{stay_id}/payments":{"get":{"tags":["Developer API"],"summary":"List stay payments","description":"Scope: `payments:read`. Offline and recorded payments for one stay.","operationId":"listDeveloperStayPayments","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"stay_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Stay Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperStayPaymentListResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"payments:read"},"post":{"tags":["Developer API"],"summary":"Record an offline stay payment","description":"Scope: `payments:write`. Methods: bank_transfer, cash, other. Online checkout stays on the payment link. Optional `Idempotency-Key`.","operationId":"recordDeveloperStayPayment","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"stay_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Stay Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperStayPaymentRecordRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperStayRecordedPaymentResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"payments:write"}},"/api/v1/developer/payments/{payment_id}/void":{"post":{"tags":["Developer API"],"summary":"Void a stay payment","description":"Scope: `payments:write`. Optional `Idempotency-Key`.","operationId":"voidDeveloperStayPayment","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"payment_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Payment Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperStayPaymentVoidRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperStayRecordedPaymentResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"payments:write"}},"/api/v1/developer/stays/{stay_id}/refunds":{"get":{"tags":["Developer API"],"summary":"List stay refunds","description":"Scope: `payments:read`.","operationId":"listDeveloperStayRefunds","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"stay_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Stay Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperStayRefundListResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"payments:read"},"post":{"tags":["Developer API"],"summary":"Request a stay deposit refund","description":"Scope: `payments:write`. Optional `Idempotency-Key`.","operationId":"requestDeveloperStayRefund","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"stay_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Stay Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperStayRefundRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperStayRefundResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"payments:write"}},"/api/v1/developer/conversations":{"get":{"tags":["Developer API"],"summary":"List conversations","description":"Scope: `messages:read`. Inbox rows for email, SMS, WhatsApp, and custom channels.","operationId":"listDeveloperConversations","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Page Size"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"channel","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Channel"}},{"name":"unread","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Unread"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperConversationListResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"messages:read"}},"/api/v1/developer/conversations/{conversation_id}":{"get":{"tags":["Developer API"],"summary":"Get a conversation","description":"Scope: `messages:read`. Does not mark the conversation read.","operationId":"getDeveloperConversation","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperConversationResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"messages:read"}},"/api/v1/developer/conversations/{conversation_id}/messages":{"get":{"tags":["Developer API"],"summary":"List conversation messages","description":"Scope: `messages:read`. Includes message text. Provider credentials are omitted.","operationId":"listDeveloperConversationMessages","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"page_size","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Page Size"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperConversationMessageListResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"messages:read"},"post":{"tags":["Developer API"],"summary":"Reply in a conversation","description":"Scope: `messages:write`. Sends through the conversation channel (email, SMS, or WhatsApp). Optional `Idempotency-Key`.","operationId":"replyDeveloperConversation","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperConversationReplyRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperConversationMessageResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"messages:write"}},"/api/v1/developer/conversations/{conversation_id}/read":{"post":{"tags":["Developer API"],"summary":"Mark a conversation read","description":"Scope: `messages:write`. Optional `Idempotency-Key`.","operationId":"markDeveloperConversationRead","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperConversationResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"messages:write"}},"/api/v1/developer/conversations/{conversation_id}/unread":{"post":{"tags":["Developer API"],"summary":"Mark a conversation unread","description":"Scope: `messages:write`. Optional `Idempotency-Key`.","operationId":"markDeveloperConversationUnread","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperConversationResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"messages:write"}},"/api/v1/developer/conversations/{conversation_id}/assign":{"post":{"tags":["Developer API"],"summary":"Assign a conversation","description":"Scope: `messages:write`. Pass a null membership to unassign. Optional `Idempotency-Key`.","operationId":"assignDeveloperConversation","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperConversationAssignRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperConversationResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"messages:write"}},"/api/v1/developer/conversations/{conversation_id}/close":{"post":{"tags":["Developer API"],"summary":"Close a conversation","description":"Scope: `messages:write`. Optional `Idempotency-Key`.","operationId":"closeDeveloperConversation","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperConversationResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"messages:write"}},"/api/v1/developer/conversations/{conversation_id}/reopen":{"post":{"tags":["Developer API"],"summary":"Reopen a conversation","description":"Scope: `messages:write`. Optional `Idempotency-Key`.","operationId":"reopenDeveloperConversation","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperConversationResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"messages:write"}},"/api/v1/developer/conversations/{conversation_id}/resolve":{"post":{"tags":["Developer API"],"summary":"Link a conversation to a person","description":"Scope: `messages:write`. Matches the conversation to a lead, guest, tenant, or landlord. Optional `Idempotency-Key`.","operationId":"resolveDeveloperConversation","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"conversation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conversation Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperConversationResolveRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperConversationResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"messages:write"}},"/api/v1/developer/messages/send":{"post":{"tags":["Developer API"],"summary":"Send an email, SMS, or WhatsApp message","description":"Scope: `messages:write`. Uses the agency's connected channels. Custom-channel traffic stays on `POST /messages`. Optional `Idempotency-Key`.","operationId":"sendDeveloperChannelMessage","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperOutboundMessageRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperConversationMessageResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"messages:write"}},"/api/v1/developer/message-templates":{"get":{"tags":["Developer API"],"summary":"List message templates","description":"Scope: `messages:read`. Agency templates and built-in templates.","operationId":"listDeveloperMessageTemplates","security":[{"DeveloperApiKey":[]}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperMessageTemplateListResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"messages:read"},"post":{"tags":["Developer API"],"summary":"Create a message template","description":"Scope: `messages:write`. Optional `Idempotency-Key`.","operationId":"createDeveloperMessageTemplate","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperMessageTemplateCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperMessageTemplateResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"messages:write"}},"/api/v1/developer/message-templates/{template_id}":{"patch":{"tags":["Developer API"],"summary":"Update a message template","description":"Scope: `messages:write`. Built-in templates cannot be edited. Optional `Idempotency-Key`.","operationId":"updateDeveloperMessageTemplate","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"template_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Template Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperMessageTemplateUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperMessageTemplateResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"messages:write"}},"/api/v1/developer/message-templates/{template_id}/duplicate":{"post":{"tags":["Developer API"],"summary":"Duplicate a message template","description":"Scope: `messages:write`. Optional `Idempotency-Key`.","operationId":"duplicateDeveloperMessageTemplate","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"template_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Template Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperMessageTemplateResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"messages:write"}},"/api/v1/developer/collection-payments/summary":{"get":{"tags":["Developer API"],"summary":"Summarize collection payments","description":"Scope: `payments:read`.","operationId":"summarizeDeveloperCollectionPayments","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperCollectionSummaryResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"security":[{"DeveloperApiKey":[]}],"x-required-scope":"payments:read"}},"/api/v1/developer/collection-payments":{"get":{"tags":["Developer API"],"summary":"List collection payments","description":"Scope: `payments:read`. Bank account instructions are omitted.","operationId":"listDeveloperCollectionPayments","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"stay_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Stay Id"}},{"name":"property_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Property Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperCollectionPaymentListResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"payments:read"},"post":{"tags":["Developer API"],"summary":"Create a collection payment","description":"Scope: `payments:write`. Optional `Idempotency-Key`.","operationId":"createDeveloperCollectionPayment","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperCollectionPaymentCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperCollectionPaymentResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"payments:write"}},"/api/v1/developer/collection-payments/{collection_id}":{"get":{"tags":["Developer API"],"summary":"Get a collection payment","description":"Scope: `payments:read`.","operationId":"getDeveloperCollectionPayment","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"collection_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Collection Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperCollectionPaymentResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"payments:read"}},"/api/v1/developer/collection-payments/{collection_id}/mark-received":{"post":{"tags":["Developer API"],"summary":"Mark a bank transfer received","description":"Scope: `payments:write`. Optional `Idempotency-Key`.","operationId":"markDeveloperCollectionReceived","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"collection_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Collection Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperCollectionPaymentResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"payments:write"}},"/api/v1/developer/collection-payments/{collection_id}/cancel":{"post":{"tags":["Developer API"],"summary":"Cancel a collection payment","description":"Scope: `payments:write`. Optional `Idempotency-Key`.","operationId":"cancelDeveloperCollectionPayment","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"collection_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Collection Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperCollectionCancelRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperCollectionPaymentResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"payments:write"}},"/api/v1/developer/fee-schedules":{"get":{"tags":["Developer API"],"summary":"List fee schedules","description":"Scope: `payments:read`.","operationId":"listDeveloperFeeSchedules","security":[{"DeveloperApiKey":[]}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperFeeScheduleListResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"payments:read"},"post":{"tags":["Developer API"],"summary":"Create a fee schedule","description":"Scope: `payments:write`. Optional `Idempotency-Key`.","operationId":"createDeveloperFeeSchedule","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperFeeScheduleCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperFeeScheduleResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"payments:write"}},"/api/v1/developer/fee-calculations/preview":{"post":{"tags":["Developer API"],"summary":"Preview a fee calculation","description":"Scope: `payments:read`. Does not save the calculation. Optional `Idempotency-Key` is accepted and ignored.","operationId":"previewDeveloperFeeCalculation","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperFeeCalculationRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperFeeCalculationResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"payments:read"}},"/api/v1/developer/fee-calculations":{"post":{"tags":["Developer API"],"summary":"Create a fee calculation","description":"Scope: `payments:write`. Optional `Idempotency-Key`.","operationId":"createDeveloperFeeCalculation","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperFeeCalculationRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperFeeCalculationResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"payments:write"}},"/api/v1/developer/fee-obligations":{"get":{"tags":["Developer API"],"summary":"List fee obligations","description":"Scope: `payments:read`.","operationId":"listDeveloperFeeObligations","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperFeeObligationListResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"payments:read"}},"/api/v1/developer/fee-obligations/{obligation_id}/mark-payable":{"post":{"tags":["Developer API"],"summary":"Mark a fee obligation payable","description":"Scope: `payments:write`. Optional `Idempotency-Key`.","operationId":"markDeveloperFeeObligationPayable","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"obligation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Obligation Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperFeeObligationResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"payments:write"}},"/api/v1/developer/fee-obligations/{obligation_id}/approve":{"post":{"tags":["Developer API"],"summary":"Approve a fee obligation","description":"Scope: `payments:write`. Optional `Idempotency-Key`.","operationId":"approveDeveloperFeeObligation","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"obligation_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Obligation Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperFeeObligationResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"payments:write"}},"/api/v1/developer/payments/{payment_id}/receipt":{"post":{"tags":["Developer API"],"summary":"Generate a stay receipt","description":"Scope: `payments:write`. Optional `Idempotency-Key`.","operationId":"generateDeveloperStayReceipt","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"payment_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Payment Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperStayReceiptResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"payments:write"}},"/api/v1/developer/receipts/{receipt_id}":{"get":{"tags":["Developer API"],"summary":"Get a stay receipt","description":"Scope: `payments:read`.","operationId":"getDeveloperStayReceipt","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"receipt_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Receipt Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperStayReceiptResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"payments:read"}},"/api/v1/developer/receipts/{receipt_id}/file":{"get":{"tags":["Developer API"],"summary":"Download a stay receipt","description":"Scope: `payments:read`. PDF file for a generated receipt.","operationId":"downloadDeveloperStayReceipt","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"receipt_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Receipt Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"payments:read"}},"/api/v1/developer/accounting/accounts":{"get":{"tags":["Developer API"],"summary":"List chart of accounts","description":"Scope: `accounting:read`. Zyelra chart of accounts, including system accounts.","operationId":"listDeveloperAccountingAccounts","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"include_inactive","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Inactive"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperAccountingListResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"accounting:read"}},"/api/v1/developer/accounting/accounts/{account_id}":{"get":{"tags":["Developer API"],"summary":"Get an account","description":"Scope: `accounting:read`.","operationId":"getDeveloperAccountingAccount","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Account Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperAccountingObjectResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"accounting:read"}},"/api/v1/developer/accounting/journals":{"get":{"tags":["Developer API"],"summary":"List journals","operationId":"listDeveloperAccountingJournals","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperAccountingListResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"accounting:read","description":"**Required scope:** `accounting:read`"},"post":{"tags":["Developer API"],"summary":"Create a journal","description":"Scope: `accounting:write`. Creates a balanced draft in the agency currency. Set `post` true to post it in the same call. Mandatory Idempotency-Key.","operationId":"createDeveloperAccountingJournal","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"},"description":"Required for this endpoint."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperJournalCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperAccountingObjectResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"accounting:write"}},"/api/v1/developer/accounting/journals/{journal_id}":{"get":{"tags":["Developer API"],"summary":"Get a journal","operationId":"getDeveloperAccountingJournal","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"journal_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Journal Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperAccountingObjectResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"accounting:read","description":"**Required scope:** `accounting:read`"}},"/api/v1/developer/accounting/journals/{journal_id}/post":{"post":{"tags":["Developer API"],"summary":"Post a draft journal","operationId":"postDeveloperAccountingJournal","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"journal_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Journal Id"}},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"},"description":"Required for this endpoint."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperAccountingObjectResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"accounting:write","description":"**Required scope:** `accounting:write`"}},"/api/v1/developer/accounting/journals/{journal_id}/reverse":{"post":{"tags":["Developer API"],"summary":"Reverse a posted journal","description":"Scope: `accounting:write`. Creates a compensating posted journal. Does not call a provider reverse API.","operationId":"reverseDeveloperAccountingJournal","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"journal_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Journal Id"}},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"},"description":"Required for this endpoint."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperJournalReverseRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperAccountingObjectResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"accounting:write"}},"/api/v1/developer/accounting/ledger":{"get":{"tags":["Developer API"],"summary":"Query the ledger","operationId":"queryDeveloperAccountingLedger","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"account_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Account Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperAccountingObjectResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"accounting:read","description":"**Required scope:** `accounting:read`"}},"/api/v1/developer/accounting/receivables":{"get":{"tags":["Developer API"],"summary":"List receivables","operationId":"listDeveloperAccountingReceivables","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperAccountingListResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"accounting:read","description":"**Required scope:** `accounting:read`"}},"/api/v1/developer/accounting/vendor-bills":{"get":{"tags":["Developer API"],"summary":"List vendor bills","operationId":"listDeveloperAccountingVendorBills","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperAccountingListResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"accounting:read","description":"**Required scope:** `accounting:read`"}},"/api/v1/developer/accounting/vendor-bills/{bill_id}":{"get":{"tags":["Developer API"],"summary":"Get a vendor bill","operationId":"getDeveloperAccountingVendorBill","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"bill_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Bill Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperAccountingObjectResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"accounting:read","description":"**Required scope:** `accounting:read`"}},"/api/v1/developer/accounting/vendor-bills/{bill_id}/payments":{"get":{"tags":["Developer API"],"summary":"List payments on a vendor bill","operationId":"listDeveloperAccountingBillPayments","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"bill_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Bill Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperAccountingListResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"accounting:read","description":"**Required scope:** `accounting:read`"}},"/api/v1/developer/accounting/vendors":{"get":{"tags":["Developer API"],"summary":"List vendors for accounting mapping","operationId":"listDeveloperAccountingVendors","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperAccountingListResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"security":[{"DeveloperApiKey":[]}],"x-required-scope":"accounting:read","description":"**Required scope:** `accounting:read`"}},"/api/v1/developer/accounting/customers":{"get":{"tags":["Developer API"],"summary":"List guest and tenant customers","description":"Scope: `accounting:read`. Guest and tenant stay separate parties. Contacts are not included.","operationId":"listDeveloperAccountingCustomers","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperAccountingListResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"accounting:read"}},"/api/v1/developer/accounting/operating":{"get":{"tags":["Developer API"],"summary":"Operating balance summary","operationId":"getDeveloperAccountingOperatingSummary","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperAccountingObjectResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"security":[{"DeveloperApiKey":[]}],"x-required-scope":"accounting:read","description":"**Required scope:** `accounting:read`"}},"/api/v1/developer/accounting/disbursements":{"get":{"tags":["Developer API"],"summary":"List disbursements","operationId":"listDeveloperAccountingDisbursements","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperAccountingListResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"accounting:read","description":"**Required scope:** `accounting:read`"}},"/api/v1/developer/accounting/bank-destinations":{"get":{"tags":["Developer API"],"summary":"List bank destinations","description":"Scope: `accounting:read`. Provider references are masked.","operationId":"listDeveloperAccountingBankDestinations","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperAccountingListResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"security":[{"DeveloperApiKey":[]}],"x-required-scope":"accounting:read"}},"/api/v1/developer/accounting/kyc-cases":{"get":{"tags":["Developer API"],"summary":"List identity verification cases","description":"Scope: `accounting:read`. Status only. Document files and requirement payloads are omitted.","operationId":"listDeveloperAccountingKycCases","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperAccountingListResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"accounting:read"}},"/api/v1/developer/accounting/statements/property":{"get":{"tags":["Developer API"],"summary":"Property statement","operationId":"getDeveloperAccountingPropertyStatement","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"property_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"Property Id"}},{"name":"from_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"From Date"}},{"name":"to_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"To Date"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperAccountingObjectResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"accounting:read","description":"**Required scope:** `accounting:read`"}},"/api/v1/developer/accounting/statements/owner":{"get":{"tags":["Developer API"],"summary":"Owner statement","operationId":"getDeveloperAccountingOwnerStatement","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"landlord_id","in":"query","required":true,"schema":{"type":"string","format":"uuid","title":"Landlord Id"}},{"name":"from_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"From Date"}},{"name":"to_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"To Date"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperAccountingObjectResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"accounting:read","description":"**Required scope:** `accounting:read`"}},"/api/v1/developer/accounting/external-accounts":{"get":{"tags":["Developer API"],"summary":"List the partner chart of accounts","description":"Scope: `accounting:read`. Accounts the connected accounting product uploaded for mapping.","operationId":"listDeveloperAccountingExternalAccounts","security":[{"DeveloperApiKey":[]}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperAccountingListResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"accounting:read"},"put":{"tags":["Developer API"],"summary":"Replace the partner chart of accounts","description":"Scope: `accounting:write`. Replaces the uploaded chart used for account mapping. Does not change Zyelra's chart of accounts. Mandatory Idempotency-Key.","operationId":"replaceDeveloperAccountingExternalAccounts","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"},"description":"Required for this endpoint."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperExternalAccountReplaceRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperAccountingListResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"accounting:write"}},"/api/v1/developer/accounting/account-mappings":{"get":{"tags":["Developer API"],"summary":"List account mappings","operationId":"listDeveloperAccountingAccountMappings","security":[{"DeveloperApiKey":[]}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperAccountingListResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"accounting:read","description":"**Required scope:** `accounting:read`"},"post":{"tags":["Developer API"],"summary":"Map a Zyelra account to a partner account","operationId":"createDeveloperAccountingAccountMapping","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"},"description":"Required for this endpoint."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperAccountMappingCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperAccountingObjectResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"accounting:write","description":"**Required scope:** `accounting:write`"}},"/api/v1/developer/accounting/account-mappings/{mapping_id}/replace":{"post":{"tags":["Developer API"],"summary":"Replace an account mapping","operationId":"replaceDeveloperAccountingAccountMapping","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"mapping_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Mapping Id"}},{"name":"Idempotency-Key","in":"header","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"},"description":"Required for this endpoint."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperAccountMappingReplaceRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperAccountingObjectResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"accounting:write","description":"**Required scope:** `accounting:write`"}},"/api/v1/developer/accounting/entity-mappings":{"get":{"tags":["Developer API"],"summary":"List vendor, customer, bill, and payment mappings","operationId":"listDeveloperAccountingEntityMappings","security":[{"DeveloperApiKey":[]}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperAccountingListResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"accounting:read","description":"**Required scope:** `accounting:read`"},"post":{"tags":["Developer API"],"summary":"Map a Zyelra party or document to a partner object","description":"Scope: `accounting:write`. source_type is vendor, guest, tenant, bill, or payment. Guest and tenant stay separate. Mandatory Idempotency-Key.","operationId":"createDeveloperAccountingEntityMapping","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"},"description":"Required for this endpoint."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperEntityMappingCreateRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperAccountingObjectResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"accounting:write"}},"/api/v1/developer/accounting/changes":{"post":{"tags":["Developer API"],"summary":"Report a change in the accounting software","description":"Scope: `accounting:write`. Records the notice and emits `accounting.external_change.received`. Does not rewrite Zyelra journals, bills, or mappings. Mandatory Idempotency-Key.","operationId":"createDeveloperAccountingChange","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"},"description":"Required for this endpoint."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperAccountingChangeRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperAccountingObjectResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"accounting:write"}},"/api/v1/developer/channels/connections":{"get":{"tags":["Developer API"],"summary":"List channel connections","description":"Scope: `channels:read`. Credentials are omitted.","operationId":"listDeveloperChannelConnections","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperChannelConnectionListResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"security":[{"DeveloperApiKey":[]}],"x-required-scope":"channels:read"}},"/api/v1/developer/channels/listings":{"get":{"tags":["Developer API"],"summary":"List mapped channel listings","description":"Scope: `channels:read`.","operationId":"listDeveloperChannelListings","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"provider","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperChannelListingListResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"channels:read"}},"/api/v1/developer/channels/listings/{listing_id}/map":{"post":{"tags":["Developer API"],"summary":"Map a channel listing","description":"Scope: `channels:write`. Optional `Idempotency-Key`.","operationId":"mapDeveloperChannelListing","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"listing_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Listing Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperChannelMapRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperChannelListingResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"channels:write"}},"/api/v1/developer/channels/listings/{listing_id}/unmap":{"post":{"tags":["Developer API"],"summary":"Unmap a channel listing","description":"Scope: `channels:write`. Optional `Idempotency-Key`.","operationId":"unmapDeveloperChannelListing","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"listing_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Listing Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperChannelListingResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"channels:write"}},"/api/v1/developer/channels/conflicts/{conflict_id}/resolve":{"post":{"tags":["Developer API"],"summary":"Resolve a channel conflict","description":"Scope: `channels:write`. Optional `Idempotency-Key`.","operationId":"resolveDeveloperChannelConflict","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"conflict_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Conflict Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperChannelConflictResolveRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperChannelResult"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"channels:write"}},"/api/v1/developer/channels/{provider}/connect":{"post":{"tags":["Developer API"],"summary":"Connect a channel provider","description":"Scope: `channels:write`. Providers: mock, airbnb, booking_com, vrbo, expedia. Secrets are not returned. Optional `Idempotency-Key`.","operationId":"connectDeveloperChannel","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperChannelConnectRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperChannelConnectionResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"channels:write"}},"/api/v1/developer/channels/{provider}":{"delete":{"tags":["Developer API"],"summary":"Disconnect a channel provider","description":"Scope: `channels:write`. Optional `Idempotency-Key`.","operationId":"disconnectDeveloperChannel","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperChannelConnectionResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"channels:write"}},"/api/v1/developer/channels/{provider}/listings":{"get":{"tags":["Developer API"],"summary":"Discover channel listings","description":"Scope: `channels:read`.","operationId":"discoverDeveloperChannelListings","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperChannelListingListResponse"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Resource not found","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"channels:read"}},"/api/v1/developer/channels/{provider}/listings/{external_listing_id}/import":{"post":{"tags":["Developer API"],"summary":"Import a channel listing","description":"Scope: `channels:write`. Optional `Idempotency-Key`.","operationId":"importDeveloperChannelListing","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}},{"name":"external_listing_id","in":"path","required":true,"schema":{"type":"string","title":"External Listing Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperChannelImportRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperChannelResult"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"channels:write"}},"/api/v1/developer/channels/{provider}/listings/{external_listing_id}/match-suggestions":{"get":{"tags":["Developer API"],"summary":"Suggest listing matches","description":"Scope: `channels:read`.","operationId":"suggestDeveloperChannelMatches","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}},{"name":"external_listing_id","in":"path","required":true,"schema":{"type":"string","title":"External Listing Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperChannelResult"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Resource not found","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"channels:read"}},"/api/v1/developer/channels/{provider}/outbound-units":{"get":{"tags":["Developer API"],"summary":"List units available to publish","description":"Scope: `channels:read`.","operationId":"listDeveloperChannelOutboundUnits","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperChannelResult"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Resource not found","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"channels:read"}},"/api/v1/developer/channels/{provider}/sync":{"post":{"tags":["Developer API"],"summary":"Sync a channel provider","description":"Scope: `channels:write`. Optional operations: availability, rates, reservations. Optional `Idempotency-Key`.","operationId":"syncDeveloperChannel","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperChannelSyncRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperChannelResult"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"channels:write"}},"/api/v1/developer/channels/{provider}/units/{unit_id}/sync":{"post":{"tags":["Developer API"],"summary":"Sync one unit listing","description":"Scope: `channels:write`. Optional `Idempotency-Key`.","operationId":"syncDeveloperChannelUnit","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}},{"name":"unit_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Unit Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperChannelSyncRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperChannelResult"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"channels:write"}},"/api/v1/developer/channels/{provider}/conflicts":{"get":{"tags":["Developer API"],"summary":"List channel conflicts","description":"Scope: `channels:read`.","operationId":"listDeveloperChannelConflicts","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"provider","in":"path","required":true,"schema":{"type":"string","title":"Provider"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperChannelResult"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Resource not found","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"channels:read"}},"/api/v1/developer/channels/properties/{property_id}/airbnb":{"get":{"tags":["Developer API"],"summary":"Get Airbnb connection status","description":"Scope: `channels:read`.","operationId":"getDeveloperAirbnbConnection","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"property_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Property Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperChannelResult"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Resource not found","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"channels:read"}},"/api/v1/developer/channels/properties/{property_id}/airbnb/connection-link":{"post":{"tags":["Developer API"],"summary":"Create an Airbnb connection link","description":"Scope: `channels:write`. Optional `Idempotency-Key`.","operationId":"createDeveloperAirbnbConnectionLink","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"property_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Property Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperChannelResult"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"channels:write"}},"/api/v1/developer/channels/properties/{property_id}/airbnb/listings":{"get":{"tags":["Developer API"],"summary":"List Airbnb listings","description":"Scope: `channels:read`.","operationId":"listDeveloperAirbnbListings","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"property_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Property Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperChannelResult"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Resource not found","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"channels:read"}},"/api/v1/developer/channels/properties/{property_id}/airbnb/mappings":{"post":{"tags":["Developer API"],"summary":"Map an Airbnb listing","description":"Scope: `channels:write`. Optional `Idempotency-Key`.","operationId":"mapDeveloperAirbnbListing","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"property_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Property Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperChannelListingRefRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperChannelResult"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"channels:write"}},"/api/v1/developer/channels/properties/{property_id}/airbnb/mappings/{mapping_id}":{"delete":{"tags":["Developer API"],"summary":"Unmap an Airbnb listing","description":"Scope: `channels:write`. Optional `Idempotency-Key`.","operationId":"unmapDeveloperAirbnbListing","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"property_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Property Id"}},{"name":"mapping_id","in":"path","required":true,"schema":{"type":"string","title":"Mapping Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperChannelResult"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"channels:write"}},"/api/v1/developer/channels/properties/{property_id}/airbnb/activate":{"post":{"tags":["Developer API"],"summary":"Activate Airbnb","description":"Scope: `channels:write`. Optional `Idempotency-Key`.","operationId":"activateDeveloperAirbnb","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"property_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Property Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperChannelResult"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"channels:write"}},"/api/v1/developer/channels/properties/{property_id}/airbnb/deactivate":{"post":{"tags":["Developer API"],"summary":"Deactivate Airbnb","description":"Scope: `channels:write`. Optional `Idempotency-Key`.","operationId":"deactivateDeveloperAirbnb","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"property_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Property Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperChannelResult"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"channels:write"}},"/api/v1/developer/channels/properties/{property_id}/airbnb/publish":{"post":{"tags":["Developer API"],"summary":"Publish an Airbnb listing","description":"Scope: `channels:write`. Optional `Idempotency-Key`.","operationId":"publishDeveloperAirbnbListing","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"property_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Property Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperChannelListingRefRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperChannelResult"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"channels:write"}},"/api/v1/developer/channels/properties/{property_id}/airbnb/unpublish":{"post":{"tags":["Developer API"],"summary":"Unpublish an Airbnb listing","description":"Scope: `channels:write`. Optional `Idempotency-Key`.","operationId":"unpublishDeveloperAirbnbListing","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"property_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Property Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperChannelListingRefRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperChannelResult"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"channels:write"}},"/api/v1/developer/channels/properties/{property_id}/booking-com":{"get":{"tags":["Developer API"],"summary":"Get Booking.com connection status","description":"Scope: `channels:read`.","operationId":"getDeveloperBookingComConnection","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"property_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Property Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperChannelResult"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Resource not found","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"channels:read"}},"/api/v1/developer/channels/properties/{property_id}/booking-com/connection":{"post":{"tags":["Developer API"],"summary":"Connect Booking.com","description":"Scope: `channels:write`. Optional `Idempotency-Key`.","operationId":"connectDeveloperBookingCom","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"property_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Property Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperBookingComConnectRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperChannelResult"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"channels:write"}},"/api/v1/developer/channels/properties/{property_id}/booking-com/mapping-options":{"get":{"tags":["Developer API"],"summary":"List Booking.com mapping options","description":"Scope: `channels:read`.","operationId":"listDeveloperBookingComOptions","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"property_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Property Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperChannelResult"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Resource not found","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"channels:read"}},"/api/v1/developer/channels/properties/{property_id}/booking-com/mappings":{"post":{"tags":["Developer API"],"summary":"Map a Booking.com room","description":"Scope: `channels:write`. Uses the property's existing rate. Optional `Idempotency-Key`.","operationId":"mapDeveloperBookingCom","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"property_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Property Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperBookingComMapRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperChannelResult"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"channels:write"}},"/api/v1/developer/channels/properties/{property_id}/booking-com/mappings/{mapping_id}":{"delete":{"tags":["Developer API"],"summary":"Unmap a Booking.com room","description":"Scope: `channels:write`. Optional `Idempotency-Key`.","operationId":"unmapDeveloperBookingCom","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"property_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Property Id"}},{"name":"mapping_id","in":"path","required":true,"schema":{"type":"string","title":"Mapping Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperChannelResult"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"channels:write"}},"/api/v1/developer/channels/properties/{property_id}/booking-com/activate":{"post":{"tags":["Developer API"],"summary":"Activate Booking.com","description":"Scope: `channels:write`. Optional `Idempotency-Key`.","operationId":"activateDeveloperBookingCom","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"property_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Property Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperChannelResult"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"channels:write"}},"/api/v1/developer/channels/properties/{property_id}/booking-com/deactivate":{"post":{"tags":["Developer API"],"summary":"Deactivate Booking.com","description":"Scope: `channels:write`. Optional `Idempotency-Key`.","operationId":"deactivateDeveloperBookingCom","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"property_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Property Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperChannelResult"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"channels:write"}},"/api/v1/developer/channels/properties/{property_id}/booking-com/pull-bookings":{"post":{"tags":["Developer API"],"summary":"Pull future Booking.com bookings","description":"Scope: `channels:write`. Optional `Idempotency-Key`.","operationId":"pullDeveloperBookingComBookings","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"property_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Property Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperChannelResult"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"channels:write"}},"/api/v1/developer/channels/booking-revisions":{"get":{"tags":["Developer API"],"summary":"List quarantined bookings","description":"Scope: `channels:read`.","operationId":"listDeveloperQuarantinedBookings","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperChannelResult"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"channels:read"}},"/api/v1/developer/channels/booking-revisions/dismiss":{"post":{"tags":["Developer API"],"summary":"Dismiss quarantined bookings","description":"Scope: `channels:write`. Optional `Idempotency-Key`.","operationId":"dismissDeveloperQuarantinedBookings","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperQuarantineDismissRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperChannelResult"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"channels:write"}},"/api/v1/developer/channels/booking-revisions/{revision_id}":{"get":{"tags":["Developer API"],"summary":"Get a quarantined booking","description":"Scope: `channels:read`.","operationId":"getDeveloperQuarantinedBooking","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"revision_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Revision Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperChannelResult"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Resource not found","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"channels:read"}},"/api/v1/developer/channels/booking-revisions/{revision_id}/reprocess":{"post":{"tags":["Developer API"],"summary":"Reprocess a quarantined booking","description":"Scope: `channels:write`. Optional `Idempotency-Key`.","operationId":"reprocessDeveloperQuarantinedBooking","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"revision_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Revision Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperChannelResult"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"channels:write"}},"/api/v1/developer/channels/booking-revisions/{revision_id}/dismiss":{"post":{"tags":["Developer API"],"summary":"Dismiss a quarantined booking","description":"Scope: `channels:write`. Optional `Idempotency-Key`.","operationId":"dismissDeveloperQuarantinedBooking","security":[{"DeveloperApiKey":[]}],"parameters":[{"name":"revision_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Revision Id"}},{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Idempotency-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperQuarantineDismissRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperChannelResult"}}},"headers":{"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}},"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}}},"401":{"description":"Missing or invalid Developer API key"},"403":{"description":"API key is missing the required scope"},"429":{"description":"Rate limit exceeded (per-key or agency aggregate bucket).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds until the client may retry.","schema":{"type":"integer"}},"X-RateLimit-Limit":{"description":"Limit for the rate-limit bucket that applied to this response (per-key or agency aggregate).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Remaining requests in the current window for that bucket.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Unix timestamp when the current window resets.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"404":{"description":"Not found"},"409":{"description":"Idempotency-Key reused with a different request body"},"422":{"description":"Validation error"},"413":{"description":"Request body exceeds the Developer API size limit (`payload_too_large`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"503":{"description":"Operational dependency failure. Codes include `rate_limit_unavailable` (rate-limit store down; fail-closed) and `db_timeout` (Developer database statement timeout).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}},"504":{"description":"Developer API request wall-clock timeout (`gateway_timeout`).","headers":{"X-Request-Id":{"description":"Request correlation id.","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeveloperErrorResponse"}}}}},"x-required-scope":"channels:write"}}},"components":{"schemas":{"DeveloperLeadBulkContactUpdateAsyncRequest":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DeveloperLeadBulkContactUpdateItem"},"type":"array","maxItems":5000,"minItems":1,"title":"Items"}},"additionalProperties":false,"type":"object","required":["items"],"title":"DeveloperLeadBulkContactUpdateAsyncRequest"},"DeveloperStayPaymentLinkResponse":{"properties":{"payment_url":{"type":"string","title":"Payment Url"},"expires_at":{"type":"string","title":"Expires At"},"stay_id":{"type":"string","title":"Stay Id"}},"type":"object","required":["payment_url","expires_at","stay_id"],"title":"DeveloperStayPaymentLinkResponse"},"DeveloperTaskStepItem":{"properties":{"id":{"type":"string","title":"Id"},"title":{"type":"string","title":"Title"},"sort_order":{"type":"integer","title":"Sort Order"},"is_required":{"type":"boolean","title":"Is Required"},"is_completed":{"type":"boolean","title":"Is Completed"},"completed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Completed At"}},"type":"object","required":["id","title","sort_order","is_required","is_completed"],"title":"DeveloperTaskStepItem"},"DeveloperFeeScheduleLineResponse":{"properties":{"id":{"type":"string","title":"Id"},"category_kind":{"type":"string","title":"Category Kind"},"calculation_type":{"type":"string","title":"Calculation Type"},"rate":{"type":"string","title":"Rate"},"label":{"type":"string","title":"Label"},"sort_order":{"type":"integer","title":"Sort Order"}},"type":"object","required":["id","category_kind","calculation_type","rate","label","sort_order"],"title":"DeveloperFeeScheduleLineResponse"},"DeveloperUnavailableRangesResponse":{"properties":{"start":{"type":"string","title":"Start"},"end":{"type":"string","title":"End"},"unavailable":{"items":{"$ref":"#/components/schemas/DeveloperUnavailableRange"},"type":"array","title":"Unavailable"}},"type":"object","required":["start","end","unavailable"],"title":"DeveloperUnavailableRangesResponse"},"DeveloperLeadConvertRequest":{"properties":{"targets":{"items":{"type":"string"},"type":"array","maxItems":2,"minItems":1,"title":"Targets"},"guest_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Guest Id"},"tenant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tenant Id"},"contact_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Id"}},"type":"object","required":["targets"],"title":"DeveloperLeadConvertRequest","description":"ADR-013 explicit Convert — targets must be explicit; ids mean link-existing."},"DeveloperLeadPropertyRequest":{"properties":{"property_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Property Id","description":"Property to link, or null to clear both property and unit relationships."},"unit_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Unit Id","description":"Optional unit under property_id. Must be null/absent when clearing."}},"additionalProperties":false,"type":"object","required":["property_id"],"title":"DeveloperLeadPropertyRequest","description":"Link or clear Lead interested property/unit. Clearing requires property_id null without unit_id."},"DeveloperStayRequestResponse":{"properties":{"id":{"type":"string","title":"Id"},"reference":{"type":"string","title":"Reference"},"status":{"type":"string","title":"Status"},"check_in":{"type":"string","title":"Check In"},"check_out":{"type":"string","title":"Check Out"},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["id","reference","status","check_in","check_out","created_at"],"title":"DeveloperStayRequestResponse"},"DeveloperLeadBulkAssignRequest":{"properties":{"lead_ids":{"items":{"type":"string","format":"uuid"},"type":"array","maxItems":100,"minItems":1,"title":"Lead Ids"},"assigned_membership_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Assigned Membership Id","description":"Active membership in the API key's agency to assign as agent. Null unassigns all listed leads."}},"additionalProperties":false,"type":"object","required":["lead_ids","assigned_membership_id"],"title":"DeveloperLeadBulkAssignRequest"},"DeveloperTenantResponse":{"properties":{"id":{"type":"string","title":"Id"},"full_name":{"type":"string","title":"Full Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"is_active":{"type":"boolean","title":"Is Active","default":true},"deactivated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Deactivated At"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","full_name"],"title":"DeveloperTenantResponse"},"DeveloperCollectionPaymentListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DeveloperCollectionPaymentResponse"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"DeveloperCollectionPaymentListResponse"},"DeveloperTaskTemplateResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"task_type":{"type":"string","title":"Task Type"},"require_all_required":{"type":"boolean","title":"Require All Required"},"is_system":{"type":"boolean","title":"Is System"},"is_active":{"type":"boolean","title":"Is Active"},"items":{"items":{"$ref":"#/components/schemas/DeveloperTaskTemplateItem"},"type":"array","title":"Items"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","name","task_type","require_all_required","is_system","is_active","items"],"title":"DeveloperTaskTemplateResponse"},"DeveloperAccountingListResponse":{"properties":{"items":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Items"},"count":{"type":"integer","title":"Count"}},"additionalProperties":true,"type":"object","required":["items","count"],"title":"DeveloperAccountingListResponse"},"DeveloperChannelConnectionResponse":{"properties":{"provider":{"type":"string","title":"Provider"},"provider_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider Label"},"status":{"type":"string","title":"Status"},"readiness":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Readiness"},"environment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Environment"},"last_sync_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Sync At"},"last_sync_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Sync Status"},"last_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Error"},"connected_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Connected At"},"connect_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Connect Url"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"capabilities":{"$ref":"#/components/schemas/DeveloperChannelCapabilities"}},"type":"object","required":["provider","status","capabilities"],"title":"DeveloperChannelConnectionResponse"},"DeveloperLeadUpdateRequest":{"properties":{"full_name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Full Name"},"email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Email"},"phone":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Phone"},"phone_country_code":{"anyOf":[{"type":"string","maxLength":2},{"type":"null"}],"title":"Phone Country Code"},"source":{"anyOf":[{"$ref":"#/components/schemas/LeadSource"},{"type":"null"}]}},"additionalProperties":false,"type":"object","title":"DeveloperLeadUpdateRequest","description":"Curated contact/source update — excludes status, notes, assignment, relationships."},"DeveloperChannelConflictResolveRequest":{"properties":{"resolution":{"type":"string","maxLength":64,"minLength":1,"title":"Resolution"},"note":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Note"}},"additionalProperties":false,"type":"object","required":["resolution"],"title":"DeveloperChannelConflictResolveRequest"},"DeveloperExternalAccountInput":{"properties":{"external_ref":{"type":"string","maxLength":255,"minLength":1,"title":"External Ref"},"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"account_type":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Account Type"},"is_active":{"type":"boolean","title":"Is Active","default":true},"requires_party":{"type":"boolean","title":"Requires Party","default":false}},"additionalProperties":false,"type":"object","required":["external_ref","name"],"title":"DeveloperExternalAccountInput"},"DeveloperLeadBulkArchiveAsyncRequest":{"properties":{"lead_ids":{"items":{"type":"string","format":"uuid"},"type":"array","maxItems":5000,"minItems":1,"title":"Lead Ids"}},"additionalProperties":false,"type":"object","required":["lead_ids"],"title":"DeveloperLeadBulkArchiveAsyncRequest"},"DeveloperFeeScheduleCreateRequest":{"properties":{"code":{"type":"string","maxLength":64,"minLength":1,"title":"Code"},"name":{"type":"string","maxLength":120,"minLength":1,"title":"Name"},"currency":{"type":"string","maxLength":3,"minLength":3,"title":"Currency"},"owner_share_percent":{"type":"string","title":"Owner Share Percent","default":"0"},"property_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Property Id"},"landlord_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Landlord Id"},"lines":{"items":{"$ref":"#/components/schemas/DeveloperFeeScheduleLineRequest"},"type":"array","title":"Lines"}},"additionalProperties":false,"type":"object","required":["code","name","currency"],"title":"DeveloperFeeScheduleCreateRequest"},"DeveloperAgencyResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"slug":{"type":"string","title":"Slug"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"country_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country Code"},"default_currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Currency"}},"type":"object","required":["id","name","slug"],"title":"DeveloperAgencyResponse"},"DeveloperConversationMessageResponse":{"properties":{"id":{"type":"string","title":"Id"},"channel":{"type":"string","title":"Channel"},"direction":{"type":"string","title":"Direction"},"status":{"type":"string","title":"Status"},"subject":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subject"},"body":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Body"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"sent_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sent At"}},"type":"object","required":["id","channel","direction","status"],"title":"DeveloperConversationMessageResponse","description":"Inbox message. Distinct from the metadata-only custom-channel message resource."},"DeveloperAccountingObjectResponse":{"properties":{},"additionalProperties":true,"type":"object","title":"DeveloperAccountingObjectResponse"},"DeveloperFeeCalculationRequest":{"properties":{"gross_amount":{"type":"string","title":"Gross Amount"},"currency":{"type":"string","maxLength":3,"minLength":3,"title":"Currency"},"schedule_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Schedule Id"},"schedule_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schedule Code"},"property_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Property Id"},"landlord_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Landlord Id"},"stay_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Stay Id"},"collection_payment_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Collection Payment Id"}},"additionalProperties":false,"type":"object","required":["gross_amount","currency"],"title":"DeveloperFeeCalculationRequest"},"DeveloperLandlordCreateRequest":{"properties":{"full_name":{"type":"string","maxLength":255,"minLength":1,"title":"Full Name"},"email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Email"},"phone":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Phone"},"phone_country_code":{"anyOf":[{"type":"string","maxLength":2},{"type":"null"}],"title":"Phone Country Code"},"address":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Address"},"notes":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Notes"},"id_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id Type","description":"national_id | passport | drivers_license | other"},"id_number":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Id Number"}},"additionalProperties":false,"type":"object","required":["full_name"],"title":"DeveloperLandlordCreateRequest"},"DeveloperInspectionRescheduleRequest":{"properties":{"scheduled_date":{"type":"string","format":"date","title":"Scheduled Date"},"start_time":{"type":"string","format":"time","title":"Start Time"},"end_time":{"anyOf":[{"type":"string","format":"time"},{"type":"null"}],"title":"End Time"},"assigned_agent_user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assigned Agent User Id"},"external_assignee_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"External Assignee Name"},"notes":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Notes"}},"type":"object","required":["scheduled_date","start_time"],"title":"DeveloperInspectionRescheduleRequest"},"DeveloperContactLinkResponse":{"properties":{"id":{"type":"string","title":"Id"},"contact_id":{"type":"string","title":"Contact Id"},"entity_type":{"type":"string","title":"Entity Type"},"entity_id":{"type":"string","title":"Entity Id"},"previous_contact_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Previous Contact Id"},"orphan_contact_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Orphan Contact Id"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["id","contact_id","entity_type","entity_id"],"title":"DeveloperContactLinkResponse"},"DeveloperMessageResponse":{"properties":{"id":{"type":"string","title":"Id"},"channel":{"type":"string","title":"Channel"},"direction":{"type":"string","title":"Direction"},"status":{"type":"string","title":"Status"},"related_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Related Type"},"related_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Related Id"},"conversation_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Conversation Id"},"property_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Property Id"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"},"sent_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sent At"},"delivered_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Delivered At"},"read_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Read At"},"failed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Failed At"},"received_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Received At"}},"type":"object","required":["id","channel","direction","status"],"title":"DeveloperMessageResponse","description":"Curated metadata-only message representation (no body/addresses/provider internals)."},"DeveloperMediaItem":{"properties":{"id":{"type":"string","title":"Id"},"media_type":{"type":"string","title":"Media Type"},"source_type":{"type":"string","title":"Source Type","default":"upload"},"url":{"type":"string","title":"Url"},"file_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File Url"},"caption":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Caption"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"category_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category Label"},"category_sort_order":{"type":"integer","title":"Category Sort Order","default":0},"is_cover":{"type":"boolean","title":"Is Cover","default":false},"sort_order":{"type":"integer","title":"Sort Order","default":0},"unit_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Unit Id"},"external_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Url"},"provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider"},"external_video_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Video Id"},"embed_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Embed Url"},"thumbnail_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thumbnail Url"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["id","media_type","url"],"title":"DeveloperMediaItem","description":"Property or unit image/video. `url` is the storefront file path when published.\n\n`file_url` is the Developer API file route and works for drafts with the same API key."},"DeveloperStayResponse":{"properties":{"id":{"type":"string","title":"Id"},"status":{"type":"string","title":"Status"},"payment_status":{"type":"string","title":"Payment Status"},"check_in":{"type":"string","title":"Check In"},"check_out":{"type":"string","title":"Check Out"},"nights":{"type":"integer","title":"Nights"},"nightly_rate":{"type":"number","title":"Nightly Rate"},"currency":{"type":"string","title":"Currency"},"total_amount":{"type":"number","title":"Total Amount"},"public_reference":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Public Reference"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"guest":{"anyOf":[{"$ref":"#/components/schemas/DeveloperStayGuest"},{"type":"null"}]},"property":{"anyOf":[{"$ref":"#/components/schemas/DeveloperStayProperty"},{"type":"null"}]},"unit":{"anyOf":[{"$ref":"#/components/schemas/DeveloperStayUnit"},{"type":"null"}]},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["id","status","payment_status","check_in","check_out","nights","nightly_rate","currency","total_amount","created_at"],"title":"DeveloperStayResponse"},"DeveloperJobError":{"properties":{"code":{"type":"string","title":"Code"},"message":{"type":"string","title":"Message"}},"type":"object","required":["code","message"],"title":"DeveloperJobError"},"DeveloperTaskTemplateUpdateRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"task_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Task Type"},"require_all_required":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Require All Required"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"items":{"anyOf":[{"items":{"$ref":"#/components/schemas/DeveloperTaskTemplateItemWrite"},"type":"array"},{"type":"null"}],"title":"Items"}},"type":"object","title":"DeveloperTaskTemplateUpdateRequest"},"DeveloperPaginationMeta":{"properties":{"page":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Page"},"page_size":{"type":"integer","title":"Page Size"},"total":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total"},"pages":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Pages"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"}},"type":"object","required":["page_size"],"title":"DeveloperPaginationMeta","description":"Browse sets page/total/pages; sync sets next_cursor (page/total/pages optional)."},"DeveloperCancellationRequestResponse":{"properties":{"id":{"type":"string","title":"Id"},"stay_id":{"type":"string","title":"Stay Id"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"},"status":{"type":"string","title":"Status"},"requested_at":{"type":"string","title":"Requested At"},"reviewed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reviewed At"},"review_notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Review Notes"}},"type":"object","required":["id","stay_id","status","requested_at"],"title":"DeveloperCancellationRequestResponse"},"DeveloperLeadFollowUpRequest":{"properties":{"follow_up_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Follow Up Date","description":"Agency-local follow-up date. Required key; null clears/cancels the active pending Lead Follow-Up."},"title":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Title"},"assigned_membership_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Assigned Membership Id","description":"Active agency membership to assign. Cross-agency IDs are rejected."}},"additionalProperties":false,"type":"object","required":["follow_up_date"],"title":"DeveloperLeadFollowUpRequest","description":"Set, update, or clear the Lead's active pending Follow-Up."},"DeveloperPropertyDetailResponse":{"properties":{"id":{"type":"string","title":"Id"},"title":{"type":"string","title":"Title"},"property_type":{"type":"string","title":"Property Type"},"property_structure":{"type":"string","title":"Property Structure","default":"single_unit"},"city":{"type":"string","title":"City"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"},"country":{"type":"string","title":"Country"},"price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price"},"currency":{"type":"string","title":"Currency","default":"USD"},"bedrooms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bedrooms"},"bathrooms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bathrooms"},"availability_label":{"type":"string","title":"Availability Label"},"is_featured":{"type":"boolean","title":"Is Featured","default":false},"main_image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Main Image Url"},"rental_types":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Rental Types"},"from_nightly_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"From Nightly Rate"},"from_monthly_rent":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"From Monthly Rent"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"amenities":{"items":{"type":"string"},"type":"array","title":"Amenities"},"available_from":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Available From"},"available_until":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Available Until"},"media":{"items":{"$ref":"#/components/schemas/DeveloperMediaItem"},"type":"array","title":"Media"},"units":{"items":{"$ref":"#/components/schemas/DeveloperUnitListItem"},"type":"array","title":"Units"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"published":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Published"},"is_archived":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Archived"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"address_line_2":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address Line 2"},"postal_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Postal Code"},"house_rules":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"House Rules"},"guest_check_in_instructions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Guest Check In Instructions"},"guest_check_out_instructions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Guest Check Out Instructions"},"guest_directions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Guest Directions"},"guest_parking_info":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Guest Parking Info"},"guest_wifi_info":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Guest Wifi Info"},"guest_access_instructions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Guest Access Instructions"},"guest_access_release_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Guest Access Release Mode"},"guest_access_release_offset":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Guest Access Release Offset"},"guest_access_require_check_in_form":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Guest Access Require Check In Form"},"verification_badge":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Verification Badge"},"published_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Published At"},"channex_inventory":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Channex Inventory"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","title","property_type","city","country","availability_label"],"title":"DeveloperPropertyDetailResponse","description":"Published-safe projection plus additive inventory fields (Phase 4.1)."},"DeveloperFeeObligationListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DeveloperFeeObligationResponse"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"DeveloperFeeObligationListResponse"},"DeveloperTenantListItem":{"properties":{"id":{"type":"string","title":"Id"},"full_name":{"type":"string","title":"Full Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"is_active":{"type":"boolean","title":"Is Active","default":true},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["id","full_name"],"title":"DeveloperTenantListItem"},"DeveloperConversationAssignRequest":{"properties":{"assigned_membership_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Assigned Membership Id"}},"additionalProperties":false,"type":"object","title":"DeveloperConversationAssignRequest"},"DeveloperAvailabilityDepositItem":{"properties":{"name":{"type":"string","title":"Name"},"amount":{"type":"number","title":"Amount"},"calculation_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Calculation Type"},"refundable":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Refundable","default":true}},"type":"object","required":["name","amount"],"title":"DeveloperAvailabilityDepositItem"},"DeveloperLeadAssignRequest":{"properties":{"assigned_membership_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Assigned Membership Id","description":"Active membership in the API key's agency to assign as agent. Null unassigns. Do not send assigned_agent_user_id or user_id."}},"additionalProperties":false,"type":"object","required":["assigned_membership_id"],"title":"DeveloperLeadAssignRequest","description":"Assign or unassign a Lead using an agency membership id."},"DeveloperTaskScheduleResponse":{"properties":{"id":{"type":"string","title":"Id"},"property_id":{"type":"string","title":"Property Id"},"unit_id":{"type":"string","title":"Unit Id"},"task_type":{"type":"string","title":"Task Type"},"title":{"type":"string","title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"priority":{"type":"string","title":"Priority"},"frequency":{"type":"string","title":"Frequency"},"interval":{"type":"integer","title":"Interval"},"weekday":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Weekday"},"day_of_month":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Day Of Month"},"start_date":{"type":"string","title":"Start Date"},"end_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End Date"},"next_due_at":{"type":"string","title":"Next Due At"},"timezone":{"type":"string","title":"Timezone"},"is_active":{"type":"boolean","title":"Is Active"},"assigned_membership_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assigned Membership Id"},"checklist_template_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Checklist Template Id"},"vendor_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vendor Id"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","property_id","unit_id","task_type","title","priority","frequency","interval","start_date","next_due_at","timezone","is_active"],"title":"DeveloperTaskScheduleResponse"},"DeveloperLeadStatusHistoryResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DeveloperLeadStatusChange"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"DeveloperLeadStatusHistoryResponse"},"DeveloperInspectionAttachmentListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DeveloperInspectionAttachmentResponse"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"DeveloperInspectionAttachmentListResponse"},"DeveloperPropertyManagedListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DeveloperPropertyManagedResponse"},"type":"array","title":"Items"},"meta":{"$ref":"#/components/schemas/DeveloperPaginationMeta"}},"type":"object","required":["items","meta"],"title":"DeveloperPropertyManagedListResponse"},"DeveloperTenantListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DeveloperTenantListItem"},"type":"array","title":"Items"},"meta":{"$ref":"#/components/schemas/DeveloperPaginationMeta"}},"type":"object","required":["items","meta"],"title":"DeveloperTenantListResponse"},"DeveloperTaskActivityItem":{"properties":{"id":{"type":"string","title":"Id"},"event_type":{"type":"string","title":"Event Type"},"title":{"type":"string","title":"Title"},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["id","event_type","title","created_at"],"title":"DeveloperTaskActivityItem"},"DeveloperLandlordResponse":{"properties":{"id":{"type":"string","title":"Id"},"full_name":{"type":"string","title":"Full Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"id_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id Type"},"id_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id Number"},"is_active":{"type":"boolean","title":"Is Active","default":true},"deactivated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Deactivated At"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","full_name"],"title":"DeveloperLandlordResponse"},"DeveloperOutboundMessageRequest":{"properties":{"channel":{"type":"string","pattern":"^(email|sms|whatsapp)$","title":"Channel"},"to_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"To Name"},"to_address":{"type":"string","maxLength":255,"minLength":1,"title":"To Address"},"subject":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Subject"},"body":{"type":"string","maxLength":20000,"minLength":1,"title":"Body"},"template_key":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Template Key"},"related_type":{"anyOf":[{"type":"string","pattern":"^(lead|tenant|guest|landlord)$"},{"type":"null"}],"title":"Related Type"},"related_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Related Id"},"property_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Property Id"}},"additionalProperties":false,"type":"object","required":["channel","to_address","body"],"title":"DeveloperOutboundMessageRequest","description":"Send email, SMS, or WhatsApp through the agency's connected channels."},"DeveloperGuestUpdateRequest":{"properties":{"full_name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Full Name"},"email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Email"},"phone":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Phone"},"phone_country_code":{"anyOf":[{"type":"string","maxLength":8},{"type":"null"}],"title":"Phone Country Code"},"address":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Address"},"notes":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Notes"}},"additionalProperties":false,"type":"object","title":"DeveloperGuestUpdateRequest"},"DeveloperUnitManagedListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DeveloperUnitManagedResponse"},"type":"array","title":"Items"},"meta":{"$ref":"#/components/schemas/DeveloperPaginationMeta"}},"type":"object","required":["items","meta"],"title":"DeveloperUnitManagedListResponse"},"DeveloperJob":{"properties":{"id":{"type":"string","title":"Id"},"status":{"type":"string","title":"Status"},"operation":{"type":"string","title":"Operation"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"started_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Started At"},"completed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Completed At"},"expires_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expires At"},"progress":{"$ref":"#/components/schemas/DeveloperJobProgress"},"error":{"anyOf":[{"$ref":"#/components/schemas/DeveloperJobError"},{"type":"null"}]}},"type":"object","required":["id","status","operation","progress"],"title":"DeveloperJob"},"DeveloperLeadArchiveRequest":{"properties":{},"additionalProperties":false,"type":"object","title":"DeveloperLeadArchiveRequest","description":"Empty body for Lead archive. Unknown fields are rejected."},"DeveloperFeeScheduleLineRequest":{"properties":{"category_kind":{"type":"string","title":"Category Kind","default":"management"},"calculation_type":{"type":"string","title":"Calculation Type","default":"percent"},"rate":{"type":"string","title":"Rate","default":"0"},"label":{"type":"string","maxLength":120,"minLength":1,"title":"Label"},"sort_order":{"type":"integer","title":"Sort Order","default":0}},"additionalProperties":false,"type":"object","required":["label"],"title":"DeveloperFeeScheduleLineRequest"},"DeveloperPropertyListItem":{"properties":{"id":{"type":"string","title":"Id"},"title":{"type":"string","title":"Title"},"property_type":{"type":"string","title":"Property Type"},"property_structure":{"type":"string","title":"Property Structure","default":"single_unit"},"city":{"type":"string","title":"City"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"},"country":{"type":"string","title":"Country"},"price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price"},"currency":{"type":"string","title":"Currency","default":"USD"},"bedrooms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bedrooms"},"bathrooms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bathrooms"},"availability_label":{"type":"string","title":"Availability Label"},"is_featured":{"type":"boolean","title":"Is Featured","default":false},"main_image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Main Image Url"},"rental_types":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Rental Types"},"from_nightly_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"From Nightly Rate"},"from_monthly_rent":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"From Monthly Rent"}},"type":"object","required":["id","title","property_type","city","country","availability_label"],"title":"DeveloperPropertyListItem"},"DeveloperAccountingChangeRequest":{"properties":{"entity_type":{"type":"string","maxLength":64,"minLength":1,"title":"Entity Type"},"operation":{"type":"string","maxLength":32,"minLength":1,"title":"Operation"},"external_ref":{"type":"string","maxLength":255,"minLength":1,"title":"External Ref"},"source_type":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Source Type"},"source_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Source Id"}},"additionalProperties":false,"type":"object","required":["entity_type","operation","external_ref"],"title":"DeveloperAccountingChangeRequest"},"DeveloperCustomMessageInboundRequest":{"properties":{"channel":{"type":"string","pattern":"^custom$","title":"Channel"},"channel_key":{"type":"string","maxLength":64,"minLength":1,"title":"Channel Key"},"channel_label":{"anyOf":[{"type":"string","maxLength":80},{"type":"null"}],"title":"Channel Label"},"external_message_id":{"type":"string","maxLength":255,"minLength":1,"title":"External Message Id"},"external_user_id":{"type":"string","maxLength":255,"minLength":1,"title":"External User Id"},"external_conversation_id":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"External Conversation Id"},"occurred_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Occurred At"},"recipient":{"$ref":"#/components/schemas/DeveloperCustomMessageRecipient"},"body":{"type":"string","maxLength":20000,"minLength":1,"title":"Body"}},"additionalProperties":false,"type":"object","required":["channel","channel_key","external_message_id","external_user_id","recipient","body"],"title":"DeveloperCustomMessageInboundRequest","description":"Custom Channel Gateway inbound ingest — third party reports an external message."},"DeveloperAvailabilityBlockResponse":{"properties":{"id":{"type":"string","title":"Id"},"property_id":{"type":"string","title":"Property Id"},"unit_id":{"type":"string","title":"Unit Id"},"start_at":{"type":"string","title":"Start At"},"end_at":{"type":"string","title":"End At"},"reason_type":{"type":"string","title":"Reason Type"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"status":{"type":"string","title":"Status"},"source":{"type":"string","title":"Source","default":"manual"},"cancelled_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cancelled At"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","property_id","unit_id","start_at","end_at","reason_type","status"],"title":"DeveloperAvailabilityBlockResponse"},"DeveloperTaskStepsResponse":{"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"task_id":{"type":"string","title":"Task Id"},"template_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Template Id"},"require_completion":{"type":"boolean","title":"Require Completion","default":false},"completed":{"type":"integer","title":"Completed","default":0},"total":{"type":"integer","title":"Total","default":0},"required_remaining":{"type":"integer","title":"Required Remaining","default":0},"items":{"items":{"$ref":"#/components/schemas/DeveloperTaskStepItem"},"type":"array","title":"Items","default":[]}},"type":"object","required":["task_id"],"title":"DeveloperTaskStepsResponse"},"DeveloperNightlyBreakdownItem":{"properties":{"date":{"type":"string","title":"Date"},"nightly_rate":{"type":"number","title":"Nightly Rate"},"amount":{"type":"number","title":"Amount"},"rate_source":{"type":"string","title":"Rate Source"}},"type":"object","required":["date","nightly_rate","amount","rate_source"],"title":"DeveloperNightlyBreakdownItem"},"DeveloperUnitUpdateRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"unit_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Unit Type"},"floor":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Floor"},"bedrooms":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Bedrooms"},"bathrooms":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Bathrooms"},"beds":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Beds"},"max_guests":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Max Guests"},"square_feet":{"anyOf":[{"type":"integer","exclusiveMinimum":0.0},{"type":"null"}],"title":"Square Feet"},"min_nights":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Min Nights"},"max_nights":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Max Nights"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"rent_amount":{"anyOf":[{"type":"number","minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Rent Amount"},"rent_period":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rent Period"},"rental_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rental Type"},"nightly_rate":{"anyOf":[{"type":"number","minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Nightly Rate"},"default_check_in_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Check In Time"},"default_check_out_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Check Out Time"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"available_from":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Available From"},"available_until":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Available Until"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order"}},"type":"object","title":"DeveloperUnitUpdateRequest"},"DeveloperTenancyUpdateRequest":{"properties":{"tenant_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Tenant Id"},"property_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Property Id"},"unit_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Unit Id"},"start_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Start Date"},"end_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"End Date"}},"additionalProperties":false,"type":"object","title":"DeveloperTenancyUpdateRequest","description":"Narrow tenancy update — draft relationships/dates; active end_date only."},"DeveloperInspectionTaskCreateRequest":{"properties":{"task_type":{"type":"string","title":"Task Type"},"title":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Title"},"description":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Description"},"priority":{"type":"string","title":"Priority","default":"normal"},"due_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Due At"},"unit_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Unit Id"},"assigned_membership_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assigned Membership Id"}},"type":"object","required":["task_type"],"title":"DeveloperInspectionTaskCreateRequest"},"DeveloperTenantBulkUpdateAsyncRequest":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DeveloperTenantBulkUpdateItem"},"type":"array","maxItems":5000,"minItems":1,"title":"Items"}},"additionalProperties":false,"type":"object","required":["items"],"title":"DeveloperTenantBulkUpdateAsyncRequest"},"DeveloperContactStaySummary":{"properties":{"id":{"type":"string","title":"Id"},"check_in":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Check In"},"check_out":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Check Out"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},"type":"object","required":["id"],"title":"DeveloperContactStaySummary"},"DeveloperPersonDocumentListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DeveloperPersonDocumentResponse"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"DeveloperPersonDocumentListResponse"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"DeveloperTaskTemplateItemWrite":{"properties":{"title":{"type":"string","maxLength":255,"minLength":1,"title":"Title"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order"},"is_required":{"type":"boolean","title":"Is Required","default":true}},"type":"object","required":["title"],"title":"DeveloperTaskTemplateItemWrite"},"DeveloperWebhookResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"url":{"type":"string","title":"Url"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"status":{"type":"string","title":"Status"},"subscribed_events":{"items":{"type":"string"},"type":"array","title":"Subscribed Events"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"},"last_delivery_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Delivery At"},"signing_secret":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signing Secret"}},"type":"object","required":["id","name","url","status","subscribed_events"],"title":"DeveloperWebhookResponse"},"DeveloperLeadBulkContactUpdateRequest":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DeveloperLeadBulkContactUpdateItem"},"type":"array","maxItems":100,"minItems":1,"title":"Items"}},"additionalProperties":false,"type":"object","required":["items"],"title":"DeveloperLeadBulkContactUpdateRequest"},"DeveloperChannelCapabilitiesResponse":{"properties":{"items":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Items"},"total":{"type":"integer","title":"Total"}},"type":"object","required":["items","total"],"title":"DeveloperChannelCapabilitiesResponse"},"DeveloperLeadListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DeveloperLeadResponse"},"type":"array","title":"Items"},"meta":{"$ref":"#/components/schemas/DeveloperPaginationMeta"}},"type":"object","required":["items","meta"],"title":"DeveloperLeadListResponse"},"DeveloperWebhookDeliveryResponse":{"properties":{"id":{"type":"string","title":"Id"},"webhook_endpoint_id":{"type":"string","title":"Webhook Endpoint Id"},"domain_event_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Domain Event Id"},"event_type":{"type":"string","title":"Event Type"},"status":{"type":"string","title":"Status"},"is_test":{"type":"boolean","title":"Is Test"},"attempt_count":{"type":"integer","title":"Attempt Count"},"next_attempt_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Attempt At"},"last_attempt_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Attempt At"},"response_status":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Response Status"},"response_body_preview":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Response Body Preview"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"completed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Completed At"}},"type":"object","required":["id","webhook_endpoint_id","event_type","status","is_test","attempt_count"],"title":"DeveloperWebhookDeliveryResponse"},"DeveloperContactDetailResponse":{"properties":{"id":{"type":"string","title":"Id"},"display_name":{"type":"string","title":"Display Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"linked_roles":{"items":{"$ref":"#/components/schemas/DeveloperContactLinkedRole"},"type":"array","title":"Linked Roles"},"stays":{"items":{"$ref":"#/components/schemas/DeveloperContactStaySummary"},"type":"array","title":"Stays"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","display_name"],"title":"DeveloperContactDetailResponse"},"DeveloperTaskScheduleListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DeveloperTaskScheduleResponse"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"DeveloperTaskScheduleListResponse"},"DeveloperChannelCapabilities":{"properties":{"connect":{"type":"boolean","title":"Connect","default":false},"discover_listings":{"type":"boolean","title":"Discover Listings","default":false},"import_listing":{"type":"boolean","title":"Import Listing","default":false},"push_content":{"type":"boolean","title":"Push Content","default":false},"push_rates":{"type":"boolean","title":"Push Rates","default":false},"push_availability":{"type":"boolean","title":"Push Availability","default":false},"pull_reservations":{"type":"boolean","title":"Pull Reservations","default":false}},"type":"object","title":"DeveloperChannelCapabilities"},"DeveloperCancellationReviewRequest":{"properties":{"review_notes":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Review Notes"}},"additionalProperties":false,"type":"object","title":"DeveloperCancellationReviewRequest"},"DeveloperTaskVendorCreateRequest":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"phone":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Phone"},"email":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Email"},"notes":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Notes"}},"type":"object","required":["name"],"title":"DeveloperTaskVendorCreateRequest"},"DeveloperQuarantineDismissRequest":{"properties":{"note":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Note"},"quarantine_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Quarantine Reason"},"limit":{"type":"integer","maximum":200.0,"minimum":1.0,"title":"Limit","default":100}},"additionalProperties":false,"type":"object","title":"DeveloperQuarantineDismissRequest"},"DeveloperLinkedPropertyResponse":{"properties":{"id":{"type":"string","title":"Id"},"title":{"type":"string","title":"Title"}},"type":"object","required":["id","title"],"title":"DeveloperLinkedPropertyResponse"},"DeveloperContactListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DeveloperContactListItem"},"type":"array","title":"Items"},"meta":{"$ref":"#/components/schemas/DeveloperPaginationMeta"}},"type":"object","required":["items","meta"],"title":"DeveloperContactListResponse"},"DeveloperInspectionUpdateRequest":{"properties":{"notes":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Notes"},"completion_note":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Completion Note"}},"type":"object","title":"DeveloperInspectionUpdateRequest"},"DeveloperTaskAttachmentListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DeveloperTaskAttachmentResponse"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"DeveloperTaskAttachmentListResponse"},"DeveloperBulkMutationResponse":{"properties":{"total":{"type":"integer","title":"Total"},"succeeded":{"type":"integer","title":"Succeeded"},"failed":{"type":"integer","title":"Failed"},"skipped":{"type":"integer","title":"Skipped","default":0},"results":{"items":{"$ref":"#/components/schemas/DeveloperBulkItemResult"},"type":"array","title":"Results"}},"type":"object","required":["total","succeeded","failed","results"],"title":"DeveloperBulkMutationResponse"},"DeveloperBulkItemError":{"properties":{"code":{"type":"string","title":"Code"},"message":{"type":"string","title":"Message"}},"type":"object","required":["code","message"],"title":"DeveloperBulkItemError"},"DeveloperLeadBulkContactUpdateItem":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"full_name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Full Name"},"email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Email"},"phone":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Phone"},"phone_country_code":{"anyOf":[{"type":"string","maxLength":2},{"type":"null"}],"title":"Phone Country Code"},"source":{"anyOf":[{"$ref":"#/components/schemas/LeadSource"},{"type":"null"}]}},"additionalProperties":false,"type":"object","required":["id"],"title":"DeveloperLeadBulkContactUpdateItem","description":"Mirrors DeveloperLeadUpdateRequest fields plus required lead id."},"DeveloperCalendarEventsResponse":{"properties":{"events":{"items":{"$ref":"#/components/schemas/DeveloperCalendarEventResponse"},"type":"array","title":"Events"},"meta":{"$ref":"#/components/schemas/DeveloperCalendarMetaResponse"}},"type":"object","required":["events","meta"],"title":"DeveloperCalendarEventsResponse"},"DeveloperTaskAttachmentResponse":{"properties":{"id":{"type":"string","title":"Id"},"task_id":{"type":"string","title":"Task Id"},"filename":{"type":"string","title":"Filename"},"content_type":{"type":"string","title":"Content Type"},"size_bytes":{"type":"integer","title":"Size Bytes"},"uploaded_while_status":{"type":"string","title":"Uploaded While Status"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"file_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File Url"}},"type":"object","required":["id","task_id","filename","content_type","size_bytes","uploaded_while_status"],"title":"DeveloperTaskAttachmentResponse"},"DeveloperCollectionPaymentCreateRequest":{"properties":{"amount":{"type":"string","maxLength":32,"minLength":1,"title":"Amount"},"currency":{"type":"string","maxLength":3,"minLength":3,"title":"Currency"},"purpose_kind":{"type":"string","title":"Purpose Kind","default":"other"},"purpose_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Purpose Ref"},"description":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Description"},"stay_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Stay Id"},"property_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Property Id"},"payer_contact_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Payer Contact Id"},"payer_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payer Email"},"payer_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Payer Name"},"collection_method":{"type":"string","pattern":"^(payment_link|bank_transfer)$","title":"Collection Method","default":"payment_link"}},"additionalProperties":false,"type":"object","required":["amount","currency"],"title":"DeveloperCollectionPaymentCreateRequest"},"DeveloperStayPaymentChargeItem":{"properties":{"id":{"type":"string","title":"Id"},"description":{"type":"string","title":"Description"},"amount":{"type":"number","title":"Amount"},"currency":{"type":"string","title":"Currency"},"status":{"type":"string","title":"Status"},"line_type":{"type":"string","title":"Line Type"},"financial_bucket":{"type":"string","title":"Financial Bucket"}},"type":"object","required":["id","description","amount","currency","status","line_type","financial_bucket"],"title":"DeveloperStayPaymentChargeItem"},"DeveloperAvailabilityResponse":{"properties":{"available":{"type":"boolean","title":"Available"},"check_in":{"type":"string","title":"Check In"},"check_out":{"type":"string","title":"Check Out"},"nights":{"type":"integer","title":"Nights"},"nightly_rate":{"type":"number","title":"Nightly Rate"},"currency":{"type":"string","title":"Currency"},"estimated_total":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Estimated Total"},"engine_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Engine Version"},"nightly_breakdown":{"anyOf":[{"items":{"$ref":"#/components/schemas/DeveloperNightlyBreakdownItem"},"type":"array"},{"type":"null"}],"title":"Nightly Breakdown"},"accommodation_subtotal":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Accommodation Subtotal"},"fee_subtotal":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Fee Subtotal"},"tax_subtotal":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Tax Subtotal"},"fees":{"anyOf":[{"items":{"$ref":"#/components/schemas/DeveloperAvailabilityFeeItem"},"type":"array"},{"type":"null"}],"title":"Fees"},"taxes":{"anyOf":[{"items":{"$ref":"#/components/schemas/DeveloperAvailabilityTaxItem"},"type":"array"},{"type":"null"}],"title":"Taxes"},"deposit_subtotal":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Deposit Subtotal"},"deposit_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Deposit Amount"},"deposits":{"anyOf":[{"items":{"$ref":"#/components/schemas/DeveloperAvailabilityDepositItem"},"type":"array"},{"type":"null"}],"title":"Deposits"}},"type":"object","required":["available","check_in","check_out","nights","nightly_rate","currency"],"title":"DeveloperAvailabilityResponse"},"DeveloperTaskActivityResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DeveloperTaskActivityItem"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"DeveloperTaskActivityResponse"},"DeveloperTaskUpdateRequest":{"properties":{"title":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Title"},"description":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Description"},"priority":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Priority","description":"low | normal | high | urgent"},"due_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Due At","description":"ISO-8601 due datetime"},"vendor_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vendor Id","description":"Service vendor id. Send null to clear."}},"type":"object","title":"DeveloperTaskUpdateRequest"},"DeveloperTenancyCreateRequest":{"properties":{"tenant_id":{"type":"string","format":"uuid","title":"Tenant Id"},"property_id":{"type":"string","format":"uuid","title":"Property Id"},"unit_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Unit Id"},"start_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Start Date"},"end_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"End Date"},"activate":{"type":"boolean","title":"Activate","description":"Activate the tenancy. Omit or false to leave it as a draft.","default":false}},"additionalProperties":false,"type":"object","required":["tenant_id","property_id"],"title":"DeveloperTenancyCreateRequest","description":"Tenancy create — non-financial public contract. Draft unless activate is true."},"DeveloperInspectionAttachmentResponse":{"properties":{"id":{"type":"string","title":"Id"},"inspection_id":{"type":"string","title":"Inspection Id"},"filename":{"type":"string","title":"Filename"},"content_type":{"type":"string","title":"Content Type"},"size_bytes":{"type":"integer","title":"Size Bytes"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"file_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File Url"}},"type":"object","required":["id","inspection_id","filename","content_type","size_bytes"],"title":"DeveloperInspectionAttachmentResponse"},"DeveloperTaskCreateRequest":{"properties":{"unit_id":{"type":"string","title":"Unit Id"},"title":{"type":"string","maxLength":255,"minLength":1,"title":"Title"},"task_type":{"type":"string","title":"Task Type","description":"cleaning | maintenance | inspection | turnover | kitchen | other"},"due_at":{"type":"string","title":"Due At","description":"ISO-8601 due datetime"},"description":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Description"},"priority":{"type":"string","title":"Priority","description":"low | normal | high | urgent","default":"normal"},"stay_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stay Id"},"assigned_membership_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assigned Membership Id","description":"Agency membership id of the assignee (same agency)."},"checklist_template_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Checklist Template Id","description":"Task template to copy onto this task as steps."},"vendor_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vendor Id"}},"type":"object","required":["unit_id","title","task_type","due_at"],"title":"DeveloperTaskCreateRequest"},"DeveloperPossibleContactMatch":{"properties":{"entity_type":{"type":"string","title":"Entity Type"},"entity_id":{"type":"string","title":"Entity Id"},"full_name":{"type":"string","title":"Full Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"match_reasons":{"items":{"type":"string"},"type":"array","title":"Match Reasons"}},"type":"object","required":["entity_type","entity_id","full_name"],"title":"DeveloperPossibleContactMatch"},"DeveloperTaskScheduleCreateRequest":{"properties":{"unit_id":{"type":"string","title":"Unit Id"},"task_type":{"type":"string","title":"Task Type"},"title":{"type":"string","maxLength":255,"minLength":1,"title":"Title"},"frequency":{"type":"string","title":"Frequency","description":"daily | weekly | monthly"},"start_date":{"type":"string","format":"date","title":"Start Date"},"description":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Description"},"priority":{"type":"string","title":"Priority","default":"normal"},"interval":{"type":"integer","minimum":1.0,"title":"Interval","default":1},"weekday":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Weekday"},"day_of_month":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Day Of Month"},"end_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"End Date"},"assigned_membership_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assigned Membership Id"},"checklist_template_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Checklist Template Id"},"vendor_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vendor Id"}},"type":"object","required":["unit_id","task_type","title","frequency","start_date"],"title":"DeveloperTaskScheduleCreateRequest"},"DeveloperUnitCreateRequest":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"unit_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Unit Type"},"floor":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Floor"},"bedrooms":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Bedrooms"},"bathrooms":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Bathrooms"},"beds":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Beds"},"max_guests":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Max Guests"},"square_feet":{"anyOf":[{"type":"integer","exclusiveMinimum":0.0},{"type":"null"}],"title":"Square Feet"},"min_nights":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Min Nights"},"max_nights":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Max Nights"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"rent_amount":{"anyOf":[{"type":"number","minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Rent Amount"},"rent_period":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rent Period"},"rental_type":{"type":"string","title":"Rental Type","default":"long_term"},"nightly_rate":{"anyOf":[{"type":"number","minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Nightly Rate"},"default_check_in_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Check In Time"},"default_check_out_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Check Out Time"},"status":{"type":"string","title":"Status","description":"Unit listing status. Defaults to draft. Set available, or another live status, to list the unit.","default":"draft"},"available_from":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Available From"},"available_until":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Available Until"}},"type":"object","required":["name"],"title":"DeveloperUnitCreateRequest"},"DeveloperMessageTemplateResponse":{"properties":{"id":{"type":"string","title":"Id"},"key":{"type":"string","title":"Key"},"name":{"type":"string","title":"Name"},"channel":{"type":"string","title":"Channel"},"subject":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subject"},"body":{"type":"string","title":"Body"},"is_active":{"type":"boolean","title":"Is Active"},"is_system":{"type":"boolean","title":"Is System"}},"type":"object","required":["id","key","name","channel","body","is_active","is_system"],"title":"DeveloperMessageTemplateResponse"},"DeveloperJobResultPage":{"properties":{"job_id":{"type":"string","title":"Job Id"},"status":{"type":"string","title":"Status"},"total":{"type":"integer","title":"Total"},"succeeded":{"type":"integer","title":"Succeeded"},"failed":{"type":"integer","title":"Failed"},"skipped":{"type":"integer","title":"Skipped","default":0},"items":{"items":{"$ref":"#/components/schemas/DeveloperJobItemResult"},"type":"array","title":"Items"},"meta":{"$ref":"#/components/schemas/DeveloperPaginationMeta"}},"type":"object","required":["job_id","status","total","succeeded","failed","items","meta"],"title":"DeveloperJobResultPage"},"DeveloperStayRecordedPaymentResponse":{"properties":{"id":{"type":"string","title":"Id"},"stay_id":{"type":"string","title":"Stay Id"},"charge_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Charge Id"},"amount":{"type":"number","title":"Amount"},"currency":{"type":"string","title":"Currency"},"method":{"type":"string","title":"Method"},"status":{"type":"string","title":"Status"},"reference":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reference"},"paid_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Paid At"},"voided_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Voided At"},"void_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Void Reason"},"receipt_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Receipt Id"},"receipt_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Receipt Number"},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["id","stay_id","amount","currency","method","status","created_at"],"title":"DeveloperStayRecordedPaymentResponse"},"DeveloperLeadBulkAssignAsyncRequest":{"properties":{"lead_ids":{"items":{"type":"string","format":"uuid"},"type":"array","maxItems":5000,"minItems":1,"title":"Lead Ids"},"assigned_membership_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Assigned Membership Id","description":"Active membership in the API key's agency to assign as agent. Null unassigns all listed leads."}},"additionalProperties":false,"type":"object","required":["lead_ids","assigned_membership_id"],"title":"DeveloperLeadBulkAssignAsyncRequest"},"DeveloperCollectionSummaryResponse":{"properties":{"currency":{"type":"string","title":"Currency"},"outstanding":{"$ref":"#/components/schemas/DeveloperMoneyBucket"},"collected":{"$ref":"#/components/schemas/DeveloperMoneyBucket"},"partially_paid":{"$ref":"#/components/schemas/DeveloperMoneyBucket"},"needs_attention":{"$ref":"#/components/schemas/DeveloperMoneyBucket"}},"type":"object","required":["currency","outstanding","collected","partially_paid","needs_attention"],"title":"DeveloperCollectionSummaryResponse"},"DeveloperCustomMessageRecipient":{"properties":{"type":{"type":"string","pattern":"^(lead|tenant|guest|landlord)$","title":"Type"},"id":{"type":"string","format":"uuid","title":"Id"}},"additionalProperties":false,"type":"object","required":["type","id"],"title":"DeveloperCustomMessageRecipient"},"DeveloperStayRefundResponse":{"properties":{"id":{"type":"string","title":"Id"},"stay_id":{"type":"string","title":"Stay Id"},"stay_payment_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stay Payment Id"},"amount":{"type":"number","title":"Amount"},"currency":{"type":"string","title":"Currency"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"},"status":{"type":"string","title":"Status"},"requested_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Requested At"},"processed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Processed At"}},"type":"object","required":["id","stay_id","amount","currency","status"],"title":"DeveloperStayRefundResponse"},"DeveloperChannelResult":{"properties":{},"additionalProperties":true,"type":"object","title":"DeveloperChannelResult","description":"Channel action result. Sensitive credential fields are removed before return."},"DeveloperMoneyBucket":{"properties":{"amount":{"type":"string","title":"Amount"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["amount","count"],"title":"DeveloperMoneyBucket"},"DeveloperLeadConvertResponse":{"properties":{"lead_id":{"type":"string","title":"Lead Id"},"status":{"type":"string","title":"Status"},"converted_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Converted At"},"converted_guest_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Converted Guest Id"},"converted_tenant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Converted Tenant Id"},"contact_id":{"type":"string","title":"Contact Id"},"guest":{"anyOf":[{"$ref":"#/components/schemas/DeveloperLeadConvertRoleResult"},{"type":"null"}]},"tenant":{"anyOf":[{"$ref":"#/components/schemas/DeveloperLeadConvertRoleResult"},{"type":"null"}]}},"type":"object","required":["lead_id","status","contact_id"],"title":"DeveloperLeadConvertResponse"},"DeveloperTenancyResponse":{"properties":{"id":{"type":"string","title":"Id"},"tenant_id":{"type":"string","title":"Tenant Id"},"property_id":{"type":"string","title":"Property Id"},"unit_id":{"type":"string","title":"Unit Id"},"start_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start Date"},"end_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End Date"},"status":{"type":"string","title":"Status","description":"Canonical status: draft | active | terminated | expired"},"activated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Activated At"},"terminated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Terminated At"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","tenant_id","property_id","unit_id","status"],"title":"DeveloperTenancyResponse"},"DeveloperStayRefundRequest":{"properties":{"amount":{"type":"number","exclusiveMinimum":0.0,"title":"Amount"},"reason":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Reason"},"stay_payment_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Stay Payment Id"}},"additionalProperties":false,"type":"object","required":["amount"],"title":"DeveloperStayRefundRequest"},"DeveloperLeadResponse":{"properties":{"id":{"type":"string","title":"Id"},"full_name":{"type":"string","title":"Full Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"status":{"type":"string","title":"Status"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"property_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Property Id"},"unit_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Unit Id"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","full_name","status"],"title":"DeveloperLeadResponse"},"DeveloperTaskVendorUpdateRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"phone":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Phone"},"email":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Email"},"notes":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Notes"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"DeveloperTaskVendorUpdateRequest"},"DeveloperLandlordListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DeveloperLandlordListItem"},"type":"array","title":"Items"},"meta":{"$ref":"#/components/schemas/DeveloperPaginationMeta"}},"type":"object","required":["items","meta"],"title":"DeveloperLandlordListResponse"},"DeveloperAvailabilityBlockUpdateRequest":{"properties":{"start_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start At"},"end_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End At"},"reason_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason Type"},"notes":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Notes"}},"type":"object","title":"DeveloperAvailabilityBlockUpdateRequest"},"DeveloperUnitListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DeveloperUnitListItem"},"type":"array","title":"Items"},"meta":{"$ref":"#/components/schemas/DeveloperPaginationMeta"}},"type":"object","required":["items","meta"],"title":"DeveloperUnitListResponse"},"DeveloperCollectionPaymentResponse":{"properties":{"id":{"type":"string","title":"Id"},"stay_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stay Id"},"property_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Property Id"},"property_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Property Name"},"payer_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payer Name"},"purpose_kind":{"type":"string","title":"Purpose Kind"},"purpose_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Purpose Label"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"display_reference":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Reference"},"collection_method":{"type":"string","title":"Collection Method"},"amount":{"type":"string","title":"Amount"},"expected_amount":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expected Amount"},"amount_confirmed":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Amount Confirmed"},"remaining_amount":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Remaining Amount"},"currency":{"type":"string","title":"Currency"},"status":{"type":"string","title":"Status"},"status_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Reason"},"completeness_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Completeness Status"},"checkout_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Checkout Url"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["id","purpose_kind","collection_method","amount","currency","status"],"title":"DeveloperCollectionPaymentResponse"},"DeveloperAvailabilityTaxItem":{"properties":{"name":{"type":"string","title":"Name"},"amount":{"type":"number","title":"Amount"},"rate":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rate"},"applies_to":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Applies To"}},"type":"object","required":["name","amount"],"title":"DeveloperAvailabilityTaxItem"},"DeveloperInspectionListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DeveloperInspectionResponse"},"type":"array","title":"Items"},"meta":{"$ref":"#/components/schemas/DeveloperPaginationMeta"}},"type":"object","required":["items","meta"],"title":"DeveloperInspectionListResponse"},"DeveloperLeadCreateRequest":{"properties":{"full_name":{"type":"string","maxLength":255,"minLength":1,"title":"Full Name"},"email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Email"},"phone":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Phone"},"phone_country_code":{"anyOf":[{"type":"string","maxLength":2},{"type":"null"}],"title":"Phone Country Code"},"message":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Message"},"property_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Property Id"},"unit_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Unit Id"}},"type":"object","required":["full_name"],"title":"DeveloperLeadCreateRequest"},"DeveloperTaskTemplateCreateRequest":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"task_type":{"type":"string","title":"Task Type"},"require_all_required":{"type":"boolean","title":"Require All Required","default":true},"items":{"items":{"$ref":"#/components/schemas/DeveloperTaskTemplateItemWrite"},"type":"array","title":"Items","default":[]}},"type":"object","required":["name","task_type"],"title":"DeveloperTaskTemplateCreateRequest"},"DeveloperPersonDocumentCreateRequest":{"properties":{"url":{"type":"string","maxLength":500,"title":"Url","description":"Public http(s) URL. The file is not downloaded."},"name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Name"},"document_type":{"type":"string","title":"Document Type","description":"Tenant: identification | application | other. Landlord: identification | ownership | authorization | other.","default":"other"}},"type":"object","required":["url"],"title":"DeveloperPersonDocumentCreateRequest"},"DeveloperPersonDocumentResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"document_type":{"type":"string","title":"Document Type"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"file_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File Url"}},"type":"object","required":["id","name","document_type"],"title":"DeveloperPersonDocumentResponse"},"DeveloperContactListItem":{"properties":{"id":{"type":"string","title":"Id"},"display_name":{"type":"string","title":"Display Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"linked_role_types":{"items":{"type":"string"},"type":"array","title":"Linked Role Types"},"linked_role_count":{"type":"integer","title":"Linked Role Count","default":0},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","display_name"],"title":"DeveloperContactListItem"},"DeveloperTaskScheduleRunResponse":{"properties":{"generated":{"type":"integer","title":"Generated"}},"type":"object","required":["generated"],"title":"DeveloperTaskScheduleRunResponse"},"DeveloperAvailabilityBlockListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DeveloperAvailabilityBlockResponse"},"type":"array","title":"Items"},"meta":{"$ref":"#/components/schemas/DeveloperPaginationMeta"}},"type":"object","required":["items","meta"],"title":"DeveloperAvailabilityBlockListResponse"},"DeveloperCalendarMetaResponse":{"properties":{"timezone":{"type":"string","title":"Timezone"},"today":{"type":"string","title":"Today"},"range_start":{"type":"string","title":"Range Start"},"range_end":{"type":"string","title":"Range End"}},"type":"object","required":["timezone","today","range_start","range_end"],"title":"DeveloperCalendarMetaResponse"},"DeveloperGuestResponse":{"properties":{"id":{"type":"string","title":"Id"},"full_name":{"type":"string","title":"Full Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"is_active":{"type":"boolean","title":"Is Active","default":true},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","full_name"],"title":"DeveloperGuestResponse"},"DeveloperStayCreateRequest":{"properties":{"property_id":{"type":"string","format":"uuid","title":"Property Id"},"unit_id":{"type":"string","format":"uuid","title":"Unit Id"},"guest_id":{"type":"string","format":"uuid","title":"Guest Id"},"check_in":{"type":"string","maxLength":40,"minLength":1,"title":"Check In"},"check_out":{"type":"string","maxLength":40,"minLength":1,"title":"Check Out"},"nightly_rate":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Nightly Rate"},"notes":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Notes"}},"additionalProperties":false,"type":"object","required":["property_id","unit_id","guest_id","check_in","check_out"],"title":"DeveloperStayCreateRequest","description":"Create a pending stay for an existing guest. Same action as the stays desk."},"DeveloperPaymentResponse":{"properties":{"id":{"type":"string","title":"Id"},"stay_id":{"type":"string","title":"Stay Id"},"charge_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Charge Id"},"amount":{"type":"number","title":"Amount"},"currency":{"type":"string","title":"Currency"},"status":{"type":"string","title":"Status"},"method":{"type":"string","title":"Method"},"provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider"},"provider_reference":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider Reference"},"checkout_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Checkout Url"},"checkout_expires_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Checkout Expires At"},"paid_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Paid At"},"created_at":{"type":"string","title":"Created At"},"updated_at":{"type":"string","title":"Updated At"},"receipt_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Receipt Id"},"receipt_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Receipt Number"}},"type":"object","required":["id","stay_id","amount","currency","status","method","created_at","updated_at"],"title":"DeveloperPaymentResponse","description":"Curated StayPayment — no notes/reference/void/guest PII."},"DeveloperCustomMessageResponse":{"properties":{"id":{"type":"string","title":"Id"},"channel":{"type":"string","title":"Channel"},"direction":{"type":"string","title":"Direction"},"status":{"type":"string","title":"Status"},"related_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Related Type"},"related_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Related Id"},"conversation_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Conversation Id"},"property_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Property Id"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"},"sent_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sent At"},"delivered_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Delivered At"},"read_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Read At"},"failed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Failed At"},"received_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Received At"},"channel_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Channel Key"},"channel_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Channel Label"},"external_message_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Message Id"},"external_user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External User Id"},"body":{"type":"string","title":"Body"}},"type":"object","required":["id","channel","direction","status","body"],"title":"DeveloperCustomMessageResponse","description":"Write confirmation for custom messages — includes body; GET remains metadata-only."},"DeveloperAvailabilityBlockCreateRequest":{"properties":{"property_id":{"type":"string","title":"Property Id"},"unit_id":{"type":"string","title":"Unit Id"},"start_at":{"type":"string","title":"Start At","description":"ISO-8601 start (half-open interval start)"},"end_at":{"type":"string","title":"End At","description":"ISO-8601 end (half-open interval end, exclusive)"},"reason_type":{"type":"string","title":"Reason Type","description":"maintenance | owner_use | blocked | external_calendar | other"},"notes":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Notes"}},"type":"object","required":["property_id","unit_id","start_at","end_at","reason_type"],"title":"DeveloperAvailabilityBlockCreateRequest"},"DeveloperStayRefundListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DeveloperStayRefundResponse"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"DeveloperStayRefundListResponse"},"DeveloperTenantCreateRequest":{"properties":{"full_name":{"type":"string","maxLength":255,"minLength":1,"title":"Full Name"},"email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Email"},"phone":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Phone"},"phone_country_code":{"anyOf":[{"type":"string","maxLength":2},{"type":"null"}],"title":"Phone Country Code"}},"additionalProperties":false,"type":"object","required":["full_name"],"title":"DeveloperTenantCreateRequest"},"DeveloperPropertyImageWrite":{"properties":{"id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Id"},"url":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Url"},"video_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Video Url"},"provider":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Provider"},"caption":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Caption"},"category":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Category"},"unit_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Unit Id"},"is_cover":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Cover"},"delete":{"type":"boolean","title":"Delete","default":false}},"type":"object","title":"DeveloperPropertyImageWrite","description":"Image on property create/update.\n\nNew photo: public `url` (http or https). The file is not uploaded.\nNew video: `video_url` (YouTube or Vimeo).\nExisting image: `id`, then optional caption, category, `url`, `is_cover`, or `delete`."},"DeveloperPossibleMatchesResponse":{"properties":{"matches":{"items":{"$ref":"#/components/schemas/DeveloperPossibleContactMatch"},"type":"array","title":"Matches"}},"type":"object","required":["matches"],"title":"DeveloperPossibleMatchesResponse"},"DeveloperContactUnlinkResponse":{"properties":{"contact_id":{"type":"string","title":"Contact Id"},"unlinked_link_id":{"type":"string","title":"Unlinked Link Id"},"restored_contact_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Restored Contact Id"}},"type":"object","required":["contact_id","unlinked_link_id"],"title":"DeveloperContactUnlinkResponse"},"DeveloperPropertyReadinessResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DeveloperPropertyReadinessItem"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"DeveloperPropertyReadinessResponse"},"DeveloperWebhookUpdateRequest":{"properties":{"url":{"anyOf":[{"type":"string","maxLength":2048,"minLength":1},{"type":"null"}],"title":"Url"},"subscribed_events":{"anyOf":[{"items":{"type":"string"},"type":"array","minItems":1},{"type":"null"}],"title":"Subscribed Events"},"status":{"anyOf":[{"type":"string","pattern":"^(active|inactive)$"},{"type":"null"}],"title":"Status"},"name":{"anyOf":[{"type":"string","maxLength":120,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Description"}},"additionalProperties":false,"type":"object","title":"DeveloperWebhookUpdateRequest"},"DeveloperBookingComConnectRequest":{"properties":{"hotel_id":{"type":"string","maxLength":64,"minLength":1,"title":"Hotel Id"}},"additionalProperties":false,"type":"object","required":["hotel_id"],"title":"DeveloperBookingComConnectRequest"},"DeveloperWebhookEventItem":{"properties":{"type":{"type":"string","title":"Type"},"version":{"type":"string","title":"Version"},"category":{"type":"string","title":"Category"}},"type":"object","required":["type","version","category"],"title":"DeveloperWebhookEventItem"},"DeveloperConversationListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DeveloperConversationResponse"},"type":"array","title":"Items"},"meta":{"$ref":"#/components/schemas/DeveloperPaginationMeta"}},"type":"object","required":["items","meta"],"title":"DeveloperConversationListResponse"},"DeveloperCustomMessageCreateRequest":{"properties":{"channel":{"type":"string","pattern":"^custom$","title":"Channel"},"channel_key":{"type":"string","maxLength":64,"minLength":1,"title":"Channel Key"},"channel_label":{"anyOf":[{"type":"string","maxLength":80},{"type":"null"}],"title":"Channel Label"},"external_user_id":{"type":"string","maxLength":255,"minLength":1,"title":"External User Id"},"external_message_id":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"External Message Id"},"recipient":{"$ref":"#/components/schemas/DeveloperCustomMessageRecipient"},"body":{"type":"string","maxLength":20000,"minLength":1,"title":"Body"},"conversation_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Conversation Id"}},"additionalProperties":false,"type":"object","required":["channel","channel_key","external_user_id","recipient","body"],"title":"DeveloperCustomMessageCreateRequest","description":"Custom Channel Gateway outbound create — Zyelra does not deliver externally."},"DeveloperTaskAttachmentCreateRequest":{"properties":{"url":{"type":"string","maxLength":500,"title":"Url","description":"Public http(s) URL. The file is not downloaded."},"filename":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Filename"}},"type":"object","required":["url"],"title":"DeveloperTaskAttachmentCreateRequest"},"DeveloperPropertyListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DeveloperPropertyListItem"},"type":"array","title":"Items"},"meta":{"$ref":"#/components/schemas/DeveloperPaginationMeta"}},"type":"object","required":["items","meta"],"title":"DeveloperPropertyListResponse"},"DeveloperLeadStatusRequest":{"properties":{"status":{"type":"string","title":"Status","description":"Lead status. Allowed: new, contacted, interested, inspection_scheduled, negotiating, closed, lost"}},"type":"object","required":["status"],"title":"DeveloperLeadStatusRequest"},"DeveloperWebhookDeliveryListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DeveloperWebhookDeliveryResponse"},"type":"array","title":"Items"},"meta":{"$ref":"#/components/schemas/DeveloperPaginationMeta"}},"type":"object","required":["items","meta"],"title":"DeveloperWebhookDeliveryListResponse"},"DeveloperStayUnit":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"}},"type":"object","required":["id","name"],"title":"DeveloperStayUnit"},"DeveloperStayProperty":{"properties":{"id":{"type":"string","title":"Id"},"title":{"type":"string","title":"Title"}},"type":"object","required":["id","title"],"title":"DeveloperStayProperty"},"DeveloperLandlordUpdateRequest":{"properties":{"full_name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Full Name"},"email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Email"},"phone":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Phone"},"phone_country_code":{"anyOf":[{"type":"string","maxLength":2},{"type":"null"}],"title":"Phone Country Code"},"address":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Address"},"notes":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Notes"},"id_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id Type"},"id_number":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Id Number"}},"additionalProperties":false,"type":"object","title":"DeveloperLandlordUpdateRequest"},"DeveloperStayPaymentRecordRequest":{"properties":{"amount":{"type":"number","exclusiveMinimum":0.0,"title":"Amount"},"payment_method":{"type":"string","title":"Payment Method","description":"bank_transfer, cash, or other"},"payment_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Payment Date"},"reference":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Reference"},"notes":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Notes"},"charge_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Charge Id"}},"additionalProperties":false,"type":"object","required":["amount","payment_method"],"title":"DeveloperStayPaymentRecordRequest","description":"Record an offline stay payment (cash, bank transfer, or other)."},"DeveloperTaskVendorListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DeveloperTaskVendorResponse"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"DeveloperTaskVendorListResponse"},"DeveloperChannelConnectRequest":{"properties":{"redirect_uri":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Redirect Uri"},"client_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Id"},"client_secret":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Secret"},"api_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Token"},"machine_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Machine Account Id"},"external_advertiser_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Advertiser Id"},"pm_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pm Email"},"environment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Environment"}},"additionalProperties":false,"type":"object","title":"DeveloperChannelConnectRequest","description":"Provider connect. Secrets are accepted and never returned."},"DeveloperJobItemError":{"properties":{"code":{"type":"string","title":"Code"},"message":{"type":"string","title":"Message"}},"type":"object","required":["code","message"],"title":"DeveloperJobItemError"},"DeveloperInspectionCompleteRequest":{"properties":{"completion_note":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Completion Note"}},"type":"object","title":"DeveloperInspectionCompleteRequest"},"DeveloperGuestListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DeveloperGuestListItem"},"type":"array","title":"Items"},"meta":{"$ref":"#/components/schemas/DeveloperPaginationMeta"}},"type":"object","required":["items","meta"],"title":"DeveloperGuestListResponse"},"DeveloperTaskScheduleUpdateRequest":{"properties":{"title":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Title"},"description":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Description"},"priority":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Priority"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"assigned_membership_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assigned Membership Id"},"checklist_template_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Checklist Template Id"},"vendor_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vendor Id"}},"type":"object","title":"DeveloperTaskScheduleUpdateRequest"},"DeveloperMessageTemplateListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DeveloperMessageTemplateResponse"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"DeveloperMessageTemplateListResponse"},"DeveloperChannelListingRefRequest":{"properties":{"listing_id":{"type":"string","maxLength":128,"minLength":1,"title":"Listing Id"},"deactivation_reason":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Deactivation Reason"}},"additionalProperties":false,"type":"object","required":["listing_id"],"title":"DeveloperChannelListingRefRequest"},"DeveloperTenantBulkUpdateItem":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"full_name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Full Name"},"email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Email"},"phone":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Phone"},"phone_country_code":{"anyOf":[{"type":"string","maxLength":2},{"type":"null"}],"title":"Phone Country Code"}},"additionalProperties":false,"type":"object","required":["id"],"title":"DeveloperTenantBulkUpdateItem"},"DeveloperStayRequestCreate":{"properties":{"property_id":{"type":"string","title":"Property Id"},"unit_id":{"type":"string","title":"Unit Id"},"first_name":{"type":"string","maxLength":120,"minLength":1,"title":"First Name"},"last_name":{"type":"string","maxLength":120,"minLength":1,"title":"Last Name"},"email":{"type":"string","format":"email","title":"Email"},"phone":{"type":"string","maxLength":50,"minLength":1,"title":"Phone"},"phone_country_code":{"anyOf":[{"type":"string","maxLength":2},{"type":"null"}],"title":"Phone Country Code"},"check_in":{"type":"string","maxLength":10,"minLength":10,"title":"Check In"},"check_out":{"type":"string","maxLength":10,"minLength":10,"title":"Check Out"},"message":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Message"}},"type":"object","required":["property_id","unit_id","first_name","last_name","email","phone","check_in","check_out"],"title":"DeveloperStayRequestCreate"},"DeveloperEntityMappingCreateRequest":{"properties":{"source_type":{"type":"string","maxLength":32,"minLength":1,"title":"Source Type"},"source_id":{"type":"string","format":"uuid","title":"Source Id"},"external_ref":{"type":"string","maxLength":255,"minLength":1,"title":"External Ref"},"external_object_type":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"External Object Type"},"external_display_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"External Display Name"}},"additionalProperties":false,"type":"object","required":["source_type","source_id","external_ref"],"title":"DeveloperEntityMappingCreateRequest"},"DeveloperTenantUpdateRequest":{"properties":{"full_name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Full Name"},"email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Email"},"phone":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Phone"},"phone_country_code":{"anyOf":[{"type":"string","maxLength":2},{"type":"null"}],"title":"Phone Country Code"}},"additionalProperties":false,"type":"object","title":"DeveloperTenantUpdateRequest"},"DeveloperStayOperationsTypeCount":{"properties":{"task_type":{"type":"string","title":"Task Type"},"label":{"type":"string","title":"Label"},"open_count":{"type":"integer","title":"Open Count"},"completed_count":{"type":"integer","title":"Completed Count"}},"type":"object","required":["task_type","label","open_count","completed_count"],"title":"DeveloperStayOperationsTypeCount"},"DeveloperStayPaymentVoidRequest":{"properties":{"reason":{"type":"string","maxLength":500,"minLength":1,"title":"Reason"}},"additionalProperties":false,"type":"object","required":["reason"],"title":"DeveloperStayPaymentVoidRequest"},"DeveloperInspectionCreateRequest":{"properties":{"property_id":{"type":"string","title":"Property Id"},"unit_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Unit Id"},"lead_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lead Id"},"tenant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tenant Id"},"assigned_agent_user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assigned Agent User Id"},"external_assignee_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"External Assignee Name"},"scheduled_date":{"type":"string","format":"date","title":"Scheduled Date"},"start_time":{"type":"string","format":"time","title":"Start Time"},"end_time":{"anyOf":[{"type":"string","format":"time"},{"type":"null"}],"title":"End Time"},"notes":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Notes"}},"type":"object","required":["property_id","scheduled_date","start_time"],"title":"DeveloperInspectionCreateRequest"},"DeveloperConversationResponse":{"properties":{"id":{"type":"string","title":"Id"},"channel":{"type":"string","title":"Channel"},"channel_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Channel Label"},"status":{"type":"string","title":"Status"},"participant_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Participant Name"},"participant_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Participant Address"},"match_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Match Status"},"matched_entity_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Matched Entity Type"},"matched_entity_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Matched Entity Id"},"property_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Property Id"},"assigned_membership_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assigned Membership Id"},"is_unread":{"type":"boolean","title":"Is Unread","default":false},"subject":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subject"},"last_message_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Message At"},"last_message_preview":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Message Preview"},"last_direction":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Direction"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","channel","status"],"title":"DeveloperConversationResponse"},"DeveloperCollectionCancelRequest":{"properties":{"reason":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Reason"}},"additionalProperties":false,"type":"object","title":"DeveloperCollectionCancelRequest"},"DeveloperChannelMapRequest":{"properties":{"property_id":{"type":"string","format":"uuid","title":"Property Id"},"unit_id":{"type":"string","format":"uuid","title":"Unit Id"}},"additionalProperties":false,"type":"object","required":["property_id","unit_id"],"title":"DeveloperChannelMapRequest"},"DeveloperMessageTemplateUpdateRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Name"},"subject":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Subject"},"body":{"anyOf":[{"type":"string","maxLength":20000},{"type":"null"}],"title":"Body"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"additionalProperties":false,"type":"object","title":"DeveloperMessageTemplateUpdateRequest"},"DeveloperLeadNoteRequest":{"properties":{"note":{"type":"string","maxLength":5000,"minLength":1,"title":"Note"}},"type":"object","required":["note"],"title":"DeveloperLeadNoteRequest"},"DeveloperLandlordPropertyLinkRequest":{"properties":{"property_id":{"type":"string","title":"Property Id"}},"type":"object","required":["property_id"],"title":"DeveloperLandlordPropertyLinkRequest"},"DeveloperUnavailableRange":{"properties":{"start":{"type":"string","title":"Start"},"end":{"type":"string","title":"End"}},"type":"object","required":["start","end"],"title":"DeveloperUnavailableRange"},"DeveloperAvailabilityFeeItem":{"properties":{"name":{"type":"string","title":"Name"},"amount":{"type":"number","title":"Amount"},"taxable":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Taxable"},"calculation_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Calculation Type"}},"type":"object","required":["name","amount"],"title":"DeveloperAvailabilityFeeItem"},"DeveloperUnitListItem":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"bedrooms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bedrooms"},"bathrooms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bathrooms"},"rent_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rent Amount"},"currency":{"type":"string","title":"Currency","default":"USD"},"availability_label":{"type":"string","title":"Availability Label"},"rental_type":{"type":"string","title":"Rental Type","default":"long_term"},"nightly_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Nightly Rate"},"is_bookable":{"type":"boolean","title":"Is Bookable","default":false}},"type":"object","required":["id","name","availability_label"],"title":"DeveloperUnitListItem"},"DeveloperLeadFollowUpResponse":{"properties":{"id":{"type":"string","title":"Id"},"due_at":{"type":"string","title":"Due At"},"status":{"type":"string","title":"Status"},"title":{"type":"string","title":"Title"},"assigned_membership_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assigned Membership Id"},"created_at":{"type":"string","title":"Created At"},"updated_at":{"type":"string","title":"Updated At"}},"type":"object","required":["id","due_at","status","title","created_at","updated_at"],"title":"DeveloperLeadFollowUpResponse","description":"Curated Lead Follow-Up projection (pending or completed snapshot)."},"DeveloperFeeObligationResponse":{"properties":{"id":{"type":"string","title":"Id"},"status":{"type":"string","title":"Status"},"currency":{"type":"string","title":"Currency"},"net_due_amount":{"type":"string","title":"Net Due Amount"},"property_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Property Id"},"landlord_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Landlord Id"},"stay_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stay Id"},"collection_payment_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Collection Payment Id"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["id","status","currency","net_due_amount"],"title":"DeveloperFeeObligationResponse"},"DeveloperStayPaymentLinkRequest":{"properties":{},"additionalProperties":false,"type":"object","title":"DeveloperStayPaymentLinkRequest","description":"Empty body only — amount/currency/provider are forbidden."},"DeveloperInspectionCancelRequest":{"properties":{"reason":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Reason"}},"type":"object","title":"DeveloperInspectionCancelRequest"},"DeveloperMessageListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DeveloperMessageResponse"},"type":"array","title":"Items"},"meta":{"$ref":"#/components/schemas/DeveloperPaginationMeta"}},"type":"object","required":["items","meta"],"title":"DeveloperMessageListResponse"},"DeveloperLeadBulkArchiveRequest":{"properties":{"lead_ids":{"items":{"type":"string","format":"uuid"},"type":"array","maxItems":100,"minItems":1,"title":"Lead Ids"}},"additionalProperties":false,"type":"object","required":["lead_ids"],"title":"DeveloperLeadBulkArchiveRequest"},"DeveloperJobItemResult":{"properties":{"index":{"type":"integer","title":"Index"},"status":{"type":"string","title":"Status"},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"resource":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Resource"},"error":{"anyOf":[{"$ref":"#/components/schemas/DeveloperJobItemError"},{"type":"null"}]}},"type":"object","required":["index","status"],"title":"DeveloperJobItemResult"},"DeveloperUnitReadinessResponse":{"properties":{"unit_id":{"type":"string","title":"Unit Id"},"rental_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rental Type"},"state":{"type":"string","title":"State"},"label":{"type":"string","title":"Label"},"summary":{"type":"string","title":"Summary"},"step_summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Step Summary"},"open_task_count":{"type":"integer","title":"Open Task Count"},"next_stay_check_in":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Stay Check In"}},"type":"object","required":["unit_id","state","label","summary","open_task_count"],"title":"DeveloperUnitReadinessResponse"},"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"},"DeveloperWebhookEventListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DeveloperWebhookEventItem"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"DeveloperWebhookEventListResponse"},"DeveloperLeadConvertRoleResult":{"properties":{"id":{"type":"string","title":"Id"},"created":{"type":"boolean","title":"Created"},"full_name":{"type":"string","title":"Full Name"}},"type":"object","required":["id","created","full_name"],"title":"DeveloperLeadConvertRoleResult"},"DeveloperPropertyReadinessItem":{"properties":{"unit_id":{"type":"string","title":"Unit Id"},"unit_name":{"type":"string","title":"Unit Name"},"rental_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rental Type"},"state":{"type":"string","title":"State"},"label":{"type":"string","title":"Label"},"summary":{"type":"string","title":"Summary"},"open_task_count":{"type":"integer","title":"Open Task Count"}},"type":"object","required":["unit_id","unit_name","state","label","summary","open_task_count"],"title":"DeveloperPropertyReadinessItem"},"DeveloperConversationResolveRequest":{"properties":{"entity_type":{"type":"string","pattern":"^(lead|tenant|guest|landlord)$","title":"Entity Type"},"entity_id":{"type":"string","format":"uuid","title":"Entity Id"}},"additionalProperties":false,"type":"object","required":["entity_type","entity_id"],"title":"DeveloperConversationResolveRequest"},"DeveloperChannelListingResponse":{"properties":{"id":{"type":"string","title":"Id"},"provider":{"type":"string","title":"Provider"},"external_listing_id":{"type":"string","title":"External Listing Id"},"external_listing_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Listing Title"},"property_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Property Id"},"unit_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Unit Id"},"status":{"type":"string","title":"Status"},"health_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Health Status"},"last_synced_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Synced At"}},"type":"object","required":["id","provider","external_listing_id","status"],"title":"DeveloperChannelListingResponse"},"DeveloperTenantBulkCreateAsyncRequest":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DeveloperTenantBulkCreateItem"},"type":"array","maxItems":5000,"minItems":1,"title":"Items"}},"additionalProperties":false,"type":"object","required":["items"],"title":"DeveloperTenantBulkCreateAsyncRequest"},"DeveloperWebhookListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DeveloperWebhookResponse"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"DeveloperWebhookListResponse"},"DeveloperLeadRestoreRequest":{"properties":{},"additionalProperties":false,"type":"object","title":"DeveloperLeadRestoreRequest","description":"Empty body for Lead restore. Unknown fields are rejected."},"DeveloperTenantBulkCreateRequest":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DeveloperTenantBulkCreateItem"},"type":"array","maxItems":100,"minItems":1,"title":"Items"}},"additionalProperties":false,"type":"object","required":["items"],"title":"DeveloperTenantBulkCreateRequest"},"DeveloperFeeCalculationResponse":{"properties":{"currency":{"type":"string","title":"Currency"},"gross_amount":{"type":"string","title":"Gross Amount"},"fee_total_amount":{"type":"string","title":"Fee Total Amount"},"net_collected_amount":{"type":"string","title":"Net Collected Amount"},"allocatable_amount":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Allocatable Amount"},"schedule_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schedule Id"},"schedule_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schedule Code"},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},"type":"object","required":["currency","gross_amount","fee_total_amount","net_collected_amount"],"title":"DeveloperFeeCalculationResponse"},"DeveloperAccountMappingCreateRequest":{"properties":{"account_id":{"type":"string","format":"uuid","title":"Account Id"},"external_account_ref":{"type":"string","maxLength":255,"minLength":1,"title":"External Account Ref"}},"additionalProperties":false,"type":"object","required":["account_id","external_account_ref"],"title":"DeveloperAccountMappingCreateRequest"},"DeveloperTenancyListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DeveloperTenancyResponse"},"type":"array","title":"Items"},"meta":{"$ref":"#/components/schemas/DeveloperPaginationMeta"}},"type":"object","required":["items","meta"],"title":"DeveloperTenancyListResponse"},"DeveloperTenantBulkUpdateRequest":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DeveloperTenantBulkUpdateItem"},"type":"array","maxItems":100,"minItems":1,"title":"Items"}},"additionalProperties":false,"type":"object","required":["items"],"title":"DeveloperTenantBulkUpdateRequest"},"DeveloperPaymentListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DeveloperPaymentResponse"},"type":"array","title":"Items"},"meta":{"$ref":"#/components/schemas/DeveloperPaginationMeta"}},"type":"object","required":["items","meta"],"title":"DeveloperPaymentListResponse"},"DeveloperLeadNoteLogResponse":{"properties":{"lead_id":{"type":"string","title":"Lead Id"},"text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Text"}},"type":"object","required":["lead_id"],"title":"DeveloperLeadNoteLogResponse"},"DeveloperTaskAssignRequest":{"properties":{"assigned_membership_id":{"type":"string","title":"Assigned Membership Id","description":"Agency membership id of the assignee (same agency)."}},"type":"object","required":["assigned_membership_id"],"title":"DeveloperTaskAssignRequest"},"DeveloperLinkedPropertyListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DeveloperLinkedPropertyResponse"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"DeveloperLinkedPropertyListResponse"},"DeveloperGuestPortalLinkResponse":{"properties":{"guest_portal_url":{"type":"string","title":"Guest Portal Url"},"expires_at":{"type":"string","title":"Expires At"}},"type":"object","required":["guest_portal_url","expires_at"],"title":"DeveloperGuestPortalLinkResponse","description":"Staff-issued guest portal URL. Treat the URL as a secret."},"DeveloperPropertyUpdateRequest":{"properties":{"title":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Title"},"property_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Property Type"},"property_structure":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Property Structure"},"address":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"title":"Address"},"address_line_2":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address Line 2"},"city":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"City"},"country":{"anyOf":[{"type":"string","maxLength":100,"minLength":1},{"type":"null"}],"title":"Country"},"state":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"State"},"postal_code":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Postal Code"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"price":{"anyOf":[{"type":"number","minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Price"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"house_rules":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"House Rules"},"bedrooms":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Bedrooms"},"bathrooms":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Bathrooms"},"amenities":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Amenities"},"available_from":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Available From"},"available_until":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Available Until"},"guest_check_in_instructions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Guest Check In Instructions"},"guest_check_out_instructions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Guest Check Out Instructions"},"guest_directions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Guest Directions"},"guest_parking_info":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Guest Parking Info"},"guest_wifi_info":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Guest Wifi Info"},"guest_access_instructions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Guest Access Instructions"},"guest_access_release_mode":{"anyOf":[{"type":"string","pattern":"^(immediately|hours_before_check_in|days_before_check_in|manual)$"},{"type":"null"}],"title":"Guest Access Release Mode"},"guest_access_release_offset":{"anyOf":[{"type":"integer","maximum":8760.0,"minimum":0.0},{"type":"null"}],"title":"Guest Access Release Offset"},"guest_access_require_check_in_form":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Guest Access Require Check In Form"},"channex_inventory":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Channex Inventory"},"images":{"anyOf":[{"items":{"$ref":"#/components/schemas/DeveloperPropertyImageWrite"},"type":"array"},{"type":"null"}],"title":"Images"}},"type":"object","title":"DeveloperPropertyUpdateRequest"},"DeveloperCancellationRequestListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DeveloperCancellationRequestResponse"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"DeveloperCancellationRequestListResponse"},"DeveloperInspectionResponse":{"properties":{"id":{"type":"string","title":"Id"},"property_id":{"type":"string","title":"Property Id"},"unit_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Unit Id"},"lead_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lead Id"},"tenant_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tenant Id"},"assigned_agent_user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assigned Agent User Id"},"status":{"type":"string","title":"Status"},"scheduled_date":{"type":"string","title":"Scheduled Date"},"start_time":{"type":"string","title":"Start Time"},"end_time":{"type":"string","title":"End Time"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","property_id","status","scheduled_date","start_time","end_time"],"title":"DeveloperInspectionResponse"},"DeveloperStayPaymentSummaryResponse":{"properties":{"stay_id":{"type":"string","title":"Stay Id"},"stay_payment_status":{"type":"string","title":"Stay Payment Status"},"currency":{"type":"string","title":"Currency"},"total_due_amount":{"type":"number","title":"Total Due Amount"},"paid_amount":{"type":"number","title":"Paid Amount"},"outstanding_amount":{"type":"number","title":"Outstanding Amount"},"charges":{"items":{"$ref":"#/components/schemas/DeveloperStayPaymentChargeItem"},"type":"array","title":"Charges"}},"type":"object","required":["stay_id","stay_payment_status","currency","total_due_amount","paid_amount","outstanding_amount","charges"],"title":"DeveloperStayPaymentSummaryResponse","description":"Curated stay balance + charge breakdown for reconciliation."},"DeveloperChannelImportRequest":{"properties":{"property_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Property Id"},"unit_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Unit Id"},"create_new":{"type":"boolean","title":"Create New","default":false},"apply_title":{"type":"boolean","title":"Apply Title","default":true},"apply_description":{"type":"boolean","title":"Apply Description","default":true},"apply_nightly_rate":{"type":"boolean","title":"Apply Nightly Rate","default":true}},"additionalProperties":false,"type":"object","title":"DeveloperChannelImportRequest"},"DeveloperGuestListItem":{"properties":{"id":{"type":"string","title":"Id"},"full_name":{"type":"string","title":"Full Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"is_active":{"type":"boolean","title":"Is Active","default":true},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["id","full_name"],"title":"DeveloperGuestListItem"},"DeveloperPropertyManagedResponse":{"properties":{"id":{"type":"string","title":"Id"},"title":{"type":"string","title":"Title"},"property_type":{"type":"string","title":"Property Type"},"property_structure":{"type":"string","title":"Property Structure","default":"single_unit"},"status":{"type":"string","title":"Status"},"published":{"type":"boolean","title":"Published","default":false},"is_archived":{"type":"boolean","title":"Is Archived","default":false},"address":{"type":"string","title":"Address"},"address_line_2":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address Line 2"},"city":{"type":"string","title":"City"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"},"postal_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Postal Code"},"country":{"type":"string","title":"Country"},"price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Price"},"currency":{"type":"string","title":"Currency","default":"USD"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"house_rules":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"House Rules"},"guest_check_in_instructions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Guest Check In Instructions"},"guest_check_out_instructions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Guest Check Out Instructions"},"guest_directions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Guest Directions"},"guest_parking_info":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Guest Parking Info"},"guest_wifi_info":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Guest Wifi Info"},"guest_access_instructions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Guest Access Instructions"},"guest_access_release_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Guest Access Release Mode"},"guest_access_release_offset":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Guest Access Release Offset"},"guest_access_require_check_in_form":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Guest Access Require Check In Form"},"bedrooms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bedrooms"},"bathrooms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bathrooms"},"amenities":{"items":{"type":"string"},"type":"array","title":"Amenities"},"available_from":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Available From"},"available_until":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Available Until"},"is_featured":{"type":"boolean","title":"Is Featured","default":false},"verification_badge":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Verification Badge"},"published_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Published At"},"channex_inventory":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Channex Inventory"},"main_image_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Main Image Url"},"media":{"items":{"$ref":"#/components/schemas/DeveloperMediaItem"},"type":"array","title":"Media"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","title","property_type","status","address","city","country"],"title":"DeveloperPropertyManagedResponse","description":"Agency inventory representation (includes drafts; no agent/landlord/geo secrets)."},"DeveloperStayOperationsResponse":{"properties":{"type_rollup":{"items":{"$ref":"#/components/schemas/DeveloperStayOperationsTypeCount"},"type":"array","title":"Type Rollup"},"unit_readiness":{"anyOf":[{"$ref":"#/components/schemas/DeveloperUnitReadinessResponse"},{"type":"null"}]}},"type":"object","required":["type_rollup"],"title":"DeveloperStayOperationsResponse"},"DeveloperInspectionNoShowRequest":{"properties":{"notes":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Notes"}},"type":"object","title":"DeveloperInspectionNoShowRequest"},"DeveloperUnitManagedResponse":{"properties":{"id":{"type":"string","title":"Id"},"property_id":{"type":"string","title":"Property Id"},"property_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Property Title"},"name":{"type":"string","title":"Name"},"unit_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Unit Type"},"floor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Floor"},"status":{"type":"string","title":"Status"},"is_archived":{"type":"boolean","title":"Is Archived","default":false},"is_default":{"type":"boolean","title":"Is Default","default":false},"bedrooms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bedrooms"},"bathrooms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bathrooms"},"beds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Beds"},"max_guests":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Guests"},"square_feet":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Square Feet"},"min_nights":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Min Nights"},"max_nights":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Nights"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"rent_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rent Amount"},"rent_period":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rent Period"},"rental_type":{"type":"string","title":"Rental Type","default":"long_term"},"nightly_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Nightly Rate"},"currency":{"type":"string","title":"Currency","default":"USD"},"default_check_in_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Check In Time"},"default_check_out_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Check Out Time"},"available_from":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Available From"},"available_until":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Available Until"},"sort_order":{"type":"integer","title":"Sort Order","default":0},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","property_id","name","status"],"title":"DeveloperUnitManagedResponse"},"DeveloperStayListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DeveloperStayResponse"},"type":"array","title":"Items"},"meta":{"$ref":"#/components/schemas/DeveloperPaginationMeta"}},"type":"object","required":["items","meta"],"title":"DeveloperStayListResponse"},"DeveloperTaskListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DeveloperTaskResponse"},"type":"array","title":"Items"},"meta":{"$ref":"#/components/schemas/DeveloperPaginationMeta"}},"type":"object","required":["items","meta"],"title":"DeveloperTaskListResponse"},"DeveloperChannelListingListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DeveloperChannelListingResponse"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"DeveloperChannelListingListResponse"},"DeveloperBookingComMapRequest":{"properties":{"room_type_code":{"type":"string","maxLength":128,"minLength":1,"title":"Room Type Code"},"rate_plan_code":{"type":"string","maxLength":128,"minLength":1,"title":"Rate Plan Code"},"occupancy":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Occupancy"}},"additionalProperties":false,"type":"object","required":["room_type_code","rate_plan_code"],"title":"DeveloperBookingComMapRequest"},"DeveloperMessageTemplateCreateRequest":{"properties":{"key":{"type":"string","maxLength":64,"minLength":1,"title":"Key"},"name":{"type":"string","maxLength":120,"minLength":1,"title":"Name"},"channel":{"type":"string","maxLength":32,"minLength":1,"title":"Channel"},"body":{"type":"string","maxLength":20000,"minLength":1,"title":"Body"},"subject":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Subject"}},"additionalProperties":false,"type":"object","required":["key","name","channel","body"],"title":"DeveloperMessageTemplateCreateRequest"},"DeveloperFeeScheduleResponse":{"properties":{"id":{"type":"string","title":"Id"},"code":{"type":"string","title":"Code"},"name":{"type":"string","title":"Name"},"version":{"type":"integer","title":"Version"},"currency":{"type":"string","title":"Currency"},"owner_share_percent":{"type":"string","title":"Owner Share Percent"},"active":{"type":"boolean","title":"Active"},"property_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Property Id"},"landlord_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Landlord Id"},"lines":{"items":{"$ref":"#/components/schemas/DeveloperFeeScheduleLineResponse"},"type":"array","title":"Lines"}},"type":"object","required":["id","code","name","version","currency","owner_share_percent","active"],"title":"DeveloperFeeScheduleResponse"},"DeveloperStayGuest":{"properties":{"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},"type":"object","title":"DeveloperStayGuest"},"DeveloperTaskVendorResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"is_active":{"type":"boolean","title":"Is Active"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","name","is_active"],"title":"DeveloperTaskVendorResponse"},"DeveloperStayPaymentListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DeveloperStayRecordedPaymentResponse"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"DeveloperStayPaymentListResponse"},"DeveloperInspectionAttachmentCreateRequest":{"properties":{"url":{"type":"string","maxLength":500,"title":"Url","description":"Public http(s) URL. The file is not downloaded."},"filename":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Filename"}},"type":"object","required":["url"],"title":"DeveloperInspectionAttachmentCreateRequest"},"DeveloperLeadStatusChange":{"properties":{"id":{"type":"string","title":"Id"},"from_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"From Status"},"to_status":{"type":"string","title":"To Status"},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["id","to_status","created_at"],"title":"DeveloperLeadStatusChange"},"DeveloperChannelConnectionListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DeveloperChannelConnectionResponse"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"DeveloperChannelConnectionListResponse"},"DeveloperBulkItemResult":{"properties":{"index":{"type":"integer","title":"Index"},"status":{"type":"string","title":"Status"},"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"resource":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Resource"},"error":{"anyOf":[{"$ref":"#/components/schemas/DeveloperBulkItemError"},{"type":"null"}]}},"type":"object","required":["index","status"],"title":"DeveloperBulkItemResult"},"DeveloperStayReceiptResponse":{"properties":{"id":{"type":"string","title":"Id"},"receipt_number":{"type":"string","title":"Receipt Number"},"stay_payment_id":{"type":"string","title":"Stay Payment Id"},"generated_at":{"type":"string","title":"Generated At"},"amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Amount"},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency"},"paid_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Paid At"}},"type":"object","required":["id","receipt_number","stay_payment_id","generated_at"],"title":"DeveloperStayReceiptResponse"},"DeveloperContactLinkCreateRequest":{"properties":{"entity_type":{"type":"string","maxLength":32,"minLength":1,"title":"Entity Type"},"entity_id":{"type":"string","title":"Entity Id"}},"type":"object","required":["entity_type","entity_id"],"title":"DeveloperContactLinkCreateRequest"},"DeveloperExternalAccountReplaceRequest":{"properties":{"accounts":{"items":{"$ref":"#/components/schemas/DeveloperExternalAccountInput"},"type":"array","maxItems":500,"title":"Accounts"}},"additionalProperties":false,"type":"object","required":["accounts"],"title":"DeveloperExternalAccountReplaceRequest"},"DeveloperGuestWriteRequest":{"properties":{"full_name":{"type":"string","maxLength":255,"minLength":1,"title":"Full Name"},"email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Email"},"phone":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Phone"},"phone_country_code":{"anyOf":[{"type":"string","maxLength":8},{"type":"null"}],"title":"Phone Country Code"},"address":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Address"},"notes":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Notes"}},"additionalProperties":false,"type":"object","required":["full_name"],"title":"DeveloperGuestWriteRequest"},"DeveloperTenantBulkCreateItem":{"properties":{"full_name":{"type":"string","maxLength":255,"minLength":1,"title":"Full Name"},"email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Email"},"phone":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Phone"},"phone_country_code":{"anyOf":[{"type":"string","maxLength":2},{"type":"null"}],"title":"Phone Country Code"}},"additionalProperties":false,"type":"object","required":["full_name"],"title":"DeveloperTenantBulkCreateItem"},"DeveloperWebhookCreateRequest":{"properties":{"url":{"type":"string","maxLength":2048,"minLength":1,"title":"Url"},"subscribed_events":{"items":{"type":"string"},"type":"array","minItems":1,"title":"Subscribed Events","description":"Event type strings from the authoritative catalog (`GET /api/v1/developer/events`). Unknown types are rejected at runtime."},"name":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Description"}},"additionalProperties":false,"type":"object","required":["url","subscribed_events"],"title":"DeveloperWebhookCreateRequest"},"DeveloperConversationMessageListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DeveloperConversationMessageResponse"},"type":"array","title":"Items"},"meta":{"$ref":"#/components/schemas/DeveloperPaginationMeta"}},"type":"object","required":["items","meta"],"title":"DeveloperConversationMessageListResponse"},"DeveloperJournalCreateRequest":{"properties":{"posting_date":{"type":"string","format":"date","title":"Posting Date"},"memo":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Memo"},"post":{"type":"boolean","title":"Post","default":false},"lines":{"items":{"$ref":"#/components/schemas/DeveloperJournalLineRequest"},"type":"array","maxItems":100,"minItems":2,"title":"Lines"}},"additionalProperties":false,"type":"object","required":["posting_date","lines"],"title":"DeveloperJournalCreateRequest"},"DeveloperLandlordListItem":{"properties":{"id":{"type":"string","title":"Id"},"full_name":{"type":"string","title":"Full Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"is_active":{"type":"boolean","title":"Is Active","default":true},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["id","full_name"],"title":"DeveloperLandlordListItem"},"DeveloperTaskTemplateItem":{"properties":{"id":{"type":"string","title":"Id"},"title":{"type":"string","title":"Title"},"sort_order":{"type":"integer","title":"Sort Order"},"is_required":{"type":"boolean","title":"Is Required"}},"type":"object","required":["id","title","sort_order","is_required"],"title":"DeveloperTaskTemplateItem"},"DeveloperPropertyCreateRequest":{"properties":{"title":{"type":"string","maxLength":255,"minLength":1,"title":"Title"},"property_type":{"type":"string","title":"Property Type","description":"e.g. apartment, house, commercial"},"property_structure":{"type":"string","title":"Property Structure","description":"single_unit | multi_unit","default":"single_unit"},"address":{"type":"string","minLength":1,"title":"Address"},"address_line_2":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address Line 2"},"city":{"type":"string","maxLength":100,"minLength":1,"title":"City"},"country":{"type":"string","maxLength":100,"minLength":1,"title":"Country"},"state":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"State"},"postal_code":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Postal Code"},"price":{"anyOf":[{"type":"number","minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Price"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"house_rules":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"House Rules"},"bedrooms":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Bedrooms"},"bathrooms":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Bathrooms"},"amenities":{"items":{"type":"string"},"type":"array","title":"Amenities"},"available_from":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Available From"},"available_until":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Available Until"},"guest_check_in_instructions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Guest Check In Instructions"},"guest_check_out_instructions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Guest Check Out Instructions"},"guest_directions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Guest Directions"},"guest_parking_info":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Guest Parking Info"},"guest_wifi_info":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Guest Wifi Info"},"guest_access_instructions":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Guest Access Instructions"},"guest_access_release_mode":{"anyOf":[{"type":"string","pattern":"^(immediately|hours_before_check_in|days_before_check_in|manual)$"},{"type":"null"}],"title":"Guest Access Release Mode"},"guest_access_release_offset":{"anyOf":[{"type":"integer","maximum":8760.0,"minimum":0.0},{"type":"null"}],"title":"Guest Access Release Offset"},"guest_access_require_check_in_form":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Guest Access Require Check In Form"},"channex_inventory":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Channex Inventory"},"images":{"items":{"$ref":"#/components/schemas/DeveloperPropertyImageWrite"},"type":"array","title":"Images"},"publish":{"type":"boolean","title":"Publish","description":"Publish the listing on the website. Omit or false to leave the property as a draft.","default":false}},"type":"object","required":["title","property_type","address","city","country"],"title":"DeveloperPropertyCreateRequest"},"DeveloperFeeScheduleListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DeveloperFeeScheduleResponse"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"DeveloperFeeScheduleListResponse"},"DeveloperUnitDetailResponse":{"properties":{"id":{"type":"string","title":"Id"},"property_id":{"type":"string","title":"Property Id"},"property_title":{"type":"string","title":"Property Title"},"name":{"type":"string","title":"Name"},"bedrooms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bedrooms"},"bathrooms":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Bathrooms"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"rent_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rent Amount"},"currency":{"type":"string","title":"Currency","default":"USD"},"availability_label":{"type":"string","title":"Availability Label"},"media":{"items":{"$ref":"#/components/schemas/DeveloperMediaItem"},"type":"array","title":"Media"},"rental_type":{"type":"string","title":"Rental Type","default":"long_term"},"nightly_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Nightly Rate"},"default_check_in_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Check In Time"},"default_check_out_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Check Out Time"},"is_bookable":{"type":"boolean","title":"Is Bookable","default":false},"unit_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Unit Type"},"floor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Floor"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"is_archived":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Archived"},"is_default":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Default"},"beds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Beds"},"max_guests":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Guests"},"square_feet":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Square Feet"},"min_nights":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Min Nights"},"max_nights":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Nights"},"rent_period":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rent Period"},"available_from":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Available From"},"available_until":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Available Until"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","property_id","property_title","name","availability_label"],"title":"DeveloperUnitDetailResponse","description":"Published-safe unit projection plus additive inventory fields (Phase 4.1)."},"DeveloperChannelSyncRequest":{"properties":{"operations":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Operations"}},"additionalProperties":false,"type":"object","title":"DeveloperChannelSyncRequest"},"DeveloperTaskResponse":{"properties":{"id":{"type":"string","title":"Id"},"title":{"type":"string","title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"status":{"type":"string","title":"Status"},"priority":{"type":"string","title":"Priority"},"task_type":{"type":"string","title":"Task Type"},"property_id":{"type":"string","title":"Property Id"},"unit_id":{"type":"string","title":"Unit Id"},"stay_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stay Id"},"assigned_membership_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assigned Membership Id"},"vendor_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vendor Id"},"due_at":{"type":"string","title":"Due At"},"completed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Completed At"},"cancelled_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cancelled At"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","title","status","priority","task_type","property_id","unit_id","due_at"],"title":"DeveloperTaskResponse","description":"Curated operational task for external integrations."},"DeveloperJobProgress":{"properties":{"total":{"type":"integer","title":"Total"},"succeeded":{"type":"integer","title":"Succeeded"},"failed":{"type":"integer","title":"Failed"},"skipped":{"type":"integer","title":"Skipped","default":0}},"type":"object","required":["total","succeeded","failed"],"title":"DeveloperJobProgress"},"DeveloperStayUpdateRequest":{"properties":{"guest_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Guest Id"},"check_in":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Check In"},"check_out":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Check Out"},"nightly_rate":{"anyOf":[{"type":"number","exclusiveMinimum":0.0},{"type":"null"}],"title":"Nightly Rate"},"notes":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Notes"}},"additionalProperties":false,"type":"object","title":"DeveloperStayUpdateRequest"},"DeveloperContactLinkedRole":{"properties":{"link_id":{"type":"string","title":"Link Id"},"entity_type":{"type":"string","title":"Entity Type"},"entity_id":{"type":"string","title":"Entity Id"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"}},"type":"object","required":["link_id","entity_type","entity_id"],"title":"DeveloperContactLinkedRole"},"DeveloperCalendarEventResponse":{"properties":{"event_type":{"type":"string","title":"Event Type","description":"Canonical type from calendar projection: stay | tenancy | block | inspection | task"},"id":{"type":"string","title":"Id","description":"Source entity id (stay/tenancy/block/inspection/task)"},"start_at":{"type":"string","title":"Start At"},"end_at":{"type":"string","title":"End At"},"property_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Property Id"},"unit_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Unit Id"},"title":{"type":"string","title":"Title"},"subtitle":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subtitle"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},"type":"object","required":["event_type","id","start_at","end_at","title"],"title":"DeveloperCalendarEventResponse"},"DeveloperAccountMappingReplaceRequest":{"properties":{"external_account_ref":{"type":"string","maxLength":255,"minLength":1,"title":"External Account Ref"}},"additionalProperties":false,"type":"object","required":["external_account_ref"],"title":"DeveloperAccountMappingReplaceRequest"},"DeveloperConversationReplyRequest":{"properties":{"body":{"type":"string","maxLength":20000,"minLength":1,"title":"Body"},"subject":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Subject"},"template_key":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Template Key"}},"additionalProperties":false,"type":"object","required":["body"],"title":"DeveloperConversationReplyRequest"},"DeveloperJournalLineRequest":{"properties":{"account_id":{"type":"string","format":"uuid","title":"Account Id"},"debit":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"}],"title":"Debit","default":"0"},"credit":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"}],"title":"Credit","default":"0"},"memo":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Memo"}},"additionalProperties":false,"type":"object","required":["account_id"],"title":"DeveloperJournalLineRequest"},"DeveloperTaskTemplateListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/DeveloperTaskTemplateResponse"},"type":"array","title":"Items"}},"type":"object","required":["items"],"title":"DeveloperTaskTemplateListResponse"},"DeveloperGuestAccessReleaseResponse":{"properties":{"stay_id":{"type":"string","title":"Stay Id"},"released_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Released At"},"release_state":{"type":"string","title":"Release State"}},"type":"object","required":["stay_id","release_state"],"title":"DeveloperGuestAccessReleaseResponse"},"DeveloperJournalReverseRequest":{"properties":{"posting_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Posting Date"},"memo":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Memo"}},"additionalProperties":false,"type":"object","title":"DeveloperJournalReverseRequest"},"DeveloperErrorResponse":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"Stable machine-readable code. Sync/cursor specifics may appear in `details.reason` (e.g. sync_lookback_exceeded, invalid_cursor, pagination_conflict) under code validation_error.","examples":["unauthorized","forbidden","not_found","conflict","validation_error","rate_limited","rate_limit_unavailable","payload_too_large","gateway_timeout","db_timeout"]},"message":{"type":"string"},"details":{"type":"object","additionalProperties":true}}},"request_id":{"type":"string","description":"Correlation id (also returned as X-Request-Id)."}}}},"securitySchemes":{"DeveloperApiKey":{"type":"http","scheme":"bearer","bearerFormat":"API_KEY","description":"Agency-bound Zyelra Developer API key.\n\nSend `Authorization: Bearer <API_KEY>`.\n\nKeys are created in Zyelra, shown once at creation, may be revoked or expired, and are scoped to a single agency. Session cookies are not accepted."}}},"security":[{"DeveloperApiKey":[]}],"tags":[{"name":"Developer API","description":"External agency integrations. Authenticate with Bearer Developer API keys. Not the Zyelra dashboard or storefront API."}]}