Quotes API
Retrieve sales quotes and proposals created in Cashfin.
Quotes are price proposals sent to customers before an invoice is raised. The Quotes API gives you read access to all quotes in your account — useful for syncing quote data to external CRM or ERP systems, building approval dashboards, or generating reports.
Read-Only
The Quotes API is currently read-only. Quotes can be created and managed from the Cashfin dashboard.
Use Cases
- CRM Sync: Pull quote data into your external CRM for a unified sales view
- Reporting: Aggregate quote conversion rates and pipeline value
- Approval Workflows: Monitor quote status changes via polling or webhooks
Endpoints
| Method | Endpoint | Description |
|---|---|---|
GET | /business/quote/list | List all quotes |
GET | /business/quote/details/:id | Get quote details |
List Quotes
Retrieve a paginated list of quotes.
http
GET /business/quote/listQuery Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
page | integer | 1 | Page number |
limit | integer | 10 | Results per page (max: 100) |
search | string | - | Search by title, quote number, or description |
status | string | - | Filter by status: draft, sent, accepted, rejected, expired, invoiced |
Example Request
bash
curl -X GET "https://api.cashfin.africa/business/quote/list?page=1&limit=10&status=sent" \
-H "Authorization: cs_your_client_secret"javascript
const response = await fetch(
"https://api.cashfin.africa/business/quote/list?page=1&limit=10&status=sent",
{
headers: { Authorization: "cs_your_client_secret" },
}
);
const data = await response.json();php
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.cashfin.africa/business/quote/list?page=1&limit=10",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["Authorization: cs_your_client_secret"],
]);
$result = json_decode(curl_exec($curl), true);python
import requests
response = requests.get(
'https://api.cashfin.africa/business/quote/list',
headers={'Authorization': 'cs_your_client_secret'},
params={'page': 1, 'limit': 10, 'status': 'sent'}
)Success Response
json
{
"success": true,
"data": [
{
"_id": "507f1f77bcf86cd799439040",
"quoteno": "QUO-2024-001",
"title": "Website Redesign Proposal",
"amount": 150000.0,
"balance": 150000.0,
"status": "sent",
"quotedate": "2024-01-10T00:00:00.000Z",
"expirydate": "2024-02-10T00:00:00.000Z",
"customer_name": "Acme Corp",
"customer_email": "[email protected]",
"createdat": "2024-01-10T08:00:00.000Z"
}
],
"pagination": {
"total": 25,
"page": 1,
"limit": 10,
"pages": 3
}
}Get Quote Details
Retrieve full details of a specific quote, including line items and customer information.
http
GET /business/quote/details/:idPath Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | Yes | Quote ID (MongoDB ObjectID) |
Example Request
bash
curl -X GET "https://api.cashfin.africa/business/quote/details/507f1f77bcf86cd799439040" \
-H "Authorization: cs_your_client_secret"javascript
const quoteId = "507f1f77bcf86cd799439040";
const response = await fetch(
`https://api.cashfin.africa/business/quote/details/${quoteId}`,
{
headers: { Authorization: "cs_your_client_secret" },
}
);
const data = await response.json();python
import requests
quote_id = '507f1f77bcf86cd799439040'
response = requests.get(
f'https://api.cashfin.africa/business/quote/details/{quote_id}',
headers={'Authorization': 'cs_your_client_secret'}
)Success Response
json
{
"success": true,
"data": {
"_id": "507f1f77bcf86cd799439040",
"quoteno": "QUO-2024-001",
"title": "Website Redesign Proposal",
"amount": 150000.0,
"balance": 150000.0,
"tax": 16,
"taxamount": 20689.66,
"discount": 0,
"status": "sent",
"description": "Full redesign including UX audit and development",
"quotedate": "2024-01-10T00:00:00.000Z",
"expirydate": "2024-02-10T00:00:00.000Z",
"items": [
{
"itemid": "507f1f77bcf86cd799439011",
"name": "UX Audit",
"quantity": 1,
"rate": 50000.0
},
{
"itemid": "507f1f77bcf86cd799439012",
"name": "Frontend Development",
"quantity": 1,
"rate": 100000.0
}
],
"customer": {
"_id": "507f1f77bcf86cd799439030",
"name": "Acme Corp",
"email": "[email protected]",
"phone": "+254700000002"
},
"createdat": "2024-01-10T08:00:00.000Z",
"updatedat": "2024-01-10T08:00:00.000Z"
}
}Quote Statuses
| Status | Description |
|---|---|
draft | Created but not yet sent |
sent | Sent to customer, awaiting response |
accepted | Customer has accepted the quote |
rejected | Customer has rejected the quote |
expired | Quote passed its expiry date |
invoiced | Converted to an invoice |
Error Responses
Quote Not Found
json
{
"success": false,
"error": "Quote not found"
}Invalid Quote ID
json
{
"success": false,
"error": "Invalid quote ID format"
}