> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://beta-docs.payabli.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://beta-docs.payabli.com/_mcp/server.

# Manage invoices

In Payabli, invoices are what you send to customers when you expect payment. You can use Payabli's invoicing APIs to send basic invoices or invoices with detailed descriptions, order quantities, and payment terms.

This guide covers the key operations for managing invoices through the API.

## Considerations

When working with invoices, keep the following in mind:

* Invoices are always linked to a customer. If you don't include a `customerId` and the `customerData` fields don't match an existing customer, Payabli creates a new customer.
* Payabli *strongly recommends* creating the customer first and passing the `customerId` in the customerData object.
* Invoice numbers must be unique within an paypoint.
* Invoices can be one-time or recurring.
* You can attach a PDF version of an invoice when sending via email using the `attachfile=true` parameter.

## Create an invoice

Send a POST request to `/api/Invoice/{entry}` to create a new invoice. See the [API reference](/api-reference/invoice/add-invoice) for this endpoint for full documentation.

### Request

POST [https://api-sandbox.payabli.com/api/Invoice/\{entry}](https://api-sandbox.payabli.com/api/Invoice/\{entry})

**`AddInvoice`**

```curl AddInvoice
curl -X POST https://api-sandbox.payabli.com/api/Invoice/8cfec329267 \
     -H "requestToken: <apiKey>" \
     -H "Content-Type: application/json" \
     -d '{
  "customerData": {
    "customerNumber": "3",
    "firstName": "Tamara",
    "lastName": "Bagratoni"
  },
  "invoiceData": {
    "discount": 10,
    "frequency": "one-time",
    "invoiceAmount": 982.37,
    "invoiceDate": "2025-10-19",
    "invoiceNumber": "INV-3",
    "invoiceStatus": 1,
    "invoiceType": 0,
    "items": [
      {
        "itemCost": 100,
        "itemDescription": "Consultation for Georgian tours",
        "itemMode": 1,
        "itemProductName": "Adventure Consult",
        "itemQty": 1
      },
      {
        "itemCost": 882.37,
        "itemDescription": "Deposit for trip planning",
        "itemProductName": "Deposit ",
        "itemQty": 1
      }
    ]
  }
}'
```

**`AddInvoice`**

```python AddInvoice
import requests

url = "https://api-sandbox.payabli.com/api/Invoice/8cfec329267"

payload = {
    "customerData": {
        "customerNumber": "3",
        "firstName": "Tamara",
        "lastName": "Bagratoni"
    },
    "invoiceData": {
        "discount": 10,
        "frequency": "one-time",
        "invoiceAmount": 982.37,
        "invoiceDate": "2025-10-19",
        "invoiceNumber": "INV-3",
        "invoiceStatus": 1,
        "invoiceType": 0,
        "items": [
            {
                "itemCost": 100,
                "itemDescription": "Consultation for Georgian tours",
                "itemMode": 1,
                "itemProductName": "Adventure Consult",
                "itemQty": 1
            },
            {
                "itemCost": 882.37,
                "itemDescription": "Deposit for trip planning",
                "itemProductName": "Deposit ",
                "itemQty": 1
            }
        ]
    }
}
headers = {
    "requestToken": "<apiKey>",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

**`AddInvoice`**

```javascript AddInvoice
const url = 'https://api-sandbox.payabli.com/api/Invoice/8cfec329267';
const options = {
  method: 'POST',
  headers: {requestToken: '<apiKey>', 'Content-Type': 'application/json'},
  body: '{"customerData":{"customerNumber":"3","firstName":"Tamara","lastName":"Bagratoni"},"invoiceData":{"discount":10,"frequency":"one-time","invoiceAmount":982.37,"invoiceDate":"2025-10-19","invoiceNumber":"INV-3","invoiceStatus":1,"invoiceType":0,"items":[{"itemCost":100,"itemDescription":"Consultation for Georgian tours","itemMode":1,"itemProductName":"Adventure Consult","itemQty":1},{"itemCost":882.37,"itemDescription":"Deposit for trip planning","itemProductName":"Deposit ","itemQty":1}]}}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

**`AddInvoice`**

```go AddInvoice
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api-sandbox.payabli.com/api/Invoice/8cfec329267"

	payload := strings.NewReader("{\n  \"customerData\": {\n    \"customerNumber\": \"3\",\n    \"firstName\": \"Tamara\",\n    \"lastName\": \"Bagratoni\"\n  },\n  \"invoiceData\": {\n    \"discount\": 10,\n    \"frequency\": \"one-time\",\n    \"invoiceAmount\": 982.37,\n    \"invoiceDate\": \"2025-10-19\",\n    \"invoiceNumber\": \"INV-3\",\n    \"invoiceStatus\": 1,\n    \"invoiceType\": 0,\n    \"items\": [\n      {\n        \"itemCost\": 100,\n        \"itemDescription\": \"Consultation for Georgian tours\",\n        \"itemMode\": 1,\n        \"itemProductName\": \"Adventure Consult\",\n        \"itemQty\": 1\n      },\n      {\n        \"itemCost\": 882.37,\n        \"itemDescription\": \"Deposit for trip planning\",\n        \"itemProductName\": \"Deposit \",\n        \"itemQty\": 1\n      }\n    ]\n  }\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("requestToken", "<apiKey>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

**`AddInvoice`**

```ruby AddInvoice
require 'uri'
require 'net/http'

url = URI("https://api-sandbox.payabli.com/api/Invoice/8cfec329267")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["requestToken"] = '<apiKey>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"customerData\": {\n    \"customerNumber\": \"3\",\n    \"firstName\": \"Tamara\",\n    \"lastName\": \"Bagratoni\"\n  },\n  \"invoiceData\": {\n    \"discount\": 10,\n    \"frequency\": \"one-time\",\n    \"invoiceAmount\": 982.37,\n    \"invoiceDate\": \"2025-10-19\",\n    \"invoiceNumber\": \"INV-3\",\n    \"invoiceStatus\": 1,\n    \"invoiceType\": 0,\n    \"items\": [\n      {\n        \"itemCost\": 100,\n        \"itemDescription\": \"Consultation for Georgian tours\",\n        \"itemMode\": 1,\n        \"itemProductName\": \"Adventure Consult\",\n        \"itemQty\": 1\n      },\n      {\n        \"itemCost\": 882.37,\n        \"itemDescription\": \"Deposit for trip planning\",\n        \"itemProductName\": \"Deposit \",\n        \"itemQty\": 1\n      }\n    ]\n  }\n}"

response = http.request(request)
puts response.read_body
```

**`AddInvoice`**

```java AddInvoice
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://api-sandbox.payabli.com/api/Invoice/8cfec329267")
  .header("requestToken", "<apiKey>")
  .header("Content-Type", "application/json")
  .body("{\n  \"customerData\": {\n    \"customerNumber\": \"3\",\n    \"firstName\": \"Tamara\",\n    \"lastName\": \"Bagratoni\"\n  },\n  \"invoiceData\": {\n    \"discount\": 10,\n    \"frequency\": \"one-time\",\n    \"invoiceAmount\": 982.37,\n    \"invoiceDate\": \"2025-10-19\",\n    \"invoiceNumber\": \"INV-3\",\n    \"invoiceStatus\": 1,\n    \"invoiceType\": 0,\n    \"items\": [\n      {\n        \"itemCost\": 100,\n        \"itemDescription\": \"Consultation for Georgian tours\",\n        \"itemMode\": 1,\n        \"itemProductName\": \"Adventure Consult\",\n        \"itemQty\": 1\n      },\n      {\n        \"itemCost\": 882.37,\n        \"itemDescription\": \"Deposit for trip planning\",\n        \"itemProductName\": \"Deposit \",\n        \"itemQty\": 1\n      }\n    ]\n  }\n}")
  .asString();
```

**`AddInvoice`**

```php AddInvoice
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api-sandbox.payabli.com/api/Invoice/8cfec329267', [
  'body' => '{
  "customerData": {
    "customerNumber": "3",
    "firstName": "Tamara",
    "lastName": "Bagratoni"
  },
  "invoiceData": {
    "discount": 10,
    "frequency": "one-time",
    "invoiceAmount": 982.37,
    "invoiceDate": "2025-10-19",
    "invoiceNumber": "INV-3",
    "invoiceStatus": 1,
    "invoiceType": 0,
    "items": [
      {
        "itemCost": 100,
        "itemDescription": "Consultation for Georgian tours",
        "itemMode": 1,
        "itemProductName": "Adventure Consult",
        "itemQty": 1
      },
      {
        "itemCost": 882.37,
        "itemDescription": "Deposit for trip planning",
        "itemProductName": "Deposit ",
        "itemQty": 1
      }
    ]
  }
}',
  'headers' => [
    'Content-Type' => 'application/json',
    'requestToken' => '<apiKey>',
  ],
]);

