Offorte API Reference Docs - Version 1
Returns a paginated list of proposals by status (edit|open|won|lost|closed).
Searching can be done by using the optional query parameter, the provided status will then be ignored.
Deprecated fields:
total_price, total_price_override.
| account_name required | string Example: your_account_name |
[- {
- "account_user_id": 1234,
- "company_id": 1234,
- "company_name": "Example Inc",
- "date_created": "15 jun 2018 (06:49)",
- "id": 1234,
- "name": "Proposal you can't refuse",
- "price_total": "$999.99",
- "price_total_original": 999.99,
- "price_total_override": 999.99,
- "proposal_nr": "nr 000123",
- "status": "open",
- "version_id": 1234
}
]Returns all proposal details
Deprecated fields:
type, pages_total, language, pricetable-rows: count, userinput_count, userinput_optional, userinput_optional_checked.
| account_name required | string Example: your_account_name |
| proposal_id required | integer Example: 1234 |
{- "account_user_id": 1234,
- "account_user_name": "Elon Musk",
- "comments": [
- {
- "comment": "Are there no surprises in the costs?",
- "company_name": "Example Inc",
- "date": "15 jun 2018 (06:49)",
- "firstname": "Chuck",
- "id": 1234,
- "lastname": "Norris",
- "type": "client"
}
], - "company": {
- "city": "Breda",
- "coc_number": "12345678",
- "country": "the Netherlands",
- "facebook": "facebook.com/example",
- "fax": "+31 76 12344567",
- "id": 1234,
- "internet": "www.example.com",
- "linkedin": "linkedin.com/example",
- "name": "Example Inc",
- "phone": "+31 76 12344567",
- "state": "Noord-Brabant",
- "street": "Ginnekenweg 1",
- "twitter": "twitter.com/example",
- "vat_number": "NL123455678",
- "zipcode": "4800AA"
}, - "content": {
- "pricetables": [
- {
- "id": "pricetable1",
- "rows": [
- {
- "content": "<p>Product Awesome</p>",
- "discount_type": "amount",
- "discount_value": 10,
- "id": 1234,
- "price": 100,
- "product_id": 990,
- "quantity": 3,
- "recurring_include_in_totals": true,
- "recurring_type": "month",
- "selectable": "check",
- "sku": "2452345",
- "subtotal": 300,
- "type": "price",
- "unique_id": "identifier-1234",
- "user_quantity": true,
- "user_selected": true,
- "vat_percentage": 21
}
], - "settings": {
- "rows_include_vat": false,
- "vat_default_percentage": 21,
- "vat_hidden": false
}, - "subtotal": 1000,
- "total": 100,
- "vat": [
- {
- "group_name": "Vat21",
- "percentage": 21,
- "total": 100
}
]
}
]
}, - "date_modified": "15 jun 2018 (06:49)",
- "design_template_id": 1234,
- "emails": [
- {
- "date_sended": "15 jun 2018 (06:49)",
- "id": 1234,
- "message": "Dear {contact_people_firstname}, hereby you receive our proposal for ...",
- "proposal_version_nr": 1234,
- "sended_by": "Johnny Vegas"
}
], - "id": 1234,
- "logs": {
- "history": [
- {
- "action": "proposal: viewed pdf",
- "date": "15 jun 2018 (06:49)",
- "person": "Chuck Norris",
- "type": "client"
}
], - "summary": {
- "last_modified_date": "15 jun 2018 (06:49)",
- "last_modified_user": "2020-06-15 18:05:59",
- "pdf": 0,
- "recent_view": "15 jun 2018 (06:49)",
- "views": 2
}
}, - "name": "Proposal you can't refuse",
- "price_total": "$999.99",
- "price_total_original": 999.99,
- "price_total_override": 999.99,
- "proposal_language": "en",
- "proposal_nr": "nr 000123",
- "receivers": [
- {
- "fullname": "Chuck Norris",
- "id": 1234,
- "signature_allowed": 1,
- "signature_required": 1
}
], - "remarks": "Make some modifications as requested by Vegan Seagal",
- "status": "won",
- "text_template_id": 1234
}Create a new proposal.
Parameters
| name | type | description |
|---|---|---|
| account_user_id | integer | The proposal is assigned to this user and will be send out in name of this user |
| company_contacts | array | List with company contact id's who are going to receive the proposal; Make sure they got an email filled in |
| company_id | integer | The proposal is assigned to this company |
| design_template_id | integer | Design template id |
| name | string | Name of the proposal |
| price_total | float | Proposal value as calculated by pricetables |
| status | string | Proposal status. Possible values: edit, open, won, lost, closed |
| text_template_id | integer | Text template id |
| content | object | Content for the proposal (see below) |
Content: Pricetables
Optionally you have the option to add rows to pricetables. Make sure you updated the 'Unique ID' field through the pricetable settings in your proposal template. Then you can target this pricetable to add rows to.
Fields per row type:
| type | fields |
|---|---|
| price | type, content, quantity, price, vat_percentage, selectable (false, check, radio), user_selected, user_quantity, discount_type (false, percentage, amount), discount_value, recurring_type (false, month, year), recurring_include_in_totals, hide_price, hide_quantity, unique_id, product_id, sku |
| discount | type, content, discount_type (percentage, amount), discount_value |
| subtotal | type, content |
| title | type, content |
Deprecated fields:
row-type-price: count, userinput_optional, userinput_optional_checked, userinput_count; row-type-discount: discount
| account_name required | string Example: your_account_name |
| account_user_id | number |
| automations_set_id | number |
| company_contacts | Array of numbers |
| company_id | number |
object | |
| design_template_id | number |
| name | string |
| proposal_template_id | number |
| text_template_id | number |
{- "account_user_id": 1234,
- "automations_set_id": 1234,
- "company_contacts": [
- 1
], - "company_id": 1234,
- "content": {
- "pricetables": [
- {
- "id": "pricetable1",
- "rows": [
- {
- "content": "<p>Product Awesome</p>",
- "discount_type": "amount",
- "discount_value": 10,
- "hide_price": true,
- "hide_quantity": true,
- "price": 100,
- "product_id": 990,
- "quantity": 3,
- "recurring_include_in_totals": true,
- "recurring_type": "month",
- "selectable": "check",
- "sku": "2452345",
- "type": "price",
- "unique_id": "identifier-1234",
- "user_quantity": true,
- "user_selected": true,
- "vat_percentage": 21
}
]
}
]
}, - "design_template_id": 1234,
- "name": "Proposal you can't refuse",
- "proposal_template_id": 1234,
- "text_template_id": 1234
}{- "id": 1234,
- "version_id": 1234
}Send a proposal
Parameters
| name | type | description |
|---|---|---|
| password_reset | boolean | Optional: Reset the existing passwords when proposal was send before |
| send_method | string | Optional: Choose if you want to send it through Offorte or send the proposal your self. Defaults to 'offorte'. Possible values: offorte,self |
| send_message | string | The actual message you want to send in plain text. If not provided you must provide the 'send_message_id' |
| send_message_id | integer | The id of the email template you want to use as the accompanying message |
| account_name required | string Example: your_account_name |
| proposal_id required | integer Example: 1234 |
| send_message_id | number |
{- "send_message_id": 1234
}{- "receivers": [
- {
- "fullname": "Ainsley Shepherd",
- "id": 1234,
}, - {
- "fullname": "Adam Foreman",
- "id": 5678,
}
]
}Updates the proposal details with the provided attributes. Other (unprovided) attributes remain unchanged
Parameters details
| name | type | description |
|---|---|---|
| account_user_id | integer | The proposal is assigned to this user and will be send out in name of this user |
| company_contacts | array | List with company contact id's who are going to receive the proposal; Make sure they got an email filled in |
| company_id | integer | The proposal is assigned to this company |
| design_template_id | integer | Design template id |
| name | string | Name of the proposal |
| price_total | float | Proposal value as calculated by pricetables |
| status | string | Proposal status. Possible values: edit, open, won, lost, closed |
| text_template_id | integer | Text template id |
| account_name required | string Example: your_account_name |
| proposal_id required | integer Example: 1234 |
| account_user_id | number |
| company_contacts | Array of numbers |
| company_id | number |
| design_template_id | number |
| name | string |
| price_total | number |
| status | string |
| text_template_id | number |
{- "account_user_id": 1234,
- "company_contacts": [
- 1
], - "company_id": 1234,
- "design_template_id": 1234,
- "name": "Proposal you can't refuse",
- "price_total": 999.99,
- "status": "won",
- "text_template_id": 1234
}{- "status": "200 OK"
}Returns a list of proposal favorites (templates).
Deprecated fields:
type,config_language_id,proposal_tpl_id
| account_name required | string Example: your_account_name |
[- {
- "automations_set_id": 1234,
- "config_language_id": 1234,
- "design_template_id": 1234,
- "id": 1234,
- "name": "My favorite proposal",
- "proposal_tpl_id": 1234,
- "text_template_id": 1234,
- "type": "magazine"
}
]Returns a paginated list of companies.
Searching on name can be done by using the optional query parameter
| account_name required | string Example: your_account_name |
[- {
- "city": "Breda",
- "coc_number": "12345678",
- "country": "the Netherlands",
- "facebook": "facebook.com/example",
- "fax": "+31 76 12344567",
- "id": 1234,
- "internet": "www.example.com",
- "linkedin": "linkedin.com/example",
- "name": "Example Inc",
- "people": [
- {
- "city": "Breda",
- "company_id": 1234,
- "country": "the Netherlands",
- "facebook": "facebook.com/example",
- "firstname": "Chuck",
- "fullname": "Chuck Norris",
- "id": 1234,
- "internet": "www.example.com",
- "lastname": "Norris",
- "linkedin": "linkedin.com/example",
- "mobile": "+31 76 12344567",
- "phone": "+31 76 12344567",
- "salutation": "Mr",
- "state": "Noord-Brabant",
- "street": "Ginnekenweg 1",
- "twitter": "twitter.com/example",
- "zipcode": "4800AA"
}
], - "phone": "+31 76 12344567",
- "state": "Noord-Brabant",
- "street": "Ginnekenweg 1",
- "twitter": "twitter.com/example",
- "vat_number": "NL123455678",
- "zipcode": "4800AA"
}
]Creates a new company
| account_name required | string Example: your_account_name |
| city | string |
| coc_number | string |
| country | string |
string | |
string | |
| fax | string |
| internet | string |
string | |
| name | string |
| phone | string |
| state | string |
| street | string |
string | |
| vat_number | string |
| zipcode | string |
{- "city": "Breda",
- "coc_number": "12345678",
- "country": "the Netherlands",
- "facebook": "facebook.com/example",
- "fax": "+31 76 12344567",
- "internet": "www.example.com",
- "linkedin": "linkedin.com/example",
- "name": "Example Inc",
- "phone": "+31 76 12344567",
- "state": "Noord-Brabant",
- "street": "Ginnekenweg 1",
- "twitter": "twitter.com/example",
- "vat_number": "NL123455678",
- "zipcode": "4800AA"
}{- "city": "Breda",
- "coc_number": 12345678,
- "country": "the Netherlands",
- "facebook": "facebook.com/example",
- "fax": "+31 76 12344567",
- "id": 1234,
- "internet": "www.example.com",
- "linkedin": "linkedin.com/example",
- "name": "Example Inc",
- "people": [ ],
- "phone": "+31 76 12344567",
- "proposals": [ ],
- "state": "Noord-Brabant",
- "street": "Ginnekenweg 1",
- "twitter": "twitter.com/example",
- "vat_number": "NL123455678",
- "zipcode": "4800AA"
}Returns all company details
Deprecated fields:
proposal_status, proposal_name, account_company_user_id.
| account_name required | string Example: your_account_name |
| company_id required | integer Example: 1234 |
{- "city": "Breda",
- "coc_number": "12345678",
- "country": "the Netherlands",
- "facebook": "facebook.com/example",
- "fax": "+31 76 12344567",
- "id": 1234,
- "internet": "www.example.com",
- "linkedin": "linkedin.com/example",
- "name": "Example Inc",
- "people": [
- {
- "city": "Breda",
- "company_id": 1234,
- "country": "the Netherlands",
- "facebook": "facebook.com/example",
- "firstname": "Chuck",
- "fullname": "Chuck Norris",
- "id": 1234,
- "internet": "www.example.com",
- "lastname": "Norris",
- "linkedin": "linkedin.com/example",
- "mobile": "+31 76 12344567",
- "phone": "+31 76 12344567",
- "salutation": "Mr",
- "state": "Noord-Brabant",
- "street": "Ginnekenweg 1",
- "twitter": "twitter.com/example",
- "zipcode": "4800AA"
}
], - "phone": "+31 76 12344567",
- "proposals": [
- {
- "account_user_id": null,
- "company_id": 1234,
- "company_name": "Example Inc",
- "date_created": "15 jun 2018 (06:49)",
- "id": 1234,
- "name": "Proposal you can't refuse",
- "price_total": "$999.99",
- "proposal_nr": "nr 000123",
- "status": "won",
- "version_id": 1234
}
], - "state": "Noord-Brabant",
- "street": "Ginnekenweg 1",
- "twitter": "twitter.com/example",
- "vat_number": "NL123455678",
- "zipcode": "4800AA"
}Updates the company details with the provided attributes. Other (unprovided) attributes remain unchanged
| account_name required | string Example: your_account_name |
| company_id required | integer Example: 1234 |
| city | string |
| coc_number | string |
| country | string |
string | |
string | |
| fax | string |
| internet | string |
string | |
| name | string |
| phone | string |
| state | string |
| street | string |
string | |
| vat_number | string |
| zipcode | string |
{- "city": "Breda",
- "coc_number": "12345678",
- "country": "the Netherlands",
- "facebook": "facebook.com/example",
- "fax": "+31 76 12344567",
- "internet": "www.example.com",
- "linkedin": "linkedin.com/example",
- "name": "Example Inc",
- "phone": "+31 76 12344567",
- "state": "Noord-Brabant",
- "street": "Ginnekenweg 1",
- "twitter": "twitter.com/example",
- "vat_number": "NL123455678",
- "zipcode": "4800AA"
}{- "status": "200 OK"
}Returns a paginated list of the people in a company.
| account_name required | string Example: your_account_name |
| company_id required | integer Example: 1234 |
[- {
- "city": "Breda",
- "company_id": 1234,
- "country": "the Netherlands",
- "facebook": "facebook.com/example",
- "firstname": "Chuck",
- "fullname": "Chuck Norris",
- "id": 1234,
- "internet": "www.example.com",
- "lastname": "Norris",
- "linkedin": "linkedin.com/example",
- "mobile": "+31 76 12344567",
- "phone": "+31 76 12344567",
- "salutation": "Mr",
- "state": "Noord-Brabant",
- "street": "Ginnekenweg 1",
- "twitter": "twitter.com/example",
- "zipcode": "4800AA"
}
]Creates a new person in a company.
Parameters details
| name | type | description |
|---|---|---|
| string | required | |
| fullname | string | required |
| account_name required | string Example: your_account_name |
| company_id required | integer Example: 1234 |
| city | string |
| country | string |
string | |
string | |
| firstname | string |
| fullname | string |
| internet | string |
| lastname | string |
string | |
| mobile | string |
| phone | string |
| salutation | string |
| state | string |
| street | string |
string | |
| zipcode | string |
{- "city": "Breda",
- "country": "the Netherlands",
- "facebook": "facebook.com/example",
- "firstname": "Chuck",
- "fullname": "Chuck Norris",
- "internet": "www.example.com",
- "lastname": "Norris",
- "linkedin": "linkedin.com/example",
- "mobile": "+31 76 12344567",
- "phone": "+31 76 12344567",
- "salutation": "Mr",
- "state": "Noord-Brabant",
- "street": "Ginnekenweg 1",
- "twitter": "twitter.com/example",
- "zipcode": "4800AA"
}{- "city": "Breda",
- "company_id": 1234,
- "country": "the Netherlands",
- "facebook": "facebook.com/example",
- "firstname": "Chuck",
- "fullname": "Chuck Norris",
- "id": 1234,
- "internet": "www.example.com",
- "lastname": "Norris",
- "linkedin": "linkedin.com/example",
- "mobile": "+31 76 12344567",
- "phone": "+31 76 12344567",
- "salutation": "Mr",
- "state": "Noord-Brabant",
- "street": "Ginnekenweg 1",
- "twitter": "twitter.com/example",
- "zipcode": "4800AA"
}Returns all details of a person
| account_name required | string Example: your_account_name |
| company_id required | integer Example: 1234 |
| person_id required | integer Example: 1234 |
{- "city": "Breda",
- "company_id": 1234,
- "country": "the Netherlands",
- "facebook": "facebook.com/example",
- "firstname": "Chuck",
- "fullname": "Chuck Norris",
- "id": 1234,
- "internet": "www.example.com",
- "lastname": "Norris",
- "linkedin": "linkedin.com/example",
- "mobile": "+31 76 12344567",
- "phone": "+31 76 12344567",
- "salutation": "Mr",
- "state": "Noord-Brabant",
- "street": "Ginnekenweg 1",
- "twitter": "twitter.com/example",
- "zipcode": "4800AA"
}Updates the person details with the provided attributes. Other (unprovided) attributes remain unchanged
| account_name required | string Example: your_account_name |
| company_id required | integer Example: 1234 |
| person_id required | integer Example: 1234 |
| city | string |
| country | string |
string | |
string | |
| firstname | string |
| fullname | string |
| internet | string |
| lastname | string |
string | |
| mobile | string |
| phone | string |
| salutation | string |
| state | string |
| street | string |
string | |
| zipcode | string |
{- "city": "Breda",
- "country": "the Netherlands",
- "facebook": "facebook.com/example",
- "firstname": "Chuck",
- "fullname": "Chuck Norris",
- "internet": "www.example.com",
- "lastname": "Norris",
- "linkedin": "linkedin.com/example",
- "mobile": "+31 76 12344567",
- "phone": "+31 76 12344567",
- "salutation": "Mr",
- "state": "Noord-Brabant",
- "street": "Ginnekenweg 1",
- "twitter": "twitter.com/example",
- "zipcode": "4800AA"
}{- "status": "200 OK"
}Returns a list of VAT groups.
| account_name required | string Example: your_account_name |
[- {
- "id": 1,
- "label": "Default (21%)",
- "name": "Default",
- "vat": 21
}, - {
- "id": 2,
- "label": "Half (10%)",
- "name": "Half",
- "vat": 10
}, - {
- "id": 3,
- "label": "Zero (0%)",
- "name": "Zero",
- "vat": 0
}
]List the products for a directory.
Deprecated fields:
optional.
| account_name required | string Example: your_account_name |
| directory_id required | integer Example: 1 |
[- {
- "descr_short": "This is a description",
- "id": 1234,
- "name": "Example Inc",
- "price": "1000",
- "recurring": "month",
- "selectable": "check",
- "sku": "abc12345678",
- "vat_id": 1234,
- "vat_percentage": 21
}
]Creates a new product.
Parameters details
| name | type | description |
|---|---|---|
| selectable | string | Row is optional to choose by the customer. Check is multiple choice, Radio is single choice. Types: check, radio, false |
| recurring | string | Row is recurring and from type: month, year |
_Deprecated fields:_optional.
| account_name required | string Example: your_account_name |
| directory_id required | integer Example: 1 |
| descr_short | string |
| name | string |
| price | number |
| recurring | string |
| selectable | string |
| sku | number |
| vat_id | number |
{- "descr_short": "Hello here is my descr",
- "name": "API some new product",
- "price": 3000,
- "recurring": "month",
- "selectable": "radio",
- "sku": 1234,
- "vat_id": 7
}{- "product_id": 1234
}Updates the product with the provided attributes.
Parameters details
| name | type | description |
|---|---|---|
| selectable | string | Row is optional to choose by the customer. Check is multiple choice, Radio is single choice. Types: check, radio, false |
| recurring | string | Row is recurring and from type: month, year |
_Deprecated fields:_optional.
| account_name required | string Example: your_account_name |
| product_id required | integer Example: 1 |
| descr_short | string |
| directory_id | number |
| name | string |
| price | string |
| recurring | string |
| selectable | string |
| sku | string |
| vat_id | number |
{- "descr_short": "This is a description",
- "directory_id": 1,
- "name": "Example Inc",
- "price": "1000",
- "recurring": "month",
- "selectable": "check",
- "sku": "abc12345678",
- "vat_id": 1
}trueCreates a new product directory
| account_name required | string Example: your_account_name |
| name | string |
{- "name": "Example Inc"
}{- "status": "201 Created"
}Updates the product directory with the provided attributes
| account_name required | string Example: your_account_name |
| directory_id required | integer Example: 1 |
| name | string |
{- "name": "Example Inc"
}{- "status": "200 OK"
}Returns a list of active account users.
| account_name required | string Example: your_account_name |
[- {
- "date_lastlogin": "2020-06-15 18:05:59",
- "firstname": "Chuck",
- "id": 1234,
- "jobtitle": "CEO",
- "lastname": "Norris",
- "phone": "+31 76 12344567"
}
]Returns a list of webhooks.
| account_name required | string Example: your_account_name |
[- {
- "active": true,
- "api_version": 1,
- "date_created": "2025-06-15 18:05:59",
- "date_failed": "2025-06-15 18:05:59",
- "date_modified": "2025-06-15 18:05:59",
- "events": [
- "company_created"
], - "id": 1234,
- "payload_content_type": "json",
- "payload_url": "example.com/incoming"
}
]Creates a new webhook
Parameters
| name | type | desscription |
|---|---|---|
| payload_url | string | Url where the data will be posted to; must be a full https url |
| payload_content_type | string | Content type header: json |
| active | boolean | Is it active or not |
| events | array | Events to subscribe to |
| account_name required | string Example: your_account_name |
| active | boolean |
| events | Array of strings |
| payload_content_type | string |
| payload_url | string |
{- "active": true,
- "events": [
- "company_created",
- "company_updated",
- "company_deleted",
- "company_contact_created",
- "company_contact_updated",
- "company_contact_deleted",
- "proposal_created",
- "proposal_details_updated",
- "proposal_deleted",
- "proposal_send",
- "proposal_won",
- "proposal_lost",
- "proposal_viewed",
- "proposal_comment_received",
- "product_directory_created",
- "product_directory_updated",
- "product_directory_deleted",
- "product_created",
- "product_updated",
- "product_deleted"
], - "payload_content_type": "json",
- "payload_url": "example.com/incoming"
}{- "webhook_id": 1
}Returns the webhook details.
| account_name required | string Example: your_account_name |
| webhook_id required | integer Example: 1 |
{- "active": true,
- "api_version": 1,
- "date_created": "2025-06-15 18:05:59",
- "date_failed": "2025-06-15 18:05:59",
- "date_modified": "2025-06-15 18:05:59",
- "events": [
- "company_created"
], - "id": 1,
- "payload_content_type": "json",
- "payload_url": "example.com/incoming"
}Updates the webhook details with the provided attributes. Other (unprovided) attributes remain unchanged
Parameters
| name | type | desscription |
|---|---|---|
| payload_url | string | Url where the data will be posted to; must be a full https url |
| payload_content_type | string | Content type header: json |
| active | boolean | Is it active or not |
| events | array | Events to subscribe to |
| account_name required | string Example: your_account_name |
| webhook_id required | integer Example: 1 |
| active | boolean |
| events | Array of strings |
| payload_content_type | string |
| payload_url | string |
{- "active": true,
- "events": [
- "company_created"
], - "payload_content_type": "xform",
- "payload_url": "example.com/incoming"
}{- "status": "200 OK"
}