Offerframe API
Build custom integrations with our REST API.
Getting Started
The Offerframe API is a RESTful JSON API. All requests require authentication via API key. Generate keys from Settings > API Keys in your workspace.
Authentication
All API requests require a Bearer token in the Authorization header.
Authorization: Bearer YOUR_API_KEYBase URL
https://api.offerframe.io/v1All endpoints are prefixed with this base URL. HTTPS is required for all requests.
Endpoints
Quotes
/quotesList all quotes with optional filters (status, date range, customer)
/quotes/:idRetrieve a single quote with line items and metadata
/quotesCreate a new quote with line items, customer info, and terms
/quotes/:idUpdate quote fields, line items, or status
Products
/productsList catalog products with search and pagination
/products/:idRetrieve a single product with custom fields
/productsAdd a new product to the catalog
/products/:idUpdate product name, price, description, or custom fields
Customers
/customersList all customers with search and pagination
/customers/:idRetrieve a customer profile with quote history
Team
/team/membersList team members with roles and status
Example: List Quotes
Request
curl -X GET "https://api.offerframe.io/v1/quotes?status=sent&limit=10" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json"Response
{
"data": [
{
"id": "qt_abc123",
"quote_number": "Q-250302-A7X",
"status": "sent",
"customer_name": "Acme Corp",
"customer_email": "buyer@acme.com",
"total": 7821.00,
"currency": "USD",
"valid_until": "2026-03-31",
"created_at": "2026-03-02T14:30:00Z",
"line_items": [
{
"product_name": "Enterprise License",
"quantity": 10,
"unit_price": 499.00,
"total": 4990.00
}
]
}
],
"pagination": {
"page": 1,
"per_page": 10,
"total": 42
}
}Rate Limits
API requests are limited to 100 requests per minute per API key. Rate limit headers are included in every response:
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 97
X-RateLimit-Reset: 1709402400If you exceed the limit, you'll receive a 429 Too Many Requests response. Wait until the reset time before retrying.
WebhooksEnterprise
Receive real-time notifications when events occur in your workspace. Configure webhook endpoints in Settings > Webhooks.
Event Types
quote.acceptedFired when a customer accepts a quote via the public link
quote.rejectedFired when a customer rejects a quote
quote.viewedFired when a customer views the public quote link
quote.sentFired when a quote is sent to a customer
quote.expiredFired when a quote passes its valid_until date
Payload Format
{
"event": "quote.accepted",
"timestamp": "2026-03-02T16:45:00Z",
"data": {
"quote_id": "qt_abc123",
"quote_number": "Q-250302-A7X",
"customer_name": "Acme Corp",
"total": 7821.00,
"accepted_at": "2026-03-02T16:45:00Z"
}
}Retry Policy
Failed deliveries (non-2xx responses) are retried up to 5 times with exponential backoff: 1 min, 5 min, 30 min, 2 hours, 24 hours. After 5 failures, the endpoint is automatically disabled and you'll receive an email notification.
SDKs & Libraries
Official SDKs are coming soon. The REST API works with any HTTP client — use fetch, axios, curl, or your language's built-in HTTP library.