echo $response->getBody();
```

**`AddInvoice`**

```csharp AddInvoice
using RestSharp;

var client = new RestClient("https://api-sandbox.payabli.com/api/Invoice/8cfec329267");
var request = new RestRequest(Method.POST);
request.AddHeader("requestToken", "<apiKey>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"customerData\": {\n    \"customerNumber\": \"3\",\n    \"firstName\": \"Tamara\",\n    \"lastName\": \"Bagratoni\"\n  },\n  \"invoiceData\": {\n    \"discount\": 10,\n    \"frequency\": \"one-time\",\n    \"invoiceAmount\": 982.37,\n    \"invoiceDate\": \"2025-10-19\",\n    \"invoiceNumber\": \"INV-3\",\n    \"invoiceStatus\": 1,\n    \"invoiceType\": 0,\n    \"items\": [\n      {\n        \"itemCost\": 100,\n        \"itemDescription\": \"Consultation for Georgian tours\",\n        \"itemMode\": 1,\n        \"itemProductName\": \"Adventure Consult\",\n        \"itemQty\": 1\n      },\n      {\n        \"itemCost\": 882.37,\n        \"itemDescription\": \"Deposit for trip planning\",\n        \"itemProductName\": \"Deposit \",\n        \"itemQty\": 1\n      }\n    ]\n  }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

**`AddInvoice`**

```swift AddInvoice
import Foundation

let headers = [
  "requestToken": "<apiKey>",
  "Content-Type": "application/json"
]
let parameters = [
  "customerData": [
    "customerNumber": "3",
    "firstName": "Tamara",
    "lastName": "Bagratoni"
  ],
  "invoiceData": [
    "discount": 10,
    "frequency": "one-time",
    "invoiceAmount": 982.37,
    "invoiceDate": "2025-10-19",
    "invoiceNumber": "INV-3",
    "invoiceStatus": 1,
    "invoiceType": 0,
    "items": [
      [
        "itemCost": 100,
        "itemDescription": "Consultation for Georgian tours",
        "itemMode": 1,
        "itemProductName": "Adventure Consult",
        "itemQty": 1
      ],
      [
        "itemCost": 882.37,
        "itemDescription": "Deposit for trip planning",
        "itemProductName": "Deposit ",
        "itemQty": 1
      ]
    ]
  ]
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api-sandbox.payabli.com/api/Invoice/8cfec329267")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

A successful request sends a 200 response with a JSON body that contains the invoice ID.

### Response (200)

```json
{
  "isSuccess": true,
  "responseCode": 1,
  "responseData": 3625,
  "responseText": "Success"
}
```

## Update an invoice

Send a PUT request to `/api/Invoice/{idInvoice}` to change an existing invoice's details such as amount, items, or status. See the [API reference](/api-reference/invoice/update-invoice) for this endpoint for full documentation.

### Request

PUT [https://api-sandbox.payabli.com/api/Invoice/\{idInvoice}](https://api-sandbox.payabli.com/api/Invoice/\{idInvoice})

**`UpdateInvoice`**

```curl UpdateInvoice
curl -X PUT https://api-sandbox.payabli.com/api/Invoice/332 \
     -H "requestToken: <apiKey>" \
     -H "Content-Type: application/json" \
     -d '{
  "invoiceData": {
    "invoiceAmount": 982.37,
    "invoiceDate": "2025-10-19",
    "invoiceNumber": "INV-6",
    "items": [
      {
        "itemCost": 882.37,
        "itemDescription": "Deposit for trip planning",
        "itemProductName": "Deposit",
        "itemQty": 1
      }
    ]
  }
}'
```

**`UpdateInvoice`**

```python UpdateInvoice
import requests

