{"openapi":"3.1.0","info":{"title":"Lawcus (BYOK) API","version":"0.1.0","description":"Lawcus (BYOK) lets an AI assistant read your own Lawcus data through the Lawcus API with a key you supply (Lawcus long-life API token (starts with ltc_, US region)). Read-only: 11 tools (get_team, list_teammates, list_matters, get_matters_summary, list_time_entries, list_expenses, list_flat_fees, list_activity_categories, list_lead_sources, list_tasks, get_billing_totals). The BYOK key travels...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-lawcus.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-lawcus/docs"},"termsOfService":"https://connectorbay.com/byok-lawcus/terms"},"servers":[{"url":"https://byok-lawcus.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-lawcus/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/get_team":{"post":{"operationId":"get_team","summary":"Get the firm's profile: name, city, state, country, locale and currency (phone numbers and email are not returned). Use ","description":"Get the firm's profile: name, city, state, country, locale and currency (phone numbers and email are not returned). Use for \"What currency and locale is our Lawcus firm configured with\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_teamArguments","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_teammates":{"post":{"operationId":"list_teammates","summary":"List the firm's users with id, name, role and time zone (contact details and billing rates are not returned). Use for \"W","description":"List the firm's users with id, name, role and time zone (contact details and billing rates are not returned). Use for \"Who is on our Lawcus team and what roles do they have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_teammatesArguments","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_matters":{"post":{"operationId":"list_matters","summary":"List matters without names, descriptions or custom fields: status, practice area id, stage, billing type, open and close","description":"List matters without names, descriptions or custom fields: status, practice area id, stage, billing type, open and close dates, responsible attorney id and task counts. Use for \"How many matters are open and which are due soon\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"take":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many matters to return (1 to 500).","title":"Take"},"skip":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many matters to skip, for paging.","title":"Skip"},"status":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Matter status filter such as OPEN or CLOSED.","title":"Status"},"updated_after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only matters created or updated after this timestamp (YYYY-MM-DD HH:MM:SS).","title":"Updated After"}},"title":"list_mattersArguments","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_matters_summary":{"post":{"operationId":"get_matters_summary","summary":"Count matters: all, open, closed, opened this month and opened last month. Use for \"How many matters did we open this mo","description":"Count matters: all, open, closed, opened this month and opened last month. Use for \"How many matters did we open this month compared with last month\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_matters_summaryArguments","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_time_entries":{"post":{"operationId":"list_time_entries","summary":"List billable time entries with date, duration in milliseconds, rate, total, user, matter id and invoice id (narrative d","description":"List billable time entries with date, duration in milliseconds, rate, total, user, matter id and invoice id (narrative descriptions and matter names are not returned). Use for \"How much time was logged and how much of it is still uninvoiced\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_time_entriesArguments","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_expenses":{"post":{"operationId":"list_expenses","summary":"List expenses with date, rate, quantity, total, user, matter id and invoice id (notes and matter names are not returned)","description":"List expenses with date, rate, quantity, total, user, matter id and invoice id (notes and matter names are not returned). Use for \"What expenses are logged and which are not yet invoiced\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_expensesArguments","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_flat_fees":{"post":{"operationId":"list_flat_fees","summary":"List flat fees with date, rate, quantity, total, user, matter id and invoice id (descriptions and notes are not returned","description":"List flat fees with date, rate, quantity, total, user, matter id and invoice id (descriptions and notes are not returned). Use for \"Which flat fees have we recorded\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_flat_feesArguments","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_activity_categories":{"post":{"operationId":"list_activity_categories","summary":"List the firm's activity categories with default rate and description. Use for \"Which billing activity categories does o","description":"List the firm's activity categories with default rate and description. Use for \"Which billing activity categories does our firm use\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_activity_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_lead_sources":{"post":{"operationId":"list_lead_sources","summary":"List the lead sources configured for client intake (for example Website or Referral). Use for \"What lead sources do we t","description":"List the lead sources configured for client intake (for example Website or Referral). Use for \"What lead sources do we track in Lawcus\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"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_tasks":{"post":{"operationId":"list_tasks","summary":"List tasks with due date, completion state, matter id and sub-task count (task names and tags are not returned). Use for","description":"List tasks with due date, completion state, matter id and sub-task count (task names and tags are not returned). Use for \"How many open tasks are overdue\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"completed":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Filter by completion: true or false.","title":"Completed"},"delegated":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Filter by delegated tasks: true or false.","title":"Delegated"},"matter_id":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only tasks of this matter id.","title":"Matter Id"},"user_id":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only tasks of this user id.","title":"User Id"}},"title":"list_tasksArguments","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_billing_totals":{"post":{"operationId":"get_billing_totals","summary":"Get billed-time totals for today, this week, this month and this year (milliseconds), optionally filtered by date range,","description":"Get billed-time totals for today, this week, this month and this year (milliseconds), optionally filtered by date range, type or invoiced state. Use for \"How many hours have we logged this week and this month\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"start":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only items on or after this date (YYYY-MM-DD).","title":"Start"},"end":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only items on or before this date (YYYY-MM-DD).","title":"End"},"items":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Item type filter: TIMEENTRY, EXPENSE or FLATFEE.","title":"Items"},"is_invoiced":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Filter by invoiced state: true or false.","title":"Is Invoiced"},"matter_id":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only items of this matter id.","title":"Matter Id"}},"title":"get_billing_totalsArguments","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}}}}