{"openapi":"3.1.0","info":{"title":"ToucanBid Public Jobs API","version":"1.0.0","description":"Read-only access to open jobs posted by Clients on ToucanBid, so AI assistants and tools can help Licensed Pros find work. Responses never include the Client's name, contact details or exact address. Bidding, chat and every write action require a signed-in, paying ToucanBid Licensed Pro account on the website — API keys are read-only and can never bid. Anonymous: 30 requests/min per IP. Free API key (X-API-Key header, from http://app.toucanbid.com/developers): 60 requests/min."},"servers":[{"url":"http://app.toucanbid.com"}],"externalDocs":{"url":"http://app.toucanbid.com/developers"},"components":{"securitySchemes":{"ApiKey":{"type":"apiKey","in":"header","name":"X-API-Key","description":"Optional free key for higher rate limits. Read-only."}},"schemas":{"Job":{"type":"object","required":["id","title","profession","budget","postedAt","url","signUpToBidUrl"],"properties":{"id":{"type":"string","description":"Job id"},"title":{"type":"string","description":"Job title"},"profession":{"type":"string","description":"Profession / trade category"},"city":{"type":["string","null"],"description":"City only, never the street address"},"state":{"type":["string","null"],"description":"Two-letter state code"},"budget":{"type":"string","description":"Budget label, e.g. \"$5,000–$10,000\" or \"Open to bids\""},"postedAt":{"type":"string","description":"ISO 8601","format":"date-time"},"bidCount":{"type":"integer"},"distanceMiles":{"type":"integer","description":"Only when `near` is used"},"url":{"type":"string","description":"Public job page","format":"uri"},"signUpToBidUrl":{"type":"string","description":"Join as a Licensed Pro to bid on this job","format":"uri"},"howToBid":{"type":"string","description":"Bidding rule"}}},"JobDetail":{"allOf":[{"$ref":"#/components/schemas/Job"},{"type":"object","properties":{"description":{"type":"string","description":"Scope description with contact details removed (max 1000 chars)"},"timeline":{"type":["string","null"]},"status":{"type":"string","description":"open | awarded | closed","enum":["open","awarded","closed"]},"acceptingBids":{"type":"boolean"},"deadline":{"type":"string","description":"ISO 8601","format":"date-time"},"auctionEndsAt":{"type":["string","null"],"format":"date-time"},"insuranceClaim":{"type":"boolean"}}}]},"JobList":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Job"}},"page":{"type":"integer"},"pages":{"type":"integer"},"total":{"type":"integer"},"sort":{"type":"string","description":"Applied sort"},"links":{"type":"object","properties":{"self":{"type":"string","description":"","format":"uri"},"next":{"type":["string","null"]},"prev":{"type":["string","null"]},"html":{"type":"string","description":"Same search on the website"},"docs":{"type":"string","description":""}}},"professions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string","description":"Use as `profession` filter"},"name":{"type":"string","description":""}}}}}},"Error":{"type":"object","properties":{"error":{"type":"string","description":"Message"}}}}},"security":[{},{"ApiKey":[]}],"paths":{"/api/v1/jobs":{"get":{"operationId":"searchJobs","summary":"Search open jobs","description":"Same filters as the /jobs page. 20 results per page, newest first by default.","parameters":[{"name":"q","in":"query","required":false,"description":"Keyword (title, profession, description)","schema":{"type":"string","maxLength":80}},{"name":"profession","in":"query","required":false,"description":"Profession id (see `professions` in any list response)","schema":{"type":"string"}},{"name":"state","in":"query","required":false,"description":"State code or name, e.g. FL","schema":{"type":"string"}},{"name":"near","in":"query","required":false,"description":"City or ZIP to search around","schema":{"type":"string","maxLength":60}},{"name":"radius","in":"query","required":false,"description":"Miles around `near`","schema":{"type":"integer","enum":[10,25,50,100],"default":25}},{"name":"budget","in":"query","required":false,"description":"Budget range label","schema":{"type":"string","enum":["<$1k","$1–5k","$5–10k","$10–25k","$25–50k","$50–100k","$100k+"]}},{"name":"posted","in":"query","required":false,"description":"Posted within N days","schema":{"type":"string","enum":["1","7","30"]}},{"name":"sort","in":"query","required":false,"description":"`nearest` needs `near`","schema":{"type":"string","enum":["newest","budget","nearest"],"default":"newest"}},{"name":"page","in":"query","required":false,"description":"Page number","schema":{"type":"integer","minimum":1,"maximum":500,"default":1}}],"responses":{"200":{"description":"Jobs","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobList"}}}},"401":{"description":"Invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/jobs/{id}":{"get":{"operationId":"getJob","summary":"Get one job","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Job","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/JobDetail"}}}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}