url = "https://api-sandbox.payabli.com/api/Invoice/332"

payload = { "invoiceData": {
        "invoiceAmount": 982.37,
        "invoiceDate": "2025-10-19",
        "invoiceNumber": "INV-6",
        "items": [
            {
                "itemCost": 882.37,
                "itemDescription": "Deposit for trip planning",
                "itemProductName": "Deposit",
                "itemQty": 1
            }
        ]
    } }
headers = {
    "requestToken": "<apiKey>",
    "Content-Type": "application/json"
}

response = requests.put(url, json=payload, headers=headers)

print(response.json())
```

**`UpdateInvoice`**

```javascript UpdateInvoice
const url = 'https://api-sandbox.payabli.com/api/Invoice/332';
const options = {
  method: 'PUT',
  headers: {requestToken: '<apiKey>', 'Content-Type': 'application/json'},
  body: '{"invoiceData":{"invoiceAmount":982.37,"invoiceDate":"2025-10-19","invoiceNumber":"INV-6","items":[{"itemCost":882.37,"itemDescription":"Deposit for trip planning","itemProductName":"Deposit","itemQty":1}]}}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

**`UpdateInvoice`**

```go UpdateInvoice
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://api-sandbox.payabli.com/api/Invoice/332"

	payload := strings.NewReader("{\n  \"invoiceData\": {\n    \"invoiceAmount\": 982.37,\n    \"invoiceDate\": \"2025-10-19\",\n    \"invoiceNumber\": \"INV-6\",\n    \"items\": [\n      {\n        \"itemCost\": 882.37,\n        \"itemDescription\": \"Deposit for trip planning\",\n        \"itemProductName\": \"Deposit\",\n        \"itemQty\": 1\n      }\n    ]\n  }\n}")

	req, _ := http.NewRequest("PUT", url, payload)

	req.Header.Add("requestToken", "<apiKey>")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

**`UpdateInvoice`**

```ruby UpdateInvoice
require 'uri'
require 'net/http'

url = URI("https://api-sandbox.payabli.com/api/Invoice/332")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Put.new(url)
request["requestToken"] = '<apiKey>'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"invoiceData\": {\n    \"invoiceAmount\": 982.37,\n    \"invoiceDate\": \"2025-10-19\",\n    \"invoiceNumber\": \"INV-6\",\n    \"items\": [\n      {\n        \"itemCost\": 882.37,\n        \"itemDescription\": \"Deposit for trip planning\",\n        \"itemProductName\": \"Deposit\",\n        \"itemQty\": 1\n      }\n    ]\n  }\n}"

response = http.request(request)
puts response.read_body
```

**`UpdateInvoice`**

```java UpdateInvoice
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.put("https://api-sandbox.payabli.com/api/Invoice/332")
  .header("requestToken", "<apiKey>")
  .header("Content-Type", "application/json")
  .body("{\n  \"invoiceData\": {\n    \"invoiceAmount\": 982.37,\n    \"invoiceDate\": \"2025-10-19\",\n    \"invoiceNumber\": \"INV-6\",\n    \"items\": [\n      {\n        \"itemCost\": 882.37,\n        \"itemDescription\": \"Deposit for trip planning\",\n        \"itemProductName\": \"Deposit\",\n        \"itemQty\": 1\n      }\n    ]\n  }\n}")
  .asString();
```

**`UpdateInvoice`**

```php UpdateInvoice
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('PUT', 'https://api-sandbox.payabli.com/api/Invoice/332', [
  'body' => '{
  "invoiceData": {
    "invoiceAmount": 982.37,
    "invoiceDate": "2025-10-19",
    "invoiceNumber": "INV-6",
    "items": [
      {
        "itemCost": 882.37,
        "itemDescription": "Deposit for trip planning",
        "itemProductName": "Deposit",
        "itemQty": 1
      }
    ]
  }
}',
  'headers' => [
    'Content-Type' => 'application/json',
    'requestToken' => '<apiKey>',
  ],
]);

