Me and tax codes
The company and key behind a request, the OpenAPI document, and the tax codes for invoices.
Version v1.1, updated
Three operations that help you set up an integration. GET /v1/me names the company and the key, and GET /v1/tax-codes lists the codes invoice lines take.
Fields
Send says the field is in responses. Receive says a write accepts it; a reference is sent as an object, such as category for category_id. Totals, VAT, numbers and statuses are computed by BIRP and never received.
Who am I
Returns the company and the API key behind the request, with the rate limits that apply.
Scope: none; any valid key.
Idempotency: a read; send it as often as you need.
curl "https://api.birp.io/v1/me" \
-H "Authorization: Bearer $BIRP_API_KEY"const response = await fetch("https://api.birp.io/v1/me", {
headers: {
Authorization: `Bearer ${process.env.BIRP_API_KEY}`,
},
});
if (!response.ok) throw new Error(`BIRP API error ${response.status}`);
const result = await response.json();<?php
$ch = curl_init("https://api.birp.io/v1/me");
curl_setopt_array($ch, [
CURLOPT_HTTPHEADER => [
"Authorization: Bearer " . getenv("BIRP_API_KEY"),
],
CURLOPT_RETURNTRANSFER => true,
]);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);import os
import requests
response = requests.request(
"GET",
"https://api.birp.io/v1/me",
headers={
"Authorization": f"Bearer {os.environ['BIRP_API_KEY']}",
},
timeout=10,
)
response.raise_for_status()
result = response.json(){
"data": {
"company": {
"base_currency": "MDL",
"country_code": "MD",
"id": "00000000-0000-4000-8000-000000000001",
"name": "Brutaria Exemplu SRL"
},
"key": {
"expires_at": "2027-10-05T00:00:00.000Z",
"name": "WooCommerce sync",
"prefix": "EXAMPLE-PREFIX",
"scopes": [
"products:read",
"stock:read",
"orders:read"
]
},
"rate_limits": {
"per_company_per_minute": 1200,
"per_key_per_minute": 600,
"window_seconds": 60
}
}
}OpenAPI document
Returns the OpenAPI 3.1 document of this API, the contract these pages are built from.
Scope: none, and no key.
Idempotency: a read; send it as often as you need.
It needs no key and no scope. Generate a client from it, or compare it with the version you built against.
curl "https://api.birp.io/v1/openapi.json"const response = await fetch("https://api.birp.io/v1/openapi.json", {
});
if (!response.ok) throw new Error(`BIRP API error ${response.status}`);
const result = await response.json();<?php
$ch = curl_init("https://api.birp.io/v1/openapi.json");
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
]);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);import requests
response = requests.request(
"GET",
"https://api.birp.io/v1/openapi.json",
timeout=10,
)
response.raise_for_status()
result = response.json(){
"info": {
"title": "BIRP public API",
"version": "1.0.0"
},
"openapi": "3.1.0",
"servers": [
{
"url": "https://api.birp.io"
}
]
}List tax codes
Lists the tax codes valid at a date under the rules of the company's country, with their rate and validity. Send one as the tax_code of each invoice line.
Scope:
invoices:read.Idempotency: a read; send it as often as you need.
Without date, the current day of the company applies. A code without a rate is an exemption.
/v1/tax-codesParameters
datestring (date), in query- YYYY-MM-DD. Left out: the company today.Example
2026-10-05
curl "https://api.birp.io/v1/tax-codes" \
-H "Authorization: Bearer $BIRP_API_KEY"const response = await fetch("https://api.birp.io/v1/tax-codes", {
headers: {
Authorization: `Bearer ${process.env.BIRP_API_KEY}`,
},
});
if (!response.ok) throw new Error(`BIRP API error ${response.status}`);
const result = await response.json();<?php
$ch = curl_init("https://api.birp.io/v1/tax-codes");
curl_setopt_array($ch, [
CURLOPT_HTTPHEADER => [
"Authorization: Bearer " . getenv("BIRP_API_KEY"),
],
CURLOPT_RETURNTRANSFER => true,
]);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);import os
import requests
response = requests.request(
"GET",
"https://api.birp.io/v1/tax-codes",
headers={
"Authorization": f"Bearer {os.environ['BIRP_API_KEY']}",
},
timeout=10,
)
response.raise_for_status()
result = response.json(){
"data": [
{
"code": "STANDARD",
"effective_from": "2015-01-01",
"effective_to": null,
"label": "Tax code, article on the standard rate",
"rate": "20.0000"
},
{
"code": "ZERO",
"effective_from": "2015-01-01",
"effective_to": null,
"label": "Tax code, article on zero-rated supplies",
"rate": "0.0000"
}
],
"date": "2026-10-05"
}Errors particular to this operation:
422
tax_rules_unavailable422
validation_failed
Related
- first-request
- invoices
- rate-limits