Invoice Management API
The Invoice Management API allows you to manage invoices in your TaskIP system. You can create, read, update, and delete invoices, as well as perform advanced operations like status updates, publishing, payment gateway integration, and recurring billing.
Endpoints Overview
Method | Endpoint | Description |
---|---|---|
GET | /api/public-v1/invoice | Get all invoices |
POST | /api/public-v1/invoice | Create a new invoice |
GET | /api/public-v1/invoice/{id} | Get a specific invoice |
PUT | /api/public-v1/invoice/{id} | Update an invoice |
DELETE | /api/public-v1/invoice/{id} | Delete an invoice |
POST | /api/public-v1/invoice/bulk-actions | Bulk operations on invoices |
POST | /api/public-v1/invoice/{id}/status-update | Update invoice status |
POST | /api/public-v1/invoice/publish/{id} | Publish/unpublish invoice |
POST | /api/public-v1/invoice/{id}/payment-gateway | Update payment gateway |
POST | /api/public-v1/invoice/{id}/recurring | Set up recurring payments |
GET | /api/public-v1/invoice/{id}/download | Download invoice PDF |
POST | /api/public-v1/invoice/sent/{id} | Send invoice to client |
Get All Invoices
Retrieve a list of all invoices in your system.
GET /api/public-v1/invoice
Request Headers
X-Secret-Key: your-secret-key-here
Content-Type: application/json
Query Parameters
Parameter | Type | Required | Description |
---|---|---|---|
page | integer | No | Page number for pagination (default: 1) |
limit | integer | No | Number of invoices per page (default: 50) |
search | string | No | Search term for invoice number or client |
status | string | No | Filter by status (draft , sent , paid , overdue , cancelled ) |
client_id | integer | No | Filter by client/contact ID |
date_from | string | No | Filter by date range (start date, YYYY-MM-DD) |
date_to | string | No | Filter by date range (end date, YYYY-MM-DD) |
sort | string | No | Sort field (invoice_number , amount , date , due_date ) |
order | string | No | Sort order (asc or desc ) |
Example Request
curl -X GET "https://public-api.taskip.net/api/public-v1/invoice?status=sent&page=1&limit=20" \
-H "X-Secret-Key: your-secret-key-here" \
-H "Content-Type: application/json"
JavaScript Example
const response = await fetch('https://public-api.taskip.net/api/public-v1/invoice?status=sent&date_from=2024-01-01', {
method: 'GET',
headers: {
'X-Secret-Key': 'your-secret-key-here',
'Content-Type': 'application/json'
}
});
const invoices = await response.json();
Example Response
{
"message": "Team member list",
"data": [
{
"id": 1,
"invoice_no": "INV-001",
"generatedId": "INV-2024-001",
"slug": "abc123def456",
"folder": {
"id": 5,
"name": "Q1 2024 Invoices"
},
"company": {
"id": 15,
"name": "Acme Corporation",
"email": "billing@acme.com"
},
"contacts": {
"id": 45,
"first_name": "John",
"last_name": "Smith",
"email": "john@acme.com"
},
"contact_id": 45,
"subject": "Website Development Services",
"issue_date": "2024-01-15",
"due_date": "2024-02-14",
"currency": "USD",
"subtotal": 2500.00,
"tax": [
{
"id": 1,
"name": "VAT",
"rate": 10,
"amount": 250.00
}
],
"currentNote": {
"id": "INV-001",
"note": "Payment Terms",
"term": "Payment due within 30 days"
},
"notes": [
{
"id": 1,
"title": "Payment Terms",
"description": "Payment due within 30 days",
"enable": true,
"created_at": "2024-01-15T09:00:00Z",
"updated_at": "2024-01-15T09:00:00Z"
}
],
"total": 2750.00,
"partial_paid_amount": 0.00,
"due_amount": 2750.00,
"items": [
{
"id": 1,
"name": "Frontend Development",
"qty": 80,
"rate": 25.00,
"label": "Hours"
},
{
"id": 2,
"name": "Backend Integration",
"qty": 20,
"rate": 25.00,
"label": "Hours"
}
],
"logo": {
"id": 101,
"url": "https://cdn.taskip.net/logos/company-logo.png",
"thumbnail": "https://cdn.taskip.net/logos/company-logo-thumb.png"
},
"signature": {
"id": 102,
"url": "https://cdn.taskip.net/signatures/signature.png",
"thumbnail": "https://cdn.taskip.net/signatures/signature-thumb.png"
},
"discount": 0,
"discount_type": "fixed",
"template": 1,
"payment_gateway": "stripe",
"payment_infos": [],
"status": "draft",
"publish": true,
"deleted_at": null,
"activities": [],
"reminders": {
"enabled": true,
"days_before": [7, 3, 1],
"template": "default"
},
"payable": {
"payable_amount": null,
"payable_amount_type": null,
"payment_type": "full-amount"
},
"recurring_payment": {
"is_payment_reccuring": false,
"payment_recurring_type": null,
"recurring_until": null
},
"created_by": {
"id": 1,
"name": "Admin User"
},
"updated_by": {
"id": 1,
"name": "Admin User"
},
"created_at": "2024-01-15T09:00:00Z",
"updated_at": "2024-01-15T09:30:00Z"
}
],
"links": {
"first": "https://public-api.taskip.net/api/public-v1/invoice?page=1",
"last": "https://public-api.taskip.net/api/public-v1/invoice?page=8",
"prev": null,
"next": "https://public-api.taskip.net/api/public-v1/invoice?page=2"
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 8,
"path": "https://public-api.taskip.net/api/public-v1/invoice",
"per_page": 20,
"to": 20,
"total": 156
}
}
Create an Invoice
Create a new invoice in your system.
POST /api/public-v1/invoice
Request Headers
X-Secret-Key: your-secret-key-here
Content-Type: application/json
Request Body
Field | Type | Required | Description |
---|---|---|---|
invoice_no | string | Yes | Invoice number (must be unique) |
contact_id | integer | Yes | Contact ID (must exist in contacts table) |
project_id | string | No | Project ID (nullable) |
subject | string | Yes | Invoice subject (max 191 characters) |
issue_date | string | No | Issue date (YYYY-MM-DD, nullable) |
due_date | string | No | Due date (YYYY-MM-DD, nullable) |
currency | string | Yes | Currency code (3-digit ISO code, e.g., USD, EUR, GBP) |
subtotal | integer | No | Subtotal amount in cents (nullable) |
discount | double | No | Discount amount (nullable) |
discount_type | string | No | Discount type (nullable) |
total | integer | No | Total amount in cents (nullable) |
items | string | No | JSON string of invoice items (nullable) |
logo | integer | No | Logo media ID (nullable) |
signature | integer | No | Signature media ID (nullable) |
terms | string | No | Invoice terms (nullable) |
status | string | No | Status (draft or publish ) |
Invoice Item Object (for items JSON string)
Field | Type | Required | Description |
---|---|---|---|
name | string | Yes | Item name/description |
qty | decimal | Yes | Item quantity |
rate | decimal | Yes | Price per unit |
label | string | No | Item unit label |
Example Request
curl -X POST "https://public-api.taskip.net/api/public-v1/invoice" \
-H "X-Secret-Key: your-secret-key-here" \
-H "Content-Type: application/json" \
-d '{
"invoice_no": "INV-2024-030",
"contact_id": 30,
"subject": "Q1 2024 Marketing Services",
"issue_date": "2024-01-25",
"due_date": "2024-02-25",
"currency": "USD",
"subtotal": 390000,
"discount": 0,
"discount_type": "fixed",
"total": 390000,
"items": "[{\"name\":\"Social Media Management\",\"qty\":3,\"rate\":800.00,\"label\":\"Service\"},{\"name\":\"Content Creation\",\"qty\":10,\"rate\":150.00,\"label\":\"Service\"},{\"name\":\"Analytics & Reporting\",\"qty\":1,\"rate\":500.00,\"label\":\"Service\"}]",
"terms": "Payment due within 30 days",
"status": "draft"
}'
Python Example
import requests
from datetime import datetime, timedelta
headers = {
'X-Secret-Key': 'your-secret-key-here',
'Content-Type': 'application/json'
}
# Calculate due date (30 days from now)
due_date = (datetime.now() + timedelta(days=30)).strftime('%Y-%m-%d')
invoice_data = {
"invoice_no": "INV-2024-030",
"contact_id": 30,
"subject": "Q1 2024 Marketing Services",
"issue_date": "2024-01-25",
"due_date": due_date,
"currency": "USD",
"subtotal": 390000,
"discount": 0,
"discount_type": "fixed",
"total": 390000,
"items": json.dumps([
{
"name": "Social Media Management",
"qty": 3,
"rate": 800.00,
"label": "Service"
},
{
"name": "Content Creation",
"qty": 10,
"rate": 150.00,
"label": "Service"
},
{
"name": "Analytics & Reporting",
"qty": 1,
"rate": 500.00,
"label": "Service"
}
]),
"terms": "Payment due within 30 days",
"status": "draft"
}
response = requests.post(
'https://public-api.taskip.net/api/public-v1/invoice',
headers=headers,
json=invoice_data
)
result = response.json()
Example Response
{
"msg": "Invoice Created",
"status": 200,
"invoice_no": "INV-2024-030"
}
Get a Specific Invoice
Retrieve details of a specific invoice by ID.
GET /api/public-v1/invoice/{id}
Path Parameters
Parameter | Type | Required | Description |
---|---|---|---|
id | integer | Yes | Invoice ID |
Example Request
curl -X GET "https://public-api.taskip.net/api/public-v1/invoice/157" \
-H "X-Secret-Key: your-secret-key-here" \
-H "Content-Type: application/json"
Example Response
{
"data": {
"id": 157,
"invoice_no": "INV-030",
"generatedId": "INV-2024-030",
"slug": "abc123def456",
"folder": {
"id": 5,
"name": "Q1 2024 Invoices"
},
"company": {
"id": 15,
"name": "Digital Marketing Pro",
"email": "billing@digitalmarketingpro.com"
},
"contacts": {
"id": 30,
"first_name": "Sarah",
"last_name": "Johnson",
"email": "sarah@digitalmarketingpro.com"
},
"contact_id": 30,
"subject": "Q1 2024 Marketing Services",
"issue_date": "2024-01-25",
"due_date": "2024-02-25",
"currency": "USD",
"subtotal": 3900.00,
"tax": [
{
"id": 1,
"name": "VAT",
"rate": 8.5,
"amount": 331.50
}
],
"currentNote": {
"id": "INV-030",
"note": "Payment Terms",
"term": "Payment due within 30 days"
},
"notes": [
{
"id": 1,
"title": "Payment Terms",
"description": "Payment due within 30 days",
"enable": true,
"created_at": "2024-01-25T10:30:00Z",
"updated_at": "2024-01-25T10:30:00Z"
}
],
"total": 4231.50,
"partial_paid_amount": 0.00,
"due_amount": 4231.50,
"items": [
{
"id": 1,
"name": "Social Media Management",
"qty": 3,
"rate": 800.00,
"label": "Service"
},
{
"id": 2,
"name": "Content Creation",
"qty": 10,
"rate": 150.00,
"label": "Service"
},
{
"id": 3,
"name": "Analytics & Reporting",
"qty": 1,
"rate": 500.00,
"label": "Service"
}
],
"logo": {
"id": 101,
"url": "https://cdn.taskip.net/logos/company-logo.png",
"thumbnail": "https://cdn.taskip.net/logos/company-logo-thumb.png"
},
"signature": {
"id": 102,
"url": "https://cdn.taskip.net/signatures/signature.png",
"thumbnail": "https://cdn.taskip.net/signatures/signature-thumb.png"
},
"discount": 0,
"discount_type": "fixed",
"template": 1,
"payment_gateway": "stripe",
"payment_infos": [],
"status": "draft",
"publish": true,
"deleted_at": null,
"activities": [],
"reminders": {
"enabled": true,
"days_before": [7, 3, 1],
"template": "default"
},
"payable": {
"payable_amount": null,
"payable_amount_type": null,
"payment_type": "full-amount"
},
"recurring_payment": {
"is_payment_reccuring": false,
"payment_recurring_type": null,
"recurring_until": null
},
"created_by": {
"id": 1,
"name": "Admin User"
},
"updated_by": {
"id": 1,
"name": "Admin User"
},
"created_at": "2024-01-25T10:30:00Z",
"updated_at": "2024-01-25T11:15:00Z"
}
}
Update an Invoice
Update an existing invoice.
PUT /api/public-v1/invoice/{id}
Path Parameters
Parameter | Type | Required | Description |
---|---|---|---|
id | integer | Yes | Invoice ID to update |
Request Body
Field | Type | Required | Description |
---|---|---|---|
invoice.id | integer | Yes | Invoice ID (must exist) |
invoice.invoice_no | string | No | Invoice number (max 191 characters) |
invoice.contacts | integer | No | Contact ID (must exist in contacts) |
invoice.payment_gateway | string | No | Payment gateway (max 191 characters) |
invoice.template | integer | No | Template ID |
invoice.subject | string | No | Invoice subject (max 191 characters) |
invoice.issue_date | string | No | Issue date (YYYY-MM-DD) |
invoice.due_date | string | No | Due date (YYYY-MM-DD) |
invoice.currency | string | No | Currency code (3-digit ISO code, e.g., USD, EUR, GBP) |
invoice.items | array | No | Array of invoice items |
invoice.subtotal | decimal | No | Subtotal amount |
invoice.discount | decimal | No | Discount amount |
invoice.discount_type | string | No | Discount type ('percent' or 'fixed') |
invoice.tax | array | No | Array of tax IDs |
invoice.total | decimal | No | Total amount |
invoice.notes | array | No | Array of note objects |
invoice.recurring_payment | object | No | Recurring payment settings |
invoice.payable | object | No | Payable settings |
Note: You cannot update invoices that have been paid. Only draft and sent invoices can be modified.
Example Request
curl -X PUT "https://public-api.taskip.net/api/public-v1/invoice/157" \
-H "X-Secret-Key: your-secret-key-here" \
-H "Content-Type: application/json" \
-d '{
"due_date": "2024-03-01",
"notes": "Updated payment terms. Thank you for your business!",
"items": [
{
"id": 401,
"description": "Social Media Management (Updated)",
"quantity": 3,
"unit_price": 850.00
},
{
"id": 402,
"description": "Content Creation",
"quantity": 10,
"unit_price": 150.00
},
{
"description": "SEO Optimization",
"quantity": 2,
"unit_price": 400.00
}
]
}'
Example Response
{
"msg": "Invoice update success"
}
Delete an Invoice
Delete a specific invoice from your system.
DELETE /api/public-v1/invoice/{id}
Path Parameters
Parameter | Type | Required | Description |
---|---|---|---|
id | integer | Yes | Invoice ID to delete |
Warning: You cannot delete invoices that have been paid or partially paid. Only draft and sent invoices can be deleted.
Example Request
curl -X DELETE "https://public-api.taskip.net/api/public-v1/invoice/157" \
-H "X-Secret-Key: your-secret-key-here"
Example Response
{
"msg": "Invoice Deleted Successfully",
"status": 200
}
Bulk Actions on Invoices
Perform bulk operations on multiple invoices.
POST /api/public-v1/invoice/bulk-actions
Request Body
Field | Type | Required | Description |
---|---|---|---|
ids | array | Yes | Array of invoice IDs |
ids.* | integer | Yes | Each ID must be a valid integer |
action | integer | Yes | Action to perform (integer value) |
Available Actions
Action | Description | Additional Data |
---|---|---|
delete | Delete invoices | None |
send | Send invoices via email | email_template (optional) |
mark_sent | Mark as sent | None |
mark_paid | Mark as paid | payment_date , payment_method |
Example Request - Send Multiple Invoices
curl -X POST "https://public-api.taskip.net/api/public-v1/invoice/bulk-actions" \
-H "X-Secret-Key: your-secret-key-here" \
-H "Content-Type: application/json" \
-d '{
"invoice_ids": [155, 156, 158, 159],
"action": "send",
"data": {
"email_template": "default"
}
}'
Example Request - Mark as Paid
curl -X POST "https://public-api.taskip.net/api/public-v1/invoice/bulk-actions" \
-H "X-Secret-Key: your-secret-key-here" \
-H "Content-Type: application/json" \
-d '{
"invoice_ids": [160, 161, 162],
"action": "mark_paid",
"data": {
"payment_date": "2024-01-26",
"payment_method": "bank_transfer"
}
}'
Example Response
{
"msg": "Bulk action completed successfully"
}
Note: The response message and status code may vary based on the specific action performed.
Update Invoice Status
Update the status of a specific invoice.
POST /api/public-v1/invoice/{id}/status-update
Path Parameters
Parameter | Type | Required | Description |
---|---|---|---|
id | integer | Yes | Invoice ID |
Request Body
Field | Type | Required | Description |
---|---|---|---|
status | string | Yes | New status (draft , sent , paid , overdue , cancelled ) |
payment_date | string | No | Payment date (required for paid status) |
payment_method | string | No | Payment method (required for paid status) |
payment_amount | decimal | No | Payment amount (defaults to full amount) |
notes | string | No | Status update notes |
Example Request
curl -X POST "https://public-api.taskip.net/api/public-v1/invoice/157/status-update" \
-H "X-Secret-Key: your-secret-key-here" \
-H "Content-Type: application/json" \
-d '{
"status": "paid",
"payment_date": "2024-01-26",
"payment_method": "credit_card",
"payment_amount": 4611.25,
"notes": "Payment received via Stripe"
}'
Example Response (Status 201)
{
"message": "Status updated successfully",
"partial_paid_amount": 1000.00,
"due_amount": 3611.25,
"activities": [
{
"id": 1,
"action": "payment_received",
"amount": 1000.00,
"created_at": "2024-01-26T15:30:00Z"
}
]
}
Example Response (Other Status Codes)
"Status update failed"
Publish/Unpublish Invoice
Control the public visibility of an invoice.
POST /api/public-v1/invoice/publish/{id}
Path Parameters
Parameter | Type | Required | Description |
---|---|---|---|
id | integer | Yes | Invoice ID |
Request Body
Field | Type | Required | Description |
---|---|---|---|
published | boolean | Yes | Whether to publish (true) or unpublish (false) |
public_notes | string | No | Public notes visible to clients |
Example Request
curl -X POST "https://public-api.taskip.net/api/public-v1/invoice/publish/157" \
-H "X-Secret-Key: your-secret-key-here" \
-H "Content-Type: application/json" \
-d '{
"published": true,
"public_notes": "Please review and approve this invoice. Payment is due within 30 days."
}'
Example Response
{
"msg": "Invoice publish successfully",
"slug": "abc123def456"
}
Update Payment Gateway
Configure payment gateway settings for an invoice.
POST /api/public-v1/invoice/{id}/payment-gateway
Path Parameters
Parameter | Type | Required | Description |
---|---|---|---|
id | integer | Yes | Invoice ID |
Request Body
Field | Type | Required | Description |
---|---|---|---|
payment_gateway | string | Yes | Payment gateway (stripe , paypal , razor , manual , mollie , xendit , fastspring ) |
Gateway Settings
Stripe Settings
{
"collect_shipping_address": true,
"allow_payment_methods": ["card", "apple_pay", "google_pay"],
"success_url": "https://yoursite.com/payment/success",
"cancel_url": "https://yoursite.com/payment/cancel"
}
PayPal Settings
{
"business_email": "business@yourcompany.com",
"return_url": "https://yoursite.com/payment/return",
"cancel_url": "https://yoursite.com/payment/cancel"
}
Example Request
curl -X POST "https://public-api.taskip.net/api/public-v1/invoice/157/payment-gateway" \
-H "X-Secret-Key: your-secret-key-here" \
-H "Content-Type: application/json" \
-d '{
"payment_gateway": "stripe"
}'
Example Response
{
"msg": "Payment gateway updated successfully"
}
Set Up Recurring Payments
Configure recurring billing for an invoice.
POST /api/public-v1/invoice/{id}/recurring
Path Parameters
Parameter | Type | Required | Description |
---|---|---|---|
id | integer | Yes | Invoice ID |
Request Body
Field | Type | Required | Description |
---|---|---|---|
is_recurring | boolean | Yes | Enable/disable recurring billing |
frequency | string | No | Frequency (weekly , monthly , quarterly , yearly ) |
interval | integer | No | Interval (e.g., 2 for every 2 months) |
end_date | string | No | End date for recurring billing (YYYY-MM-DD) |
max_cycles | integer | No | Maximum number of billing cycles |
Example Request
curl -X POST "https://public-api.taskip.net/api/public-v1/invoice/157/recurring" \
-H "X-Secret-Key: your-secret-key-here" \
-H "Content-Type: application/json" \
-d '{
"is_recurring": true,
"frequency": "monthly",
"interval": 1,
"max_cycles": 12
}'
Example Response
{
"msg": "Recurring payment details updated."
}
Download Invoice PDF
Download a PDF version of an invoice.
GET /api/public-v1/invoice/{id}/download
Path Parameters
Parameter | Type | Required | Description |
---|---|---|---|
id | integer | Yes | Invoice ID |
Query Parameters
Parameter | Type | Required | Description |
---|---|---|---|
template | string | No | PDF template (default , minimal , detailed ) |
Example Request
curl -X GET "https://public-api.taskip.net/api/public-v1/invoice/157/download?template=detailed" \
-H "X-Secret-Key: your-secret-key-here" \
--output invoice-157.pdf
JavaScript Example
const response = await fetch('https://public-api.taskip.net/api/public-v1/invoice/157/download', {
method: 'GET',
headers: {
'X-Secret-Key': 'your-secret-key-here'
}
});
if (response.ok) {
const blob = await response.blob();
const url = window.URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = 'invoice-157.pdf';
a.click();
}
Response
Returns a PDF file with appropriate headers:
Content-Type: application/pdf
Content-Disposition: attachment; filename="INV-2024-157.pdf"
Content-Length: 85432
Send Invoice to Client
Send an invoice via email to the client.
POST /api/public-v1/invoice/sent/{id}
Path Parameters
Parameter | Type | Required | Description |
---|---|---|---|
id | integer | Yes | Invoice ID |
Request Body
Field | Type | Required | Description |
---|---|---|---|
email | string | No | Custom email address (defaults to client email) |
subject | string | No | Email subject line |
message | string | No | Custom email message |
template | string | No | Email template (default , reminder , overdue ) |
attach_pdf | boolean | No | Attach PDF to email (default: true) |
send_copy_to_self | boolean | No | Send copy to sender (default: false) |
Example Request
curl -X POST "https://public-api.taskip.net/api/public-v1/invoice/sent/157" \
-H "X-Secret-Key: your-secret-key-here" \
-H "Content-Type: application/json" \
-d '{
"subject": "Invoice INV-2024-157 - Q1 Marketing Services",
"message": "Dear Client,\n\nPlease find attached your invoice for Q1 marketing services. Payment is due within 30 days.\n\nBest regards,\nYour Marketing Team",
"template": "default",
"attach_pdf": true,
"send_copy_to_self": true
}'
Example Response
{
"msg": "Invoice Sent Successfully"
}
Note: The status code will vary based on the success of the operation.
Error Responses
Common Error Codes
Status Code | Error Type | Description |
---|---|---|
400 | Bad Request | Invalid request data or missing required fields |
401 | Unauthorized | Invalid or missing X-Secret-Key |
403 | Forbidden | Operation not allowed (e.g., updating paid invoice) |
404 | Not Found | Invoice not found |
422 | Validation Error | Request data failed validation |
429 | Too Many Requests | Rate limit exceeded |
Example Error Response
{
"success": false,
"error": "Validation Error",
"message": "The given data was invalid",
"errors": {
"due_date": ["The due date must be a date after today."],
"items": ["At least one invoice item is required."],
"items.0.unit_price": ["The unit price must be greater than 0."]
},
"status_code": 422
}
Response Schemas
Invoice Object
{
"id": "integer",
"invoice_no": "string",
"generatedId": "string",
"slug": "string|null",
"folder": "object|null",
"company": "object",
"contacts": "object",
"contact_id": "integer",
"subject": "string",
"issue_date": "string (YYYY-MM-DD)",
"due_date": "string (YYYY-MM-DD)",
"currency": "string",
"subtotal": "decimal",
"tax": "array",
"currentNote": "object",
"notes": "array",
"total": "decimal",
"partial_paid_amount": "decimal",
"due_amount": "decimal",
"items": "array",
"logo": "object|null",
"signature": "object|null",
"discount": "decimal",
"discount_type": "string",
"template": "integer",
"payment_gateway": "string",
"payment_infos": "array",
"status": "string",
"publish": "boolean",
"deleted_at": "string|null",
"activities": "array",
"reminders": "object",
"payable": "object",
"recurring_payment": "object",
"created_by": "object",
"updated_by": "object",
"created_at": "string (ISO 8601)",
"updated_at": "string (ISO 8601)"
}
Company Object
{
"id": "integer",
"name": "string",
"email": "string"
}
Contact Object
{
"id": "integer",
"first_name": "string",
"last_name": "string",
"email": "string"
}
Invoice Item Object
{
"id": "integer",
"name": "string",
"qty": "decimal",
"rate": "decimal",
"label": "string"
}
Tax Object
{
"id": "integer",
"name": "string",
"rate": "decimal",
"amount": "decimal"
}
Media Object
{
"id": "integer",
"url": "string",
"thumbnail": "string"
}
Payable Object
{
"payable_amount": "decimal|null",
"payable_amount_type": "string|null",
"payment_type": "string"
}
Recurring Payment Object
{
"is_payment_reccuring": "boolean",
"payment_recurring_type": "string|null",
"recurring_until": "string|null"
}
Best Practices
Invoice Management
- Unique Numbers: Use sequential or formatted invoice numbers
- Clear Descriptions: Provide detailed item descriptions
- Payment Terms: Set clear payment terms and due dates
- Regular Follow-ups: Use status tracking for overdue invoices
Automation
- Recurring Billing: Set up automated recurring invoices for subscriptions
- Payment Reminders: Use bulk actions for payment reminders
- Gateway Integration: Configure payment gateways for easy client payments
- PDF Generation: Provide professional PDF invoices
Tip: Use the summary data in the GET /invoice endpoint to track your business financial metrics. The response includes total amounts, paid amounts, and outstanding balances for better financial oversight.