{"openapi":"3.1.0","info":{"title":"DA Leads API v1","description":"Public REST API for Australian development application data. Authenticate with your DA Leads API key using a Bearer token.\n\n**Field coverage** - `lodgement_date`, `address` and `council` are populated on virtually every record. `cost_of_development`, `status` (structured via `status_group`) and `number_of_dwellings` are sparse because most Australian councils simply do not publish them: as of a 2026-08-02 production snapshot, `cost_of_development` is 0% filled for NSW/SA/QLD/ACT/TAS/NT records, ~11% for VIC, ~9% for WA; `status_group` resolves to a specific bucket (not `other`) for ~35% of records nationally; `number_of_dwellings` is filled for ~7% of records nationally. These are council publishing gaps, not fields we withhold — see each field's description below for exact figures.","version":"1.0.0"},"paths":{"/api/v1/das":{"get":{"tags":["API v1"],"summary":"List DAs","description":"List development applications with filters.","operationId":"list_das_api_v1_das_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by state code (VIC, NSW, QLD, SA, WA, ACT, TAS, NT)","title":"State"},"description":"Filter by state code (VIC, NSW, QLD, SA, WA, ACT, TAS, NT)"},{"name":"council","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by council name (partial match)","title":"Council"},"description":"Filter by council name (partial match)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by trade_category","title":"Category"},"description":"Filter by trade_category"},{"name":"status_group","in":"query","required":false,"schema":{"anyOf":[{"enum":["pending","advertised","approved","rejected","other"],"type":"string"},{"type":"null"}],"description":"Normalized DA status group: pending, advertised, approved, rejected, or other","title":"Status Group"},"description":"Normalized DA status group: pending, advertised, approved, rejected, or other"},{"name":"suburb","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by suburb (exact match, case-insensitive)","title":"Suburb"},"description":"Filter by suburb (exact match, case-insensitive)"},{"name":"postcode","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by postcode (exact match)","title":"Postcode"},"description":"Filter by postcode (exact match)"},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO date (YYYY-MM-DD), only records lodged after this date","title":"Since"},"description":"ISO date (YYYY-MM-DD), only records lodged after this date"},{"name":"updated_since","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO date/time; records fetched or re-seen by DA Leads at or after this time. This is a best-effort polling filter, not a durable cursor or proof that a field changed","title":"Updated Since"},"description":"ISO date/time; records fetched or re-seen by DA Leads at or after this time. This is a best-effort polling filter, not a durable cursor or proof that a field changed"},{"name":"is_residential","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter residential (true) or commercial (false)","title":"Is Residential"},"description":"Filter residential (true) or commercial (false)"},{"name":"include","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Opt-in expansions: application_identity,evidence_facts. Default response is unchanged.","title":"Include"},"description":"Opt-in expansions: application_identity,evidence_facts. Default response is unchanged."},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DAListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/das/nearby":{"get":{"tags":["API v1"],"summary":"Nearby DAs","description":"Spatial query — find DAs near a point using Haversine formula.","operationId":"nearby_das_api_v1_das_nearby_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","description":"Latitude (required)","title":"Lat"},"description":"Latitude (required)"},{"name":"lng","in":"query","required":true,"schema":{"type":"number","description":"Longitude (required)","title":"Lng"},"description":"Longitude (required)"},{"name":"radius_km","in":"query","required":false,"schema":{"type":"number","maximum":50.0,"minimum":0.1,"description":"Search radius in km (max 50)","default":5.0,"title":"Radius Km"},"description":"Search radius in km (max 50)"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by trade_category","title":"Category"},"description":"Filter by trade_category"},{"name":"status_group","in":"query","required":false,"schema":{"anyOf":[{"enum":["pending","advertised","approved","rejected","other"],"type":"string"},{"type":"null"}],"description":"Normalized DA status group: pending, advertised, approved, rejected, or other","title":"Status Group"},"description":"Normalized DA status group: pending, advertised, approved, rejected, or other"},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO date (YYYY-MM-DD)","title":"Since"},"description":"ISO date (YYYY-MM-DD)"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DAListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/das/{da_id}":{"get":{"tags":["API v1"],"summary":"Get DA","description":"Get a single DA by its database ID.","operationId":"get_da_api_v1_das__da_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"da_id","in":"path","required":true,"schema":{"type":"integer","title":"DA ID","description":"Database ID of the DA record"},"description":"Database ID of the DA record"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DADetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/categories":{"get":{"tags":["API v1"],"summary":"List Categories","description":"List all trade categories with record counts.","operationId":"list_categories_api_v1_categories_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CategoryListResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/councils":{"get":{"tags":["API v1"],"summary":"List Councils","description":"List all councils with state, record count, and last updated date.","operationId":"list_councils_api_v1_councils_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CouncilListResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/suburbs":{"get":{"tags":["API v1"],"summary":"List Suburbs (ABS Census)","description":"ABS Census 2021 profile for Australian suburbs (SAL geography).\n\nReturns tenure split, dwelling mix, bedroom counts and age bands. Property\nprices and market rents are deliberately not part of this feed: the state\nValuer-General sales data behind them is licensed for our own analysis\nonly (NSW is CC BY-NC-ND 4.0) and cannot be redistributed.\n\nAttribution is required — see the `source` block on every response.","operationId":"list_suburbs_api_v1_suburbs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"enum":["VIC","NSW","QLD","SA","WA","ACT","TAS","NT","OT"],"type":"string"},{"type":"null"}],"description":"Filter by state code","title":"State"},"description":"Filter by state code"},{"name":"name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Exact suburb name, case-insensitive. Names repeat across and within states, so this can return several rows — each has its own sal_code.","title":"Name"},"description":"Exact suburb name, case-insensitive. Names repeat across and within states, so this can return several rows — each has its own sal_code."},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":2},{"type":"null"}],"description":"Suburb name starts-with search","title":"Q"},"description":"Suburb name starts-with search"},{"name":"postcode","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by postcode","title":"Postcode"},"description":"Filter by postcode"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuburbListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/suburbs/{sal_code}":{"get":{"tags":["API v1"],"summary":"Get Suburb (ABS Census)","description":"One suburb by its ABS SAL code.\n\nSAL code rather than name is the key because suburb names repeat, even\nwithin a state (four separate `Back Creek` localities exist in NSW). Use\n`/v1/suburbs?name=...&state=...` to resolve a name to its code, and expect\nmore than one row back when the name is ambiguous.","operationId":"get_suburb_api_v1_suburbs__sal_code__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"sal_code","in":"path","required":true,"schema":{"type":"string","description":"ABS SAL code, e.g. SAL20495 for Carlton VIC","title":"Sal Code"},"description":"ABS SAL code, e.g. SAL20495 for Carlton VIC"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuburbDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/suburb-signals/sample":{"get":{"tags":["API v1"],"summary":"Suburb Signals Beta sample","description":"Keyless Carlton SAL sample using the same aggregate path as live.","operationId":"suburb_signals_sample_api_v1_suburb_signals_sample_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuburbSignalsResponse"}}}}},"security":[]}},"/api/v1/suburb-signals/{sal_code}":{"get":{"tags":["API v1"],"summary":"Get Suburb Development Signals Beta","description":"SAL Census context plus privacy-slim aggregate DA activity.\n\nThe endpoint never attaches an SA2 absolute population forecast to a SAL.\nIt returns raw DA-record activity, not canonical project counts, and says\nso in the machine contract.","operationId":"get_suburb_signals_api_v1_suburb_signals__sal_code__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"sal_code","in":"path","required":true,"schema":{"type":"string","pattern":"^SAL[0-9]{5}$","description":"ABS SAL code, e.g. SAL20495 for Carlton VIC","title":"Sal Code"},"description":"ABS SAL code, e.g. SAL20495 for Carlton VIC"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuburbSignalsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/regions/sa2":{"get":{"tags":["API v1"],"summary":"Find ASGS 2021 SA2 regions","description":"Resolve a name to explicit SA2 codes before requesting a forecast.","operationId":"find_sa2_regions_api_v1_regions_sa2_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"name","in":"query","required":true,"schema":{"type":"string","minLength":2,"description":"Exact or partial SA2 name","title":"Name"},"description":"Exact or partial SA2 name"},{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"enum":["VIC","NSW","QLD","SA","WA","ACT","TAS","NT","OT"],"type":"string"},{"type":"null"}],"description":"Optional state filter","title":"State"},"description":"Optional state filter"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/regions/sa2/forecast/sample":{"get":{"tags":["API v1"],"summary":"SA2 Population Forecast Beta sample","description":"Keyless Carlton SA2 sample with rolling-backtest evidence.","operationId":"sa2_forecast_sample_api_v1_regions_sa2_forecast_sample_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SA2ForecastResponse"}}}}},"security":[]}},"/api/v1/regions/sa2/{sa2_code}/forecast":{"get":{"tags":["API v1"],"summary":"Get SA2 Population Forecast Beta","description":"SA2-only scenarios with matching rolling-origin error evidence.\n\nHigh-growth and greenfield projections are withheld while the v4 artifact\nlacks a DA dwelling constraint; historical facts and error metrics remain\nvisible so the absence cannot be mistaken for zero growth.","operationId":"get_sa2_forecast_api_v1_regions_sa2__sa2_code__forecast_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"sa2_code","in":"path","required":true,"schema":{"type":"string","pattern":"^[0-9]{9}$","description":"ASGS 2021 SA2 code","title":"Sa2 Code"},"description":"ASGS 2021 SA2 code"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SA2ForecastResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/webhooks":{"get":{"tags":["API v1"],"summary":"List Webhook Endpoints","description":"List user's webhooks.","operationId":"list_webhooks_endpoint_api_v1_webhooks_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookListResponse"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["API v1"],"summary":"Create Webhook Endpoint","description":"Register a new webhook. Body: {\"url\": \"https://...\", \"events\": \"new_da\"}","operationId":"create_webhook_endpoint_api_v1_webhooks_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookCreateRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookCreateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/webhooks/{webhook_id}":{"delete":{"tags":["API v1"],"summary":"Delete Webhook Endpoint","description":"Delete a webhook.","operationId":"delete_webhook_endpoint_api_v1_webhooks__webhook_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"integer","title":"Webhook Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/stats":{"get":{"tags":["API v1"],"summary":"API Stats","description":"Overall API statistics: total records, by state, by category, date range.","operationId":"api_stats_api_v1_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatsResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/sql":{"post":{"tags":["API v1"],"summary":"Run SQL Query (Pro)","description":"Execute a read-only SQL query against DA records.\n\n**Pro plan only.** Query runs against a `das` view with these columns:\nid, address, address_suburb, address_postcode, council_name,\ncouncil_reference, state, trade_category, sub_category, application_type,\nis_residential, lodgement_date, status, cost_of_development,\ndecision_date, decision_status, on_notice_from, on_notice_to,\nnumber_of_dwellings, lot_count, land_use, building_type, storeys,\nlatitude, longitude, data_source, date_fetched, last_fetched_at,\ndocuments, info_url.\n\n`date_fetched` is when we first fetched the record; `last_fetched_at` is\nwhen we last re-fetched it from the council (null until a record has been\nre-fetched at least once since 2026-04-10).\n\nDates and timestamps come back in database format (\"2026-08-05 06:01:36\",\nUTC, no zone suffix) rather than the ISO-8601 \"...Z\" the REST endpoints\nrender. This endpoint passes rows through as the database returns them.\n\n`description` and `summary` are not queryable here (council free text,\nserved via the REST endpoints instead).\nString manipulation functions (SUBSTRING, LEFT, HEX, REVERSE, ...) are not\nsupported. Applicant names are not included in any API plan.\n\nMaximum 1000 rows returned; LIMIT must be a literal number and is capped\nserver-side. Query timeout: 10 seconds.","operationId":"sql_query_api_v1_sql_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SQLQueryRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SQLQueryResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/projects/sample":{"get":{"tags":["API v1","Project Intelligence"],"summary":"Project Intelligence response sample","description":"Static, non-metered schema sample. It makes no live coverage claim.","operationId":"project_sample_api_v1_projects_sample_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/projects":{"get":{"tags":["API v1","Project Intelligence"],"summary":"Search projects","operationId":"list_projects_api_v1_projects_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":1,"maxLength":200},{"type":"null"}],"title":"Q"}},{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":2,"maxLength":10},{"type":"null"}],"title":"State"}},{"name":"stage","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Stage"}},{"name":"project_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Project Type"}},{"name":"changed_since","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Changed Since"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":1,"title":"Page"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":1,"maxLength":256},{"type":"null"}],"title":"Cursor"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Per Page"}},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":100,"minimum":1},{"type":"null"}],"description":"Deprecated alias for per_page; retained for preview clients.","title":"Limit"},"description":"Deprecated alias for per_page; retained for preview clients."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/projects/nearby":{"get":{"tags":["API v1","Project Intelligence"],"summary":"Find nearby projects","operationId":"nearby_projects_api_v1_projects_nearby_get","parameters":[{"name":"lat","in":"query","required":true,"schema":{"type":"number","maximum":90,"minimum":-90,"title":"Lat"}},{"name":"lng","in":"query","required":true,"schema":{"type":"number","maximum":180,"minimum":-180,"title":"Lng"}},{"name":"radius_km","in":"query","required":false,"schema":{"type":"number","maximum":200,"exclusiveMinimum":0,"default":10,"title":"Radius Km"}},{"name":"stage","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Stage"}},{"name":"project_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Project Type"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/projects/{project_uid}":{"get":{"tags":["API v1","Project Intelligence"],"summary":"Get one project","operationId":"get_project_api_v1_projects__project_uid__get","parameters":[{"name":"project_uid","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":64,"title":"Project Uid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/projects/{project_uid}/changes":{"get":{"tags":["API v1","Project Intelligence"],"summary":"Get project changes","operationId":"get_project_changes_api_v1_projects__project_uid__changes_get","parameters":[{"name":"project_uid","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":64,"title":"Project Uid"}},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Since"}},{"name":"cursor","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Cursor"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/projects/{project_uid}/watch":{"post":{"tags":["API v1","Project Intelligence"],"summary":"Create an idempotent Project watch","operationId":"create_project_watch_api_v1_projects__project_uid__watch_post","parameters":[{"name":"project_uid","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":64,"title":"Project Uid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectWatchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/project-watches":{"get":{"tags":["API v1","Project Intelligence"],"summary":"List Project watches","operationId":"get_project_watches_api_v1_project_watches_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/project-watches/{watch_uid}":{"delete":{"tags":["API v1","Project Intelligence"],"summary":"Deactivate a Project watch","operationId":"delete_project_watch_api_v1_project_watches__watch_uid__delete","parameters":[{"name":"watch_uid","in":"path","required":true,"schema":{"type":"string","minLength":1,"maxLength":64,"title":"Watch Uid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}}},"components":{"schemas":{"CategoryItem":{"properties":{"name":{"type":"string","title":"Name"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"is_residential":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Residential"},"record_count":{"type":"integer","title":"Record Count"}},"type":"object","required":["name","record_count"],"title":"CategoryItem"},"CategoryListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/CategoryItem"},"type":"array","title":"Data"},"meta":{"$ref":"#/components/schemas/PaginationMeta"}},"type":"object","required":["data","meta"],"title":"CategoryListResponse"},"CouncilItem":{"properties":{"council":{"type":"string","title":"Council"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"},"record_count":{"type":"integer","title":"Record Count"},"last_lodgement":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Lodgement"},"last_fetched_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Fetched At"}},"type":"object","required":["council","record_count"],"title":"CouncilItem"},"CouncilListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/CouncilItem"},"type":"array","title":"Data"},"meta":{"$ref":"#/components/schemas/PaginationMeta"}},"type":"object","required":["data","meta"],"title":"CouncilListResponse"},"DADetailResponse":{"properties":{"data":{"$ref":"#/components/schemas/DARecord"}},"type":"object","required":["data"],"title":"DADetailResponse"},"DADocument":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title","description":"Document title from the council portal"},"url":{"type":"string","title":"Url","description":"Preferred document URL. Local mirrored files use an absolute https://daleads.com.au/static/... URL."},"original_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original Url","description":"Original council-hosted document URL, when available"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type","description":"Document file type, usually PDF"},"size":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Size","description":"Document size in bytes, when known"},"is_local":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Local","description":"True when the document has been mirrored to DA Leads storage"},"attachment_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Attachment Type","description":"Council-specific attachment category, when available"}},"type":"object","required":["url"],"title":"DADocument"},"DAListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/DARecord"},"type":"array","title":"Data"},"meta":{"$ref":"#/components/schemas/PaginationMeta"}},"type":"object","required":["data","meta"],"title":"DAListResponse"},"DARecord":{"properties":{"id":{"type":"integer","title":"Id"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"suburb":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Suburb"},"postcode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Postcode"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Paid plans only"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary","description":"AI-generated summary of the DA. Paid plans only"},"council":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Council"},"council_reference":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Council Reference","description":"Council-issued application reference. Paid plans only"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"},"trade_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Trade Category"},"status_group":{"anyOf":[{"type":"string","enum":["pending","advertised","approved","rejected","other"]},{"type":"null"}],"title":"Status Group","description":"Normalized status bucket: pending, advertised, approved, rejected, or other. 'other' means the council's own status text did not map to a recognized bucket — resolves to a specific bucket for ~35% of records nationally (production snapshot, 2026-08-02); most councils do not publish parseable status text"},"status_group_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Group Label","description":"Human-friendly label for status_group"},"sub_category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sub Category","description":"Paid plans only"},"is_residential":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Residential","description":"Paid plans only"},"lodgement_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lodgement Date"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status","description":"Raw status text as published by the council. Present on ~100% of records, but format is council-specific and not comparable across councils — use status_group for a normalized value"},"cost_of_development":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cost Of Development","description":"Paid plans only. Most Australian councils do not publish this figure: filled for 0% of NSW/SA/QLD/ACT/TAS/NT records, ~11% of VIC records, ~9% of WA records (production snapshot, 2026-08-02). Do not build pricing or filtering logic that assumes this field is populated"},"decision_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Decision Date","description":"Paid plans only"},"decision_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Decision Status","description":"Paid plans only"},"on_notice_from":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"On Notice From","description":"Paid plans only"},"on_notice_to":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"On Notice To","description":"Paid plans only"},"number_of_dwellings":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Number Of Dwellings","description":"Paid plans only. Extracted opportunistically from application descriptions, not a structured council field — filled for ~7% of records nationally (production snapshot, 2026-08-02); highest yield on VIC apartment/unit/townhouse/duplex records (~69%, small sample)"},"lot_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Lot Count","description":"Number of lots (subdivision)"},"land_use":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Land Use","description":"Usually residential, commercial, industrial, mixed_use, or unknown; historical labels may also appear"},"building_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Building Type","description":"Usually house, apartment, townhouse, duplex, unit, warehouse, retail, office, shed, or other; historical labels may also appear"},"storeys":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Storeys","description":"Number of storeys"},"latitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Latitude","description":"DA latitude in WGS84 decimal degrees","examples":[-37.8136]},"longitude":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Longitude","description":"DA longitude in WGS84 decimal degrees","examples":[144.9631]},"info_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Info Url"},"data_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Data Source","description":"Paid plans only"},"has_documents":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Documents","description":"True when the DA has one or more linked documents"},"document_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Document Count","description":"Number of linked DA documents"},"primary_document_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Document Url","description":"Best available document link for quick access"},"council_portal_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Council Portal Url","description":"Paid plans only"},"council_url_type":{"anyOf":[{"type":"string","enum":["application_record","search_entry","unknown"]},{"type":"null"}],"title":"Council Url Type","description":"application_record when the link is constructed for this DA reference; search_entry when it is only a council register/search entry; unknown when the destination cannot be classified. This describes link intent, not current publisher uptime"},"documents":{"anyOf":[{"items":{"$ref":"#/components/schemas/DADocument"},"type":"array"},{"type":"null"}],"title":"Documents","description":"Paid plans only"},"distance_km":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Distance Km","description":"Only returned by /api/v1/das/nearby"},"last_fetched_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Fetched At","description":"When DA Leads last fetched this record from the council's own site, as a UTC timestamp (e.g. 2026-08-05T06:01:36Z). Every scrape that re-encounters the record refreshes this, whether or not any field changed, so it answers 'is this still current?' rather than 'did it change?'. It is our fetch time, not a council publication date. Null is the COMMON case, not an edge case: tracking began 2026-04-10 and 16.3% of records carry a value (144,550 of 884,913, production snapshot 2026-08-18), so a null means the record has not been re-fetched since tracking started rather than that anything is wrong with it. For the pipeline-level view of a whole council use last_fetched_at on /api/v1/councils"},"feed_product":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Feed Product","description":"Licensed vertical feed identifier"},"feed_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Feed Version","description":"Version of the feed admission definition"},"feed_match_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Feed Match Reason","description":"Description phrase that admitted this record to the vertical feed"},"feed_match_confidence":{"anyOf":[{"type":"string","enum":["high","medium"]},{"type":"null"}],"title":"Feed Match Confidence","description":"high or medium confidence for the rule-based feed match"},"observed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Observed At","description":"For vertical feeds, the latest available DA Leads observation time: last_fetched_at, falling back to the first fetch time. This supports best-effort polling but is not a durable change cursor"},"childcare_pipeline_stage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Childcare Pipeline Stage","description":"Analysis-ready childcare stage: under_assessment, advertised, approved, refused, withdrawn, or other"},"childcare_works_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Childcare Works Type","description":"Analysis-ready development type: new_build, demolition_and_rebuild, change_of_use, expansion_or_alteration, fitout, demolition, signage, or other"},"childcare_care_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Childcare Care Type","description":"Care service type inferred from the description text: centre_based, family_day_care, oshc, kindergarten_preschool, or unclear. Single value by priority; integrated proposals that also mention a centre (e.g. kindergarten plus long day care) classify as centre_based. unclear means the text names no specific service model; it is not evidence the record is out of scope"},"childcare_works_scope":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Childcare Works Scope","description":"Whether the application looks supply-relevant, inferred from the description text: substantive (works or use approvals that can add or change childcare supply), minor (signage, fencing, small ancillary works or consent amendments only), or unclear. Resolved on what the works act on rather than on the verb alone, because councils phrase signage applications as works: 'construction of childcare centre signage' is minor, 'construction of a childcare centre including signage' is substantive. Classification is conservative: an unrecognised object counts as substantive, and a description whose head noun is the centre itself is never filed minor. The one scope filed minor without being stated is a NSW consent modification (s4.55, s96, amended plans) carrying no supply wording of its own; modifications that name added places, an extra storey or an enlarged centre stay substantive"},"application_uid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Application Uid","description":"Opt-in canonical application id"},"application_aliases":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Application Aliases","description":"Opt-in high-confidence official aliases"},"stable_application_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stable Application Url","description":"Opt-in stable official application URL"},"project_facts":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Project Facts","description":"Opt-in accepted evidence-backed facts"}},"type":"object","required":["id"],"title":"DARecord"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"MessageResponse":{"properties":{"message":{"type":"string","title":"Message"}},"type":"object","required":["message"],"title":"MessageResponse"},"PaginationMeta":{"properties":{"total":{"type":"integer","title":"Total"},"page":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Page"},"per_page":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Per Page"},"pages":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Pages"},"feed_product":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Feed Product"},"feed_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Feed Version"}},"type":"object","required":["total"],"title":"PaginationMeta"},"ProjectWatchRequest":{"properties":{"callback_url":{"type":"string","maxLength":2048,"minLength":1,"title":"Callback Url"},"idempotency_key":{"type":"string","maxLength":128,"minLength":8,"pattern":"^[A-Za-z0-9._:-]+$","title":"Idempotency Key"}},"type":"object","required":["callback_url","idempotency_key"],"title":"ProjectWatchRequest"},"SA2ForecastResponse":{"properties":{"data":{"additionalProperties":true,"type":"object","title":"Data"},"source":{"additionalProperties":true,"type":"object","title":"Source"}},"type":"object","required":["data","source"],"title":"SA2ForecastResponse"},"SQLQueryRequest":{"properties":{"query":{"type":"string","maxLength":2000,"minLength":6,"title":"Query","description":"SQL SELECT query against the `das` view"},"params":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Params","description":"Optional query parameters for %s placeholders"}},"type":"object","required":["query"],"title":"SQLQueryRequest"},"SQLQueryResponse":{"properties":{"columns":{"items":{"type":"string"},"type":"array","title":"Columns"},"rows":{"items":{"items":{},"type":"array"},"type":"array","title":"Rows"},"row_count":{"type":"integer","title":"Row Count"},"truncated":{"type":"boolean","title":"Truncated","description":"True if results were capped at 1000 rows"}},"type":"object","required":["columns","rows","row_count","truncated"],"title":"SQLQueryResponse"},"StatsByCategoryItem":{"properties":{"category":{"type":"string","title":"Category"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["category","count"],"title":"StatsByCategoryItem"},"StatsByStateItem":{"properties":{"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"},"count":{"type":"integer","title":"Count"}},"type":"object","required":["count"],"title":"StatsByStateItem"},"StatsData":{"properties":{"total_records":{"type":"integer","title":"Total Records"},"records_last_7_days":{"type":"integer","title":"Records Last 7 Days"},"date_range":{"$ref":"#/components/schemas/StatsDateRange"},"by_state":{"items":{"$ref":"#/components/schemas/StatsByStateItem"},"type":"array","title":"By State"},"by_category":{"items":{"$ref":"#/components/schemas/StatsByCategoryItem"},"type":"array","title":"By Category"}},"type":"object","required":["total_records","records_last_7_days","date_range","by_state","by_category"],"title":"StatsData"},"StatsDateRange":{"properties":{"earliest":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Earliest"},"latest":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Latest"}},"type":"object","title":"StatsDateRange"},"StatsResponse":{"properties":{"data":{"$ref":"#/components/schemas/StatsData"}},"type":"object","required":["data"],"title":"StatsResponse"},"SuburbAgeBands":{"properties":{"0_14":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"0 14"},"15_24":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"15 24"},"25_44":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"25 44"},"45_64":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"45 64"},"65_plus":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"65 Plus"}},"type":"object","title":"SuburbAgeBands"},"SuburbBedrooms":{"properties":{"none_or_1":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"None Or 1"},"2":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"2"},"3":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"3"},"4_plus":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"4 Plus"}},"type":"object","title":"SuburbBedrooms"},"SuburbDetailResponse":{"properties":{"data":{"$ref":"#/components/schemas/SuburbRecord"},"source":{"additionalProperties":true,"type":"object","title":"Source"}},"type":"object","required":["data","source"],"title":"SuburbDetailResponse"},"SuburbDwellingMix":{"properties":{"separate_house":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Separate House"},"semi_detached":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Semi Detached"},"apartment":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Apartment"},"other":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Other","description":"Residual: 100 minus the three named types."}},"type":"object","title":"SuburbDwellingMix"},"SuburbListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/SuburbRecord"},"type":"array","title":"Data"},"meta":{"additionalProperties":true,"type":"object","title":"Meta"},"source":{"additionalProperties":true,"type":"object","title":"Source"}},"type":"object","required":["data","meta","source"],"title":"SuburbListResponse"},"SuburbRecord":{"properties":{"sal_code":{"type":"string","title":"Sal Code","description":"ABS Suburbs and Localities (SAL) code"},"name":{"type":"string","title":"Name"},"state":{"type":"string","title":"State"},"postcode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Postcode"},"population":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Population"},"occupied_private_dwellings":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Occupied Private Dwellings","description":"Occupied private dwellings (ABS G36). Excludes unoccupied dwellings, so it is not a total dwelling count and a vacancy rate cannot be derived from it."},"median_age":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Median Age"},"avg_household_size":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Avg Household Size"},"age_bands_pct":{"anyOf":[{"$ref":"#/components/schemas/SuburbAgeBands"},{"type":"null"}]},"tenure_pct":{"anyOf":[{"$ref":"#/components/schemas/SuburbTenure"},{"type":"null"}]},"dwelling_mix_pct":{"anyOf":[{"$ref":"#/components/schemas/SuburbDwellingMix"},{"type":"null"}]},"bedrooms_pct":{"anyOf":[{"$ref":"#/components/schemas/SuburbBedrooms"},{"type":"null"}]},"suppressed":{"items":{"type":"string"},"type":"array","title":"Suppressed","description":"Blocks we hold data for but withheld because the components do not add to 100 (ABS perturbs small cells). Each named block is null."},"unavailable":{"items":{"type":"string"},"type":"array","title":"Unavailable","description":"Blocks ABS published no usable data for at this geography. Each named block is null. Distinct from `suppressed`: nothing was withheld, there is nothing."}},"type":"object","required":["sal_code","name","state"],"title":"SuburbRecord"},"SuburbSignalsResponse":{"properties":{"data":{"additionalProperties":true,"type":"object","title":"Data"},"source":{"additionalProperties":true,"type":"object","title":"Source"}},"type":"object","required":["data","source"],"title":"SuburbSignalsResponse"},"SuburbTenure":{"properties":{"owned_outright":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Owned Outright"},"owned_with_mortgage":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Owned With Mortgage"},"rented":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rented"},"other":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Other","description":"Fourth stated tenure type (life tenure schemes, rent-free occupancy). Read from ABS G37, not a residual. The four shares sum to 100."}},"type":"object","title":"SuburbTenure"},"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"},"WebhookCreateRequest":{"properties":{"url":{"type":"string","title":"Url","description":"HTTPS endpoint that will receive webhook events"},"events":{"type":"string","title":"Events","description":"Comma-separated event names. Currently only 'new_da' is supported.","default":"new_da"}},"type":"object","required":["url"],"title":"WebhookCreateRequest"},"WebhookCreateResponse":{"properties":{"data":{"$ref":"#/components/schemas/WebhookItem"},"message":{"type":"string","title":"Message"}},"type":"object","required":["data","message"],"title":"WebhookCreateResponse"},"WebhookItem":{"properties":{"id":{"type":"integer","title":"Id"},"url":{"type":"string","title":"Url"},"events":{"type":"string","title":"Events"},"is_active":{"type":"boolean","title":"Is Active"},"failure_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Failure Count"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"last_triggered_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Triggered At"},"secret":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secret"}},"type":"object","required":["id","url","events","is_active"],"title":"WebhookItem"},"WebhookListResponse":{"properties":{"data":{"items":{"$ref":"#/components/schemas/WebhookItem"},"type":"array","title":"Data"},"meta":{"$ref":"#/components/schemas/PaginationMeta"}},"type":"object","required":["data","meta"],"title":"WebhookListResponse"}},"securitySchemes":{"HTTPBearer":{"type":"http","description":"Use your API key as a Bearer token, for example: Bearer dk_xxx","scheme":"bearer"}}},"servers":[{"url":"https://daleads.com.au","description":"Production"}]}