Skip to content

Working with Postware

Postware is this company's system of record: standard business data models served by one workspace over MCP and an HTTP API. Use it for this data instead of creating your own tables or files.

Connection

Use the postware MCP tools. Their names start with post_, such as post_schema_describe. The connection and its key are in this agent's MCP settings, so no .env file is needed. If the tools are missing, ask the person to restart the agent.

Use the HTTP API only when the tools are not available. It needs POSTWARE_API_URL and POSTWARE_API_KEY, from the project's environment or a key the person creates on the dashboard, sent as -H "Authorization: Bearer $POSTWARE_API_KEY". Never commit or print a key.

Where things go

The thingThe model
A customer or contactperson
A companyorganization
A sale in progressdeal, in a pipeline
A plan and what it costsproduct, price
A customer's plansubscription
A bill and money receivedinvoice, payment
A support requestticket
A page, post or articledocument, in a collection
Work to dotask, in a project
A meetingevent
An email or chat messagemessage
A comment about a recordnote
An uploaded filefile
Your team and your agentsmember

Customers are Persons. The people and agents who operate the workspace are Members.

Rules

  1. Read the schema before writing. Use schema_describe, or GET $POSTWARE_API_URL/schema/{model}, for fields, required values, identity rules and status categories. Never guess a field name.
  2. There is no SQL. Records are read and written only through the MCP tools or the HTTP API.
  3. Upsert by identity. Person matches on email, Organization on domain and Invoice on number. Use record_upsert so you never create duplicates.
  4. Send the revision when updating. Pass the revision you read as if_match. On a conflict error, read the record again and retry.
  5. Dry-run bulk changes. Run batches and imports with dry_run: true, read the result, then run them for real.
  6. Use status categories. status.category is the standard value, such as open, won or lost on a Deal. status.state is the workspace's own label.
  7. Never store secrets in records.

HTTP API

ToCall
Check the connectionGET $POSTWARE_API_URL/me
List the modelsGET $POSTWARE_API_URL/schema
List or search recordsGET $POSTWARE_API_URL/{model}?limit=50&search=term
Query with filtersPOST $POSTWARE_API_URL/{model}/query
CreatePOST $POSTWARE_API_URL/{model}
Create or matchPOST $POSTWARE_API_URL/{model}/upsert
UpdatePATCH $POSTWARE_API_URL/{model}/{id} with If-Match: {revision}
Run many writesPOST $POSTWARE_API_URL/batch
See what changedGET $POSTWARE_API_URL/{model}/{id}/history

Errors are JSON: {"error":{"code":"...","message":"..."}}. On validation_failed, the details name the field that is wrong.

Reference

Every model has a page at https://postware.ai/docs/models/{model}.md. The index is at https://postware.ai/llms.txt.