{"openapi":"3.1.0","info":{"title":"DealWolf API","version":"v1","description":"Read your workspace's deals and buyers, add leads, and get signed webhooks when something happens.\n\nEvery key belongs to one workspace and sees only that workspace. Nothing here contacts a seller, agent, buyer or investor.\n\nLists are newest first: `limit` (1-100, default 25) and the opaque `cursor` from the previous page; a `Link: <…>; rel=\"next\"` header points at the next page.\n\nEvery answer carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset. Each key has its own per-minute limit (60 unless set otherwise), the workspace has 300 a minute across all its keys, and each key has a monthly quota. Over a limit: 429 with Retry-After.\n\nEvery failure has one shape: `{ error: { code, message, request_id, details? } }`."},"servers":[{"url":"/api/v1","description":"Your DealWolf, at its own address"}],"security":[{"bearer":[]}],"tags":[{"name":"API","description":"Deals, buyers and the key itself."},{"name":"Events","description":"Recent events, for polling triggers (Zapier, Make)."},{"name":"Webhooks","description":"REST-hook subscriptions, for instant triggers (Zapier, Make)."}],"paths":{"/me":{"get":{"tags":["API"],"operationId":"getMe","summary":"The key and its workspace (a connection test)","description":"Any valid key may call this. Zapier and Make use it to check a connection.","x-required-scope":null,"responses":{"200":{"description":"The key","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Me"}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Unavailable"}}}},"/deals":{"get":{"tags":["API"],"operationId":"listDeals","summary":"List deals, newest first","x-required-scope":"read-deals","parameters":[{"$ref":"#/components/parameters/limit"},{"$ref":"#/components/parameters/cursor"},{"name":"stage","in":"query","schema":{"type":"string"},"description":"A pipeline stage id, e.g. new, offer, packed."},{"name":"market","in":"query","schema":{"type":"string","enum":["UK","US"]}},{"name":"strategy","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"A page of deals","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"object","required":["data","has_more","next_cursor"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Deal"}},"has_more":{"type":"boolean"},"next_cursor":{"type":["string","null"],"description":"Pass as `cursor` for the next page."}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Unavailable"}}},"post":{"tags":["API"],"operationId":"createDeal","summary":"Add a lead","description":"It lands unassigned at the New stage with no verdict until someone stacks it. Send an Idempotency-Key header to make retries safe.","x-required-scope":"write-deals","parameters":[{"name":"Idempotency-Key","in":"header","schema":{"type":"string","maxLength":255}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewDeal"}}}},"responses":{"201":{"description":"The new deal","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Location":{"schema":{"type":"string"}}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Deal"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"409":{"$ref":"#/components/responses/Error"},"413":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Unavailable"}}}},"/deals/{id}":{"get":{"tags":["API"],"operationId":"getDeal","summary":"One deal","description":"Another workspace's deal is a 404, the same as one that doesn't exist.","x-required-scope":"read-deals","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"The deal","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/Deal"}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Unavailable"}}}},"/buyers":{"get":{"tags":["API"],"operationId":"listBuyers","summary":"List buyers and their buy boxes","description":"Names and buy boxes only: never email, phone, notes or proof of funds. Do-not-contact buyers are left out.","x-required-scope":"read-buyers","parameters":[{"$ref":"#/components/parameters/limit"},{"$ref":"#/components/parameters/cursor"}],"responses":{"200":{"description":"A page of buyers","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"object","required":["data","has_more","next_cursor"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Buyer"}},"has_more":{"type":"boolean"},"next_cursor":{"type":["string","null"],"description":"Pass as `cursor` for the next page."}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Unavailable"}}}},"/events":{"get":{"tags":["Events"],"operationId":"listEvents","summary":"Recent events, newest first (polling triggers)","description":"Every event of the last 30 days, whether or not a webhook is registered. Each has a stable id to de-duplicate on.","x-required-scope":"read-events","parameters":[{"$ref":"#/components/parameters/limit"},{"$ref":"#/components/parameters/cursor"},{"name":"type","in":"query","schema":{"type":"string","enum":["deal.created","deal.stage_changed","offer.status_changed","lead.matched","pack.created"]}}],"responses":{"200":{"description":"A page of events","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"},"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"object","required":["data","has_more","next_cursor"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Event"}},"has_more":{"type":"boolean"},"next_cursor":{"type":["string","null"],"description":"Pass as `cursor` for the next page."}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Unavailable"}}}},"/events/samples":{"get":{"tags":["Events"],"operationId":"listEventSamples","summary":"A made-up example of each event","description":"For setting up a Zap or scenario before anything has happened. Any valid key.","x-required-scope":null,"parameters":[{"name":"type","in":"query","schema":{"type":"string","enum":["deal.created","deal.stage_changed","offer.status_changed","lead.matched","pack.created"]}}],"responses":{"200":{"description":"Samples","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Event"}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Unavailable"}}}},"/webhooks":{"get":{"tags":["Webhooks"],"operationId":"listWebhooks","summary":"The workspace's webhook addresses","x-required-scope":"write-webhooks","responses":{"200":{"description":"Addresses","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Webhook"}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Unavailable"}}},"post":{"tags":["Webhooks"],"operationId":"subscribeWebhook","summary":"Subscribe an address to events (REST hook)","description":"Zapier and Make call this when a Zap or scenario is switched on. Takes `{ url, events }` or Zapier's `{ target_url, event }`. The signing secret is in this answer only. Up to 5 addresses per workspace.","x-required-scope":"write-webhooks","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewWebhook"}}}},"responses":{"201":{"description":"The address, with its signing secret (shown once)","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"allOf":[{"$ref":"#/components/schemas/Webhook"},{"type":"object","properties":{"secret":{"type":"string"}}}]}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"413":{"$ref":"#/components/responses/Error"},"422":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Unavailable"}}}},"/webhooks/{id}":{"delete":{"tags":["Webhooks"],"operationId":"unsubscribeWebhook","summary":"Unsubscribe an address","description":"Zapier and Make call this when a Zap or scenario is switched off. Another workspace's address is a 404.","x-required-scope":"write-webhooks","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Removed","headers":{"RateLimit-Limit":{"$ref":"#/components/headers/RateLimit-Limit"},"RateLimit-Remaining":{"$ref":"#/components/headers/RateLimit-Remaining"},"RateLimit-Reset":{"$ref":"#/components/headers/RateLimit-Reset"},"X-Request-Id":{"$ref":"#/components/headers/X-Request-Id"}},"content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"id":{"type":"string"},"deleted":{"const":true}}}}}}}},"401":{"$ref":"#/components/responses/Unauthorized"},"403":{"$ref":"#/components/responses/Forbidden"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/RateLimited"},"503":{"$ref":"#/components/responses/Unavailable"}}}}},"webhooks":{"deal.created":{"post":{"summary":"A deal or lead is added","description":"A deal or lead was added to the workspace: by hand, from the map, a bulk stack, the seller form or the API. Carries the deal (no seller or agent contact details).\n\nSigned: `DealWolf-Signature: t=<unix seconds>,v1=<hex HMAC-SHA256 of \"<t>.<raw body>\">`. Refuse anything older than 300 seconds. Answer 2xx within 5 seconds; anything else is tried again after 1, 5, 30, 120, 360 minutes (6 tries in all). Answer 410 to unsubscribe.","x-zapier-trigger":"New Deal","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","api_version","created_at","data"],"properties":{"id":{"type":"string","description":"evt_…, the same in every delivery and every retry of this event. De-duplicate on it."},"type":{"type":"string","enum":["deal.created","deal.stage_changed","offer.status_changed","lead.matched","pack.created"]},"api_version":{"const":"v1"},"created_at":{"type":"string","format":"date-time"},"data":{"type":"object"}}},"example":{"id":"evt_sample_deal_created","type":"deal.created","api_version":"v1","created_at":"2026-11-08T10:00:00.000Z","data":{"deal":{"id":"00000000-0000-4000-8000-000000000001","title":"3 bed semi, Acacia Road","address":"12 Acacia Road, Birmingham","postcode":"B12 9QT","market":"UK","strategy":"flip","stage":{"id":"offer","label":"Offer"},"asking_price":{"status":"given","amount":150000,"currency":"GBP","certainty":"entered","basis":"figure entered on the deal in your workspace","as_of":"2026-11-08"},"verdict":{"status":"given","value":"green","certainty":"calculated","basis":"your workspace's rules, as last saved on the deal","as_of":"2026-11-08"},"bedrooms":3,"property_type":"semi-detached","next_action":{"text":"Book a viewing","due":"2026-11-09"},"created_at":"2026-11-08T10:00:00.000Z","updated_at":"2026-11-08T10:00:00.000Z"}}}}}},"responses":{"200":{"description":"Received"},"410":{"description":"Gone: unsubscribe this address"}}}},"deal.stage_changed":{"post":{"summary":"A deal moves to another pipeline stage","description":"A deal moved to another pipeline stage (by hand, in bulk, or when a pack moved it to Packed). Carries the deal and the stage it came from.\n\nSigned: `DealWolf-Signature: t=<unix seconds>,v1=<hex HMAC-SHA256 of \"<t>.<raw body>\">`. Refuse anything older than 300 seconds. Answer 2xx within 5 seconds; anything else is tried again after 1, 5, 30, 120, 360 minutes (6 tries in all). Answer 410 to unsubscribe.","x-zapier-trigger":"Deal Status Changed","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","api_version","created_at","data"],"properties":{"id":{"type":"string","description":"evt_…, the same in every delivery and every retry of this event. De-duplicate on it."},"type":{"type":"string","enum":["deal.created","deal.stage_changed","offer.status_changed","lead.matched","pack.created"]},"api_version":{"const":"v1"},"created_at":{"type":"string","format":"date-time"},"data":{"type":"object"}}},"example":{"id":"evt_sample_deal_stage_changed","type":"deal.stage_changed","api_version":"v1","created_at":"2026-11-08T10:00:00.000Z","data":{"deal":{"id":"00000000-0000-4000-8000-000000000001","title":"3 bed semi, Acacia Road","address":"12 Acacia Road, Birmingham","postcode":"B12 9QT","market":"UK","strategy":"flip","stage":{"id":"offer","label":"Offer"},"asking_price":{"status":"given","amount":150000,"currency":"GBP","certainty":"entered","basis":"figure entered on the deal in your workspace","as_of":"2026-11-08"},"verdict":{"status":"given","value":"green","certainty":"calculated","basis":"your workspace's rules, as last saved on the deal","as_of":"2026-11-08"},"bedrooms":3,"property_type":"semi-detached","next_action":{"text":"Book a viewing","due":"2026-11-09"},"created_at":"2026-11-08T10:00:00.000Z","updated_at":"2026-11-08T10:00:00.000Z"},"previous_stage":{"id":"calling","label":"Calling"}}}}}},"responses":{"200":{"description":"Received"},"410":{"description":"Gone: unsubscribe this address"}}}},"offer.status_changed":{"post":{"summary":"An offer's status changes","description":"An offer in the offer tracker changed status: countered, accepted, rejected, dead or withdrawn. Carries the offer's status before and after, its amount and the last counter. The MAO, walk-away floor and who it went to are never sent.\n\nSigned: `DealWolf-Signature: t=<unix seconds>,v1=<hex HMAC-SHA256 of \"<t>.<raw body>\">`. Refuse anything older than 300 seconds. Answer 2xx within 5 seconds; anything else is tried again after 1, 5, 30, 120, 360 minutes (6 tries in all). Answer 410 to unsubscribe.","x-zapier-trigger":"Offer Status Changed","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","api_version","created_at","data"],"properties":{"id":{"type":"string","description":"evt_…, the same in every delivery and every retry of this event. De-duplicate on it."},"type":{"type":"string","enum":["deal.created","deal.stage_changed","offer.status_changed","lead.matched","pack.created"]},"api_version":{"const":"v1"},"created_at":{"type":"string","format":"date-time"},"data":{"type":"object"}}},"example":{"id":"evt_sample_offer_status_changed","type":"offer.status_changed","api_version":"v1","created_at":"2026-11-08T10:00:00.000Z","data":{"offer":{"id":"00000000-0000-4000-8000-000000000002","deal_id":null,"address":"4410 Elm St, Detroit, MI 48204","kind":"cash","status":{"id":"countered","label":"Countered"},"previous_status":{"id":"sent","label":"Sent"},"amount":{"amount":49000,"currency":"USD"},"last_counter":{"amount":56000,"currency":"USD"},"sent_at":"2026-11-07T15:00:00.000Z","updated_at":"2026-11-08T10:00:00.000Z"}}}}}},"responses":{"200":{"description":"Received"},"410":{"description":"Gone: unsubscribe this address"}}}},"lead.matched":{"post":{"summary":"A saved search finds new matches","description":"A saved search (buy box) found new homes that match it. Carries the saved search and up to ten homes (address, price, beds, type, map position, whether it scores strong). Which listing site a home came from is never sent.\n\nSigned: `DealWolf-Signature: t=<unix seconds>,v1=<hex HMAC-SHA256 of \"<t>.<raw body>\">`. Refuse anything older than 300 seconds. Answer 2xx within 5 seconds; anything else is tried again after 1, 5, 30, 120, 360 minutes (6 tries in all). Answer 410 to unsubscribe.","x-zapier-trigger":"New Lead Match","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","api_version","created_at","data"],"properties":{"id":{"type":"string","description":"evt_…, the same in every delivery and every retry of this event. De-duplicate on it."},"type":{"type":"string","enum":["deal.created","deal.stage_changed","offer.status_changed","lead.matched","pack.created"]},"api_version":{"const":"v1"},"created_at":{"type":"string","format":"date-time"},"data":{"type":"object"}}},"example":{"id":"evt_sample_lead_matched","type":"lead.matched","api_version":"v1","created_at":"2026-11-08T10:00:00.000Z","data":{"saved_search":{"id":"00000000-0000-4000-8000-000000000003","label":"Brum terraces under 150k"},"match_count":1,"strong_count":1,"matches":[{"address":"27 Oak Lane, Birmingham B13","price":{"amount":135000,"currency":"GBP"},"bedrooms":3,"property_type":"terraced","latitude":52.4412,"longitude":-1.8901,"deal_score":82,"strong":true}],"link":"/?at=52.44120,-1.89010,17"}}}}},"responses":{"200":{"description":"Received"},"410":{"description":"Gone: unsubscribe this address"}}}},"pack.created":{"post":{"summary":"A deal pack is made","description":"A deal pack was made for a deal, from a template or the pack builder. Carries the pack's name and file name, and the deal. A draft: nothing is sent to an investor.\n\nSigned: `DealWolf-Signature: t=<unix seconds>,v1=<hex HMAC-SHA256 of \"<t>.<raw body>\">`. Refuse anything older than 300 seconds. Answer 2xx within 5 seconds; anything else is tried again after 1, 5, 30, 120, 360 minutes (6 tries in all). Answer 410 to unsubscribe.","x-zapier-trigger":"New Pack","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["id","type","api_version","created_at","data"],"properties":{"id":{"type":"string","description":"evt_…, the same in every delivery and every retry of this event. De-duplicate on it."},"type":{"type":"string","enum":["deal.created","deal.stage_changed","offer.status_changed","lead.matched","pack.created"]},"api_version":{"const":"v1"},"created_at":{"type":"string","format":"date-time"},"data":{"type":"object"}}},"example":{"id":"evt_sample_pack_created","type":"pack.created","api_version":"v1","created_at":"2026-11-08T10:00:00.000Z","data":{"pack":{"id":"00000000-0000-4000-8000-000000000004","deal_id":"00000000-0000-4000-8000-000000000001","name":"Investor pack","filename":"3-bed-semi-acacia-road-investor-pack-2026-11-08.pdf","status":"draft","created_at":"2026-11-08T10:00:00.000Z"},"deal":{"id":"00000000-0000-4000-8000-000000000001","title":"3 bed semi, Acacia Road","address":"12 Acacia Road, Birmingham","postcode":"B12 9QT","market":"UK","strategy":"flip","stage":{"id":"offer","label":"Offer"},"asking_price":{"status":"given","amount":150000,"currency":"GBP","certainty":"entered","basis":"figure entered on the deal in your workspace","as_of":"2026-11-08"},"verdict":{"status":"given","value":"green","certainty":"calculated","basis":"your workspace's rules, as last saved on the deal","as_of":"2026-11-08"},"bedrooms":3,"property_type":"semi-detached","next_action":{"text":"Book a viewing","due":"2026-11-09"},"created_at":"2026-11-08T10:00:00.000Z","updated_at":"2026-11-08T10:00:00.000Z"}}}}}},"responses":{"200":{"description":"Received"},"410":{"description":"Gone: unsubscribe this address"}}}}},"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"A workspace API key (dwk_…), made by the workspace owner on the API page. Send it as `Authorization: Bearer dwk_…`. A key has scopes:\n- `read-deals`: Read deals\n- `write-deals`: Create deals and leads\n- `read-buyers`: Read buyers (names and buy boxes only)\n- `read-events`: Read recent events (for Zapier and Make polling)\n- `write-webhooks`: Subscribe and unsubscribe webhooks (Zapier and Make instant triggers)\n\nA read key has read-deals, read-buyers, read-events; a read-and-write key has them all."}},"parameters":{"limit":{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}},"cursor":{"name":"cursor","in":"query","schema":{"type":"string"},"description":"next_cursor from the previous page."}},"headers":{"RateLimit-Limit":{"schema":{"type":"integer"},"description":"Requests this key may make in the current minute."},"RateLimit-Remaining":{"schema":{"type":"integer"}},"RateLimit-Reset":{"schema":{"type":"integer"},"description":"Seconds until the minute resets."},"X-Request-Id":{"schema":{"type":"string"},"description":"Quote it when asking about a request."},"Link":{"schema":{"type":"string"},"description":"RFC 8288: `<…?cursor=…>; rel=\"next\"` when there is another page."}},"responses":{"Error":{"description":"See error.code","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Unauthorized":{"description":"No key, or a key that is wrong or revoked","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Forbidden":{"description":"The key lacks the scope","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"RateLimited":{"description":"Over a rate limit or the monthly quota; see Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Unavailable":{"description":"DealWolf can't answer right now; try again","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","request_id"],"properties":{"code":{"type":"string","enum":["unauthorized","forbidden","not_found","method_not_allowed","invalid_request","bad_json","payload_too_large","idempotency_conflict","idempotency_key_reused","rate_limited","quota_exceeded","unavailable","internal"]},"message":{"type":"string"},"request_id":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}}}}}}}},"Me":{"type":"object","properties":{"key":{"type":"object","properties":{"id":{"type":"string"},"scopes":{"type":"array","items":{"type":"string","enum":["read-deals","write-deals","read-buyers","read-events","write-webhooks"]}}}},"workspace":{"type":"object","properties":{"name":{"type":"string"},"home_market":{"type":"string","enum":["UK","US"]}}},"limits":{"type":"object","properties":{"per_minute":{"type":"integer"},"workspace_per_minute":{"type":"integer"},"monthly_quota":{"type":"integer"},"used_this_month":{"type":"integer"}}}}},"Money":{"type":"object","properties":{"amount":{"type":"number"},"currency":{"type":"string","enum":["GBP","USD"]}}},"Deal":{"type":"object","description":"A figure nobody has given is `{ status: \"needed\" }`, never a guess.","properties":{"id":{"type":"string","format":"uuid"},"title":{"type":"string"},"address":{"type":["string","null"]},"postcode":{"type":["string","null"]},"market":{"type":"string","enum":["UK","US"]},"strategy":{"type":"string"},"stage":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"}}},"asking_price":{"type":"object"},"verdict":{"type":"object"},"bedrooms":{"type":["number","null"]},"property_type":{"type":["string","null"]},"listing_url":{"type":["string","null"]},"next_action":{"type":["object","null"]},"contact":{"type":["object","null"],"description":"API reads only; never in a webhook."},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"NewDeal":{"type":"object","additionalProperties":false,"description":"Give a title or an address (or both).","properties":{"title":{"type":"string","maxLength":120},"address":{"type":"string","maxLength":200},"postcode":{"type":"string","maxLength":12},"market":{"type":"string","enum":["UK","US"]},"strategy":{"type":"string"},"asking_price":{"type":"number"},"bedrooms":{"type":"integer","minimum":0,"maximum":50},"listing_url":{"type":"string","format":"uri","maxLength":500},"contact_name":{"type":"string","maxLength":120},"contact_phone":{"type":"string","pattern":"^[0-9 +()-]{6,20}$"},"lead_source":{"type":"string","enum":["portal","agent","auction","probate","seller_form","referral","cold_call","letter_drop","import","extension","driving","code_violation","manual","other"],"description":"Where the lead came from. Other when not given."}}},"Buyer":{"type":"object","description":"A buyer's name and buy box; no contact details."},"Event":{"type":"object","required":["id","type","api_version","created_at","data"],"properties":{"id":{"type":"string","description":"evt_…, the same in every delivery and every retry of this event. De-duplicate on it."},"type":{"type":"string","enum":["deal.created","deal.stage_changed","offer.status_changed","lead.matched","pack.created"]},"api_version":{"const":"v1"},"created_at":{"type":"string","format":"date-time"},"data":{"type":"object","description":"What happened; see the webhooks section for each type."}}},"Webhook":{"type":"object","properties":{"id":{"type":"string","format":"uuid"},"url":{"type":"string","format":"uri"},"events":{"type":"array","items":{"type":"string","enum":["deal.created","deal.stage_changed","offer.status_changed","lead.matched","pack.created"]}},"active":{"type":"boolean"},"created_at":{"type":"string","format":"date-time"},"made_through_api":{"type":"boolean"}}},"NewWebhook":{"type":"object","properties":{"url":{"type":"string","format":"uri","description":"https only, a public address."},"target_url":{"type":"string","format":"uri","description":"Zapier's name for url."},"events":{"type":"array","items":{"type":"string","enum":["deal.created","deal.stage_changed","offer.status_changed","lead.matched","pack.created"]}},"event":{"type":"string","enum":["deal.created","deal.stage_changed","offer.status_changed","lead.matched","pack.created"],"description":"Zapier's single-event form."}},"description":"Not webhook.test: test sends come from the API page."}}}}