Quotes & Documents
Generate, send, and electronically sign commercial documents including quotes, proformas, and contracts.
Base URL: /api/v1/quotes
Auth required: Yes (auth:api) for all endpoints.
Quotes are commercial documents generated from customer files. Three document types are supported: quote, proforma, contract.
GET /v1/quotes
Check if a customer file has quote documents, and list available types.
Query parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
customer_file_id |
integer | Yes | Customer file ID |
Response 200:
{
"has_quotes": true,
"types": ["quote", "proforma", "contract"]
}
Examples:
curl -X GET "https://your-instance.bluerocktel.net/api/v1/quotes?customer_file_id=10" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Accept: application/json"
import requests
response = requests.get(
"https://your-instance.bluerocktel.net/api/v1/quotes",
params={"customer_file_id": 10},
headers={"Authorization": "Bearer YOUR_API_TOKEN"}
)
quotes_info = response.json()
$response = Http::withToken('YOUR_API_TOKEN')
->get('https://your-instance.bluerocktel.net/api/v1/quotes', [
'customer_file_id' => 10,
]);
$quotesInfo = $response->json();
const response = await fetch(
"https://your-instance.bluerocktel.net/api/v1/quotes?customer_file_id=10",
{
headers: {
"Authorization": "Bearer YOUR_API_TOKEN",
"Accept": "application/json"
}
}
);
const quotesInfo = await response.json();
GET /v1/quotes/generate
Generate quote documents for a customer file. Runs the generate_quote_documents action.
Query parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
customer_file_id |
integer | Yes | Customer file ID |
Response 201:
{
"types": ["quote", "proforma", "contract"]
}
Response 422/500: Error during generation.
Examples:
curl -X GET "https://your-instance.bluerocktel.net/api/v1/quotes/generate?customer_file_id=10" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Accept: application/json"
import requests
response = requests.get(
"https://your-instance.bluerocktel.net/api/v1/quotes/generate",
params={"customer_file_id": 10},
headers={"Authorization": "Bearer YOUR_API_TOKEN"}
)
generated = response.json()
$response = Http::withToken('YOUR_API_TOKEN')
->get('https://your-instance.bluerocktel.net/api/v1/quotes/generate', [
'customer_file_id' => 10,
]);
$generated = $response->json();
const response = await fetch(
"https://your-instance.bluerocktel.net/api/v1/quotes/generate?customer_file_id=10",
{
headers: {
"Authorization": "Bearer YOUR_API_TOKEN",
"Accept": "application/json"
}
}
);
const generated = await response.json();
GET /v1/quotes/show
Show (download) a specific quote document as a PDF.
Query parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
customer_file_id |
integer | Yes | Customer file ID |
type |
string | Yes | Document type: quote, proforma, or contract |
Response 200: PDF file (Content-Type: application/pdf).
Response 404: Document not found (no quotes generated).
Examples:
curl -X GET "https://your-instance.bluerocktel.net/api/v1/quotes/show?customer_file_id=10&type=quote" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-o quote.pdf
import requests
response = requests.get(
"https://your-instance.bluerocktel.net/api/v1/quotes/show",
params={"customer_file_id": 10, "type": "quote"},
headers={"Authorization": "Bearer YOUR_API_TOKEN"}
)
with open("quote.pdf", "wb") as f:
f.write(response.content)
$response = Http::withToken('YOUR_API_TOKEN')
->get('https://your-instance.bluerocktel.net/api/v1/quotes/show', [
'customer_file_id' => 10,
'type' => 'quote',
]);
Storage::put('quote.pdf', $response->body());
const response = await fetch(
"https://your-instance.bluerocktel.net/api/v1/quotes/show?customer_file_id=10&type=quote",
{
headers: {
"Authorization": "Bearer YOUR_API_TOKEN"
}
}
);
const blob = await response.blob();
POST /v1/quotes/send
Send a quote document by email to a recipient.
Body (JSON):
| Field | Type | Required | Description |
|---|---|---|---|
customer_file_id |
integer | Yes | Customer file ID |
email |
string | Yes | Recipient email address |
type |
string | Yes | Document type: quote, proforma, or contract |
Response 200: { "message": "success" }
Response 400: Quotes not yet generated.
Response 500: Mail sending error.
Examples:
curl -X POST "https://your-instance.bluerocktel.net/api/v1/quotes/send" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"customer_file_id": 10, "email": "client@example.com", "type": "quote"}'
import requests
response = requests.post(
"https://your-instance.bluerocktel.net/api/v1/quotes/send",
json={
"customer_file_id": 10,
"email": "client@example.com",
"type": "quote"
},
headers={"Authorization": "Bearer YOUR_API_TOKEN"}
)
result = response.json()
$response = Http::withToken('YOUR_API_TOKEN')
->post('https://your-instance.bluerocktel.net/api/v1/quotes/send', [
'customer_file_id' => 10,
'email' => 'client@example.com',
'type' => 'quote',
]);
$result = $response->json();
const response = await fetch(
"https://your-instance.bluerocktel.net/api/v1/quotes/send",
{
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_TOKEN",
"Content-Type": "application/json"
},
body: JSON.stringify({
customer_file_id: 10,
email: "client@example.com",
type: "quote"
})
}
);
const result = await response.json();
POST /v1/quotes/docusign
Send a contract for electronic signature via DocuSign. Requires the DocuSign module to be enabled.
Query parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
customer_file_id |
integer | Yes | Customer file ID |
type |
string | Yes | Must be contract |
Body (JSON):
| Field | Type | Required | Description |
|---|---|---|---|
title |
string | Yes | Envelope title (max 255 chars) |
signers |
array | Yes | Array of signers (at least 1). Each: email (required), name (optional) |
cc |
array | No | Array of CC recipients. Each: email (required), name (optional) |
draft |
boolean | No | If true, creates envelope as draft |
Response 200: DocuSign envelope data. Response 400: Module not enabled or validation error. Response 500: DocuSign API error.
Examples:
curl -X POST "https://your-instance.bluerocktel.net/api/v1/quotes/docusign?customer_file_id=10&type=contract" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"title": "Service Contract - Acme Corp",
"signers": [{"email": "signer@example.com", "name": "John Doe"}],
"cc": [{"email": "manager@example.com", "name": "Jane Smith"}],
"draft": false
}'
import requests
response = requests.post(
"https://your-instance.bluerocktel.net/api/v1/quotes/docusign",
params={"customer_file_id": 10, "type": "contract"},
json={
"title": "Service Contract - Acme Corp",
"signers": [{"email": "signer@example.com", "name": "John Doe"}],
"cc": [{"email": "manager@example.com", "name": "Jane Smith"}],
"draft": False
},
headers={"Authorization": "Bearer YOUR_API_TOKEN"}
)
envelope = response.json()
$response = Http::withToken('YOUR_API_TOKEN')
->post('https://your-instance.bluerocktel.net/api/v1/quotes/docusign?customer_file_id=10&type=contract', [
'title' => 'Service Contract - Acme Corp',
'signers' => [['email' => 'signer@example.com', 'name' => 'John Doe']],
'cc' => [['email' => 'manager@example.com', 'name' => 'Jane Smith']],
'draft' => false,
]);
$envelope = $response->json();
const response = await fetch(
"https://your-instance.bluerocktel.net/api/v1/quotes/docusign?customer_file_id=10&type=contract",
{
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_TOKEN",
"Content-Type": "application/json"
},
body: JSON.stringify({
title: "Service Contract - Acme Corp",
signers: [{ email: "signer@example.com", name: "John Doe" }],
cc: [{ email: "manager@example.com", name: "Jane Smith" }],
draft: false
})
}
);
const envelope = await response.json();
On this page