Quotes

Create, update, and manage quotes linked to deals. Generate PDFs, duplicate quotes, and manage quote status.

All Quotes endpoints require JWT authentication via the Authorization: Bearer <token> header. Some endpoints require Admin role.

Core Endpoints

GET /quotes List quotes
JWT Required

Query Parameters

NameTypeRequiredDescription
page integer Optional Page number for pagination. Default: 1
per_page integer Optional Number of results per page (max 100). Default: 25. Max: 100
search string Optional Search term to filter results
status string Optional Values: draft, sent, accepted, declined, expired
deal_id integer Optional
sort_by string Optional Sort field (default: quote_number). Values: quote_number, company_name, contact_name, deal_title, status, total, created_at, valid_until
sort_dir string Optional Sort direction (default: ASC). Values: ASC, DESC

Code Examples

curl -X GET "https://crm.revorbit.com/api/quotes" \
  -H "Authorization: Bearer YOUR_JWT_TOKEN"
const response = await fetch(
  "https://crm.revorbit.com/api/quotes",
  {
    method: "GET",
    headers: {
      "Authorization": "Bearer YOUR_JWT_TOKEN",
    }
  }
);
const data = await response.json();
POST /quotes Create quote
JWT Required

Request Body

NameTypeRequiredDescription
deal_id integer Required
contact_id integer Optional Ship To contact ID
bill_to_contact_id integer Optional Bill To contact ID
company_id integer Optional
status string Optional Values: draft, sent, accepted, declined, expired
discount_type string Optional Values: percentage, fixed
discount_value number Optional
tax_rate number Optional
valid_until date Optional
notes string Optional
items array[object] Optional

Code Examples

curl -X POST "https://crm.revorbit.com/api/quotes" \
  -H "Authorization: Bearer YOUR_JWT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "deal_id": 1,
    "contact_id": 1,
    "bill_to_contact_id": 1,
    "company_id": 1,
    "status": "draft",
    "discount_type": "percentage",
    "discount_value": 1,
    "tax_rate": 1,
    "valid_until": "2026-01-15",
    "notes": "...",
    "items": [
        {
            "product_id": 1,
            "description": "...",
            "quantity": 1,
            "unit_price": 1
        }
    ]
}'
const response = await fetch(
  "https://crm.revorbit.com/api/quotes",
  {
    method: "POST",
    headers: {
      "Authorization": "Bearer YOUR_JWT_TOKEN",
      "Content-Type": "application/json"
    },
    body: JSON.stringify(
      {
          "deal_id": 1,
          "contact_id": 1,
          "bill_to_contact_id": 1,
          "company_id": 1,
          "status": "draft",
          "discount_type": "percentage",
          "discount_value": 1,
          "tax_rate": 1,
          "valid_until": "2026-01-15",
          "notes": "...",
          "items": [
              {
                  "product_id": 1,
                  "description": "...",
                  "quantity": 1,
                  "unit_price": 1
              }
          ]
      }
    )
  }
);
const data = await response.json();
GET /quotes/{id} Get quote
JWT Required

Path Parameters

NameTypeRequiredDescription
id integer Required Resource ID

Code Examples

curl -X GET "https://crm.revorbit.com/api/quotes/{id}" \
  -H "Authorization: Bearer YOUR_JWT_TOKEN"
const response = await fetch(
  "https://crm.revorbit.com/api/quotes/{id}",
  {
    method: "GET",
    headers: {
      "Authorization": "Bearer YOUR_JWT_TOKEN",
    }
  }
);
const data = await response.json();
PUT /quotes/{id} Update quote
JWT Required

Path Parameters

NameTypeRequiredDescription
id integer Required Resource ID

Request Body

NameTypeRequiredDescription
deal_id integer Required
contact_id integer Optional Ship To contact ID
bill_to_contact_id integer Optional Bill To contact ID
company_id integer Optional
status string Optional Values: draft, sent, accepted, declined, expired
discount_type string Optional Values: percentage, fixed
discount_value number Optional
tax_rate number Optional
valid_until date Optional
notes string Optional
items array[object] Optional

Code Examples