echo $response->getBody();
```

**`UpdateInvoice`**

```csharp UpdateInvoice
using RestSharp;

var client = new RestClient("https://api-sandbox.payabli.com/api/Invoice/332");
var request = new RestRequest(Method.PUT);
request.AddHeader("requestToken", "<apiKey>");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"invoiceData\": {\n    \"invoiceAmount\": 982.37,\n    \"invoiceDate\": \"2025-10-19\",\n    \"invoiceNumber\": \"INV-6\",\n    \"items\": [\n      {\n        \"itemCost\": 882.37,\n        \"itemDescription\": \"Deposit for trip planning\",\n        \"itemProductName\": \"Deposit\",\n        \"itemQty\": 1\n      }\n    ]\n  }\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

**`UpdateInvoice`**

```swift UpdateInvoice
import Foundation

let headers = [
  "requestToken": "<apiKey>",
  "Content-Type": "application/json"
]
let parameters = ["invoiceData": [
    "invoiceAmount": 982.37,
    "invoiceDate": "2025-10-19",
    "invoiceNumber": "INV-6",
    "items": [
      [
        "itemCost": 882.37,
        "itemDescription": "Deposit for trip planning",
        "itemProductName": "Deposit",
        "itemQty": 1
      ]
    ]
  ]] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://api-sandbox.payabli.com/api/Invoice/332")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "PUT"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

A successful request sends a 200 response with a JSON body, exactly like the one in the create an invoice example.

## Get invoice details

Send a GET request to `/api/Invoice/{idInvoice}` to retrieve details about a specific invoice. See the [API reference](/api-reference/invoice/get-invoice) for this endpoint for full documentation.

This example gets details for the invoice with ID `332`.

### Request

GET [https://api-sandbox.payabli.com/api/Invoice/\{idInvoice}](https://api-sandbox.payabli.com/api/Invoice/\{idInvoice})

**`GetDetails`**

```curl GetDetails
curl https://api-sandbox.payabli.com/api/Invoice/23548884 \
     -H "requestToken: <apiKey>"
