{"openapi":"3.1.0","info":{"title":"AccuLynx (BYOK) API","version":"0.1.0","description":"AccuLynx (BYOK) lets an AI assistant read your own AccuLynx data through the AccuLynx API with a key you supply (AccuLynx API key). Read-only: 12 tools (list_jobs, get_job, get_job_payments_overview, get_job_financials, list_job_invoices, list_users, list_milestones, list_calendars, list_calendar_appointments, list_lead_sources, list_job_categories, list_work_types). The BYOK key travels with...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-acculynx.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-acculynx/docs"},"termsOfService":"https://connectorbay.com/byok-acculynx/terms"},"servers":[{"url":"https://byok-acculynx.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-acculynx/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/list_jobs":{"post":{"operationId":"list_jobs","summary":"List jobs with job number, name, current milestone, address, trade types, category and key dates. Filter by date range, ","description":"List jobs with job number, name, current milestone, address, trade types, category and key dates. Filter by date range, milestone or assignment. Use for \"Which AccuLynx jobs are currently in the Approved milestone\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"milestones":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only jobs currently in these milestones; comma-separated, for example 'Approved,Completed'.","title":"Milestones"},"start_date":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Start of the date range, YYYY-MM-DD.","title":"Start Date"},"end_date":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"End of the date range, YYYY-MM-DD.","title":"End Date"},"date_filter_type":{"anyOf":[{"enum":["CreatedDate","MilestoneDate","ModifiedDate"],"type":"string"},{"type":"null"}],"default":"CreatedDate","description":"Which date the range applies to: CreatedDate, MilestoneDate or ModifiedDate.","title":"Date Filter Type"},"sort_by":{"anyOf":[{"enum":["CreatedDate","MilestoneDate","ModifiedDate"],"type":"string"},{"type":"null"}],"default":"CreatedDate","description":"Sort field: CreatedDate, MilestoneDate or ModifiedDate.","title":"Sort By"},"sort_order":{"anyOf":[{"enum":["Ascending","Descending"],"type":"string"},{"type":"null"}],"default":"Descending","description":"Ascending or Descending.","title":"Sort Order"},"assignment":{"anyOf":[{"enum":["assigned","unassigned"],"type":"string"},{"type":"null"}],"default":null,"description":"assigned or unassigned jobs only.","title":"Assignment"},"page_size":{"anyOf":[{"maximum":25,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many items to return (1 to 25).","title":"Page Size"},"start_index":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Zero-based index of the first record, for paging (0, then page_size, and so on).","title":"Start Index"}},"title":"list_jobsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_job":{"post":{"operationId":"get_job","summary":"Get one job by id with job number, name, current milestone, address, trade types, category, lead source and dates. Use f","description":"Get one job by id with job number, name, current milestone, address, trade types, category, lead source and dates. Use for \"Show the details of AccuLynx job 9b8f2f44\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"job_id":{"description":"AccuLynx job id (a GUID) from list_jobs.","maxLength":200,"title":"Job Id","type":"string"}},"required":["job_id"],"title":"get_jobArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_job_payments_overview":{"post":{"operationId":"get_job_payments_overview","summary":"Show a job's sales amount, balance due, accounts-receivable age and percentage collected. Use for \"How much is still owe","description":"Show a job's sales amount, balance due, accounts-receivable age and percentage collected. Use for \"How much is still owed on AccuLynx job 9b8f2f44\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"job_id":{"description":"AccuLynx job id (a GUID) from list_jobs.","maxLength":200,"title":"Job Id","type":"string"}},"required":["job_id"],"title":"get_job_payments_overviewArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_job_financials":{"post":{"operationId":"get_job_financials","summary":"Show a job's approved value, balance due and totals by worksheet section (change orders, supplements, discounts ...). Us","description":"Show a job's approved value, balance due and totals by worksheet section (change orders, supplements, discounts ...). Use for \"What are the financial totals of AccuLynx job 9b8f2f44\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"job_id":{"description":"AccuLynx job id (a GUID) from list_jobs.","maxLength":200,"title":"Job Id","type":"string"}},"required":["job_id"],"title":"get_job_financialsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_job_invoices":{"post":{"operationId":"list_job_invoices","summary":"List a job's invoices with number, dates, state (Paid, Unpaid, Void, Draft), total and balance due. Use for \"Which invoi","description":"List a job's invoices with number, dates, state (Paid, Unpaid, Void, Draft), total and balance due. Use for \"Which invoices exist for AccuLynx job 9b8f2f44 and are they paid\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"job_id":{"description":"AccuLynx job id (a GUID) from list_jobs.","maxLength":200,"title":"Job Id","type":"string"},"sort_order":{"anyOf":[{"enum":["Ascending","Descending"],"type":"string"},{"type":"null"}],"default":"Ascending","description":"Ascending or Descending.","title":"Sort Order"},"page_size":{"anyOf":[{"maximum":25,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many items to return (1 to 25).","title":"Page Size"},"start_index":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Zero-based index of the first record, for paging (0, then page_size, and so on).","title":"Start Index"}},"required":["job_id"],"title":"list_job_invoicesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_users":{"post":{"operationId":"list_users","summary":"List company users with display name, role and status (no phone or email). Use for \"Who are the active AccuLynx users an","description":"List company users with display name, role and status (no phone or email). Use for \"Who are the active AccuLynx users and what are their roles\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"status":{"anyOf":[{"enum":["Active","Inactive","Archived","Deleted"],"type":"string"},{"type":"null"}],"default":null,"description":"Filter by user status: Active, Inactive, Archived or Deleted.","title":"Status"},"page_size":{"anyOf":[{"maximum":25,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many items to return (1 to 25).","title":"Page Size"},"start_index":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Zero-based index of the first record, for paging (0, then page_size, and so on).","title":"Start Index"}},"title":"list_usersArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_milestones":{"post":{"operationId":"list_milestones","summary":"List the company's workflow milestones (Lead, Prospect, Approved, Completed, Invoiced, Closed ...) and their statuses. U","description":"List the company's workflow milestones (Lead, Prospect, Approved, Completed, Invoiced, Closed ...) and their statuses. Use for \"What job milestones does my AccuLynx workflow have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_milestonesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_calendars":{"post":{"operationId":"list_calendars","summary":"List the company's calendars with ids, to use with list_calendar_appointments. Use for \"Which calendars exist in AccuLyn","description":"List the company's calendars with ids, to use with list_calendar_appointments. Use for \"Which calendars exist in AccuLynx\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page_size":{"anyOf":[{"maximum":25,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many items to return (1 to 25).","title":"Page Size"},"start_index":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Zero-based index of the first record, for paging (0, then page_size, and so on).","title":"Start Index"}},"title":"list_calendarsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_calendar_appointments":{"post":{"operationId":"list_calendar_appointments","summary":"List appointments of one calendar between two dates with title, type, start and end, job and location. Use for \"What is ","description":"List appointments of one calendar between two dates with title, type, start and end, job and location. Use for \"What is on the AccuLynx calendar next week\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"calendar_id":{"description":"Calendar id from list_calendars.","maxLength":200,"title":"Calendar Id","type":"string"},"start_date":{"description":"Start date, YYYY-MM-DD.","maxLength":10,"title":"Start Date","type":"string"},"end_date":{"description":"End date, YYYY-MM-DD.","maxLength":10,"title":"End Date","type":"string"},"event_type":{"anyOf":[{"maxLength":80,"type":"string"},{"type":"null"}],"default":"All","description":"Event types, comma-separated: Personal, InitialAppointment, MaterialDelivery, CrewLabor (default All).","title":"Event Type"},"job_id":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only appointments of this job id.","title":"Job Id"},"page_size":{"anyOf":[{"maximum":25,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many items to return (1 to 25).","title":"Page Size"},"start_index":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Zero-based index of the first record, for paging (0, then page_size, and so on).","title":"Start Index"}},"required":["calendar_id","start_date","end_date"],"title":"list_calendar_appointmentsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_lead_sources":{"post":{"operationId":"list_lead_sources","summary":"List the active lead sources and their child sources. Use for \"What lead sources are configured in AccuLynx\".","description":"List the active lead sources and their child sources. Use for \"What lead sources are configured in AccuLynx\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page_size":{"anyOf":[{"maximum":25,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many items to return (1 to 25).","title":"Page Size"},"start_index":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Zero-based index of the first record, for paging (0, then page_size, and so on).","title":"Start Index"}},"title":"list_lead_sourcesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_job_categories":{"post":{"operationId":"list_job_categories","summary":"List the job categories configured for the company. Use for \"What job categories does AccuLynx have\".","description":"List the job categories configured for the company. Use for \"What job categories does AccuLynx have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page_size":{"anyOf":[{"maximum":25,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many items to return (1 to 25).","title":"Page Size"},"start_index":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Zero-based index of the first record, for paging (0, then page_size, and so on).","title":"Start Index"}},"title":"list_job_categoriesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_work_types":{"post":{"operationId":"list_work_types","summary":"List the work types configured for the company. Use for \"What work types are set up in AccuLynx\".","description":"List the work types configured for the company. Use for \"What work types are set up in AccuLynx\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page_size":{"anyOf":[{"maximum":25,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many items to return (1 to 25).","title":"Page Size"},"start_index":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Zero-based index of the first record, for paging (0, then page_size, and so on).","title":"Start Index"}},"title":"list_work_typesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}