Create an invoice
curl --request POST \
--url https://payoes.com/api/v1/invoices \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"amount": "10.5",
"customer_id": "<string>",
"description": "<string>",
"metadata": {},
"due_in_days": 183
}
'import requests
url = "https://payoes.com/api/v1/invoices"
payload = {
"amount": "10.5",
"customer_id": "<string>",
"description": "<string>",
"metadata": {},
"due_in_days": 183
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
amount: '10.5',
customer_id: '<string>',
description: '<string>',
metadata: {},
due_in_days: 183
})
};
fetch('https://payoes.com/api/v1/invoices', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://payoes.com/api/v1/invoices",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'amount' => '10.5',
'customer_id' => '<string>',
'description' => '<string>',
'metadata' => [
],
'due_in_days' => 183
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://payoes.com/api/v1/invoices"
payload := strings.NewReader("{\n \"amount\": \"10.5\",\n \"customer_id\": \"<string>\",\n \"description\": \"<string>\",\n \"metadata\": {},\n \"due_in_days\": 183\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://payoes.com/api/v1/invoices")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"amount\": \"10.5\",\n \"customer_id\": \"<string>\",\n \"description\": \"<string>\",\n \"metadata\": {},\n \"due_in_days\": 183\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://payoes.com/api/v1/invoices")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"amount\": \"10.5\",\n \"customer_id\": \"<string>\",\n \"description\": \"<string>\",\n \"metadata\": {},\n \"due_in_days\": 183\n}"
response = http.request(request)
puts response.read_body{
"id": "inv_abc123xyz",
"object": "invoice",
"invoice_number": "INV-000001",
"status": "draft",
"amount": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"settlement_asset": {
"asset_code": "USDC",
"issuer_address": "<string>"
},
"allowed_assets": [
{
"asset_code": "USDC",
"issuer_address": "<string>"
}
],
"description": "<string>",
"metadata": {},
"customer_id": "<string>",
"checkout_session_id": "<string>",
"checkout_url": "<string>",
"hosted_invoice_url": "<string>",
"items": [
{
"description": "<string>",
"quantity": "<string>",
"unit_amount": "10.5"
}
],
"due_at": "2023-11-07T05:31:56Z",
"paid_at": "2023-11-07T05:31:56Z",
"sent_at": "2023-11-07T05:31:56Z"
}{
"error": "Settlement wallet is not configured"
}{
"error": "Unauthorized"
}Invoices
Create an invoice
Creates a draft invoice for a customer. Finalize the invoice to generate a checkout session and payment link. Use the dashboard to send invoices by email.
POST
/
invoices
Create an invoice
curl --request POST \
--url https://payoes.com/api/v1/invoices \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"amount": "10.5",
"customer_id": "<string>",
"description": "<string>",
"metadata": {},
"due_in_days": 183
}
'import requests
url = "https://payoes.com/api/v1/invoices"
payload = {
"amount": "10.5",
"customer_id": "<string>",
"description": "<string>",
"metadata": {},
"due_in_days": 183
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
amount: '10.5',
customer_id: '<string>',
description: '<string>',
metadata: {},
due_in_days: 183
})
};
fetch('https://payoes.com/api/v1/invoices', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://payoes.com/api/v1/invoices",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'amount' => '10.5',
'customer_id' => '<string>',
'description' => '<string>',
'metadata' => [
],
'due_in_days' => 183
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://payoes.com/api/v1/invoices"
payload := strings.NewReader("{\n \"amount\": \"10.5\",\n \"customer_id\": \"<string>\",\n \"description\": \"<string>\",\n \"metadata\": {},\n \"due_in_days\": 183\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://payoes.com/api/v1/invoices")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"amount\": \"10.5\",\n \"customer_id\": \"<string>\",\n \"description\": \"<string>\",\n \"metadata\": {},\n \"due_in_days\": 183\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://payoes.com/api/v1/invoices")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"amount\": \"10.5\",\n \"customer_id\": \"<string>\",\n \"description\": \"<string>\",\n \"metadata\": {},\n \"due_in_days\": 183\n}"
response = http.request(request)
puts response.read_body{
"id": "inv_abc123xyz",
"object": "invoice",
"invoice_number": "INV-000001",
"status": "draft",
"amount": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"settlement_asset": {
"asset_code": "USDC",
"issuer_address": "<string>"
},
"allowed_assets": [
{
"asset_code": "USDC",
"issuer_address": "<string>"
}
],
"description": "<string>",
"metadata": {},
"customer_id": "<string>",
"checkout_session_id": "<string>",
"checkout_url": "<string>",
"hosted_invoice_url": "<string>",
"items": [
{
"description": "<string>",
"quantity": "<string>",
"unit_amount": "10.5"
}
],
"due_at": "2023-11-07T05:31:56Z",
"paid_at": "2023-11-07T05:31:56Z",
"sent_at": "2023-11-07T05:31:56Z"
}{
"error": "Settlement wallet is not configured"
}{
"error": "Unauthorized"
}Authorizations
API key from the Payoes dashboard (pk_test_... or pk_live_...)
Body
application/json
Stellar amount with up to 7 decimal places
Pattern:
^\d+(\.\d{1,7})?$Example:
"10.5"
Customer public ID
Maximum string length:
500Show child attributes
Show child attributes
Days until due (default 30)
Required range:
1 <= x <= 365Response
Invoice created
Example:
"inv_abc123xyz"
Available options:
invoice Example:
"INV-000001"
Available options:
draft, open, paid, void From the linked payment after finalize (null on draft)
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Public invoice page (/i/inv_...)
Show child attributes
Show child attributes