```

**`GetDetails`**

```python GetDetails
import requests

url = "https://api-sandbox.payabli.com/api/Invoice/23548884"

headers = {"requestToken": "<apiKey>"}

response = requests.get(url, headers=headers)

print(response.json())
```

**`GetDetails`**

```javascript GetDetails
const url = 'https://api-sandbox.payabli.com/api/Invoice/23548884';
const options = {method: 'GET', headers: {requestToken: '<apiKey>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

**`GetDetails`**

```go GetDetails
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://api-sandbox.payabli.com/api/Invoice/23548884"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("requestToken", "<apiKey>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

**`GetDetails`**

```ruby GetDetails
require 'uri'
require 'net/http'

url = URI("https://api-sandbox.payabli.com/api/Invoice/23548884")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["requestToken"] = '<apiKey>'

response = http.request(request)
puts response.read_body
```

**`GetDetails`**

```java GetDetails
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://api-sandbox.payabli.com/api/Invoice/23548884")
  .header("requestToken", "<apiKey>")
  .asString();
```

**`GetDetails`**

```php GetDetails
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://api-sandbox.payabli.com/api/Invoice/23548884', [
  'headers' => [
    'requestToken' => '<apiKey>',
  ],
]);

echo $response->getBody();
```

**`GetDetails`**

```csharp GetDetails
using RestSharp;

var client = new RestClient("https://api-sandbox.payabli.com/api/Invoice/23548884");
var request = new RestRequest(Method.GET);
request.AddHeader("requestToken", "<apiKey>");
IRestResponse response = client.Execute(request);
```

**`GetDetails`**

```swift GetDetails
import Foundation

let headers = ["requestToken": "<apiKey>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://api-sandbox.payabli.com/api/Invoice/23548884")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

A successful request sends a 200 response that contains the invoice details.

### Response (200)