curl -X PUT "https://crm.revorbit.com/api/quotes/{id}" \
  -H "Authorization: Bearer YOUR_JWT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "deal_id": 1,
    "contact_id": 1,
    "bill_to_contact_id": 1,
    "company_id": 1,
    "status": "draft",
    "discount_type": "percentage",
    "discount_value": 1,
    "tax_rate": 1,
    "valid_until": "2026-01-15",
    "notes": "...",
    "items": [
        {
            "product_id": 1,
            "description": "...",
            "quantity": 1,
            "unit_price": 1
        }
    ]
}'
const response = await fetch(
  "https://crm.revorbit.com/api/quotes/{id}",
  {
    method: "PUT",
    headers: {
      "Authorization": "Bearer YOUR_JWT_TOKEN",
      "Content-Type": "application/json"
    },
    body: JSON.stringify(
      {
          "deal_id": 1,
          "contact_id": 1,
          "bill_to_contact_id": 1,
          "company_id": 1,
          "status": "draft",
          "discount_type": "percentage",
          "discount_value": 1,
          "tax_rate": 1,
          "valid_until": "2026-01-15",
          "notes": "...",
          "items": [
              {
                  "product_id": 1,
                  "description": "...",
                  "quantity": 1,
                  "unit_price": 1
              }
          ]
      }
    )
  }
);
const data = await response.json();
DELETE /quotes/{id} Delete quote
JWT Required

Path Parameters

NameTypeRequiredDescription
id integer Required Resource ID

Code Examples

curl -X DELETE "https://crm.revorbit.com/api/quotes/{id}" \
  -H "Authorization: Bearer YOUR_JWT_TOKEN"
const response = await fetch(
  "https://crm.revorbit.com/api/quotes/{id}",
  {
    method: "DELETE",
    headers: {
      "Authorization": "Bearer YOUR_JWT_TOKEN",
    }
  }
);
const data = await response.json();
PUT /quotes/{id}/status Update quote status
JWT Required

Path Parameters

NameTypeRequiredDescription
id integer Required Resource ID

Request Body

NameTypeRequiredDescription
status string Required Values: draft, sent, accepted, declined, expired

Code Examples

curl -X PUT "https://crm.revorbit.com/api/quotes/{id}/status" \
  -H "Authorization: Bearer YOUR_JWT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"status":"draft"}'
const response = await fetch(
  "https://crm.revorbit.com/api/quotes/{id}/status",
  {
    method: "PUT",
    headers: {
      "Authorization": "Bearer YOUR_JWT_TOKEN",
      "Content-Type": "application/json"
    },
    body: JSON.stringify(
      {
          "status": "draft"
      }
    )
  }
);
const data = await response.json();
GET /quotes/{id}/pdf Generate PDF
JWT Required

Generate a PDF version of the quote.

Path Parameters

NameTypeRequiredDescription
id integer Required Resource ID

Response

PDF file (binary file download)

Code Examples

curl -X GET "https://crm.revorbit.com/api/quotes/{id}/pdf" \
  -H "Authorization: Bearer YOUR_JWT_TOKEN"
const response = await fetch(
  "https://crm.revorbit.com/api/quotes/{id}/pdf",
  {
    method: "GET",
    headers: {
      "Authorization": "Bearer YOUR_JWT_TOKEN",
    }
  }
);
const data = await response.json();
POST /quotes/{id}/duplicate Duplicate quote
JWT Required

Create a copy of an existing quote.

Path Parameters

NameTypeRequiredDescription
id integer Required Resource ID

Code Examples

curl -X POST "https://crm.revorbit.com/api/quotes/{id}/duplicate" \
  -H "Authorization: Bearer YOUR_JWT_TOKEN"
const response = await fetch(
  "https://crm.revorbit.com/api/quotes/{id}/duplicate",
  {
    method: "POST",
    headers: {
      "Authorization": "Bearer YOUR_JWT_TOKEN",
    }
  }
);
const data = await response.json();

Quote Settings

GET /quote-settings Get quote settings
Admin Required

Retrieve organization quote settings (numbering, defaults, logo).

Code Examples

curl -X GET "https://crm.revorbit.com/api/quote-settings" \
  -H "Authorization: Bearer YOUR_JWT_TOKEN"
const response = await fetch(
  "https://crm.revorbit.com/api/quote-settings",
  {
    method: "GET",
    headers: {
      "Authorization": "Bearer YOUR_JWT_TOKEN",
    }
  }
);
const data = await response.json();
PUT /quote-settings Update quote settings
Admin Required

Request Body

NameTypeRequiredDescription
number_prefix string Optional
tax_rate number Optional
notes string Optional
terms string Optional

Code Examples

curl -X PUT "https://crm.revorbit.com/api/quote-settings" \
  -H "Authorization: Bearer YOUR_JWT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"number_prefix":"...","tax_rate":1,"notes":"...","terms":"..."}'
const response = await fetch(
  "https://crm.revorbit.com/api/quote-settings",
  {
    method: "PUT",
    headers: {
      "Authorization": "Bearer YOUR_JWT_TOKEN",
      "Content-Type": "application/json"
    },
    body: JSON.stringify(
      {
          "number_prefix": "...",
          "tax_rate": 1,
          "notes": "...",
          "terms": "..."
      }
    )
  }
);
const data = await response.json();