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_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_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 {company_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_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 |
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_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
[- {
- "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
[- {
- "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
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.
{- "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
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"
}
[- {
- "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 |
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"
}
{- "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
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"
}
[- {
- "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.
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.
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
}
true
[- {
- "date_lastlogin": "2020-06-15 18:05:59",
- "firstname": "Chuck",
- "id": 1234,
- "jobtitle": "CEO",
- "lastname": "Norris",
- "phone": "+31 76 12344567"
}
]
[- {
- "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 |
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
}
{- "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 |
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"
}