```json
{
  "AdditionalData": "AdditionalData",
  "billEvents": [
    {
      "description": "TransferCreated",
      "eventTime": "2023-07-05T22:31:06Z",
      "extraData": {
        "key": "value"
      },
      "refData": "refData",
      "source": "api"
    }
  ],
  "company": "company",
  "createdAt": "2022-07-01T15:00:01Z",
  "customer": {
    "AdditionalData": "AdditionalData",
    "BillingAddress1": "1111 West 1st Street",
    "BillingAddress2": "Suite 200",
    "BillingCity": "Miami",
    "BillingCountry": "US",
    "BillingEmail": "example@email.com",
    "BillingPhone": "5555555555",
    "BillingState": "FL",
    "BillingZip": "45567",
    "CompanyName": "Sunshine LLC",
    "CreatedAt": "2022-07-01T15:00:01Z",
    "customerId": 4440,
    "CustomerId": 4440,
    "CustomerNumber": "3456-7645A",
    "customerStatus": 1,
    "FirstName": "John",
    "Identifiers": [
      "\\\"firstname\\\"",
      "\\\"lastname\\\"",
      "\\\"email\\\"",
      "\\\"customId\\\""
    ],
    "LastName": "Doe",
    "ShippingAddress1": "123 Walnut St",
    "ShippingAddress2": "STE 900",
    "ShippingCity": "Johnson City",
    "ShippingCountry": "US",
    "ShippingState": "TN",
    "ShippingZip": "37619"
  },
  "customerId": 4440,
  "discount": 10,
  "documentsRef": {
    "filelist": [
      {}
    ],
    "zipfile": "zx45.zip"
  },
  "dutyAmount": 0,
  "firstName": "firstName",
  "freightAmount": 10,
  "frequency": "frequency",
  "invoiceAmount": 105,
  "invoiceDate": "2025-07-01",
  "invoiceDueDate": "2025-07-01",
  "invoiceEndDate": "2025-07-01",
  "invoiceId": 236,
  "invoiceNumber": "INV-2345",
  "invoicePaidAmount": 0,
  "invoiceSentDate": "2025-10-19T00:00:00Z",
  "invoiceStatus": 1,
  "invoiceType": 0,
  "items": [
    {
      "itemCost": 5,
      "itemCommodityCode": "010",
      "itemDescription": "Deposit for materials.",
      "itemMode": 0,
      "itemProductCode": "M-DEPOSIT",
      "itemProductName": "Materials deposit",
      "itemQty": 1,
      "itemTaxAmount": 7,
      "itemTaxRate": 0.075,
      "itemTotalAmount": 1.1,
      "itemUnitOfMeasure": "SqFt"
    }
  ],
  "lastName": "lastName",
  "lastPaymentDate": "2025-10-19T00:00:00Z",
  "notes": "notes",
  "parentOrgName": "parentOrgName",
  "paylinkId": "paylinkId",
  "paymentTerms": "NET30",
  "paypointDbaname": "paypointDbaname",
  "paypointEntryname": "paypointEntryname",
  "paypointId": 56,
  "paypointLegalname": "paypointLegalname",
  "purchaseOrder": "PO-345",
  "scheduledOptions": {
    "includePaylink": true,
    "includePdf": true
  },
  "shippingAddress1": "123 Walnut St",
  "shippingAddress2": "STE 900",
  "shippingCity": "Johnson City",
  "shippingCountry": "US",
  "shippingEmail": "example@email.com",
  "shippingFromZip": "30040",
  "shippingPhone": "shippingPhone",
  "shippingState": "TN",
  "shippingZip": "37619",
  "summaryCommodityCode": "501718",
  "tax": 2.05,
  "termsConditions": "termsConditions"
}
```

## Delete an invoice

Send a DELETE request to `/api/Invoice/{idInvoice}` to delete an invoice. See the [API reference](/api-reference/invoice/delete-invoice) for this endpoint for full documentation.

This example deletes the invoice with ID `332`.

### Request

