Skip to content

Work setup and job types

Explore here

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.

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
NameInTypeNotes
businessIdrequiredqueryid—

Returns

data: WorkConfigView

Errors this route can answer besides the shared ones: BUSINESS_NOT_FOUND.

Example requestSample
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[]. Pass meta.cursor back as cursor for the next page.

Example requestSample
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
NameInTypeNotes
limitoptionalqueryintegermin 1 · max 50
cursoroptionalquerystringup to 256 chars
businessIdoptionalqueryid—
statusoptionalqueryenumOne of active, archived, all

Returns

data: JobTypeSummary[]. Pass meta.cursor back as cursor for the next page.

Errors this route can answer besides the shared ones: BUSINESS_NOT_FOUND.

Example requestSample
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
FieldTypeNotes
businessIdsrequiredid[]up to 50 items
definitionrequiredobject—

Returns

data: object

Errors this route can answer besides the shared ones: VALIDATION_FAILED, BUSINESS_NOT_FOUND.

Example requestSample
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
NameInTypeNotes
typeIdrequiredpathid—

Returns

data: JobTypeView

Errors this route can answer besides the shared ones: UNKNOWN_TYPE, PERMISSION_DENIED.

Example requestSample
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
NameInTypeNotes
typeIdrequiredpathid—
revisionrequiredpathintegermin 1

Returns

data: JobTypeRevisionView

Errors this route can answer besides the shared ones: UNKNOWN_TYPE, PERMISSION_DENIED.

Example requestSample
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
NameInTypeNotes
typeIdrequiredpathid—

Request body

JSON. Money is an integer count of minor units beside its currency; quantities are thousandths.

Save draft request body
FieldTypeNotes
businessIdsrequiredid[]up to 50 items
definitionrequiredobject—
expectedRevisionoptionalintegermin 0

Returns

data: object

Errors this route can answer besides the shared ones: VALIDATION_FAILED, EDIT_CONFLICT, UNKNOWN_TYPE.

Example requestSample
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
FieldTypeNotes
businessIdrequiredid—
taskrequiredenumOne of setup, jobType, workflow
descriptionrequiredstringup to 2000 chars
typeIdoptionalid—

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 requestSample
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":"<businessId>","task":"setup","description":"<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
NameInTypeNotes
proposalIdrequiredpathid—

Returns

data: WorkProposal

Errors this route can answer besides the shared ones: NOT_FOUND.

Example requestSample
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
FieldTypeNotes
idrequiredId—
tenantrequiredTenantRef—
taskrequiredenumWhich AI task prepared it: a whole-business setup, one job type, or a workflow for an existing type.
baseRevisionsrequiredWorkProposalBase—
partsrequiredenum[]Which parts of the configuration the proposal touches. At most 5 parts.
hunksrequiredWorkProposalHunk[]At most 200 hunks; the proposal cores enforce it.
summaryoptionalstringUntrusted textPlain text, rendered as text.
statusrequiredenum—
expiresAtrequiredIsoTimestamp24 hours after creation.
createdAtrequiredIsoTimestamp—
createdByrequiredIdFrom the verified token, or the grant's subject when an agent prepared it.
appliedAtoptionalIsoTimestamp—
appliedActionIdoptionalIdThe 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 →

Try it against your sandbox

Create a bmk_test_ key in the console. It can only reach your sandbox workspace.

We use Google Analytics on our website by default to understand visits. Choose Decline to turn it off; you can change this at any time on the Cookies page. We never send Google your name, email or account. Cookie policy