Read Bidsketch clients, proposals, fees and templates; create and update clients, proposals, fees.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
WRITE: add a fee line to a proposal; it changes the proposal's price. Fixed fees take amount as the total; hourly, monthly and yearly fees take amount per unit and a quantity. POST /proposals/{id}/fees.json.
HTML-formatted content, for example <p>Hello</p>.
The proposal id (a positive integer).
Unit label, only for custom fees.
true = an optional item the client may choose.
Quantity for calculated fees.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
WRITE: add a fee line to a proposal; it changes the proposal's price. Fixed fees take amount as the total; hourly, monthly and yearly fees take amount per unit and a quantity. POST /proposals/{id}/fees.json.
| Argument | Type | Description |
|---|---|---|
| name* | string | |
| unit | string | Unit label, only for custom fees. |
| amount* | number | |
| feetype* | string | |
| category | string | |
| optional | boolean | true = an optional item the client may choose. |
| quantity | integer | Quantity for calculated fees. |
| description* | string | HTML-formatted content, for example <p>Hello</p>. |
| proposal_id* | integer | The proposal id (a positive integer). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"proposal_id",
"name",
"feetype",
"amount",
"description"
],
"properties": {
"name": {
"type": "string",
"maxLength": 300,
"minLength": 1
},
"unit": {
"type": "string",
"maxLength": 100,
"description": "Unit label, only for custom fees."
},
"amount": {
"type": "number",
"minimum": 0
},
"feetype": {
"enum": [
"fixed",
"hourly",
"monthly",
"yearly",
"custom"
],
"type": "string"
},
"category": {
"type": "string",
"maxLength": 200
},
"optional": {
"type": "boolean",
"description": "true = an optional item the client may choose."
},
"quantity": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Quantity for calculated fees."
},
"description": {
"type": "string",
"maxLength": 100000,
"minLength": 1,
"description": "HTML-formatted content, for example <p>Hello</p>."
},
"proposal_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The proposal id (a positive integer).",
"exclusiveMinimum": 0
}
}
}WRITE: add a text section to a proposal, as an opening or closing section. POST /proposals/{id}/sections.json.
| Argument | Type | Description |
|---|---|---|
| name* | string | |
| description* | string | HTML-formatted content, for example <p>Hello</p>. |
| proposal_id* | integer | The proposal id (a positive integer). |
| sectiontype* | string | opening (shown first) or closing (shown last). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"proposal_id",
"name",
"sectiontype",
"description"
],
"properties": {
"name": {
"type": "string",
"maxLength": 300,
"minLength": 1
},
"description": {
"type": "string",
"maxLength": 100000,
"minLength": 1,
"description": "HTML-formatted content, for example <p>Hello</p>."
},
"proposal_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The proposal id (a positive integer).",
"exclusiveMinimum": 0
},
"sectiontype": {
"enum": [
"opening",
"closing"
],
"type": "string",
"description": "opening (shown first) or closing (shown last)."
}
}
}WRITE: create a client in Bidsketch. first_name, last_name and email are required (put a company name in `name`). Some Bidsketch plans cap the number of clients (HTTP 426 when reached). POST /clients.json.
| Argument | Type | Description |
|---|---|---|
| city | string | |
| name | string | Client's full name or company name. |
| email* | string | Client's primary email address (required by Bidsketch). |
| notes | string | Notes about the client (plain text, not escaped). |
| phone | string | |
| state | string | |
| country | string | |
| website | string | |
| alt_phone | string | |
| last_name* | string | Client's last name (required by Bidsketch). |
| first_name |
WRITE: save a reusable fee on the account (it is not added to any proposal). POST /fees.json.
| Argument | Type | Description |
|---|---|---|
| name* | string | |
| unit | string | Unit label, only for custom fees. |
| amount* | number | |
| feetype* | string | |
| category | string | |
| quantity | integer | Quantity for calculated fees. |
| description | string | HTML-formatted content, for example <p>Hello</p>. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"name",
"feetype",
"amount"
],
"properties": {
"name": {
"type": "string",
"maxLength": 300,
"minLength": 1
},
"unit": {
"type": "string",
"maxLength": 100,
"description": "Unit label, only for custom fees."
},
"amount": {
"type": "number",
"minimum": 0
},
"feetype": {
"enum": [
"fixed",
"hourly",
"monthly",
"yearly",
"custom"
],
"type": "string"
},
"category": {
"type": "string",
"maxLength": 200
},
"quantity": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Quantity for calculated fees."
},
"description": {
"type": "string",
"maxLength": 100000,
"description": "HTML-formatted content, for example <p>Hello</p>."
}
}
}WRITE: create a proposal for a client, optionally from a template (template_id from bidsketch_list_templates, which copies its sections and fees). The proposal is created as a draft; this tool does not send anything to the client. Some plans cap the number of proposals (HTTP 426). POST /proposals.json or POST /templates/{id}/proposals.json.
| Argument | Type | Description |
|---|---|---|
| tax | number | Tax as a decimal fraction (0.1 = 10%). |
| name* | string | Proposal name. |
| tax2 | number | Secondary tax as a decimal fraction (0.1 = 10%). |
| currency | string | ISO currency code, e.g. USD. |
| discount | number | Discount as a decimal fraction (0.1 = 10%). |
| client_id* | integer | The client the proposal is for (from bidsketch_list_clients) (a positive integer). |
| description* | string | Summary of the proposal (the vendor docs list it with name and client_id as the minimum). |
| template_id | integer | Optional template to copy sections and fees from (a positive integer). |
WRITE: save a reusable content section on the account (it is not added to any proposal). POST /sections.json.
| Argument | Type | Description |
|---|---|---|
| name* | string | |
| category | string | |
| description | string | HTML-formatted content, for example <p>Hello</p>. |
| sectiontype* | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"name",
"sectiontype"
],
"properties": {
"name": {
"type": "string",
"maxLength": 300,
"minLength": 1
},
"category": {
"type": "string",
"maxLength": 200
},
"description": {
"type": "string",
"maxLength": 100000,
"description": "HTML-formatted content, for example <p>Hello</p>."
},
"sectiontype": {
"enum": [
"opening",
"closing"
],
"type": "string"
}
}
}Get one client with full contact details, address, notes and secondary contact. GET /clients/{id}.json.
| Argument | Type | Description |
|---|---|---|
| client_id* | integer | The client id from bidsketch_list_clients (a positive integer). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"client_id"
],
"properties": {
"client_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The client id from bidsketch_list_clients (a positive integer).",
"exclusiveMinimum": 0
}
}
}Get one saved fee with amount, quantity, unit and description. GET /fees/{id}.json.
| Argument | Type | Description |
|---|---|---|
| fee_id* | integer | The saved fee id from bidsketch_list_fees (a positive integer). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"fee_id"
],
"properties": {
"fee_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The saved fee id from bidsketch_list_fees (a positive integer).",
"exclusiveMinimum": 0
}
}
}Get one proposal: status, client, currency, fee subtotals and total, tax/discount, settings and counts of its opening sections, fees and closing sections. GET /proposals/{id}.json.
| Argument | Type | Description |
|---|---|---|
| proposal_id* | integer | The proposal id from bidsketch_list_proposals (a positive integer). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"proposal_id"
],
"properties": {
"proposal_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The proposal id from bidsketch_list_proposals (a positive integer).",
"exclusiveMinimum": 0
}
}
}Get the full content of a proposal in order: opening sections, fees and closing sections. GET /proposals/{id}/content.json.
| Argument | Type | Description |
|---|---|---|
| proposal_id* | integer | The proposal id (a positive integer). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"proposal_id"
],
"properties": {
"proposal_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The proposal id (a positive integer).",
"exclusiveMinimum": 0
}
}
}Get one fee line of a proposal. GET /proposals/{id}/fees/{fee_id}.json.
| Argument | Type | Description |
|---|---|---|
| fee_id* | integer | The proposal fee id (a positive integer). |
| proposal_id* | integer | The proposal id (a positive integer). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"proposal_id",
"fee_id"
],
"properties": {
"fee_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The proposal fee id (a positive integer).",
"exclusiveMinimum": 0
},
"proposal_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The proposal id (a positive integer).",
"exclusiveMinimum": 0
}
}
}Get one section of a proposal with its HTML description. GET /proposals/{id}/sections/{section_id}.json.
| Argument | Type | Description |
|---|---|---|
| section_id* | integer | The proposal section id (a positive integer). |
| proposal_id* | integer | The proposal id (a positive integer). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"proposal_id",
"section_id"
],
"properties": {
"section_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The proposal section id (a positive integer).",
"exclusiveMinimum": 0
},
"proposal_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The proposal id (a positive integer).",
"exclusiveMinimum": 0
}
}
}Proposal statistics for the account (the total number of proposals). GET /proposals/stats.json.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}Get one saved section with its HTML description. GET /sections/{id}.json.
| Argument | Type | Description |
|---|---|---|
| section_id* | integer | The saved section id from bidsketch_list_sections (a positive integer). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"section_id"
],
"properties": {
"section_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The saved section id from bidsketch_list_sections (a positive integer).",
"exclusiveMinimum": 0
}
}
}Get one template with the saved sections and fees it is made of. GET /templates/{id}.json.
| Argument | Type | Description |
|---|---|---|
| template_id* | integer | The template id from bidsketch_list_templates (a positive integer). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"template_id"
],
"properties": {
"template_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The template id from bidsketch_list_templates (a positive integer).",
"exclusiveMinimum": 0
}
}
}List the proposals of one client with status (Pending, Viewed, Accepted, Declined) and draft flag. GET /clients/{id}/proposals.json.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number (default 1). |
| per_page | integer | Results per page (default and maximum 100). |
| client_id* | integer | The client id (a positive integer). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"client_id"
],
"properties": {
"page": {
"type": "integer",
"maximum": 100000,
"description": "Page number (default 1).",
"exclusiveMinimum": 0
},
"per_page": {
"type": "integer",
"maximum": 100,
"description": "Results per page (default and maximum 100).",
"exclusiveMinimum": 0
},
"client_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The client id (a positive integer).",
"exclusiveMinimum": 0
}
}
}List the clients (people or companies proposals are prepared for) with id, name, email and phone. GET /clients.json.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number (default 1). |
| per_page | integer | Results per page (default and maximum 100). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 100000,
"description": "Page number (default 1).",
"exclusiveMinimum": 0
},
"per_page": {
"type": "integer",
"maximum": 100,
"description": "Results per page (default and maximum 100).",
"exclusiveMinimum": 0
}
}
}List the reusable fees saved on the account with category, type and total. GET /fees.json.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number (default 1). |
| per_page | integer | Results per page (default and maximum 100). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 100000,
"description": "Page number (default 1).",
"exclusiveMinimum": 0
},
"per_page": {
"type": "integer",
"maximum": 100,
"description": "Results per page (default and maximum 100).",
"exclusiveMinimum": 0
}
}
}List the fee lines of one proposal with type, totals and the optional flag. GET /proposals/{id}/fees.json.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number (default 1). |
| per_page | integer | Results per page (default and maximum 100). |
| proposal_id* | integer | The proposal id (a positive integer). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"proposal_id"
],
"properties": {
"page": {
"type": "integer",
"maximum": 100000,
"description": "Page number (default 1).",
"exclusiveMinimum": 0
},
"per_page": {
"type": "integer",
"maximum": 100,
"description": "Results per page (default and maximum 100).",
"exclusiveMinimum": 0
},
"proposal_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The proposal id (a positive integer).",
"exclusiveMinimum": 0
}
}
}List the text sections of one proposal (opening and closing). GET /proposals/{id}/sections.json.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number (default 1). |
| per_page | integer | Results per page (default and maximum 100). |
| proposal_id* | integer | The proposal id (a positive integer). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"proposal_id"
],
"properties": {
"page": {
"type": "integer",
"maximum": 100000,
"description": "Page number (default 1).",
"exclusiveMinimum": 0
},
"per_page": {
"type": "integer",
"maximum": 100,
"description": "Results per page (default and maximum 100).",
"exclusiveMinimum": 0
},
"proposal_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The proposal id (a positive integer).",
"exclusiveMinimum": 0
}
}
}List all proposals with name, status (Pending, Viewed, Accepted, Declined), draft flag and dates. GET /proposals.json.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number (default 1). |
| per_page | integer | Results per page (default and maximum 100). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 100000,
"description": "Page number (default 1).",
"exclusiveMinimum": 0
},
"per_page": {
"type": "integer",
"maximum": 100,
"description": "Results per page (default and maximum 100).",
"exclusiveMinimum": 0
}
}
}List the reusable content sections saved on the account with category and type (opening or closing). GET /sections.json.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number (default 1). |
| per_page | integer | Results per page (default and maximum 100). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 100000,
"description": "Page number (default 1).",
"exclusiveMinimum": 0
},
"per_page": {
"type": "integer",
"maximum": 100,
"description": "Results per page (default and maximum 100).",
"exclusiveMinimum": 0
}
}
}List the proposal templates saved on the account. Use a template id with bidsketch_create_proposal. GET /templates.json.
| Argument | Type | Description |
|---|---|---|
| page | integer | Page number (default 1). |
| per_page | integer | Results per page (default and maximum 100). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"maximum": 100000,
"description": "Page number (default 1).",
"exclusiveMinimum": 0
},
"per_page": {
"type": "integer",
"maximum": 100,
"description": "Results per page (default and maximum 100).",
"exclusiveMinimum": 0
}
}
}WRITE: change fields of an existing client; only the fields you pass are sent and overwrite the old values. PUT /clients/{id}.json.
| Argument | Type | Description |
|---|---|---|
| city | string | |
| name | string | Client's full name or company name. |
| string | Client's primary email address. | |
| notes | string | Notes about the client (plain text, not escaped). |
| phone | string | |
| state | string | |
| country | string | |
| website | string | |
| alt_phone | string | |
| client_id* | integer | The client id (a positive integer). |
| last_name |
WRITE: change a saved fee; only the fields you pass are sent. Proposals that already use it keep their own copy. PUT /fees/{id}.json.
| Argument | Type | Description |
|---|---|---|
| name | string | |
| unit | string | Unit label, only for custom fees. |
| amount | number | Fixed fee: the total. Calculated fee: the amount per unit. |
| fee_id* | integer | The saved fee id (a positive integer). |
| feetype | string | fixed = a total; hourly/monthly/yearly = amount per unit x quantity; custom = your own unit label. |
| category | string | |
| quantity | integer | Quantity for calculated fees. |
| description | string | HTML-formatted content, for example <p>Hello</p>. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"fee_id"
],
"properties": {
"name": {
"type": "string",
"maxLength": 300
},
"unit": {
"type": "string",
"maxLength": 100,
"description": "Unit label, only for custom fees."
},
"amount": {
"type": "number",
"minimum": 0,
"description": "Fixed fee: the total. Calculated fee: the amount per unit."
},
"fee_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The saved fee id (a positive integer).",
"exclusiveMinimum": 0
},
"feetype": {
"enum": [
"fixed",
"hourly",
"monthly",
"yearly",
"custom"
],
"type": "string",
"description": "fixed = a total; hourly/monthly/yearly = amount per unit x quantity; custom = your own unit label."
},
"category": {
"type": "string",
"maxLength": 200
},
"quantity": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Quantity for calculated fees."
},
"description": {
"type": "string",
"maxLength": 100000,
"description": "HTML-formatted content, for example <p>Hello</p>."
}
}
}WRITE: change fields of a proposal; only the fields you pass are sent and overwrite the old values. PUT /proposals/{id}.json.
| Argument | Type | Description |
|---|---|---|
| tax | number | Tax as a decimal fraction (0.1 = 10%). |
| name | string | Proposal name. |
| tax2 | number | Secondary tax as a decimal fraction (0.1 = 10%). |
| currency | string | ISO currency code, e.g. USD. |
| discount | number | Discount as a decimal fraction (0.1 = 10%). |
| client_id | integer | Move the proposal to this client (a positive integer). |
| description | string | Summary of the proposal. |
| proposal_id* | integer | The proposal id (a positive integer). |
| proposal_date | string | Proposal date as m/d/yyyy, e.g. 10/26/2026. |
WRITE: change a fee line of a proposal (changes its price); only the fields you pass are sent. PUT /proposals/{id}/fees/{fee_id}.json.
| Argument | Type | Description |
|---|---|---|
| name | string | |
| unit | string | Unit label, only for custom fees. |
| amount | number | Fixed fee: the total. Calculated fee: the amount per unit. |
| fee_id* | integer | The proposal fee id (a positive integer). |
| feetype | string | fixed = a total; hourly/monthly/yearly = amount per unit x quantity; custom = your own unit label. |
| category | string | |
| optional | boolean | true = an optional item the client may choose. |
| quantity | integer | Quantity for calculated fees. |
| description | string | HTML-formatted content, for example <p>Hello</p>. |
WRITE: change a section of a proposal; only the fields you pass are sent and overwrite the old values. PUT /proposals/{id}/sections/{section_id}.json.
| Argument | Type | Description |
|---|---|---|
| name | string | |
| category | string | |
| section_id* | integer | The proposal section id (a positive integer). |
| description | string | HTML-formatted content, for example <p>Hello</p>. |
| proposal_id* | integer | The proposal id (a positive integer). |
| sectiontype | string | Where the section appears: opening (first) or closing (last). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"proposal_id",
"section_id"
],
"properties": {
"name": {
"type": "string",
"maxLength": 300
},
"category": {
"type": "string",
"maxLength": 200
},
"section_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The proposal section id (a positive integer).",
"exclusiveMinimum": 0
},
"description": {
"type": "string",
"maxLength": 100000,
"description": "HTML-formatted content, for example <p>Hello</p>."
},
"proposal_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The proposal id (a positive integer).",
"exclusiveMinimum": 0
},
"sectiontype": {
"enum": [
"opening",
"closing"
],
"type": "string",
"description": "Where the section appears: opening (first) or closing (last)."
}
}
}WRITE: change a saved section; only the fields you pass are sent. Proposals that already use it keep their own copy. PUT /sections/{id}.json.
| Argument | Type | Description |
|---|---|---|
| name | string | |
| category | string | |
| section_id* | integer | The saved section id (a positive integer). |
| description | string | HTML-formatted content, for example <p>Hello</p>. |
| sectiontype | string | Where the section appears: opening (first) or closing (last). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"section_id"
],
"properties": {
"name": {
"type": "string",
"maxLength": 300
},
"category": {
"type": "string",
"maxLength": 200
},
"section_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The saved section id (a positive integer).",
"exclusiveMinimum": 0
},
"description": {
"type": "string",
"maxLength": 100000,
"description": "HTML-formatted content, for example <p>Hello</p>."
},
"sectiontype": {
"enum": [
"opening",
"closing"
],
"type": "string",
"description": "Where the section appears: opening (first) or closing (last)."
}
}
}| string |
| Client's first name (required by Bidsketch). |
| postal_zip | string |
| other_contact | object | Secondary contact; first_name, last_name and email are required when given. |
| address_field_one | string |
| address_field_two | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"first_name",
"last_name",
"email"
],
"properties": {
"city": {
"type": "string",
"maxLength": 200
},
"name": {
"type": "string",
"maxLength": 300,
"description": "Client's full name or company name."
},
"email": {
"type": "string",
"maxLength": 320,
"minLength": 1,
"description": "Client's primary email address (required by Bidsketch)."
},
"notes": {
"type": "string",
"maxLength": 20000,
"description": "Notes about the client (plain text, not escaped)."
},
"phone": {
"type": "string",
"maxLength": 100
},
"state": {
"type": "string",
"maxLength": 200
},
"country": {
"type": "string",
"maxLength": 100
},
"website": {
"type": "string",
"maxLength": 300
},
"alt_phone": {
"type": "string",
"maxLength": 100
},
"last_name": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Client's last name (required by Bidsketch)."
},
"first_name": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Client's first name (required by Bidsketch)."
},
"postal_zip": {
"type": "string",
"maxLength": 50
},
"other_contact": {
"type": "object",
"required": [
"first_name",
"last_name",
"email"
],
"properties": {
"email": {
"type": "string",
"maxLength": 320
},
"phone": {
"type": "string",
"maxLength": 100
},
"last_name": {
"type": "string",
"maxLength": 200
},
"first_name": {
"type": "string",
"maxLength": 200
}
},
"description": "Secondary contact; first_name, last_name and email are required when given."
},
"address_field_one": {
"type": "string",
"maxLength": 300
},
"address_field_two": {
"type": "string",
"maxLength": 300
}
}
}| proposal_date | string | Proposal date as m/d/yyyy, e.g. 10/26/2026. |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"name",
"description",
"client_id"
],
"properties": {
"tax": {
"type": "number",
"maximum": 1,
"minimum": 0,
"description": "Tax as a decimal fraction (0.1 = 10%)."
},
"name": {
"type": "string",
"maxLength": 300,
"minLength": 1,
"description": "Proposal name."
},
"tax2": {
"type": "number",
"maximum": 1,
"minimum": 0,
"description": "Secondary tax as a decimal fraction (0.1 = 10%)."
},
"currency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$",
"description": "ISO currency code, e.g. USD."
},
"discount": {
"type": "number",
"maximum": 1,
"minimum": 0,
"description": "Discount as a decimal fraction (0.1 = 10%)."
},
"client_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The client the proposal is for (from bidsketch_list_clients) (a positive integer).",
"exclusiveMinimum": 0
},
"description": {
"type": "string",
"maxLength": 20000,
"minLength": 1,
"description": "Summary of the proposal (the vendor docs list it with name and client_id as the minimum)."
},
"template_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Optional template to copy sections and fees from (a positive integer).",
"exclusiveMinimum": 0
},
"proposal_date": {
"type": "string",
"pattern": "^\\d{1,2}\\/\\d{1,2}\\/\\d{4}$",
"description": "Proposal date as m/d/yyyy, e.g. 10/26/2026."
}
}
}| string |
| Client's last name (a person). |
| first_name | string | Client's first name (a person). |
| postal_zip | string |
| other_contact | object | Secondary contact; first_name, last_name and email are required when given. |
| address_field_one | string |
| address_field_two | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"client_id"
],
"properties": {
"city": {
"type": "string",
"maxLength": 200
},
"name": {
"type": "string",
"maxLength": 300,
"description": "Client's full name or company name."
},
"email": {
"type": "string",
"maxLength": 320,
"description": "Client's primary email address."
},
"notes": {
"type": "string",
"maxLength": 20000,
"description": "Notes about the client (plain text, not escaped)."
},
"phone": {
"type": "string",
"maxLength": 100
},
"state": {
"type": "string",
"maxLength": 200
},
"country": {
"type": "string",
"maxLength": 100
},
"website": {
"type": "string",
"maxLength": 300
},
"alt_phone": {
"type": "string",
"maxLength": 100
},
"client_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The client id (a positive integer).",
"exclusiveMinimum": 0
},
"last_name": {
"type": "string",
"maxLength": 200,
"description": "Client's last name (a person)."
},
"first_name": {
"type": "string",
"maxLength": 200,
"description": "Client's first name (a person)."
},
"postal_zip": {
"type": "string",
"maxLength": 50
},
"other_contact": {
"type": "object",
"required": [
"first_name",
"last_name",
"email"
],
"properties": {
"email": {
"type": "string",
"maxLength": 320
},
"phone": {
"type": "string",
"maxLength": 100
},
"last_name": {
"type": "string",
"maxLength": 200
},
"first_name": {
"type": "string",
"maxLength": 200
}
},
"description": "Secondary contact; first_name, last_name and email are required when given."
},
"address_field_one": {
"type": "string",
"maxLength": 300
},
"address_field_two": {
"type": "string",
"maxLength": 300
}
}
}{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"proposal_id"
],
"properties": {
"tax": {
"type": "number",
"maximum": 1,
"minimum": 0,
"description": "Tax as a decimal fraction (0.1 = 10%)."
},
"name": {
"type": "string",
"maxLength": 300,
"description": "Proposal name."
},
"tax2": {
"type": "number",
"maximum": 1,
"minimum": 0,
"description": "Secondary tax as a decimal fraction (0.1 = 10%)."
},
"currency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$",
"description": "ISO currency code, e.g. USD."
},
"discount": {
"type": "number",
"maximum": 1,
"minimum": 0,
"description": "Discount as a decimal fraction (0.1 = 10%)."
},
"client_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Move the proposal to this client (a positive integer).",
"exclusiveMinimum": 0
},
"description": {
"type": "string",
"maxLength": 20000,
"description": "Summary of the proposal."
},
"proposal_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The proposal id (a positive integer).",
"exclusiveMinimum": 0
},
"proposal_date": {
"type": "string",
"pattern": "^\\d{1,2}\\/\\d{1,2}\\/\\d{4}$",
"description": "Proposal date as m/d/yyyy, e.g. 10/26/2026."
}
}
}| proposal_id* |
| integer |
| The proposal id (a positive integer). |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"proposal_id",
"fee_id"
],
"properties": {
"name": {
"type": "string",
"maxLength": 300
},
"unit": {
"type": "string",
"maxLength": 100,
"description": "Unit label, only for custom fees."
},
"amount": {
"type": "number",
"minimum": 0,
"description": "Fixed fee: the total. Calculated fee: the amount per unit."
},
"fee_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The proposal fee id (a positive integer).",
"exclusiveMinimum": 0
},
"feetype": {
"enum": [
"fixed",
"hourly",
"monthly",
"yearly",
"custom"
],
"type": "string",
"description": "fixed = a total; hourly/monthly/yearly = amount per unit x quantity; custom = your own unit label."
},
"category": {
"type": "string",
"maxLength": 200
},
"optional": {
"type": "boolean",
"description": "true = an optional item the client may choose."
},
"quantity": {
"type": "integer",
"maximum": 9007199254740991,
"minimum": 0,
"description": "Quantity for calculated fees."
},
"description": {
"type": "string",
"maxLength": 100000,
"description": "HTML-formatted content, for example <p>Hello</p>."
},
"proposal_id": {
"type": "integer",
"maximum": 9007199254740991,
"description": "The proposal id (a positive integer).",
"exclusiveMinimum": 0
}
}
}