Source: https://billingmart.com/developers/api/work-setup # Work setup and job types How a business sets up its work records: its terminology, the record types it can use, and the industry packs it can adopt. A record type is saved here as a draft; publishing it is an approved action. [All sections](https://billingmart.com/developers/api) [Authentication](https://billingmart.com/developers/authentication) **On this page** - GET Get - GET List - GET List - POST Create - GET Get - GET Get revision - POST Save draft - POST Propose - GET Get proposal - OBJ WorkConfigView - OBJ IndustryPackSummary - OBJ JobTypeSummary - OBJ JobTypeView - OBJ JobTypeRevisionView - OBJ WorkProposal On this page - GET Get - GET List - GET List - POST Create - GET Get - GET Get revision - POST Save draft - POST Propose - GET Get proposal - OBJ WorkConfigView - OBJ IndustryPackSummary - OBJ JobTypeSummary - OBJ JobTypeView - OBJ JobTypeRevisionView - OBJ WorkProposal work config ## Get GET `/v1/work-config` What a business calls its work records, its pinned entries and sharing defaults, the job types it can use and the words resolved from them. Every label is tenant text inside the untrusted envelope. Scope `jobs:read` Effect Read only MCP tool `get_work_config` Retries Safe to repeat ### Parameters Get parameters | Name | In | Type | Notes | | --- | --- | --- | --- | | `businessId`required | query | `id` | — | ### Returns `data`: [`WorkConfigView`](https://billingmart.com/developers/api/work-setup#object-WorkConfigView) Errors this route can answer besides the shared ones: `BUSINESS_NOT_FOUND` . Example request Sample ``` curl -X GET "https://api.billingmart.com/v1/work-config" \ -H "Authorization: Bearer $BILLINGMART_API_KEY" ``` industry packs ## List GET `/v1/industry-packs` The industry packs a business can adopt: key, name, version and a summary of the work setup each carries (words, record types). Platform content, no tenant data. Scope `business:read` Effect Read only MCP tool `list_industry_packs` Retries Safe to repeat ### Returns `data`: [`IndustryPackSummary[]`](https://billingmart.com/developers/api/work-setup#object-IndustryPackSummary) . Pass `meta.cursor` back as `cursor` for the next page. Example request Sample ``` curl -X GET "https://api.billingmart.com/v1/industry-packs" \ -H "Authorization: Bearer $BILLINGMART_API_KEY" ``` job types ## List GET `/v1/job-types` Job types, oldest first: label, icon, status, revision and whether a draft is waiting. Narrowed to the businesses the credential is confined to. active by default. Scope `jobs:read` Effect Read only MCP tool `list_job_types` Retries Safe to repeat ### Parameters List parameters | Name | In | Type | Notes | | --- | --- | --- | --- | | `limit`optional | query | `integer` | min 1 · max 50 | | `cursor`optional | query | `string` | up to 256 chars | | `businessId`optional | query | `id` | — | | `status`optional | query | `enum` | One of `active`, `archived`, `all` | ### Returns `data`: [`JobTypeSummary[]`](https://billingmart.com/developers/api/work-setup#object-JobTypeSummary) . Pass `meta.cursor` back as `cursor` for the next page. Errors this route can answer besides the shared ones: `BUSINESS_NOT_FOUND` . Example request Sample ``` curl -X GET "https://api.billingmart.com/v1/job-types" \ -H "Authorization: Bearer $BILLINGMART_API_KEY" ``` job types ## Create POST `/v1/job-types` Create a job type as a DRAFT for the given businesses (empty = every business, unconfined credentials only). Nothing is published or usable until an owner or admin publishes it in BillingMart. Scope `workConfig:write` Effect Writes a draft or record MCP tool `create_job_type_draft` Retries Send an Idempotency-Key; a repeat replays the stored answer for 24 hours ### Request body JSON. Money is an integer count of minor units beside its currency; quantities are thousandths. Create request body | Field | Type | Notes | | --- | --- | --- | | `businessIds`required | `id[]` | up to 50 items | | `definition`required | `object` | — | ### Returns `data`: `object` Errors this route can answer besides the shared ones: `VALIDATION_FAILED` , `BUSINESS_NOT_FOUND` . Example request Sample ``` curl -X POST "https://api.billingmart.com/v1/job-types" \ -H "Authorization: Bearer $BILLINGMART_API_KEY" \ -H "Idempotency-Key: $(uuidgen)" \ -H "Content-Type: application/json" \ -d '{"businessIds":[],"definition":{}}' ``` job types ## Get GET `/v1/job-types/{typeId}` One job type: status, revision, businesses and the published definition records render. The waiting draft and its provenance come back only to an owner or admin credential that also holds workConfig:write. Confined to the businesses of the credential. Scope `jobs:read` Effect Read only MCP tool `get_job_type` Retries Safe to repeat ### Parameters Get parameters | Name | In | Type | Notes | | --- | --- | --- | --- | | `typeId`required | path | `id` | — | ### Returns `data`: [`JobTypeView`](https://billingmart.com/developers/api/work-setup#object-JobTypeView) Errors this route can answer besides the shared ones: `UNKNOWN_TYPE` , `PERMISSION_DENIED` . Example request Sample ``` curl -X GET "https://api.billingmart.com/v1/job-types/{typeId}" \ -H "Authorization: Bearer $BILLINGMART_API_KEY" ``` job types ## Get revision GET `/v1/job-types/{typeId}/revisions/{revision}` One published, immutable revision of a job type: the definition a work record pinned. Never a draft. Confined to the businesses of the credential. Scope `jobs:read` Effect Read only MCP tool `get_job_type_revision` Retries Safe to repeat ### Parameters Get revision parameters | Name | In | Type | Notes | | --- | --- | --- | --- | | `typeId`required | path | `id` | — | | `revision`required | path | `integer` | min 1 | ### Returns `data`: [`JobTypeRevisionView`](https://billingmart.com/developers/api/work-setup#object-JobTypeRevisionView) Errors this route can answer besides the shared ones: `UNKNOWN_TYPE` , `PERMISSION_DENIED` . Example request Sample ``` curl -X GET "https://api.billingmart.com/v1/job-types/{typeId}/revisions/{revision}" \ -H "Authorization: Bearer $BILLINGMART_API_KEY" ``` job types ## Save draft POST `/v1/job-types/{typeId}/draft` Save a new draft of an existing job type. Field keys of a published type are read-only. The published definition is untouched until an owner or admin publishes the draft in BillingMart. Scope `workConfig:write` Effect Writes a draft or record MCP tool `save_job_type_draft` Retries Send an Idempotency-Key; a repeat replays the stored answer for 24 hours ### Parameters Save draft parameters | Name | In | Type | Notes | | --- | --- | --- | --- | | `typeId`required | path | `id` | — | ### Request body JSON. Money is an integer count of minor units beside its currency; quantities are thousandths. Save draft request body | Field | Type | Notes | | --- | --- | --- | | `businessIds`required | `id[]` | up to 50 items | | `definition`required | `object` | — | | `expectedRevision`optional | `integer` | min 0 | ### Returns `data`: `object` Errors this route can answer besides the shared ones: `VALIDATION_FAILED` , `EDIT_CONFLICT` , `UNKNOWN_TYPE` . Example request Sample ``` curl -X POST "https://api.billingmart.com/v1/job-types/{typeId}/draft" \ -H "Authorization: Bearer $BILLINGMART_API_KEY" \ -H "Idempotency-Key: $(uuidgen)" \ -H "Content-Type: application/json" \ -d '{"businessIds":[],"definition":{}}' ``` work config ## Propose POST `/v1/work-proposals` Ask the assistant to propose a work setup for a business from a plain description: terminology, record types, questions, stages and pins. Writes a proposal only; nothing changes until an owner or admin applies it in BillingMart. Uses AI credits. Scope `workConfig:write` Effect Writes a draft or record MCP tool `create_work_proposal` Retries Send an Idempotency-Key; a repeat replays the stored answer for 24 hours ### Request body JSON. Money is an integer count of minor units beside its currency; quantities are thousandths. Propose request body | Field | Type | Notes | | --- | --- | --- | | `businessId`required | `id` | — | | `task`required | `enum` | One of `setup`, `jobType`, `workflow` | | `description`required | `string` | up to 2000 chars | | `typeId`optional | `id` | — | ### Returns `data`: `object` Errors this route can answer besides the shared ones: `VALIDATION_FAILED` , `BUSINESS_NOT_FOUND` , `AI_DISABLED` , `AI_CONSENT_REQUIRED` , `AI_CAP_REACHED` , `AI_CREDITS_EXHAUSTED` , `AI_OUTPUT_INVALID` . Example request Sample ``` curl -X POST "https://api.billingmart.com/v1/work-proposals" \ -H "Authorization: Bearer $BILLINGMART_API_KEY" \ -H "Idempotency-Key: $(uuidgen)" \ -H "Content-Type: application/json" \ -d '{"businessId":"","task":"setup","description":""}' ``` work config ## Get proposal GET `/v1/work-proposals/{proposalId}` Read a work setup proposal: its status, the changes it would make and its summary. Only its author and owners and admins of the business can read it. The summary and every proposed value are tenant text inside the untrusted envelope. Scope `jobs:read` Effect Read only MCP tool `get_work_proposal` Retries Safe to repeat ### Parameters Get proposal parameters | Name | In | Type | Notes | | --- | --- | --- | --- | | `proposalId`required | path | `id` | — | ### Returns `data`: [`WorkProposal`](https://billingmart.com/developers/api/work-setup#object-WorkProposal) Errors this route can answer besides the shared ones: `NOT_FOUND` . Example request Sample ``` curl -X GET "https://api.billingmart.com/v1/work-proposals/{proposalId}" \ -H "Authorization: Bearer $BILLINGMART_API_KEY" ``` Object ## WorkConfigView WorkConfigView is computed by the server for this request, not a stored document, so no contract describes it. Its fields are the TypeScript type of the same name that the handler returns. Object ## IndustryPackSummary IndustryPackSummary is computed by the server for this request, not a stored document, so no contract describes it. Its fields are the TypeScript type of the same name that the handler returns. Object ## JobTypeSummary JobTypeSummary is computed by the server for this request, not a stored document, so no contract describes it. Its fields are the TypeScript type of the same name that the handler returns. Object ## JobTypeView JobTypeView is computed by the server for this request, not a stored document, so no contract describes it. Its fields are the TypeScript type of the same name that the handler returns. Object ## JobTypeRevisionView JobTypeRevisionView is computed by the server for this request, not a stored document, so no contract describes it. Its fields are the TypeScript type of the same name that the handler returns. Object ## WorkProposal A proposed change to a business's work configuration, prepared by the assistant or a person and applied only after an owner or admin approves it with a second factor. FUNCTION-WRITTEN ONLY, by the proposal cores of. WorkProposal fields | Field | Type | Notes | | --- | --- | --- | | `id`required | `Id` | — | | `tenant`required | `TenantRef` | — | | `task`required | `enum` | Which AI task prepared it: a whole-business setup, one job type, or a workflow for an existing type. | | `baseRevisions`required | `WorkProposalBase` | — | | `parts`required | `enum[]` | Which parts of the configuration the proposal touches. At most 5 parts. | | `hunks`required | `WorkProposalHunk[]` | At most 200 hunks; the proposal cores enforce it. | | `summary`optional | `string` | Untrusted text Plain text, rendered as text. | | `status`required | `enum` | — | | `expiresAt`required | `IsoTimestamp` | 24 hours after creation. | | `createdAt`required | `IsoTimestamp` | — | | `createdBy`required | `Id` | From the verified token, or the grant's subject when an agent prepared it. | | `appliedAt`optional | `IsoTimestamp` | — | | `appliedActionId`optional | `Id` | The approved `applyWorkConfig` action that applied it. | Next section ## Workspace and access The workspace a credential acts in, its plan, how it pays for it, usage and AI credits, the connection an assistant holds, the people, keys and apps with access, and resetting a sandbox to its demo data. [Continue to Workspace and access →](https://billingmart.com/developers/api/workspace) ## Try it against your sandbox Create a bmk_test_ key in the console. It can only reach your sandbox workspace. [Start free](https://app.billingmart.com/sign-up) [All sections](https://billingmart.com/developers/api) --- This is the Markdown copy of https://billingmart.com/developers/api/work-setup. Live plans, prices and limits are published as JSON at https://billingmart.com/plans.json and https://billingmart.com/agent-info.json.