Build integrations with the Invobi API to create and manage invoices programmatically.
The Invobi API allows you to programmatically create and manage invoices. To use the API, you'll need to create an API token from your account settings.
All API requests must include your API token in the Authorization header:
Authorization: Bearer YOUR_API_TOKENAll API endpoints are relative to:
https://invobi.com/api/v1API requests are limited to 100 requests per minute per token. If you exceed this limit, you'll receive a 429 Too Many Requests response.
All API responses include rate limit headers to help you track your usage:
| Header | Description |
|---|---|
X-RateLimit-Limit | The maximum number of requests allowed per minute (100) |
X-RateLimit-Remaining | The number of requests remaining in the current window |
X-RateLimit-Reset | Unix timestamp when the rate limit window resets |
Example response headers:
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 95
X-RateLimit-Reset: 1736544000/invoicesReturns a paginated list of all invoices for the authenticated user. Supports filtering by payment status.
| Name | Type | Required | Description |
|---|---|---|---|
page | integer | No | Page number (default: 1) |
per_page | integer | No | Items per page (default: 20, max: 100) |
status | string | No | Filter by payment status: 'paid' or 'unpaid' |
{
"invoices": [
{
"id": "abc123",
"title": "Invoice #001",
"issued_at": "2025-01-15",
"due_at": "2025-02-15",
"paid_at": "2025-01-20",
"currency": "USD",
...
}
],
"pagination": {
"total": 42,
"page": 1,
"per_page": 20,
"total_pages": 3
}
}# List all invoices
curl -X GET "https://invobi.com/api/v1/invoices?page=1&per_page=10" \
-H "Authorization: Bearer YOUR_API_TOKEN"
# List only paid invoices
curl -X GET "https://invobi.com/api/v1/invoices?status=paid" \
-H "Authorization: Bearer YOUR_API_TOKEN"
# List only unpaid invoices
curl -X GET "https://invobi.com/api/v1/invoices?status=unpaid" \
-H "Authorization: Bearer YOUR_API_TOKEN"/invoices/:idReturns a single invoice by ID.
| Name | Type | Required | Description |
|---|---|---|---|
id | string | Yes | The invoice ID |
{
"invoice": {
"id": "abc123",
"title": "Invoice #001",
"issued_at": "2025-01-15",
"due_at": "2025-02-15",
"currency": "USD",
"locale": "US",
"from_details": [...],
"to_details": [...],
"items": [...],
"discounts": [...],
"taxes": [...],
"payment_details": [...]
}
}curl -X GET "https://invobi.com/api/v1/invoices/abc123" \
-H "Authorization: Bearer YOUR_API_TOKEN"/invoicesCreates a new invoice using natural language. Describe your invoice in plain text, and AI will generate it for you.
| Name | Type | Required | Description |
|---|---|---|---|
prompt | string | Yes | Natural language description of the invoice to create |
llm_provider | string | Yes | LLM provider to use (see supported providers below) |
llm_api_key | string | Yes | Your API key for the chosen LLM provider |
{
"invoice": {
"id": "new-invoice-id",
"title": "Consulting Services - January 2025",
"issued_at": "2025-01-15",
"due_at": "2025-02-15",
...
}
}curl -X POST "https://invobi.com/api/v1/invoices" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"prompt": "Create an invoice for 10 hours of consulting at $150/hour for Acme Corp from John Smith at Smith LLC. Add 10% tax. Payment due in 30 days to Chase Bank account 1234567890.",
"llm_provider": "gemini-25-flash",
"llm_api_key": "YOUR_LLM_API_KEY"
}'You must provide your own API key for the chosen LLM provider:
| Provider | Value | Get API Key |
|---|---|---|
| Google Gemini 2.5 Flash | gemini-25-flash | Google AI Studio |
| Google Gemini 2.5 Flash Lite | gemini-25-flash-lite | Google AI Studio |
| Google Gemini 2.5 Pro | gemini-25-pro | Google AI Studio |
| Google Gemini 2.0 Flash | gemini-20-flash | Google AI Studio |
| Google Gemini 2.0 Flash Lite | gemini-20-flash-lite | Google AI Studio |
| OpenAI GPT-4o | gpt-4o | OpenAI Platform |
| OpenAI GPT-4o Mini | gpt-4o-mini | OpenAI Platform |
| OpenAI GPT-4 Turbo | gpt-4-turbo | OpenAI Platform |
| OpenAI GPT-4.1 | gpt-41 | OpenAI Platform |
| OpenAI GPT-4.1 Mini | gpt-41-mini | OpenAI Platform |
💡 Tip: gemini-25-flash offers the best balance of speed and quality for invoice generation.
/invoices/:id/downloadDownloads the invoice as a PDF file.
| Name | Type | Required | Description |
|---|---|---|---|
id | string | Yes | The invoice ID |
Returns the invoice as a PDF file with Content-Type: application/pdf
curl -X GET "https://invobi.com/api/v1/invoices/abc123/download" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-o invoice.pdf/invoices/:idDeletes an invoice.
| Name | Type | Required | Description |
|---|---|---|---|
id | string | Yes | The invoice ID |
{
"deleted": true
}curl -X DELETE "https://invobi.com/api/v1/invoices/abc123" \
-H "Authorization: Bearer YOUR_API_TOKEN"/invoices/:id/mark-paidMarks an invoice as paid with today's date.
| Name | Type | Required | Description |
|---|---|---|---|
id | string | Yes | The invoice ID |
{
"invoice": {
"id": "abc123",
"paid_at": "2025-01-15",
...
}
}curl -X POST "https://invobi.com/api/v1/invoices/abc123/mark-paid" \
-H "Authorization: Bearer YOUR_API_TOKEN"/invoices/:id/mark-unpaidMarks an invoice as unpaid by clearing the paid date.
| Name | Type | Required | Description |
|---|---|---|---|
id | string | Yes | The invoice ID |
{
"invoice": {
"id": "abc123",
"paid_at": null,
...
}
}curl -X POST "https://invobi.com/api/v1/invoices/abc123/mark-unpaid" \
-H "Authorization: Bearer YOUR_API_TOKEN"/promptsReturns a list of all saved prompts for the authenticated user.
| Name | Type | Required | Description |
|---|---|---|---|
label | string | No | Filter by label name (use __no_label__ for unlabeled prompts) |
content | string | No | Filter by content (case-insensitive search) |
{
"prompts": [
{
"id": "prompt-123",
"user_id": "user-456",
"prompt_text": "Invoice for consulting services...",
"labels": [
{"name": "Consulting", "color": "#3b82f6"}
],
"created_at": "2025-01-15T10:30:00Z"
}
]
}curl -X GET "https://invobi.com/api/v1/prompts" \
-H "Authorization: Bearer YOUR_API_TOKEN"/prompts/:idReturns a single prompt by ID.
| Name | Type | Required | Description |
|---|---|---|---|
id | string | Yes | The prompt ID |
{
"prompt": {
"id": "prompt-123",
"user_id": "user-456",
"prompt_text": "Invoice for consulting services...",
"labels": [
{"name": "Consulting", "color": "#3b82f6"}
],
"created_at": "2025-01-15T10:30:00Z"
}
}curl -X GET "https://invobi.com/api/v1/prompts/prompt-123" \
-H "Authorization: Bearer YOUR_API_TOKEN"/promptsCreates a new saved prompt.
| Name | Type | Required | Description |
|---|---|---|---|
prompt_text | string | Yes | The prompt text to save |
labels | array | No | Array of label objects with 'name' and 'color' properties |
{
"prompt": {
"id": "new-prompt-id",
"user_id": "user-456",
"prompt_text": "Invoice for consulting services...",
"labels": [
{"name": "Consulting", "color": "#3b82f6"}
],
"created_at": "2025-01-15T10:30:00Z"
}
}curl -X POST "https://invobi.com/api/v1/prompts" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"prompt_text": "Invoice for consulting services at $150/hour",
"labels": [{"name": "Consulting", "color": "#3b82f6"}]
}'/prompts/:idUpdates an existing prompt. At least one field must be provided.
| Name | Type | Required | Description |
|---|---|---|---|
id | string | Yes | The prompt ID (in URL) |
prompt_text | string | No | The updated prompt text |
labels | array | No | Updated array of label objects with 'name' and 'color' properties |
{
"prompt": {
"id": "prompt-123",
"user_id": "user-456",
"prompt_text": "Updated invoice prompt...",
"labels": [
{"name": "Updated", "color": "#10b981"}
],
"created_at": "2025-01-15T10:30:00Z"
}
}curl -X PUT "https://invobi.com/api/v1/prompts/prompt-123" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"prompt_text": "Updated invoice prompt text",
"labels": [{"name": "Updated", "color": "#10b981"}]
}'/prompts/:idDeletes a prompt.
| Name | Type | Required | Description |
|---|---|---|---|
id | string | Yes | The prompt ID |
{
"deleted": true
}curl -X DELETE "https://invobi.com/api/v1/prompts/prompt-123" \
-H "Authorization: Bearer YOUR_API_TOKEN"/prompts/labelsReturns a list of all unique label names used by the authenticated user's prompts.
{
"labels": ["Consulting", "Development", "Design"]
}curl -X GET "https://invobi.com/api/v1/prompts/labels" \
-H "Authorization: Bearer YOUR_API_TOKEN"The API uses standard HTTP status codes to indicate success or failure:
| Status | Description |
|---|---|
| 200 OK | Request succeeded |
| 201 Created | Resource created successfully |
| 400 Bad Request | Invalid request body or parameters |
| 401 Unauthorized | Missing or invalid API token |
| 403 Forbidden | Insufficient permissions |
| 404 Not Found | Resource not found |
| 429 Too Many Requests | Rate limit exceeded |
| 500 Internal Server Error | Server error |
Error responses include a JSON body with an error message:
{
"error": "Invalid or expired API token"
}