Create a proposal¶
Creating a new proposal is the most common task you will likely perform using our API.
Hint
The example objects below show the information you need to create the proposal - the objects in the response will include more information.
Different workflows¶
There are two main ways you can achieve this, depending on your workflow:
- Adding each object to the proposal
It is possible to create the proposal with only one piece of information - the 'officeId'. This will create the proposal in SieSmart and return you a unique proposalId. You can then make subsequent requests to add the customer, asset(s), calculation etc.
This may fit your workflow, but will require more effort to integrate in this manner. For every modifying request you would need a valid if-Match header.
- Creating the proposal in one request
The more common route would be to build the complete proposal object and submit it in one request.
Proposal creation¶
There is a minimum amount of information that is required.
Hint
A successful response will include the unique proposal ID in the body. Use this proposal ID for all subsequent requests about this proposal.
{
"officeId": 0,
"salesContactId": 0,
"label": "string",
"specialConditionText": "string",
"scheduleAssetsDescription": "string",
"customer": {
...
},
"assets": [
...
],
"calculation": {
...
}
}
The request object requires data about the introducer, customer, assets and calculation.
Name | Type | Required | Description |
---|---|---|---|
officeId | integer | true | Assigns the proposal to the correct office |
salesContactId | integer | true* | Assigns the correct sales person to the proposal (see Sales contacts) |
label | string | false | Adds a custom label to the proposal |
specialConditionText | string | false | Notes field |
scheduleAssetsDescription | string | false | Notes field |
customer | object | true | see Customer |
assets | object | true | see Assets |
calcultion | object | true | see Calculation |
* Not mandatory in GB
Customer¶
Adding a customer to the proposal differs if they are limited or non-limited.
{
"customer": {
"registrationNumber": "string",
"companyType": "LIMITED",
"sourceCountryCode": "string"
}
}
Name | Type | Required | Description |
---|---|---|---|
registrationNumber | string | true | The official registration number of the limited company |
companyType | string | true | 'LIMITED' or 'NONLIMITED' |
sourceCountryCode | string | true | The country code of the customer, eg. GB |
Limited customers¶
If you already know the customers official company registration number, then you only need to add this as the 'registrationNumber', and keep the 'companyType' as 'LIMITED'.
Non-limited customers¶
For non-limited customers, you must first use the customer search endpoint (../introducers/customer-search) to find the customers' unique reference number (this differs from their official customer registration number), then you can use this in the customer object as above, but setting the 'companyType' as 'NONLIMITED'.
Customer search¶
If you do not know the customer registration number, you are able to perform a search first using information such as the customers name, postcode etc. The response from this request will include a registration number that you can use in the customer object above.
Assets¶
Most financial products require at least one asset to be added to the proposal. If the product is a loan then this is not necessary.
Assets are added using their unique code on our system.
The assets you are allowed to use are governed by the trading agreement, and may also differ between different offices. To get the assets that are available to you:
{
"assets": [
{
"quantity": 9999,
"description": "string",
"valuePerAsset": 10000000,
"assetIacCode": "string",
"serviceAgreement": {
...
},
"location": "string",
"condition": "NEW",
"ageInMonth": 1
}
]
}
Assets are represented by an array, meaning you can add multiple assets to the proposal. The sum of the asset values must equal the total amount financed that you specify in the calculation object.
Name | Type | Required | Description |
---|---|---|---|
quantity | integer | true | The quantity of this type of asset |
description | string | true | Unique description of the asset, eg. 'Photocopier Model XYZ' |
valuePerAsset | number | true | Cost of each asset |
assetIacCode | string | true | Unique identifer for the asset (see assets) |
serviceAgreement | object | false | Optional object if there is to be a service agreement for the asset |
location | string | false | Physical location of the asset |
condition | string | true | Condition of the asset: NEW, REFURBISHED, USED, REMANUFACTORED, RETAINED |
ageInMonth | integer | false* | The age of the asset (*is required if condition is not NEW) |
Service agreement¶
It is possible to add a service agreement to an individual asset.
{
"serviceAgreement": {
"serviceType": "LIMITED",
"pricePerUnitValues": [
{
"pricePerUnit": {
"id": 0,
"name": "string"
},
"value": 0,
"valueIncluded": 0
}
]
}
}
Name | Type | Required | Description |
---|---|---|---|
serviceType | string | true | Type of service agreement: LIMITED, FULL |
pricePerUnitValues | object array | true | Price information of each unit |
Calculation¶
The calculation object is used for adding details about the amount financed, term, payment method etc.
{
"calculation": {
"operation": "CALC_RENTAL",
"sheet": {
"marketProductId": 0,
"introducerPricelistId": 0,
"paymentPeriod": "MONTHLY",
"paymentMethod": {
"id": 0,
"name": "string"
},
"paymentMode": "IN_ADVANCE",
"customerPto": 0,
"residualValue": {
"amount": 0,
"percentage": 0,
"usePercentage": true,
"manualSet": true
},
"term": 0,
"commissions": [
...
],
"fees": [
...
],
"specialPayments": [
...
],
"optionFee": 0
}
Name | Type | Required | Description |
---|---|---|---|
operation | string | false | Calculation to perform. Eg. if amount financed and term are provided, calculate the rental |
commissions | object array | false | Details any commissions paid |
fees | object array | false | Details any fees paid |
specialPayments | object array | false | Details any special payments |
Commissions¶
A list of commission types is available from the calculation config endpoint (see calculation config). If this array is empty, there are no commission types available to you.
{
"commissions": [
{
"type": {
"id": 0,
"name": "string",
"readonly": true
},
"amount": 0,
"percentage": 0,
"usePercentage": true,
"manualSet": true
}
]
}
Fees¶
A list of fee types is available from the calculation config endpoint (see calculation config). If this array is empty, there are no fee types available to you.
{
"fees": [
{
"feeType": {
"id": 0,
"name": "string",
"readonly": true,
"code": "string"
},
"name": "string",
"amount": 0,
"manualSet": true,
"feeIncluded": true
}
]
}
Special Payments¶
A list of special payment types is available from the calculation config endpoint (see calculation config). If this array is empty, there are no special payment types available to you.
{
"specialPayments": [
{
"type": {
"id": 0,
"name": "string",
"readonly": true,
"downPaymentType": true,
"code": "string"
},
"amount": 0,
"equipmentDetails": "string",
"serialNumber": "string"
}
]
}
Example payload¶
Here is an example of a minimum payload required to create a proposal.
{
"officeId": 1234,
"salesContactId": 1234,
"customer": {
"registrationNumber": "string",
"companyType": "LIMITED",
"sourceCountryCode": "string"
},
"assets": [
{
"quantity": 1,
"description": "ACME Photocopier",
"valuePerAsset": 5000,
"assetIacCode": "1234",
"condition": "NEW"
}
],
"calculation": {
"operation": "CALC_RENTAL",
"sheet": {
"marketProductId": 0,
"introducerPricelistId": 0,
"paymentPeriod": "MONTHLY",
"paymentMethod": {
"id": 0,
"name": "string"
},
"paymentMode": "IN_ADVANCE",
"term": 12
}
}
}