DELETE [https://api-sandbox.payabli.com/api/Invoice/\{idInvoice}](https://api-sandbox.payabli.com/api/Invoice/\{idInvoice})

**`DeleteInvoice`**

```curl DeleteInvoice
curl -X DELETE https://api-sandbox.payabli.com/api/Invoice/23548884 \
     -H "requestToken: <apiKey>"
```

**`DeleteInvoice`**

```python DeleteInvoice
import requests

url = "https://api-sandbox.payabli.com/api/Invoice/23548884"

headers = {"requestToken": "<apiKey>"}

response = requests.delete(url, headers=headers)

print(response.json())
```

**`DeleteInvoice`**

```javascript DeleteInvoice
const url = 'https://api-sandbox.payabli.com/api/Invoice/23548884';
const options = {method: 'DELETE', headers: {requestToken: '<apiKey>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

**`DeleteInvoice`**

```go DeleteInvoice
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://api-sandbox.payabli.com/api/Invoice/23548884"

	req, _ := http.NewRequest("DELETE", url, nil)

	req.Header.Add("requestToken", "<apiKey>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

**`DeleteInvoice`**

```ruby DeleteInvoice
require 'uri'
require 'net/http'

url = URI("https://api-sandbox.payabli.com/api/Invoice/23548884")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Delete.new(url)
request["requestToken"] = '<apiKey>'

response = http.request(request)
puts response.read_body
```

**`DeleteInvoice`**

```java DeleteInvoice
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.delete("https://api-sandbox.payabli.com/api/Invoice/23548884")
  .header("requestToken", "<apiKey>")
  .asString();
```

**`DeleteInvoice`**

```php DeleteInvoice
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('DELETE', 'https://api-sandbox.payabli.com/api/Invoice/23548884', [
  'headers' => [
    'requestToken' => '<apiKey>',
  ],
]);

echo $response->getBody();
```

**`DeleteInvoice`**

```csharp DeleteInvoice
using RestSharp;

var client = new RestClient("https://api-sandbox.payabli.com/api/Invoice/23548884");
var request = new RestRequest(Method.DELETE);
request.AddHeader("requestToken", "<apiKey>");
IRestResponse response = client.Execute(request);
```

**`DeleteInvoice`**

```swift DeleteInvoice
import Foundation

let headers = ["requestToken": "<apiKey>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://api-sandbox.payabli.com/api/Invoice/23548884")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "DELETE"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

A successful request sends a 200 response with a JSON body.

### Response (200)

```json
{
  "isSuccess": true,
  "responseCode": 1,
  "responseData": 3625,
  "responseText": "Success"
}
```

## Email an invoice

Send a GET request to `/api/Invoice/send/{idInvoice}` to email an invoice to a customer. See the [API reference](/api-reference/invoice/send-invoice-via-email) for this endpoint for full documentation.

> **Note**
>
> Before you get started, you need the `IdInvoice` value returned in the response when you created the invoice and the customer email address.

This example emails the invoice with ID 332 to `tamara@example.com`, and attaches a PDF copy of the invoice.

### Request

GET [https://api-sandbox.payabli.com/api/Invoice/send/\{idInvoice}](https://api-sandbox.payabli.com/api/Invoice/send/\{idInvoice})

**`SendInvoice`**

```curl SendInvoice
curl -G https://api-sandbox.payabli.com/api/Invoice/send/23548884 \
     -H "requestToken: <apiKey>" \
     -d attachfile=true \
     --data-urlencode mail2=tamara@example.com
```

**`SendInvoice`**

```python SendInvoice
import requests

url = "https://api-sandbox.payabli.com/api/Invoice/send/23548884"

querystring = {"attachfile":"true","mail2":"tamara@example.com"}

headers = {"requestToken": "<apiKey>"}

response = requests.get(url, headers=headers, params=querystring)

print(response.json())
```

**`SendInvoice`**

```javascript SendInvoice
const url = 'https://api-sandbox.payabli.com/api/Invoice/send/23548884?attachfile=true&mail2=tamara%40example.com';
const options = {method: 'GET', headers: {requestToken: '<apiKey>'}};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

**`SendInvoice`**

```go SendInvoice
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://api-sandbox.payabli.com/api/Invoice/send/23548884?attachfile=true&mail2=tamara%40example.com"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("requestToken", "<apiKey>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

**`SendInvoice`**

```ruby SendInvoice
require 'uri'
require 'net/http'

url = URI("https://api-sandbox.payabli.com/api/Invoice/send/23548884?attachfile=true&mail2=tamara%40example.com")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["requestToken"] = '<apiKey>'

response = http.request(request)
puts response.read_body
```

**`SendInvoice`**

```java SendInvoice
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.get("https://api-sandbox.payabli.com/api/Invoice/send/23548884?attachfile=true&mail2=tamara%40example.com")
  .header("requestToken", "<apiKey>")
  .asString();
```

**`SendInvoice`**

```php SendInvoice
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('GET', 'https://api-sandbox.payabli.com/api/Invoice/send/23548884?attachfile=true&mail2=tamara%40example.com', [
  'headers' => [
    'requestToken' => '<apiKey>',
  ],
]);

echo $response->getBody();
```

**`SendInvoice`**

```csharp SendInvoice
using RestSharp;

var client = new RestClient("https://api-sandbox.payabli.com/api/Invoice/send/23548884?attachfile=true&mail2=tamara%40example.com");
var request = new RestRequest(Method.GET);
request.AddHeader("requestToken", "<apiKey>");
IRestResponse response = client.Execute(request);
```

**`SendInvoice`**

```swift SendInvoice
import Foundation

let headers = ["requestToken": "<apiKey>"]

let request = NSMutableURLRequest(url: NSURL(string: "https://api-sandbox.payabli.com/api/Invoice/send/23548884?attachfile=true&mail2=tamara%40example.com")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```

A successful request returns a 200 response with a JSON body.

### Response (200)

```json
{
  "isSuccess": true,
  "responseText": "Success"
}
```