Create an invoice template
curl --request POST \
--url https://app.orgo.space/api/v1/invoice_templates \
--header 'Api-Token: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"tenant": "/api/v1/tenants/1",
"name": "Boston Chapter",
"taxName": "Boston Chapter",
"taxValue": 42,
"memo": "string",
"footer": "string",
"customFields": [
"string"
],
"internalNotes": "Joined via the Boston outreach drive on 2026-01-10.",
"isDefault": true
}
'import requests
url = "https://app.orgo.space/api/v1/invoice_templates"
payload = {
"tenant": "/api/v1/tenants/1",
"name": "Boston Chapter",
"taxName": "Boston Chapter",
"taxValue": 42,
"memo": "string",
"footer": "string",
"customFields": ["string"],
"internalNotes": "Joined via the Boston outreach drive on 2026-01-10.",
"isDefault": True
}
headers = {
"Api-Token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Api-Token': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
tenant: '/api/v1/tenants/1',
name: 'Boston Chapter',
taxName: 'Boston Chapter',
taxValue: 42,
memo: 'string',
footer: 'string',
customFields: ['string'],
internalNotes: 'Joined via the Boston outreach drive on 2026-01-10.',
isDefault: true
})
};
fetch('https://app.orgo.space/api/v1/invoice_templates', 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://app.orgo.space/api/v1/invoice_templates",
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([
'tenant' => '/api/v1/tenants/1',
'name' => 'Boston Chapter',
'taxName' => 'Boston Chapter',
'taxValue' => 42,
'memo' => 'string',
'footer' => 'string',
'customFields' => [
'string'
],
'internalNotes' => 'Joined via the Boston outreach drive on 2026-01-10.',
'isDefault' => true
]),
CURLOPT_HTTPHEADER => [
"Api-Token: <api-key>",
"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://app.orgo.space/api/v1/invoice_templates"
payload := strings.NewReader("{\n \"tenant\": \"/api/v1/tenants/1\",\n \"name\": \"Boston Chapter\",\n \"taxName\": \"Boston Chapter\",\n \"taxValue\": 42,\n \"memo\": \"string\",\n \"footer\": \"string\",\n \"customFields\": [\n \"string\"\n ],\n \"internalNotes\": \"Joined via the Boston outreach drive on 2026-01-10.\",\n \"isDefault\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Api-Token", "<api-key>")
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://app.orgo.space/api/v1/invoice_templates")
.header("Api-Token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"tenant\": \"/api/v1/tenants/1\",\n \"name\": \"Boston Chapter\",\n \"taxName\": \"Boston Chapter\",\n \"taxValue\": 42,\n \"memo\": \"string\",\n \"footer\": \"string\",\n \"customFields\": [\n \"string\"\n ],\n \"internalNotes\": \"Joined via the Boston outreach drive on 2026-01-10.\",\n \"isDefault\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.orgo.space/api/v1/invoice_templates")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Api-Token"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"tenant\": \"/api/v1/tenants/1\",\n \"name\": \"Boston Chapter\",\n \"taxName\": \"Boston Chapter\",\n \"taxValue\": 42,\n \"memo\": \"string\",\n \"footer\": \"string\",\n \"customFields\": [\n \"string\"\n ],\n \"internalNotes\": \"Joined via the Boston outreach drive on 2026-01-10.\",\n \"isDefault\": true\n}"
response = http.request(request)
puts response.read_body{
"id": 42,
"name": "Boston Chapter",
"taxName": "Boston Chapter",
"taxValue": 42,
"memo": "string",
"footer": "string",
"customFields": [
"string"
],
"internalNotes": "Joined via the Boston outreach drive on 2026-01-10.",
"isDefault": true,
"dateCreated": "2026-01-15T10:30:00+00:00",
"dateUpdated": "2026-01-15T10:30:00+00:00"
}InvoiceTemplate
Create an invoice template
Creates a new invoice template for the tenant. Requires the invoice feature to be enabled in tenant settings. If isDefault is set to true, all other templates for the tenant are unset as default. Requires ADMIN_TENANT permission.
POST
/
api
/
v1
/
invoice_templates
Create an invoice template
curl --request POST \
--url https://app.orgo.space/api/v1/invoice_templates \
--header 'Api-Token: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"tenant": "/api/v1/tenants/1",
"name": "Boston Chapter",
"taxName": "Boston Chapter",
"taxValue": 42,
"memo": "string",
"footer": "string",
"customFields": [
"string"
],
"internalNotes": "Joined via the Boston outreach drive on 2026-01-10.",
"isDefault": true
}
'import requests
url = "https://app.orgo.space/api/v1/invoice_templates"
payload = {
"tenant": "/api/v1/tenants/1",
"name": "Boston Chapter",
"taxName": "Boston Chapter",
"taxValue": 42,
"memo": "string",
"footer": "string",
"customFields": ["string"],
"internalNotes": "Joined via the Boston outreach drive on 2026-01-10.",
"isDefault": True
}
headers = {
"Api-Token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Api-Token': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
tenant: '/api/v1/tenants/1',
name: 'Boston Chapter',
taxName: 'Boston Chapter',
taxValue: 42,
memo: 'string',
footer: 'string',
customFields: ['string'],
internalNotes: 'Joined via the Boston outreach drive on 2026-01-10.',
isDefault: true
})
};
fetch('https://app.orgo.space/api/v1/invoice_templates', 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://app.orgo.space/api/v1/invoice_templates",
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([
'tenant' => '/api/v1/tenants/1',
'name' => 'Boston Chapter',
'taxName' => 'Boston Chapter',
'taxValue' => 42,
'memo' => 'string',
'footer' => 'string',
'customFields' => [
'string'
],
'internalNotes' => 'Joined via the Boston outreach drive on 2026-01-10.',
'isDefault' => true
]),
CURLOPT_HTTPHEADER => [
"Api-Token: <api-key>",
"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://app.orgo.space/api/v1/invoice_templates"
payload := strings.NewReader("{\n \"tenant\": \"/api/v1/tenants/1\",\n \"name\": \"Boston Chapter\",\n \"taxName\": \"Boston Chapter\",\n \"taxValue\": 42,\n \"memo\": \"string\",\n \"footer\": \"string\",\n \"customFields\": [\n \"string\"\n ],\n \"internalNotes\": \"Joined via the Boston outreach drive on 2026-01-10.\",\n \"isDefault\": true\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Api-Token", "<api-key>")
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://app.orgo.space/api/v1/invoice_templates")
.header("Api-Token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"tenant\": \"/api/v1/tenants/1\",\n \"name\": \"Boston Chapter\",\n \"taxName\": \"Boston Chapter\",\n \"taxValue\": 42,\n \"memo\": \"string\",\n \"footer\": \"string\",\n \"customFields\": [\n \"string\"\n ],\n \"internalNotes\": \"Joined via the Boston outreach drive on 2026-01-10.\",\n \"isDefault\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.orgo.space/api/v1/invoice_templates")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Api-Token"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"tenant\": \"/api/v1/tenants/1\",\n \"name\": \"Boston Chapter\",\n \"taxName\": \"Boston Chapter\",\n \"taxValue\": 42,\n \"memo\": \"string\",\n \"footer\": \"string\",\n \"customFields\": [\n \"string\"\n ],\n \"internalNotes\": \"Joined via the Boston outreach drive on 2026-01-10.\",\n \"isDefault\": true\n}"
response = http.request(request)
puts response.read_body{
"id": 42,
"name": "Boston Chapter",
"taxName": "Boston Chapter",
"taxValue": 42,
"memo": "string",
"footer": "string",
"customFields": [
"string"
],
"internalNotes": "Joined via the Boston outreach drive on 2026-01-10.",
"isDefault": true,
"dateCreated": "2026-01-15T10:30:00+00:00",
"dateUpdated": "2026-01-15T10:30:00+00:00"
}Authorizations
ApiTokenJWT
Server-to-server authentication. Generate a token in the admin UI at
Settings → Developers → API Access. Send the raw token in the
Api-Token header — there is no Bearer prefix.
Tokens can be marked read-only at creation time, in which case the API
rejects any non-GET request with 403 Forbidden.
Body
application/json
The new InvoiceTemplate resource
Response
InvoiceTemplate resource created
⌘I

