{"openapi":"3.1.0","info":{"title":"FastCRM API","description":"Open integration access to FastCRM customer and pipeline data.\n\n**Access model:** reads are public. Selected writes are implemented but disabled unless the deployment configures `FASTSME_API_TOKEN`; write clients then send it as a bearer token.","contact":{"name":"FastSME","url":"https://fastsme.com/"},"license":{"name":"MIT"},"version":"1.0.0"},"servers":[{"url":"https://crm.fastsme.com/api","description":"Production"}],"paths":{"/":{"get":{"tags":["System"],"summary":"Api Index","operationId":"api_index__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Api Index  Get"}}}}}}},"/v1/health":{"get":{"tags":["System"],"summary":"Api Health","operationId":"api_health_v1_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"}}}}}}},"/v1/contacts":{"get":{"tags":["Contacts"],"summary":"List contacts","description":"People associated with customer organisations.","operationId":"list_contacts","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Case-insensitive text search","title":"Q"},"description":"Case-insensitive text search"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactsCollection"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/contacts/{item_id}":{"get":{"tags":["Contacts"],"summary":"Get one contacts record","operationId":"get_contacts","parameters":[{"name":"item_id","in":"path","required":true,"schema":{"type":"string","title":"Item Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactsResource"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/companies":{"get":{"tags":["Companies"],"summary":"List companies","description":"Customer and prospect organisation records.","operationId":"list_companies","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Case-insensitive text search","title":"Q"},"description":"Case-insensitive text search"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompaniesCollection"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/companies/{item_id}":{"get":{"tags":["Companies"],"summary":"Get one companies record","operationId":"get_companies","parameters":[{"name":"item_id","in":"path","required":true,"schema":{"type":"string","title":"Item Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompaniesResource"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/leads":{"get":{"tags":["Leads"],"summary":"List leads","description":"Unqualified and qualified sales leads.","operationId":"list_leads","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Case-insensitive text search","title":"Q"},"description":"Case-insensitive text search"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadsCollection"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Leads"],"summary":"Create a leads record","description":"Implemented for token-authenticated integrations. Production writes remain disabled until FASTSME_API_TOKEN is configured.","operationId":"create_leads","security":[{"FastSME API token":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadsCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadsResource"}}}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Unauthorized"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Unprocessable Entity"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Service Unavailable"}}}},"/v1/leads/{item_id}":{"get":{"tags":["Leads"],"summary":"Get one leads record","operationId":"get_leads","parameters":[{"name":"item_id","in":"path","required":true,"schema":{"type":"string","title":"Item Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadsResource"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/opportunities":{"get":{"tags":["Opportunities"],"summary":"List opportunities","description":"Pipeline opportunities and their commercial stages.","operationId":"list_opportunities","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Case-insensitive text search","title":"Q"},"description":"Case-insensitive text search"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpportunitiesCollection"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/opportunities/{item_id}":{"get":{"tags":["Opportunities"],"summary":"Get one opportunities record","operationId":"get_opportunities","parameters":[{"name":"item_id","in":"path","required":true,"schema":{"type":"string","title":"Item Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpportunitiesResource"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorEnvelope"}}},"description":"Not Found"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"CompaniesCollection":{"properties":{"data":{"items":{"$ref":"#/components/schemas/CompaniesResource"},"type":"array","title":"Data"},"meta":{"$ref":"#/components/schemas/PaginationMeta"}},"type":"object","required":["data","meta"],"title":"CompaniesCollection"},"CompaniesResource":{"properties":{"id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Id"},"name":{"type":"string","title":"Name"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"},"industry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry"},"employee_band":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Employee Band"},"annual_revenue":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Annual Revenue"},"territory":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Territory"},"created":{"type":"string","title":"Created"}},"type":"object","required":["name","created"],"title":"CompaniesResource"},"ContactsCollection":{"properties":{"data":{"items":{"$ref":"#/components/schemas/ContactsResource"},"type":"array","title":"Data"},"meta":{"$ref":"#/components/schemas/PaginationMeta"}},"type":"object","required":["data","meta"],"title":"ContactsCollection"},"ContactsResource":{"properties":{"id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Id"},"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"mobile":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mobile"},"job_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Title"},"org_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Org Id"},"created":{"type":"string","title":"Created"}},"type":"object","required":["created"],"title":"ContactsResource"},"ErrorDetail":{"properties":{"code":{"type":"string","title":"Code"},"message":{"type":"string","title":"Message"},"details":{"additionalProperties":true,"type":"object","title":"Details"}},"type":"object","required":["code","message"],"title":"ErrorDetail","description":"Machine-readable API error."},"ErrorEnvelope":{"properties":{"error":{"$ref":"#/components/schemas/ErrorDetail"}},"type":"object","required":["error"],"title":"ErrorEnvelope","description":"Consistent error response envelope."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HealthResponse":{"properties":{"status":{"type":"string","title":"Status"},"product":{"type":"string","title":"Product"},"version":{"type":"string","title":"Version"},"writes_enabled":{"type":"boolean","title":"Writes Enabled"}},"type":"object","required":["status","product","version","writes_enabled"],"title":"HealthResponse","description":"API health response."},"LeadsCollection":{"properties":{"data":{"items":{"$ref":"#/components/schemas/LeadsResource"},"type":"array","title":"Data"},"meta":{"$ref":"#/components/schemas/PaginationMeta"}},"type":"object","required":["data","meta"],"title":"LeadsCollection"},"LeadsCreate":{"properties":{"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name"},"organization":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organization"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"mobile":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mobile"},"status":{"type":"string","title":"Status"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"industry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry"},"territory":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Territory"}},"additionalProperties":false,"type":"object","required":["status"],"title":"LeadsCreate"},"LeadsResource":{"properties":{"id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Id"},"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name"},"organization":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organization"},"job_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Title"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"mobile":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mobile"},"status":{"type":"string","title":"Status"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"industry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry"},"employee_band":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Employee Band"},"annual_revenue":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Annual Revenue"},"territory":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Territory"},"owner_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Owner Id"},"converted":{"type":"integer","title":"Converted"},"created":{"type":"string","title":"Created"},"last_activity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Activity"}},"type":"object","required":["status","converted","created"],"title":"LeadsResource"},"OpportunitiesCollection":{"properties":{"data":{"items":{"$ref":"#/components/schemas/OpportunitiesResource"},"type":"array","title":"Data"},"meta":{"$ref":"#/components/schemas/PaginationMeta"}},"type":"object","required":["data","meta"],"title":"OpportunitiesCollection"},"OpportunitiesResource":{"properties":{"id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Id"},"org_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Org Id"},"contact_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Contact Id"},"lead_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Lead Id"},"owner_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Owner Id"},"stage":{"type":"string","title":"Stage"},"deal_value":{"type":"number","title":"Deal Value"},"probability":{"type":"integer","title":"Probability"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"industry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry"},"next_step":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Step"},"expected_close":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expected Close"},"closed_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Closed Date"},"created":{"type":"string","title":"Created"},"last_activity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Activity"}},"type":"object","required":["stage","deal_value","probability","created"],"title":"OpportunitiesResource"},"PaginationMeta":{"properties":{"total":{"type":"integer","title":"Total"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"}},"type":"object","required":["total","limit","offset"],"title":"PaginationMeta","description":"Offset pagination metadata."},"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"}},"securitySchemes":{"FastSME API token":{"type":"http","description":"Selected writes require `Authorization: Bearer <token>`. Reads are public. Set FASTSME_API_TOKEN to enable writes.","scheme":"bearer"}}}}