Invoice Management

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

MethodEndpointDescription
GET/api/public-v1/invoiceGet all invoices
POST/api/public-v1/invoiceCreate 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-actionsBulk operations on invoices
POST/api/public-v1/invoice/{id}/status-updateUpdate invoice status
POST/api/public-v1/invoice/publish/{id}Publish/unpublish invoice
POST/api/public-v1/invoice/{id}/payment-gatewayUpdate payment gateway
POST/api/public-v1/invoice/{id}/recurringSet up recurring payments
GET/api/public-v1/invoice/{id}/downloadDownload 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

ParameterTypeRequiredDescription
pageintegerNoPage number for pagination (default: 1)
limitintegerNoNumber of invoices per page (default: 50)
searchstringNoSearch term for invoice number or client
statusstringNoFilter by status (draft, sent, paid, overdue, cancelled)
client_idintegerNoFilter by client/contact ID
date_fromstringNoFilter by date range (start date, YYYY-MM-DD)
date_tostringNoFilter by date range (end date, YYYY-MM-DD)
sortstringNoSort field (invoice_number, amount, date, due_date)
orderstringNoSort 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

FieldTypeRequiredDescription
invoice_nostringYesInvoice number (must be unique)
contact_idintegerYesContact ID (must exist in contacts table)
project_idstringNoProject ID (nullable)
subjectstringYesInvoice subject (max 191 characters)
issue_datestringNoIssue date (YYYY-MM-DD, nullable)
due_datestringNoDue date (YYYY-MM-DD, nullable)
currencystringYesCurrency code (3-digit ISO code, e.g., USD, EUR, GBP)
subtotalintegerNoSubtotal amount in cents (nullable)
discountdoubleNoDiscount amount (nullable)
discount_typestringNoDiscount type (nullable)
totalintegerNoTotal amount in cents (nullable)
itemsstringNoJSON string of invoice items (nullable)
logointegerNoLogo media ID (nullable)
signatureintegerNoSignature media ID (nullable)
termsstringNoInvoice terms (nullable)
statusstringNoStatus (draft or publish)

Invoice Item Object (for items JSON string)

FieldTypeRequiredDescription
namestringYesItem name/description
qtydecimalYesItem quantity
ratedecimalYesPrice per unit
labelstringNoItem 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

ParameterTypeRequiredDescription
idintegerYesInvoice 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

ParameterTypeRequiredDescription
idintegerYesInvoice ID to update

Request Body

FieldTypeRequiredDescription
invoice.idintegerYesInvoice ID (must exist)
invoice.invoice_nostringNoInvoice number (max 191 characters)
invoice.contactsintegerNoContact ID (must exist in contacts)
invoice.payment_gatewaystringNoPayment gateway (max 191 characters)
invoice.templateintegerNoTemplate ID
invoice.subjectstringNoInvoice subject (max 191 characters)
invoice.issue_datestringNoIssue date (YYYY-MM-DD)
invoice.due_datestringNoDue date (YYYY-MM-DD)
invoice.currencystringNoCurrency code (3-digit ISO code, e.g., USD, EUR, GBP)
invoice.itemsarrayNoArray of invoice items
invoice.subtotaldecimalNoSubtotal amount
invoice.discountdecimalNoDiscount amount
invoice.discount_typestringNoDiscount type ('percent' or 'fixed')
invoice.taxarrayNoArray of tax IDs
invoice.totaldecimalNoTotal amount
invoice.notesarrayNoArray of note objects
invoice.recurring_paymentobjectNoRecurring payment settings
invoice.payableobjectNoPayable 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

ParameterTypeRequiredDescription
idintegerYesInvoice 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

FieldTypeRequiredDescription
idsarrayYesArray of invoice IDs
ids.*integerYesEach ID must be a valid integer
actionintegerYesAction to perform (integer value)

Available Actions

ActionDescriptionAdditional Data
deleteDelete invoicesNone
sendSend invoices via emailemail_template (optional)
mark_sentMark as sentNone
mark_paidMark as paidpayment_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

ParameterTypeRequiredDescription
idintegerYesInvoice ID

Request Body

FieldTypeRequiredDescription
statusstringYesNew status (draft, sent, paid, overdue, cancelled)
payment_datestringNoPayment date (required for paid status)
payment_methodstringNoPayment method (required for paid status)
payment_amountdecimalNoPayment amount (defaults to full amount)
notesstringNoStatus 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

ParameterTypeRequiredDescription
idintegerYesInvoice ID

Request Body

FieldTypeRequiredDescription
publishedbooleanYesWhether to publish (true) or unpublish (false)
public_notesstringNoPublic 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

ParameterTypeRequiredDescription
idintegerYesInvoice ID

Request Body

FieldTypeRequiredDescription
payment_gatewaystringYesPayment 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

ParameterTypeRequiredDescription
idintegerYesInvoice ID

Request Body

FieldTypeRequiredDescription
is_recurringbooleanYesEnable/disable recurring billing
frequencystringNoFrequency (weekly, monthly, quarterly, yearly)
intervalintegerNoInterval (e.g., 2 for every 2 months)
end_datestringNoEnd date for recurring billing (YYYY-MM-DD)
max_cyclesintegerNoMaximum 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

ParameterTypeRequiredDescription
idintegerYesInvoice ID

Query Parameters

ParameterTypeRequiredDescription
templatestringNoPDF 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

ParameterTypeRequiredDescription
idintegerYesInvoice ID

Request Body

FieldTypeRequiredDescription
emailstringNoCustom email address (defaults to client email)
subjectstringNoEmail subject line
messagestringNoCustom email message
templatestringNoEmail template (default, reminder, overdue)
attach_pdfbooleanNoAttach PDF to email (default: true)
send_copy_to_selfbooleanNoSend 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 CodeError TypeDescription
400Bad RequestInvalid request data or missing required fields
401UnauthorizedInvalid or missing X-Secret-Key
403ForbiddenOperation not allowed (e.g., updating paid invoice)
404Not FoundInvoice not found
422Validation ErrorRequest data failed validation
429Too Many RequestsRate 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

  1. Unique Numbers: Use sequential or formatted invoice numbers
  2. Clear Descriptions: Provide detailed item descriptions
  3. Payment Terms: Set clear payment terms and due dates
  4. Regular Follow-ups: Use status tracking for overdue invoices

Automation

  1. Recurring Billing: Set up automated recurring invoices for subscriptions
  2. Payment Reminders: Use bulk actions for payment reminders
  3. Gateway Integration: Configure payment gateways for easy client payments
  4. 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.