е-Фактура API
API референца
Базен URL https://api.efaktura.merot.com
OAuth
Токени со client credentials за софтверски куќи (vendor) што интегрираат во име на повеќе клиентски компании.
Endpoint-и
Добијте пристапен токен со client credentials
# POST /v1/oauth/token
За софтверски куќи (vendor): разменете client_id + client_secret на OAuth клиентот за краткотраен bearer токен. Ова е единствениот endpoint кој не користи API клуч, и единствениот чие тело со грешка е обично OAuth 2.0 JSON (RFC 6749 §5.2), а не application/problem+json.
Враќа
- 200
Издаден е пристапен токен.
- 400
invalid_client или invalid_scope (OAuth 2.0 грешка според RFC 6749 §5.2, не problem+json).
### POST /v1/oauth/token
Добијте пристапен токен со client credentials
За софтверски куќи (vendor): разменете `client_id` + `client_secret` на OAuth клиентот за краткотраен
bearer токен. Ова е единствениот endpoint кој не користи API клуч, и единствениот
чие тело со грешка е обично OAuth 2.0 JSON (RFC 6749 §5.2), а не
`application/problem+json`.
```bash
curl -X POST "https://api.efaktura.merot.com/v1/oauth/token" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=client_credentials&client_id=mfc_9f2a1c7e0b3d4e5f&client_secret=<client_secret>&scope=einvoices:read einvoices:write inbox:read inbox:write"
```
**Пример-одговор**
```json
{
"access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_type": "Bearer",
"expires_in": 900,
"scope": "einvoices:read einvoices:write inbox:read inbox:write"
}
``` cURL
curl -X POST "https://api.efaktura.merot.com/v1/oauth/token" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=client_credentials&client_id=mfc_9f2a1c7e0b3d4e5f&client_secret=<client_secret>&scope=einvoices:read einvoices:write inbox:read inbox:write" const response = await fetch("https://api.efaktura.merot.com/v1/oauth/token", {
method: "POST",
headers: {
"Content-Type": "application/x-www-form-urlencoded",
},
body: new URLSearchParams({
"grant_type": "client_credentials",
"client_id": "mfc_9f2a1c7e0b3d4e5f",
"client_secret": "<client_secret>",
"scope": "einvoices:read einvoices:write inbox:read inbox:write"
}).toString(),
});
const data = await response.json();
console.log(data); import requests
response = requests.post(
"https://api.efaktura.merot.com/v1/oauth/token",
headers={
"Content-Type": "application/x-www-form-urlencoded",
},
data={
"grant_type": "client_credentials",
"client_id": "mfc_9f2a1c7e0b3d4e5f",
"client_secret": "<client_secret>",
"scope": "einvoices:read einvoices:write inbox:read inbox:write"
},
)
print(response.json()) <?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.efaktura.merot.com/v1/oauth/token', [
'headers' => [
'Content-Type' => 'application/x-www-form-urlencoded',
],
]);
echo $response->getBody(); using System.Net.Http;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Post, "https://api.efaktura.merot.com/v1/oauth/token");
using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body); import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.efaktura.merot.com/v1/oauth/token"))
.headers("Content-Type", "application/x-www-form-urlencoded")
.method("POST", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body()); {
"access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_type": "Bearer",
"expires_in": 900,
"scope": "einvoices:read einvoices:write inbox:read inbox:write"
} Компании
Клиентските компании (ЕДБ) за кои дејствува вашата API сметка.
Листа на компании-клиенти
# GET /v1/companies
Параметри
cursor (query)stringlimit (query)integerСтандардна вредност:
25
Враќа
- 200
Страница со компании.
- 401
Недостасуваат, се неважечки или се укинати акредитивите.
- 429
Премногу барања.
### GET /v1/companies
Листа на компании-клиенти
```bash
curl -X GET "https://api.efaktura.merot.com/v1/companies" \
-H "Authorization: Bearer YOUR_API_KEY"
```
**Пример-одговор**
```json
{
"data": [
{
"id": "cmp_01J9Z3K2N4R5T6V7W8X9Y0Z1",
"object": "company",
"name": "Купувач ДОО",
"taxNumber": "4012009123456",
"vatNumber": "MK4012009123456",
"externalRef": "acct_8841",
"status": "active",
"signingMode": "bridge",
"environments": {
"sandbox": {
"enabled": true,
"signerReady": true
},
"production": {
"enabled": false,
"signerReady": false
}
},
"createdAt": "2026-09-26T09:12:00Z"
}
],
"nextCursor": null
}
``` cURL
curl -X GET "https://api.efaktura.merot.com/v1/companies" \
-H "Authorization: Bearer YOUR_API_KEY" const response = await fetch("https://api.efaktura.merot.com/v1/companies", {
method: "GET",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
},
});
const data = await response.json();
console.log(data); import requests
response = requests.get(
"https://api.efaktura.merot.com/v1/companies",
headers={
"Authorization": "Bearer YOUR_API_KEY",
},
)
print(response.json()) <?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.efaktura.merot.com/v1/companies', [
'headers' => [
'Authorization' => 'Bearer YOUR_API_KEY',
],
]);
echo $response->getBody(); using System.Net.Http;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Get, "https://api.efaktura.merot.com/v1/companies");
request.Headers.Add("Authorization", "Bearer YOUR_API_KEY");
using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body); import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.efaktura.merot.com/v1/companies"))
.headers("Authorization", "Bearer YOUR_API_KEY")
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body()); {
"data": [
{
"id": "cmp_01J9Z3K2N4R5T6V7W8X9Y0Z1",
"object": "company",
"name": "Купувач ДОО",
"taxNumber": "4012009123456",
"vatNumber": "MK4012009123456",
"externalRef": "acct_8841",
"status": "active",
"signingMode": "bridge",
"environments": {
"sandbox": {
"enabled": true,
"signerReady": true
},
"production": {
"enabled": false,
"signerReady": false
}
},
"createdAt": "2026-09-26T09:12:00Z"
}
],
"nextCursor": null
} Додадете компанија-клиент
# POST /v1/companies
Вендорите и бизнисите додаваат компанија-клиент преку нејзиниот даночен број (ЕДБ). Официјалното име и адреса на компанијата доаѓаат од предпроверката во регистарот на УЈП — никогаш од телото на барањето. До representative.email се испраќа е-маил со овластување (мандат); компанијата станува active откако претставникот ќе го прифати.
Параметри
Idempotency-Key (header)stringзадолжителноЗадолжително за секое POST барање освен `/v1/oauth/token`. Употребете го истиот клуч за безбедно повторување.
Тело на барањето
taxNumberstringзадолжителноЕДБ of the client company.
externalRefstring | nullYour own identifier for this company.
signingModeenumbridgesdkСтандардна вредност:
"bridge"representativeobjectзадолжителноПрикажи вгнездени параметри
namestringзадолжителноemailstringзадолжително
Враќа
- 201
Компанијата е создадена, во очекување на прифаќање на мандатот.
- 400
Телото на барањето не помина валидација.
- 503
Предпроверката во регистарот на УЈП е недостапна — компанијата не е создадена.
### POST /v1/companies
Додадете компанија-клиент
Вендорите и бизнисите додаваат компанија-клиент преку нејзиниот даночен број (ЕДБ).
Официјалното име и адреса на компанијата доаѓаат од предпроверката во регистарот на
УЈП — никогаш од телото на барањето. До `representative.email` се испраќа е-маил со
овластување (мандат); компанијата станува `active` откако претставникот ќе го прифати.
```bash
curl -X POST "https://api.efaktura.merot.com/v1/companies" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Idempotency-Key: a-unique-key-per-request" \
-H "Content-Type: application/json" \
-d '{
"taxNumber": "4012009123456",
"externalRef": "acct_8841",
"signingMode": "bridge",
"representative": {
"name": "Ана Петровска",
"email": "ana@buyer.mk"
}
}'
```
**Пример-одговор**
```json
{
"id": "cmp_01J9Z3K2N4R5T6V7W8X9Y0Z1",
"object": "company",
"name": "Купувач ДОО",
"taxNumber": "4012009123456",
"vatNumber": "MK4012009123456",
"externalRef": "acct_8841",
"status": "pending_mandate",
"signingMode": "bridge",
"environments": {
"sandbox": {
"enabled": true,
"signerReady": false
},
"production": {
"enabled": false,
"signerReady": false
}
},
"createdAt": "2026-09-26T09:12:00Z"
}
``` cURL
curl -X POST "https://api.efaktura.merot.com/v1/companies" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Idempotency-Key: a-unique-key-per-request" \
-H "Content-Type: application/json" \
-d '{
"taxNumber": "4012009123456",
"externalRef": "acct_8841",
"signingMode": "bridge",
"representative": {
"name": "Ана Петровска",
"email": "ana@buyer.mk"
}
}' const response = await fetch("https://api.efaktura.merot.com/v1/companies", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Idempotency-Key": "a-unique-key-per-request",
"Content-Type": "application/json",
},
body: JSON.stringify({
"taxNumber": "4012009123456",
"externalRef": "acct_8841",
"signingMode": "bridge",
"representative": {
"name": "Ана Петровска",
"email": "ana@buyer.mk"
}
}),
});
const data = await response.json();
console.log(data); import requests
response = requests.post(
"https://api.efaktura.merot.com/v1/companies",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Idempotency-Key": "a-unique-key-per-request",
"Content-Type": "application/json",
},
json={
"taxNumber": "4012009123456",
"externalRef": "acct_8841",
"signingMode": "bridge",
"representative": {
"name": "Ана Петровска",
"email": "ana@buyer.mk"
}
},
)
print(response.json()) <?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.efaktura.merot.com/v1/companies', [
'headers' => [
'Authorization' => 'Bearer YOUR_API_KEY',
'Idempotency-Key' => 'a-unique-key-per-request',
'Content-Type' => 'application/json',
],
'json' => [
'taxNumber' => '4012009123456',
'externalRef' => 'acct_8841',
'signingMode' => 'bridge',
'representative' => [
'name' => 'Ана Петровска',
'email' => 'ana@buyer.mk',
],
],
]);
echo $response->getBody(); using System.Net.Http;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Post, "https://api.efaktura.merot.com/v1/companies");
request.Headers.Add("Authorization", "Bearer YOUR_API_KEY");
request.Headers.Add("Idempotency-Key", "a-unique-key-per-request");
var json = /* lang=json */ @"{
""taxNumber"": ""4012009123456"",
""externalRef"": ""acct_8841"",
""signingMode"": ""bridge"",
""representative"": {
""name"": ""Ана Петровска"",
""email"": ""ana@buyer.mk""
}
}";
request.Content = new StringContent(json, Encoding.UTF8, "application/json");
using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body); import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.efaktura.merot.com/v1/companies"))
.headers("Authorization", "Bearer YOUR_API_KEY", "Idempotency-Key", "a-unique-key-per-request", "Content-Type", "application/json")
.method("POST", HttpRequest.BodyPublishers.ofString(/* JSON */ "{ \"taxNumber\": \"4012009123456\", \"externalRef\": \"acct_8841\", \"signingMode\": \"bridge\", \"representative\": { \"name\": \"Ана Петровска\", \"email\": \"ana@buyer.mk\" } }"))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body()); {
"id": "cmp_01J9Z3K2N4R5T6V7W8X9Y0Z1",
"object": "company",
"name": "Купувач ДОО",
"taxNumber": "4012009123456",
"vatNumber": "MK4012009123456",
"externalRef": "acct_8841",
"status": "pending_mandate",
"signingMode": "bridge",
"environments": {
"sandbox": {
"enabled": true,
"signerReady": false
},
"production": {
"enabled": false,
"signerReady": false
}
},
"createdAt": "2026-09-26T09:12:00Z"
} Преземете компанија
# GET /v1/companies/{id}
Параметри
id (path)stringзадолжително
Враќа
- 200
Компанијата.
- 404
Не постои таков ресурс за оваа компанија.
### GET /v1/companies/{id}
Преземете компанија
```bash
curl -X GET "https://api.efaktura.merot.com/v1/companies/einv_123" \
-H "Authorization: Bearer YOUR_API_KEY"
```
**Пример-одговор**
```json
{
"id": "cmp_01J9Z3K2N4R5T6V7W8X9Y0Z1",
"object": "company",
"name": "Купувач ДОО",
"taxNumber": "4012009123456",
"vatNumber": "MK4012009123456",
"externalRef": "acct_8841",
"status": "active",
"signingMode": "bridge",
"environments": {
"sandbox": {
"enabled": true,
"signerReady": true
},
"production": {
"enabled": false,
"signerReady": false
}
},
"createdAt": "2026-09-26T09:12:00Z"
}
``` cURL
curl -X GET "https://api.efaktura.merot.com/v1/companies/einv_123" \
-H "Authorization: Bearer YOUR_API_KEY" const response = await fetch("https://api.efaktura.merot.com/v1/companies/einv_123", {
method: "GET",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
},
});
const data = await response.json();
console.log(data); import requests
response = requests.get(
"https://api.efaktura.merot.com/v1/companies/einv_123",
headers={
"Authorization": "Bearer YOUR_API_KEY",
},
)
print(response.json()) <?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.efaktura.merot.com/v1/companies/einv_123', [
'headers' => [
'Authorization' => 'Bearer YOUR_API_KEY',
],
]);
echo $response->getBody(); using System.Net.Http;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Get, "https://api.efaktura.merot.com/v1/companies/einv_123");
request.Headers.Add("Authorization", "Bearer YOUR_API_KEY");
using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body); import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.efaktura.merot.com/v1/companies/einv_123"))
.headers("Authorization", "Bearer YOUR_API_KEY")
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body()); {
"id": "cmp_01J9Z3K2N4R5T6V7W8X9Y0Z1",
"object": "company",
"name": "Купувач ДОО",
"taxNumber": "4012009123456",
"vatNumber": "MK4012009123456",
"externalRef": "acct_8841",
"status": "active",
"signingMode": "bridge",
"environments": {
"sandbox": {
"enabled": true,
"signerReady": true
},
"production": {
"enabled": false,
"signerReady": false
}
},
"createdAt": "2026-09-26T09:12:00Z"
} Ажурирајте компанија
# PATCH /v1/companies/{id}
Можат да се менуваат само externalRef и signingMode.
Параметри
id (path)stringзадолжително
Тело на барањето
externalRefstring | nullsigningModeenumbridgesdk
Враќа
- 200
Ажурирана компанија.
- 404
Не постои таков ресурс за оваа компанија.
### PATCH /v1/companies/{id}
Ажурирајте компанија
Можат да се менуваат само `externalRef` и `signingMode`.
```bash
curl -X PATCH "https://api.efaktura.merot.com/v1/companies/einv_123" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"signingMode": "sdk"
}'
``` cURL
curl -X PATCH "https://api.efaktura.merot.com/v1/companies/einv_123" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"signingMode": "sdk"
}' const response = await fetch("https://api.efaktura.merot.com/v1/companies/einv_123", {
method: "PATCH",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"signingMode": "sdk"
}),
});
const data = await response.json();
console.log(data); import requests
response = requests.patch(
"https://api.efaktura.merot.com/v1/companies/einv_123",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"signingMode": "sdk"
},
)
print(response.json()) <?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
$response = $client->request('PATCH', 'https://api.efaktura.merot.com/v1/companies/einv_123', [
'headers' => [
'Authorization' => 'Bearer YOUR_API_KEY',
'Content-Type' => 'application/json',
],
'json' => [
'signingMode' => 'sdk',
],
]);
echo $response->getBody(); using System.Net.Http;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Patch, "https://api.efaktura.merot.com/v1/companies/einv_123");
request.Headers.Add("Authorization", "Bearer YOUR_API_KEY");
var json = /* lang=json */ @"{
""signingMode"": ""sdk""
}";
request.Content = new StringContent(json, Encoding.UTF8, "application/json");
using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body); import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.efaktura.merot.com/v1/companies/einv_123"))
.headers("Authorization", "Bearer YOUR_API_KEY", "Content-Type", "application/json")
.method("PATCH", HttpRequest.BodyPublishers.ofString(/* JSON */ "{ \"signingMode\": \"sdk\" }"))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body()); Е-фактури
Издавање, валидација, преглед, сторно и корекција на излезни е-фактури.
Листа на е-фактури
# GET /v1/einvoices
Параметри
X-Company-Id (header)stringЗадолжително кога вашиот клуч/токен има пристап до повеќе од една компанија.
status (query)enumvalidatinginvalidawaiting_signaturequeuedsubmittingfailedhelddeliveredacceptedauto_acceptedrejectedcancelled_by_stornocorrectedregistereddraft_at_ujpdocumentType (query)stringКод за тип на документ според УЈП (на пр. `100` фактура, `110` кредитно известие).
issuedFrom (query)stringissuedTo (query)stringclientReference (query)stringeuid (query)stringcursor (query)stringlimit (query)integerСтандардна вредност:
25
Враќа
- 200
Страница со е-фактури.
- 401
Недостасуваат, се неважечки или се укинати акредитивите.
### GET /v1/einvoices Листа на е-фактури ```bash curl -X GET "https://api.efaktura.merot.com/v1/einvoices" \ -H "Authorization: Bearer YOUR_API_KEY" ```
cURL
curl -X GET "https://api.efaktura.merot.com/v1/einvoices" \
-H "Authorization: Bearer YOUR_API_KEY" const response = await fetch("https://api.efaktura.merot.com/v1/einvoices", {
method: "GET",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
},
});
const data = await response.json();
console.log(data); import requests
response = requests.get(
"https://api.efaktura.merot.com/v1/einvoices",
headers={
"Authorization": "Bearer YOUR_API_KEY",
},
)
print(response.json()) <?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.efaktura.merot.com/v1/einvoices', [
'headers' => [
'Authorization' => 'Bearer YOUR_API_KEY',
],
]);
echo $response->getBody(); using System.Net.Http;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Get, "https://api.efaktura.merot.com/v1/einvoices");
request.Headers.Add("Authorization", "Bearer YOUR_API_KEY");
using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body); import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.efaktura.merot.com/v1/einvoices"))
.headers("Authorization", "Bearer YOUR_API_KEY")
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body()); Издадете е-фактура
# POST /v1/einvoices
Го гради документот од вашиот JSON, го валидира според шифрарниците на УЈП и регистарот на купувачи, бара потпис од вашиот агент за потпишување и го поднесува до УЈП. Одговорот пристигнува веднаш, со документот во состојба awaiting_signature или queued — проверувајте со GET /v1/einvoices/{id} или претплатете се на webhooks einvoice.* за исходот.
clientReference ги прави повторувањата безбедни: повторување со истата clientReference и исто тело го враќа постојниот документ (200); истата референца со различно тело е конфликт (409), дури и по истекот на прозорецот на Idempotency-Key.
Параметри
X-Company-Id (header)stringЗадолжително кога вашиот клуч/токен има пристап до повеќе од една компанија.
Idempotency-Key (header)stringзадолжителноЗадолжително за секое POST барање освен `/v1/oauth/token`. Употребете го истиот клуч за безбедно повторување.
Тело на барањето
clientReferencestringзадолжителноВаш сопствен идентификатор за овој документ, за идемпотентност.
documentTypestringзадолжителноКод од шифрарникот на УЈП за тип на документ (100 фактура, 110 кредитно известие, 130 аванс, 150/160 задолжница/друго, ...).
numberstringзадолжителноissueDatestringзадолжителноturnoverDatestringзадолжителноdeliveryDatestring | nullperiodStartstring | nullperiodEndstring | nullnotesstring | nullheaderstring | nullfooterstring | nullsellerobject | nullМоже да се постават само subsidiaryCode/contact/email — идентитетот на продавачот секогаш доаѓа од вашата компанија.
Прикажи вгнездени параметри
subsidiaryCodestring | nullcontactstring | nullemailstring | null
buyerobjectзадолжителноПрикажи вгнездени параметри
countrystringзадолжителноISO 3166-1 alpha-2 код на држава.
taxNumberstring | nullЕДБ.
foreignTaxNumberstring | nullvatNumberstring | nullnamestringзадолжителноaddressobjectзадолжителноПрикажи вгнездени параметри
streetstring | nullnumberstring | nullpostalCodestring | nullcitystring | null
subsidiaryCodestring | nullsubsidiaryNamestring | nullcontactstring | nullemailstring | null
receiverobject | nullПрикажи вгнездени параметри
countrystringзадолжителноISO 3166-1 alpha-2 код на држава.
taxNumberstring | nullЕДБ.
foreignTaxNumberstring | nullvatNumberstring | nullnamestringзадолжителноaddressobjectзадолжителноПрикажи вгнездени параметри
streetstring | nullnumberstring | nullpostalCodestring | nullcitystring | null
subsidiaryCodestring | nullsubsidiaryNamestring | nullcontactstring | nullemailstring | null
referencesarray of objectзадолжителноПрикажи вгнездени параметри
typestringзадолжителноКод од шифрарникот на УЈП за тип на референтен документ.
numberstringзадолжителноdatestring | null
paymentobjectзадолжителноПрикажи вгнездени параметри
typeCodestringзадолжителноdueDatestring | nulldueDaysinteger | nulltermsstring | nullnotestring | nullcurrencystringзадолжителноexchangeRatestring | nullexchangeRateDatestring | null
linesarray of objectзадолжителноПрикажи вгнездени параметри
skustring | nulldescriptionstringзадолжителноunitstring | nullquantitystringзадолжителноДецимален број како string.
unitPricestringзадолжителноДецимален износ како текстуална вредност (string), никогаш како JSON број.
unitDiscountstringДецимален износ како текстуална вредност (string), никогаш како JSON број.
vatPercentstringзадолжителноДецимален број како string, на пр. "18", "5", "0".
taxIndicatorstringзадолжителноКод од шифрарникот на УЈП за даночен индикатор.
domesticProductboolean | null
advanceobject | nullПрикажи вгнездени параметри
amountstringДецимален износ како текстуална вредност (string), никогаш како JSON број.
datestring | nulldescriptionstring | null
expectedTotalsobject | nullОпционално — ако е дадено и не се совпаѓа со вкупните износи пресметани од Merot, барањето враќа грешка 422 totals_mismatch.
Прикажи вгнездени параметри
netstringДецимален износ како текстуална вредност (string), никогаш како JSON број.
vatstringДецимален износ како текстуална вредност (string), никогаш како JSON број.
grossstringДецимален износ како текстуална вредност (string), никогаш како JSON број.
currencystring
Враќа
- 200
Идемпотентно повторување на идентична
clientReference— постојниот документ. - 202
Прифатено — документот е создаден и стои во ред за потпишување/поднесување.
- 400
idempotency_key_required — заглавието
Idempotency-Keyнедостасува. - 409
client_reference_conflict — иста clientReference, различно тело.
- 422
validation_failed — грешки на ниво на поле, или totals_mismatch со пресметаните вкупни износи.
### POST /v1/einvoices
Издадете е-фактура
Го гради документот од вашиот JSON, го валидира според шифрарниците на УЈП и
регистарот на купувачи, бара потпис од вашиот агент за потпишување и го поднесува до
УЈП. Одговорот пристигнува веднаш, со документот во состојба `awaiting_signature` или
`queued` — проверувајте со `GET /v1/einvoices/{id}` или претплатете се на webhooks
`einvoice.*` за исходот.
`clientReference` ги прави повторувањата безбедни: повторување со **истата**
`clientReference` и **исто** тело го враќа постојниот документ (200); истата
референца со различно тело е конфликт (409), дури и по истекот на прозорецот на
`Idempotency-Key`.
```bash
curl -X POST "https://api.efaktura.merot.com/v1/einvoices" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Idempotency-Key: a-unique-key-per-request" \
-H "Content-Type: application/json" \
-d '{
"clientReference": "inv-2026-000481",
"documentType": "100",
"number": "000481",
"issueDate": "2026-10-08",
"turnoverDate": "2026-10-08",
"deliveryDate": null,
"periodStart": null,
"periodEnd": null,
"notes": null,
"header": null,
"footer": null,
"buyer": {
"country": "MK",
"taxNumber": "4012009123456",
"vatNumber": null,
"name": "Купувач ДОО",
"address": {
"street": "Илинденска",
"number": "1",
"postalCode": "1000",
"city": "Скопје"
},
"subsidiaryCode": null,
"subsidiaryName": null,
"contact": null,
"email": "faktura@buyer.mk"
},
"receiver": null,
"references": [],
"payment": {
"typeCode": "1",
"currency": "MKD",
"dueDate": "2026-11-07",
"dueDays": 30,
"terms": null,
"note": null,
"exchangeRate": null,
"exchangeRateDate": null
},
"lines": [
{
"sku": null,
"description": "Консултантски услуги — септември 2026",
"unit": "услуга",
"quantity": "1",
"unitPrice": "10000.00",
"unitDiscount": "0",
"vatPercent": "18",
"taxIndicator": "1",
"domesticProduct": null
}
],
"advance": null,
"expectedTotals": {
"net": "10000.00",
"vat": "1800.00",
"gross": "11800.00",
"currency": "MKD"
}
}'
``` cURL
curl -X POST "https://api.efaktura.merot.com/v1/einvoices" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Idempotency-Key: a-unique-key-per-request" \
-H "Content-Type: application/json" \
-d '{
"clientReference": "inv-2026-000481",
"documentType": "100",
"number": "000481",
"issueDate": "2026-10-08",
"turnoverDate": "2026-10-08",
"deliveryDate": null,
"periodStart": null,
"periodEnd": null,
"notes": null,
"header": null,
"footer": null,
"buyer": {
"country": "MK",
"taxNumber": "4012009123456",
"vatNumber": null,
"name": "Купувач ДОО",
"address": {
"street": "Илинденска",
"number": "1",
"postalCode": "1000",
"city": "Скопје"
},
"subsidiaryCode": null,
"subsidiaryName": null,
"contact": null,
"email": "faktura@buyer.mk"
},
"receiver": null,
"references": [],
"payment": {
"typeCode": "1",
"currency": "MKD",
"dueDate": "2026-11-07",
"dueDays": 30,
"terms": null,
"note": null,
"exchangeRate": null,
"exchangeRateDate": null
},
"lines": [
{
"sku": null,
"description": "Консултантски услуги — септември 2026",
"unit": "услуга",
"quantity": "1",
"unitPrice": "10000.00",
"unitDiscount": "0",
"vatPercent": "18",
"taxIndicator": "1",
"domesticProduct": null
}
],
"advance": null,
"expectedTotals": {
"net": "10000.00",
"vat": "1800.00",
"gross": "11800.00",
"currency": "MKD"
}
}' const response = await fetch("https://api.efaktura.merot.com/v1/einvoices", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Idempotency-Key": "a-unique-key-per-request",
"Content-Type": "application/json",
},
body: JSON.stringify({
"clientReference": "inv-2026-000481",
"documentType": "100",
"number": "000481",
"issueDate": "2026-10-08",
"turnoverDate": "2026-10-08",
"deliveryDate": null,
"periodStart": null,
"periodEnd": null,
"notes": null,
"header": null,
"footer": null,
"buyer": {
"country": "MK",
"taxNumber": "4012009123456",
"vatNumber": null,
"name": "Купувач ДОО",
"address": {
"street": "Илинденска",
"number": "1",
"postalCode": "1000",
"city": "Скопје"
},
"subsidiaryCode": null,
"subsidiaryName": null,
"contact": null,
"email": "faktura@buyer.mk"
},
"receiver": null,
"references": [],
"payment": {
"typeCode": "1",
"currency": "MKD",
"dueDate": "2026-11-07",
"dueDays": 30,
"terms": null,
"note": null,
"exchangeRate": null,
"exchangeRateDate": null
},
"lines": [
{
"sku": null,
"description": "Консултантски услуги — септември 2026",
"unit": "услуга",
"quantity": "1",
"unitPrice": "10000.00",
"unitDiscount": "0",
"vatPercent": "18",
"taxIndicator": "1",
"domesticProduct": null
}
],
"advance": null,
"expectedTotals": {
"net": "10000.00",
"vat": "1800.00",
"gross": "11800.00",
"currency": "MKD"
}
}),
});
const data = await response.json();
console.log(data); import requests
response = requests.post(
"https://api.efaktura.merot.com/v1/einvoices",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Idempotency-Key": "a-unique-key-per-request",
"Content-Type": "application/json",
},
json={
"clientReference": "inv-2026-000481",
"documentType": "100",
"number": "000481",
"issueDate": "2026-10-08",
"turnoverDate": "2026-10-08",
"deliveryDate": None,
"periodStart": None,
"periodEnd": None,
"notes": None,
"header": None,
"footer": None,
"buyer": {
"country": "MK",
"taxNumber": "4012009123456",
"vatNumber": None,
"name": "Купувач ДОО",
"address": {
"street": "Илинденска",
"number": "1",
"postalCode": "1000",
"city": "Скопје"
},
"subsidiaryCode": None,
"subsidiaryName": None,
"contact": None,
"email": "faktura@buyer.mk"
},
"receiver": None,
"references": [],
"payment": {
"typeCode": "1",
"currency": "MKD",
"dueDate": "2026-11-07",
"dueDays": 30,
"terms": None,
"note": None,
"exchangeRate": None,
"exchangeRateDate": None
},
"lines": [
{
"sku": None,
"description": "Консултантски услуги — септември 2026",
"unit": "услуга",
"quantity": "1",
"unitPrice": "10000.00",
"unitDiscount": "0",
"vatPercent": "18",
"taxIndicator": "1",
"domesticProduct": None
}
],
"advance": None,
"expectedTotals": {
"net": "10000.00",
"vat": "1800.00",
"gross": "11800.00",
"currency": "MKD"
}
},
)
print(response.json()) <?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.efaktura.merot.com/v1/einvoices', [
'headers' => [
'Authorization' => 'Bearer YOUR_API_KEY',
'Idempotency-Key' => 'a-unique-key-per-request',
'Content-Type' => 'application/json',
],
'json' => [
'clientReference' => 'inv-2026-000481',
'documentType' => '100',
'number' => '000481',
'issueDate' => '2026-10-08',
'turnoverDate' => '2026-10-08',
'deliveryDate' => null,
'periodStart' => null,
'periodEnd' => null,
'notes' => null,
'header' => null,
'footer' => null,
'buyer' => [
'country' => 'MK',
'taxNumber' => '4012009123456',
'vatNumber' => null,
'name' => 'Купувач ДОО',
'address' => [
'street' => 'Илинденска',
'number' => '1',
'postalCode' => '1000',
'city' => 'Скопје',
],
'subsidiaryCode' => null,
'subsidiaryName' => null,
'contact' => null,
'email' => 'faktura@buyer.mk',
],
'receiver' => null,
'references' => [],
'payment' => [
'typeCode' => '1',
'currency' => 'MKD',
'dueDate' => '2026-11-07',
'dueDays' => 30,
'terms' => null,
'note' => null,
'exchangeRate' => null,
'exchangeRateDate' => null,
],
'lines' => [
[
'sku' => null,
'description' => 'Консултантски услуги — септември 2026',
'unit' => 'услуга',
'quantity' => '1',
'unitPrice' => '10000.00',
'unitDiscount' => '0',
'vatPercent' => '18',
'taxIndicator' => '1',
'domesticProduct' => null,
],
],
'advance' => null,
'expectedTotals' => [
'net' => '10000.00',
'vat' => '1800.00',
'gross' => '11800.00',
'currency' => 'MKD',
],
],
]);
echo $response->getBody(); using System.Net.Http;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Post, "https://api.efaktura.merot.com/v1/einvoices");
request.Headers.Add("Authorization", "Bearer YOUR_API_KEY");
request.Headers.Add("Idempotency-Key", "a-unique-key-per-request");
var json = /* lang=json */ @"{
""clientReference"": ""inv-2026-000481"",
""documentType"": ""100"",
""number"": ""000481"",
""issueDate"": ""2026-10-08"",
""turnoverDate"": ""2026-10-08"",
""deliveryDate"": null,
""periodStart"": null,
""periodEnd"": null,
""notes"": null,
""header"": null,
""footer"": null,
""buyer"": {
""country"": ""MK"",
""taxNumber"": ""4012009123456"",
""vatNumber"": null,
""name"": ""Купувач ДОО"",
""address"": {
""street"": ""Илинденска"",
""number"": ""1"",
""postalCode"": ""1000"",
""city"": ""Скопје""
},
""subsidiaryCode"": null,
""subsidiaryName"": null,
""contact"": null,
""email"": ""faktura@buyer.mk""
},
""receiver"": null,
""references"": [],
""payment"": {
""typeCode"": ""1"",
""currency"": ""MKD"",
""dueDate"": ""2026-11-07"",
""dueDays"": 30,
""terms"": null,
""note"": null,
""exchangeRate"": null,
""exchangeRateDate"": null
},
""lines"": [
{
""sku"": null,
""description"": ""Консултантски услуги — септември 2026"",
""unit"": ""услуга"",
""quantity"": ""1"",
""unitPrice"": ""10000.00"",
""unitDiscount"": ""0"",
""vatPercent"": ""18"",
""taxIndicator"": ""1"",
""domesticProduct"": null
}
],
""advance"": null,
""expectedTotals"": {
""net"": ""10000.00"",
""vat"": ""1800.00"",
""gross"": ""11800.00"",
""currency"": ""MKD""
}
}";
request.Content = new StringContent(json, Encoding.UTF8, "application/json");
using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body); import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.efaktura.merot.com/v1/einvoices"))
.headers("Authorization", "Bearer YOUR_API_KEY", "Idempotency-Key", "a-unique-key-per-request", "Content-Type", "application/json")
.method("POST", HttpRequest.BodyPublishers.ofString(/* JSON */ "{ \"clientReference\": \"inv-2026-000481\", \"documentType\": \"100\", \"number\": \"000481\", \"issueDate\": \"2026-10-08\", \"turnoverDate\": \"2026-10-08\", \"deliveryDate\": null, \"periodStart\": null, \"periodEnd\": null, \"notes\": null, \"header\": null, \"footer\": null, \"buyer\": { \"country\": \"MK\", \"taxNumber\": \"4012009123456\", \"vatNumber\": null, \"name\": \"Купувач ДОО\", \"address\": { \"street\": \"Илинденска\", \"number\": \"1\", \"postalCode\": \"1000\", \"city\": \"Скопје\" }, \"subsidiaryCode\": null, \"subsidiaryName\": null, \"contact\": null, \"email\": \"faktura@buyer.mk\" }, \"receiver\": null, \"references\": [], \"payment\": { \"typeCode\": \"1\", \"currency\": \"MKD\", \"dueDate\": \"2026-11-07\", \"dueDays\": 30, \"terms\": null, \"note\": null, \"exchangeRate\": null, \"exchangeRateDate\": null }, \"lines\": [ { \"sku\": null, \"description\": \"Консултантски услуги — септември 2026\", \"unit\": \"услуга\", \"quantity\": \"1\", \"unitPrice\": \"10000.00\", \"unitDiscount\": \"0\", \"vatPercent\": \"18\", \"taxIndicator\": \"1\", \"domesticProduct\": null } ], \"advance\": null, \"expectedTotals\": { \"net\": \"10000.00\", \"vat\": \"1800.00\", \"gross\": \"11800.00\", \"currency\": \"MKD\" } }"))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body()); Валидирајте е-фактура без поднесување
# POST /v1/einvoices/validate
Ја извршува целосната проверка на правилата на УЈП и предпроверката во регистарот на купувачи (ЕДБ). Ништо не се испраќа до УЈП.
Параметри
X-Company-Id (header)stringЗадолжително кога вашиот клуч/токен има пристап до повеќе од една компанија.
Тело на барањето
clientReferencestringзадолжителноВаш сопствен идентификатор за овој документ, за идемпотентност.
documentTypestringзадолжителноКод од шифрарникот на УЈП за тип на документ (100 фактура, 110 кредитно известие, 130 аванс, 150/160 задолжница/друго, ...).
numberstringзадолжителноissueDatestringзадолжителноturnoverDatestringзадолжителноdeliveryDatestring | nullperiodStartstring | nullperiodEndstring | nullnotesstring | nullheaderstring | nullfooterstring | nullsellerobject | nullМоже да се постават само subsidiaryCode/contact/email — идентитетот на продавачот секогаш доаѓа од вашата компанија.
Прикажи вгнездени параметри
subsidiaryCodestring | nullcontactstring | nullemailstring | null
buyerobjectзадолжителноПрикажи вгнездени параметри
countrystringзадолжителноISO 3166-1 alpha-2 код на држава.
taxNumberstring | nullЕДБ.
foreignTaxNumberstring | nullvatNumberstring | nullnamestringзадолжителноaddressobjectзадолжителноПрикажи вгнездени параметри
streetstring | nullnumberstring | nullpostalCodestring | nullcitystring | null
subsidiaryCodestring | nullsubsidiaryNamestring | nullcontactstring | nullemailstring | null
receiverobject | nullПрикажи вгнездени параметри
countrystringзадолжителноISO 3166-1 alpha-2 код на држава.
taxNumberstring | nullЕДБ.
foreignTaxNumberstring | nullvatNumberstring | nullnamestringзадолжителноaddressobjectзадолжителноПрикажи вгнездени параметри
streetstring | nullnumberstring | nullpostalCodestring | nullcitystring | null
subsidiaryCodestring | nullsubsidiaryNamestring | nullcontactstring | nullemailstring | null
referencesarray of objectзадолжителноПрикажи вгнездени параметри
typestringзадолжителноКод од шифрарникот на УЈП за тип на референтен документ.
numberstringзадолжителноdatestring | null
paymentobjectзадолжителноПрикажи вгнездени параметри
typeCodestringзадолжителноdueDatestring | nulldueDaysinteger | nulltermsstring | nullnotestring | nullcurrencystringзадолжителноexchangeRatestring | nullexchangeRateDatestring | null
linesarray of objectзадолжителноПрикажи вгнездени параметри
skustring | nulldescriptionstringзадолжителноunitstring | nullquantitystringзадолжителноДецимален број како string.
unitPricestringзадолжителноДецимален износ како текстуална вредност (string), никогаш како JSON број.
unitDiscountstringДецимален износ како текстуална вредност (string), никогаш како JSON број.
vatPercentstringзадолжителноДецимален број како string, на пр. "18", "5", "0".
taxIndicatorstringзадолжителноКод од шифрарникот на УЈП за даночен индикатор.
domesticProductboolean | null
advanceobject | nullПрикажи вгнездени параметри
amountstringДецимален износ како текстуална вредност (string), никогаш како JSON број.
datestring | nulldescriptionstring | null
expectedTotalsobject | nullОпционално — ако е дадено и не се совпаѓа со вкупните износи пресметани од Merot, барањето враќа грешка 422 totals_mismatch.
Прикажи вгнездени параметри
netstringДецимален износ како текстуална вредност (string), никогаш како JSON број.
vatstringДецимален износ како текстуална вредност (string), никогаш како JSON број.
grossstringДецимален износ како текстуална вредност (string), никогаш како JSON број.
currencystring
Враќа
- 200
Валидно — пресметани вкупни износи и евентуални предупредувања што не блокираат.
- 422
validation_failed — грешки на ниво на поле, или totals_mismatch со пресметаните вкупни износи.
### POST /v1/einvoices/validate
Валидирајте е-фактура без поднесување
Ја извршува целосната проверка на правилата на УЈП и предпроверката во регистарот на купувачи (ЕДБ). Ништо не се испраќа до УЈП.
```bash
curl -X POST "https://api.efaktura.merot.com/v1/einvoices/validate" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
```
**Пример-одговор**
```json
{
"valid": true,
"totals": {
"net": "10000.00",
"vat": "1800.00",
"gross": "11800.00",
"currency": "MKD"
},
"warnings": []
}
``` cURL
curl -X POST "https://api.efaktura.merot.com/v1/einvoices/validate" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}' const response = await fetch("https://api.efaktura.merot.com/v1/einvoices/validate", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({}),
});
const data = await response.json();
console.log(data); import requests
response = requests.post(
"https://api.efaktura.merot.com/v1/einvoices/validate",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={},
)
print(response.json()) <?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.efaktura.merot.com/v1/einvoices/validate', [
'headers' => [
'Authorization' => 'Bearer YOUR_API_KEY',
'Content-Type' => 'application/json',
],
'json' => [],
]);
echo $response->getBody(); using System.Net.Http;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Post, "https://api.efaktura.merot.com/v1/einvoices/validate");
request.Headers.Add("Authorization", "Bearer YOUR_API_KEY");
var json = /* lang=json */ @"{}";
request.Content = new StringContent(json, Encoding.UTF8, "application/json");
using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body); import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.efaktura.merot.com/v1/einvoices/validate"))
.headers("Authorization", "Bearer YOUR_API_KEY", "Content-Type", "application/json")
.method("POST", HttpRequest.BodyPublishers.ofString(/* JSON */ "{}"))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body()); {
"valid": true,
"totals": {
"net": "10000.00",
"vat": "1800.00",
"gross": "11800.00",
"currency": "MKD"
},
"warnings": []
} Преземете е-фактура
# GET /v1/einvoices/{id}
Параметри
id (path)stringзадолжителноX-Company-Id (header)stringЗадолжително кога вашиот клуч/токен има пристап до повеќе од една компанија.
Враќа
- 200
Е-фактурата.
- 404
Не постои таков ресурс за оваа компанија.
### GET /v1/einvoices/{id}
Преземете е-фактура
```bash
curl -X GET "https://api.efaktura.merot.com/v1/einvoices/einv_123" \
-H "Authorization: Bearer YOUR_API_KEY"
```
**Пример-одговор**
```json
{
"id": "einv_01J9Z4M2N3P4Q5R6S7T8U9V0",
"object": "einvoice",
"companyId": "cmp_01J9Z3K2N4R5T6V7W8X9Y0Z1",
"environment": "sandbox",
"direction": "outbound",
"clientReference": "inv-2026-000481",
"documentType": "100",
"storno": "none",
"number": "000481",
"issueDate": "2026-10-08",
"status": "delivered",
"ujpStatus": {
"code": "01",
"name": "Delivered",
"at": "2026-10-08T09:31:04Z"
},
"euid": "MK-SB-2026-000481",
"qrLink": "https://efakturatest.ujp.gov.mk/…",
"ujpTimestamp": "2026-10-08T09:31:04Z",
"recipientIsEInvoiceUser": true,
"totals": {
"net": "10000.00",
"vat": "1800.00",
"gross": "11800.00",
"currency": "MKD"
},
"originalId": null,
"stornoIds": [],
"correctedById": null,
"signing": {
"state": "signed",
"requestId": "sr_01J9Z4H1G2F3E4D5C6B7A8Z9",
"expiresAt": null
},
"problems": null,
"issuedInOutage": false,
"createdAt": "2026-10-08T09:30:41Z",
"updatedAt": "2026-10-08T09:31:04Z"
}
``` cURL
curl -X GET "https://api.efaktura.merot.com/v1/einvoices/einv_123" \
-H "Authorization: Bearer YOUR_API_KEY" const response = await fetch("https://api.efaktura.merot.com/v1/einvoices/einv_123", {
method: "GET",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
},
});
const data = await response.json();
console.log(data); import requests
response = requests.get(
"https://api.efaktura.merot.com/v1/einvoices/einv_123",
headers={
"Authorization": "Bearer YOUR_API_KEY",
},
)
print(response.json()) <?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.efaktura.merot.com/v1/einvoices/einv_123', [
'headers' => [
'Authorization' => 'Bearer YOUR_API_KEY',
],
]);
echo $response->getBody(); using System.Net.Http;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Get, "https://api.efaktura.merot.com/v1/einvoices/einv_123");
request.Headers.Add("Authorization", "Bearer YOUR_API_KEY");
using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body); import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.efaktura.merot.com/v1/einvoices/einv_123"))
.headers("Authorization", "Bearer YOUR_API_KEY")
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body()); {
"id": "einv_01J9Z4M2N3P4Q5R6S7T8U9V0",
"object": "einvoice",
"companyId": "cmp_01J9Z3K2N4R5T6V7W8X9Y0Z1",
"environment": "sandbox",
"direction": "outbound",
"clientReference": "inv-2026-000481",
"documentType": "100",
"storno": "none",
"number": "000481",
"issueDate": "2026-10-08",
"status": "delivered",
"ujpStatus": {
"code": "01",
"name": "Delivered",
"at": "2026-10-08T09:31:04Z"
},
"euid": "MK-SB-2026-000481",
"qrLink": "https://efakturatest.ujp.gov.mk/…",
"ujpTimestamp": "2026-10-08T09:31:04Z",
"recipientIsEInvoiceUser": true,
"totals": {
"net": "10000.00",
"vat": "1800.00",
"gross": "11800.00",
"currency": "MKD"
},
"originalId": null,
"stornoIds": [],
"correctedById": null,
"signing": {
"state": "signed",
"requestId": "sr_01J9Z4H1G2F3E4D5C6B7A8Z9",
"expiresAt": null
},
"problems": null,
"issuedInOutage": false,
"createdAt": "2026-10-08T09:30:41Z",
"updatedAt": "2026-10-08T09:31:04Z"
} Историја на статуси
# GET /v1/einvoices/{id}/status-history
Параметри
id (path)stringзадолжителноX-Company-Id (header)stringЗадолжително кога вашиот клуч/токен има пристап до повеќе од една компанија.
Враќа
- 200
Настани по статус, по редослед.
- 404
Не постои таков ресурс за оваа компанија.
### GET /v1/einvoices/{id}/status-history
Историја на статуси
```bash
curl -X GET "https://api.efaktura.merot.com/v1/einvoices/einv_123/status-history" \
-H "Authorization: Bearer YOUR_API_KEY"
```
**Пример-одговор**
```json
{
"data": [
{
"code": "01",
"name": "Delivered",
"at": "2026-10-08T09:31:04Z",
"source": "send",
"rejectReason": null,
"comment": null
},
{
"code": "04",
"name": "Auto-accepted",
"at": "2026-11-10T00:05:00Z",
"source": "changes",
"rejectReason": null,
"comment": null
}
]
}
``` cURL
curl -X GET "https://api.efaktura.merot.com/v1/einvoices/einv_123/status-history" \
-H "Authorization: Bearer YOUR_API_KEY" const response = await fetch("https://api.efaktura.merot.com/v1/einvoices/einv_123/status-history", {
method: "GET",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
},
});
const data = await response.json();
console.log(data); import requests
response = requests.get(
"https://api.efaktura.merot.com/v1/einvoices/einv_123/status-history",
headers={
"Authorization": "Bearer YOUR_API_KEY",
},
)
print(response.json()) <?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.efaktura.merot.com/v1/einvoices/einv_123/status-history', [
'headers' => [
'Authorization' => 'Bearer YOUR_API_KEY',
],
]);
echo $response->getBody(); using System.Net.Http;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Get, "https://api.efaktura.merot.com/v1/einvoices/einv_123/status-history");
request.Headers.Add("Authorization", "Bearer YOUR_API_KEY");
using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body); import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.efaktura.merot.com/v1/einvoices/einv_123/status-history"))
.headers("Authorization", "Bearer YOUR_API_KEY")
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body()); {
"data": [
{
"code": "01",
"name": "Delivered",
"at": "2026-10-08T09:31:04Z",
"source": "send",
"rejectReason": null,
"comment": null
},
{
"code": "04",
"name": "Auto-accepted",
"at": "2026-11-10T00:05:00Z",
"source": "changes",
"rejectReason": null,
"comment": null
}
]
} Присилно освежување на статусот од УЈП
# POST /v1/einvoices/{id}/refresh-status
Бара вашиот агент за потпишување да е онлајн (потребен е потпис за читање за да се провери статусот кај УЈП).
Параметри
id (path)stringзадолжителноX-Company-Id (header)stringЗадолжително кога вашиот клуч/токен има пристап до повеќе од една компанија.
Враќа
- 200
Е-фактурата со нејзиниот тековен статус.
- 409
signing_agent_unavailable — ниту еден агент за потпишување не одговори навреме.
### POST /v1/einvoices/{id}/refresh-status
Присилно освежување на статусот од УЈП
Бара вашиот агент за потпишување да е онлајн (потребен е потпис за читање за да се провери статусот кај УЈП).
```bash
curl -X POST "https://api.efaktura.merot.com/v1/einvoices/einv_123/refresh-status" \
-H "Authorization: Bearer YOUR_API_KEY"
``` cURL
curl -X POST "https://api.efaktura.merot.com/v1/einvoices/einv_123/refresh-status" \
-H "Authorization: Bearer YOUR_API_KEY" const response = await fetch("https://api.efaktura.merot.com/v1/einvoices/einv_123/refresh-status", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
},
});
const data = await response.json();
console.log(data); import requests
response = requests.post(
"https://api.efaktura.merot.com/v1/einvoices/einv_123/refresh-status",
headers={
"Authorization": "Bearer YOUR_API_KEY",
},
)
print(response.json()) <?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.efaktura.merot.com/v1/einvoices/einv_123/refresh-status', [
'headers' => [
'Authorization' => 'Bearer YOUR_API_KEY',
],
]);
echo $response->getBody(); using System.Net.Http;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Post, "https://api.efaktura.merot.com/v1/einvoices/einv_123/refresh-status");
request.Headers.Add("Authorization", "Bearer YOUR_API_KEY");
using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body); import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.efaktura.merot.com/v1/einvoices/einv_123/refresh-status"))
.headers("Authorization", "Bearer YOUR_API_KEY")
.method("POST", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body()); Сторнирајте е-фактура
# POST /v1/einvoices/{id}/storno
Создава нов документ со docStorno: 1, причина за сторно (шифра S-x) и огледална референца кон оригиналниот EUID. Дозволено само од состојбите delivered, accepted или auto_accepted.
Параметри
id (path)stringзадолжителноX-Company-Id (header)stringЗадолжително кога вашиот клуч/токен има пристап до повеќе од една компанија.
Idempotency-Key (header)stringзадолжителноЗадолжително за секое POST барање освен `/v1/oauth/token`. Употребете го истиот клуч за безбедно повторување.
Тело на барањето
clientReferencestringзадолжителноnumberstringзадолжителноissueDatestringзадолжителноreasonCodestringзадолжителноUJP void-reason codebook code (S-x).
commentstring | null
Враќа
- 202
Сторно-документот е создаден.
- 409
period_closed или неважечка почетна состојба за сторно.
### POST /v1/einvoices/{id}/storno
Сторнирајте е-фактура
Создава нов документ со `docStorno: 1`, причина за сторно (шифра `S-x`) и огледална
референца кон оригиналниот EUID. Дозволено само од состојбите `delivered`, `accepted`
или `auto_accepted`.
```bash
curl -X POST "https://api.efaktura.merot.com/v1/einvoices/einv_123/storno" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Idempotency-Key: a-unique-key-per-request" \
-H "Content-Type: application/json" \
-d '{
"clientReference": "inv-2026-000481-storno",
"number": "ST-000481",
"issueDate": "2026-10-09",
"reasonCode": "S-1",
"comment": "Issued in error"
}'
``` cURL
curl -X POST "https://api.efaktura.merot.com/v1/einvoices/einv_123/storno" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Idempotency-Key: a-unique-key-per-request" \
-H "Content-Type: application/json" \
-d '{
"clientReference": "inv-2026-000481-storno",
"number": "ST-000481",
"issueDate": "2026-10-09",
"reasonCode": "S-1",
"comment": "Issued in error"
}' const response = await fetch("https://api.efaktura.merot.com/v1/einvoices/einv_123/storno", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Idempotency-Key": "a-unique-key-per-request",
"Content-Type": "application/json",
},
body: JSON.stringify({
"clientReference": "inv-2026-000481-storno",
"number": "ST-000481",
"issueDate": "2026-10-09",
"reasonCode": "S-1",
"comment": "Issued in error"
}),
});
const data = await response.json();
console.log(data); import requests
response = requests.post(
"https://api.efaktura.merot.com/v1/einvoices/einv_123/storno",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Idempotency-Key": "a-unique-key-per-request",
"Content-Type": "application/json",
},
json={
"clientReference": "inv-2026-000481-storno",
"number": "ST-000481",
"issueDate": "2026-10-09",
"reasonCode": "S-1",
"comment": "Issued in error"
},
)
print(response.json()) <?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.efaktura.merot.com/v1/einvoices/einv_123/storno', [
'headers' => [
'Authorization' => 'Bearer YOUR_API_KEY',
'Idempotency-Key' => 'a-unique-key-per-request',
'Content-Type' => 'application/json',
],
'json' => [
'clientReference' => 'inv-2026-000481-storno',
'number' => 'ST-000481',
'issueDate' => '2026-10-09',
'reasonCode' => 'S-1',
'comment' => 'Issued in error',
],
]);
echo $response->getBody(); using System.Net.Http;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Post, "https://api.efaktura.merot.com/v1/einvoices/einv_123/storno");
request.Headers.Add("Authorization", "Bearer YOUR_API_KEY");
request.Headers.Add("Idempotency-Key", "a-unique-key-per-request");
var json = /* lang=json */ @"{
""clientReference"": ""inv-2026-000481-storno"",
""number"": ""ST-000481"",
""issueDate"": ""2026-10-09"",
""reasonCode"": ""S-1"",
""comment"": ""Issued in error""
}";
request.Content = new StringContent(json, Encoding.UTF8, "application/json");
using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body); import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.efaktura.merot.com/v1/einvoices/einv_123/storno"))
.headers("Authorization", "Bearer YOUR_API_KEY", "Idempotency-Key", "a-unique-key-per-request", "Content-Type", "application/json")
.method("POST", HttpRequest.BodyPublishers.ofString(/* JSON */ "{ \"clientReference\": \"inv-2026-000481-storno\", \"number\": \"ST-000481\", \"issueDate\": \"2026-10-09\", \"reasonCode\": \"S-1\", \"comment\": \"Issued in error\" }"))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body()); Коригирајте е-фактура
# POST /v1/einvoices/{id}/correction
Создава целосен заменски документ со docStorno: 2 и причина за корекција (шифра C0x).
Параметри
id (path)stringзадолжителноX-Company-Id (header)stringЗадолжително кога вашиот клуч/токен има пристап до повеќе од една компанија.
Idempotency-Key (header)stringзадолжителноЗадолжително за секое POST барање освен `/v1/oauth/token`. Употребете го истиот клуч за безбедно повторување.
Тело на барањето
reasonCodestringзадолжителноUJP correction-reason codebook code (C0x).
commentstring | nullreplacementobjectзадолжителноПрикажи вгнездени параметри
clientReferencestringзадолжителноВаш сопствен идентификатор за овој документ, за идемпотентност.
documentTypestringзадолжителноКод од шифрарникот на УЈП за тип на документ (100 фактура, 110 кредитно известие, 130 аванс, 150/160 задолжница/друго, ...).
numberstringзадолжителноissueDatestringзадолжителноturnoverDatestringзадолжителноdeliveryDatestring | nullperiodStartstring | nullperiodEndstring | nullnotesstring | nullheaderstring | nullfooterstring | nullsellerobject | nullМоже да се постават само subsidiaryCode/contact/email — идентитетот на продавачот секогаш доаѓа од вашата компанија.
Прикажи вгнездени параметри
subsidiaryCodestring | nullcontactstring | nullemailstring | null
buyerobjectзадолжителноПрикажи вгнездени параметри
countrystringзадолжителноISO 3166-1 alpha-2 код на држава.
taxNumberstring | nullЕДБ.
foreignTaxNumberstring | nullvatNumberstring | nullnamestringзадолжителноaddressobjectзадолжителноПрикажи вгнездени параметри
streetstring | nullnumberstring | nullpostalCodestring | nullcitystring | null
subsidiaryCodestring | nullsubsidiaryNamestring | nullcontactstring | nullemailstring | null
receiverobject | nullПрикажи вгнездени параметри
countrystringзадолжителноISO 3166-1 alpha-2 код на држава.
taxNumberstring | nullЕДБ.
foreignTaxNumberstring | nullvatNumberstring | nullnamestringзадолжителноaddressobjectзадолжителноПрикажи вгнездени параметри
streetstring | nullnumberstring | nullpostalCodestring | nullcitystring | null
subsidiaryCodestring | nullsubsidiaryNamestring | nullcontactstring | nullemailstring | null
referencesarray of objectзадолжителноПрикажи вгнездени параметри
typestringзадолжителноКод од шифрарникот на УЈП за тип на референтен документ.
numberstringзадолжителноdatestring | null
paymentobjectзадолжителноПрикажи вгнездени параметри
typeCodestringзадолжителноdueDatestring | nulldueDaysinteger | nulltermsstring | nullnotestring | nullcurrencystringзадолжителноexchangeRatestring | nullexchangeRateDatestring | null
linesarray of objectзадолжителноПрикажи вгнездени параметри
skustring | nulldescriptionstringзадолжителноunitstring | nullquantitystringзадолжителноДецимален број како string.
unitPricestringзадолжителноДецимален износ како текстуална вредност (string), никогаш како JSON број.
unitDiscountstringДецимален износ како текстуална вредност (string), никогаш како JSON број.
vatPercentstringзадолжителноДецимален број како string, на пр. "18", "5", "0".
taxIndicatorstringзадолжителноКод од шифрарникот на УЈП за даночен индикатор.
domesticProductboolean | null
advanceobject | nullПрикажи вгнездени параметри
amountstringДецимален износ како текстуална вредност (string), никогаш како JSON број.
datestring | nulldescriptionstring | null
expectedTotalsobject | nullОпционално — ако е дадено и не се совпаѓа со вкупните износи пресметани од Merot, барањето враќа грешка 422 totals_mismatch.
Прикажи вгнездени параметри
netstringДецимален износ како текстуална вредност (string), никогаш како JSON број.
vatstringДецимален износ како текстуална вредност (string), никогаш како JSON број.
grossstringДецимален износ како текстуална вредност (string), никогаш како JSON број.
currencystring
Враќа
- 202
Корекцискиот документ е создаден.
### POST /v1/einvoices/{id}/correction
Коригирајте е-фактура
Создава целосен заменски документ со `docStorno: 2` и причина за корекција (шифра `C0x`).
```bash
curl -X POST "https://api.efaktura.merot.com/v1/einvoices/einv_123/correction" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Idempotency-Key: a-unique-key-per-request" \
-H "Content-Type: application/json" \
-d '{}'
``` cURL
curl -X POST "https://api.efaktura.merot.com/v1/einvoices/einv_123/correction" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Idempotency-Key: a-unique-key-per-request" \
-H "Content-Type: application/json" \
-d '{}' const response = await fetch("https://api.efaktura.merot.com/v1/einvoices/einv_123/correction", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Idempotency-Key": "a-unique-key-per-request",
"Content-Type": "application/json",
},
body: JSON.stringify({}),
});
const data = await response.json();
console.log(data); import requests
response = requests.post(
"https://api.efaktura.merot.com/v1/einvoices/einv_123/correction",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Idempotency-Key": "a-unique-key-per-request",
"Content-Type": "application/json",
},
json={},
)
print(response.json()) <?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.efaktura.merot.com/v1/einvoices/einv_123/correction', [
'headers' => [
'Authorization' => 'Bearer YOUR_API_KEY',
'Idempotency-Key' => 'a-unique-key-per-request',
'Content-Type' => 'application/json',
],
'json' => [],
]);
echo $response->getBody(); using System.Net.Http;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Post, "https://api.efaktura.merot.com/v1/einvoices/einv_123/correction");
request.Headers.Add("Authorization", "Bearer YOUR_API_KEY");
request.Headers.Add("Idempotency-Key", "a-unique-key-per-request");
var json = /* lang=json */ @"{}";
request.Content = new StringContent(json, Encoding.UTF8, "application/json");
using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body); import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.efaktura.merot.com/v1/einvoices/einv_123/correction"))
.headers("Authorization", "Bearer YOUR_API_KEY", "Idempotency-Key", "a-unique-key-per-request", "Content-Type", "application/json")
.method("POST", HttpRequest.BodyPublishers.ofString(/* JSON */ "{}"))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body()); Преземете го PDF-приказот од УЈП
# GET /v1/einvoices/{id}/pdf
Параметри
id (path)stringзадолжителноX-Company-Id (header)stringЗадолжително кога вашиот клуч/токен има пристап до повеќе од една компанија.
Враќа
- 200
PDF-от (прикажан од УЈП, архивиран од Merot).
- 409
pdf_not_ready — документот сè уште не е финализиран кај УЈП.
### GET /v1/einvoices/{id}/pdf
Преземете го PDF-приказот од УЈП
```bash
curl -X GET "https://api.efaktura.merot.com/v1/einvoices/einv_123/pdf" \
-H "Authorization: Bearer YOUR_API_KEY"
``` cURL
curl -X GET "https://api.efaktura.merot.com/v1/einvoices/einv_123/pdf" \
-H "Authorization: Bearer YOUR_API_KEY" const response = await fetch("https://api.efaktura.merot.com/v1/einvoices/einv_123/pdf", {
method: "GET",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
},
});
const data = await response.json();
console.log(data); import requests
response = requests.get(
"https://api.efaktura.merot.com/v1/einvoices/einv_123/pdf",
headers={
"Authorization": "Bearer YOUR_API_KEY",
},
)
print(response.json()) <?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.efaktura.merot.com/v1/einvoices/einv_123/pdf', [
'headers' => [
'Authorization' => 'Bearer YOUR_API_KEY',
],
]);
echo $response->getBody(); using System.Net.Http;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Get, "https://api.efaktura.merot.com/v1/einvoices/einv_123/pdf");
request.Headers.Add("Authorization", "Bearer YOUR_API_KEY");
using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body); import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.efaktura.merot.com/v1/einvoices/einv_123/pdf"))
.headers("Authorization", "Bearer YOUR_API_KEY")
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body()); application/pdf — бинарен одговор (датотека), нема JSON тело за преглед.
Влезно сандаче
Влезни е-фактури и одлуката за прифаќање/одбивање.
Листа на влезни е-фактури
# GET /v1/inbox
Параметри
X-Company-Id (header)stringЗадолжително кога вашиот клуч/токен има пристап до повеќе од една компанија.
status (query)enumpendingacceptedauto_acceptedrejecteddeadlineBefore (query)stringcursor (query)string
Враќа
- 200
Страница со влезни документи.
### GET /v1/inbox
Листа на влезни е-фактури
```bash
curl -X GET "https://api.efaktura.merot.com/v1/inbox" \
-H "Authorization: Bearer YOUR_API_KEY"
```
**Пример-одговор**
```json
{
"data": [
{
"id": "inbd_01J9Z5A2B3C4D5E6F7G8H9J0",
"object": "inbox_document",
"companyId": "cmp_01J9Z3K2N4R5T6V7W8X9Y0Z1",
"euid": "MK-SB-2026-000512",
"documentType": "100",
"number": "SL-000512",
"issueDate": "2026-10-09",
"transactionDate": "2026-10-09",
"seller": {
"country": "MK",
"taxNumber": "4030007636033",
"vatNumber": null,
"name": "Добавувач ДООЕЛ",
"address": {
"street": "Партизанска",
"number": "12",
"postalCode": "1000",
"city": "Скопје"
},
"subsidiaryCode": null,
"subsidiaryName": null,
"contact": null,
"email": null
},
"totals": {
"net": "5000.00",
"vat": "900.00",
"gross": "5900.00",
"currency": "MKD"
},
"ujpStatus": {
"code": "00",
"name": "Received",
"at": "2026-10-09T14:02:11Z"
},
"decision": {
"state": "pending",
"reasonCode": null,
"comment": null,
"decidedAt": null
},
"decideBy": "2026-11-10",
"daysLeft": 32,
"receivedAt": "2026-10-09T14:02:11Z",
"links": {
"payload": "/v1/inbox/inbd_01J9Z5A2B3C4D5E6F7G8H9J0/payload",
"pdf": "/v1/inbox/inbd_01J9Z5A2B3C4D5E6F7G8H9J0/pdf"
}
}
]
}
``` cURL
curl -X GET "https://api.efaktura.merot.com/v1/inbox" \
-H "Authorization: Bearer YOUR_API_KEY" const response = await fetch("https://api.efaktura.merot.com/v1/inbox", {
method: "GET",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
},
});
const data = await response.json();
console.log(data); import requests
response = requests.get(
"https://api.efaktura.merot.com/v1/inbox",
headers={
"Authorization": "Bearer YOUR_API_KEY",
},
)
print(response.json()) <?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.efaktura.merot.com/v1/inbox', [
'headers' => [
'Authorization' => 'Bearer YOUR_API_KEY',
],
]);
echo $response->getBody(); using System.Net.Http;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Get, "https://api.efaktura.merot.com/v1/inbox");
request.Headers.Add("Authorization", "Bearer YOUR_API_KEY");
using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body); import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.efaktura.merot.com/v1/inbox"))
.headers("Authorization", "Bearer YOUR_API_KEY")
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body()); {
"data": [
{
"id": "inbd_01J9Z5A2B3C4D5E6F7G8H9J0",
"object": "inbox_document",
"companyId": "cmp_01J9Z3K2N4R5T6V7W8X9Y0Z1",
"euid": "MK-SB-2026-000512",
"documentType": "100",
"number": "SL-000512",
"issueDate": "2026-10-09",
"transactionDate": "2026-10-09",
"seller": {
"country": "MK",
"taxNumber": "4030007636033",
"vatNumber": null,
"name": "Добавувач ДООЕЛ",
"address": {
"street": "Партизанска",
"number": "12",
"postalCode": "1000",
"city": "Скопје"
},
"subsidiaryCode": null,
"subsidiaryName": null,
"contact": null,
"email": null
},
"totals": {
"net": "5000.00",
"vat": "900.00",
"gross": "5900.00",
"currency": "MKD"
},
"ujpStatus": {
"code": "00",
"name": "Received",
"at": "2026-10-09T14:02:11Z"
},
"decision": {
"state": "pending",
"reasonCode": null,
"comment": null,
"decidedAt": null
},
"decideBy": "2026-11-10",
"daysLeft": 32,
"receivedAt": "2026-10-09T14:02:11Z",
"links": {
"payload": "/v1/inbox/inbd_01J9Z5A2B3C4D5E6F7G8H9J0/payload",
"pdf": "/v1/inbox/inbd_01J9Z5A2B3C4D5E6F7G8H9J0/pdf"
}
}
]
} Преземете влезна е-фактура
# GET /v1/inbox/{id}
Параметри
id (path)stringзадолжителноX-Company-Id (header)stringЗадолжително кога вашиот клуч/токен има пристап до повеќе од една компанија.
Враќа
- 200
Влезниот документ.
- 404
Не постои таков ресурс за оваа компанија.
### GET /v1/inbox/{id}
Преземете влезна е-фактура
```bash
curl -X GET "https://api.efaktura.merot.com/v1/inbox/einv_123" \
-H "Authorization: Bearer YOUR_API_KEY"
```
**Пример-одговор**
```json
{
"id": "inbd_01J9Z5A2B3C4D5E6F7G8H9J0",
"object": "inbox_document",
"companyId": "cmp_01J9Z3K2N4R5T6V7W8X9Y0Z1",
"euid": "MK-SB-2026-000512",
"documentType": "100",
"number": "SL-000512",
"issueDate": "2026-10-09",
"transactionDate": "2026-10-09",
"seller": {
"country": "MK",
"taxNumber": "4030007636033",
"vatNumber": null,
"name": "Добавувач ДООЕЛ",
"address": {
"street": "Партизанска",
"number": "12",
"postalCode": "1000",
"city": "Скопје"
},
"subsidiaryCode": null,
"subsidiaryName": null,
"contact": null,
"email": null
},
"totals": {
"net": "5000.00",
"vat": "900.00",
"gross": "5900.00",
"currency": "MKD"
},
"ujpStatus": {
"code": "00",
"name": "Received",
"at": "2026-10-09T14:02:11Z"
},
"decision": {
"state": "pending",
"reasonCode": null,
"comment": null,
"decidedAt": null
},
"decideBy": "2026-11-10",
"daysLeft": 32,
"receivedAt": "2026-10-09T14:02:11Z",
"links": {
"payload": "/v1/inbox/inbd_01J9Z5A2B3C4D5E6F7G8H9J0/payload",
"pdf": "/v1/inbox/inbd_01J9Z5A2B3C4D5E6F7G8H9J0/pdf"
}
}
``` cURL
curl -X GET "https://api.efaktura.merot.com/v1/inbox/einv_123" \
-H "Authorization: Bearer YOUR_API_KEY" const response = await fetch("https://api.efaktura.merot.com/v1/inbox/einv_123", {
method: "GET",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
},
});
const data = await response.json();
console.log(data); import requests
response = requests.get(
"https://api.efaktura.merot.com/v1/inbox/einv_123",
headers={
"Authorization": "Bearer YOUR_API_KEY",
},
)
print(response.json()) <?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.efaktura.merot.com/v1/inbox/einv_123', [
'headers' => [
'Authorization' => 'Bearer YOUR_API_KEY',
],
]);
echo $response->getBody(); using System.Net.Http;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Get, "https://api.efaktura.merot.com/v1/inbox/einv_123");
request.Headers.Add("Authorization", "Bearer YOUR_API_KEY");
using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body); import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.efaktura.merot.com/v1/inbox/einv_123"))
.headers("Authorization", "Bearer YOUR_API_KEY")
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body()); {
"id": "inbd_01J9Z5A2B3C4D5E6F7G8H9J0",
"object": "inbox_document",
"companyId": "cmp_01J9Z3K2N4R5T6V7W8X9Y0Z1",
"euid": "MK-SB-2026-000512",
"documentType": "100",
"number": "SL-000512",
"issueDate": "2026-10-09",
"transactionDate": "2026-10-09",
"seller": {
"country": "MK",
"taxNumber": "4030007636033",
"vatNumber": null,
"name": "Добавувач ДООЕЛ",
"address": {
"street": "Партизанска",
"number": "12",
"postalCode": "1000",
"city": "Скопје"
},
"subsidiaryCode": null,
"subsidiaryName": null,
"contact": null,
"email": null
},
"totals": {
"net": "5000.00",
"vat": "900.00",
"gross": "5900.00",
"currency": "MKD"
},
"ujpStatus": {
"code": "00",
"name": "Received",
"at": "2026-10-09T14:02:11Z"
},
"decision": {
"state": "pending",
"reasonCode": null,
"comment": null,
"decidedAt": null
},
"decideBy": "2026-11-10",
"daysLeft": 32,
"receivedAt": "2026-10-09T14:02:11Z",
"links": {
"payload": "/v1/inbox/inbd_01J9Z5A2B3C4D5E6F7G8H9J0/payload",
"pdf": "/v1/inbox/inbd_01J9Z5A2B3C4D5E6F7G8H9J0/pdf"
}
} Прифатете влезна е-фактура
# POST /v1/inbox/{id}/accept
Молчењето до 10-ти од месецот по датумот на трансакцијата исто така се смета за прифаќање (УЈП автоматски ја прифаќа) — видете Животен циклус на документ. Експлицитното прифаќање не бара причина.
Параметри
id (path)stringзадолжителноX-Company-Id (header)stringЗадолжително кога вашиот клуч/токен има пристап до повеќе од една компанија.
Idempotency-Key (header)stringзадолжителноЗадолжително за секое POST барање освен `/v1/oauth/token`. Употребете го истиот клуч за безбедно повторување.
Тело на барањето
commentstring | null
Враќа
- 202
Одлуката е запишана (се чека потпис од вашиот агент за потпишување).
- 409
decision_deadline_passed — 10-ти веќе поминал (УЈП веќе автоматски прифатил).
### POST /v1/inbox/{id}/accept
Прифатете влезна е-фактура
Молчењето до 10-ти од месецот **по** датумот на трансакцијата исто така се смета за
прифаќање (УЈП автоматски ја прифаќа) — видете [Животен циклус на документ](/mk/efaktura/lifecycle).
Експлицитното прифаќање не бара причина.
```bash
curl -X POST "https://api.efaktura.merot.com/v1/inbox/einv_123/accept" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Idempotency-Key: a-unique-key-per-request" \
-H "Content-Type: application/json" \
-d '{}'
``` cURL
curl -X POST "https://api.efaktura.merot.com/v1/inbox/einv_123/accept" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Idempotency-Key: a-unique-key-per-request" \
-H "Content-Type: application/json" \
-d '{}' const response = await fetch("https://api.efaktura.merot.com/v1/inbox/einv_123/accept", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Idempotency-Key": "a-unique-key-per-request",
"Content-Type": "application/json",
},
body: JSON.stringify({}),
});
const data = await response.json();
console.log(data); import requests
response = requests.post(
"https://api.efaktura.merot.com/v1/inbox/einv_123/accept",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Idempotency-Key": "a-unique-key-per-request",
"Content-Type": "application/json",
},
json={},
)
print(response.json()) <?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.efaktura.merot.com/v1/inbox/einv_123/accept', [
'headers' => [
'Authorization' => 'Bearer YOUR_API_KEY',
'Idempotency-Key' => 'a-unique-key-per-request',
'Content-Type' => 'application/json',
],
'json' => [],
]);
echo $response->getBody(); using System.Net.Http;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Post, "https://api.efaktura.merot.com/v1/inbox/einv_123/accept");
request.Headers.Add("Authorization", "Bearer YOUR_API_KEY");
request.Headers.Add("Idempotency-Key", "a-unique-key-per-request");
var json = /* lang=json */ @"{}";
request.Content = new StringContent(json, Encoding.UTF8, "application/json");
using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body); import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.efaktura.merot.com/v1/inbox/einv_123/accept"))
.headers("Authorization", "Bearer YOUR_API_KEY", "Idempotency-Key", "a-unique-key-per-request", "Content-Type", "application/json")
.method("POST", HttpRequest.BodyPublishers.ofString(/* JSON */ "{}"))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body()); Одбијте влезна е-фактура
# POST /v1/inbox/{id}/reject
Параметри
id (path)stringзадолжителноX-Company-Id (header)stringЗадолжително кога вашиот клуч/токен има пристап до повеќе од една компанија.
Idempotency-Key (header)stringзадолжителноЗадолжително за секое POST барање освен `/v1/oauth/token`. Употребете го истиот клуч за безбедно повторување.
Тело на барањето
reasonCodestringзадолжителноUJP reject-reason codebook code (O-1…O-7).
commentstring | null
Враќа
- 202
Одлуката е запишана.
- 409
decision_deadline_passed
### POST /v1/inbox/{id}/reject
Одбијте влезна е-фактура
```bash
curl -X POST "https://api.efaktura.merot.com/v1/inbox/einv_123/reject" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Idempotency-Key: a-unique-key-per-request" \
-H "Content-Type: application/json" \
-d '{
"reasonCode": "O-3",
"comment": "Goods not received"
}'
``` cURL
curl -X POST "https://api.efaktura.merot.com/v1/inbox/einv_123/reject" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Idempotency-Key: a-unique-key-per-request" \
-H "Content-Type: application/json" \
-d '{
"reasonCode": "O-3",
"comment": "Goods not received"
}' const response = await fetch("https://api.efaktura.merot.com/v1/inbox/einv_123/reject", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Idempotency-Key": "a-unique-key-per-request",
"Content-Type": "application/json",
},
body: JSON.stringify({
"reasonCode": "O-3",
"comment": "Goods not received"
}),
});
const data = await response.json();
console.log(data); import requests
response = requests.post(
"https://api.efaktura.merot.com/v1/inbox/einv_123/reject",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Idempotency-Key": "a-unique-key-per-request",
"Content-Type": "application/json",
},
json={
"reasonCode": "O-3",
"comment": "Goods not received"
},
)
print(response.json()) <?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.efaktura.merot.com/v1/inbox/einv_123/reject', [
'headers' => [
'Authorization' => 'Bearer YOUR_API_KEY',
'Idempotency-Key' => 'a-unique-key-per-request',
'Content-Type' => 'application/json',
],
'json' => [
'reasonCode' => 'O-3',
'comment' => 'Goods not received',
],
]);
echo $response->getBody(); using System.Net.Http;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Post, "https://api.efaktura.merot.com/v1/inbox/einv_123/reject");
request.Headers.Add("Authorization", "Bearer YOUR_API_KEY");
request.Headers.Add("Idempotency-Key", "a-unique-key-per-request");
var json = /* lang=json */ @"{
""reasonCode"": ""O-3"",
""comment"": ""Goods not received""
}";
request.Content = new StringContent(json, Encoding.UTF8, "application/json");
using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body); import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.efaktura.merot.com/v1/inbox/einv_123/reject"))
.headers("Authorization", "Bearer YOUR_API_KEY", "Idempotency-Key", "a-unique-key-per-request", "Content-Type", "application/json")
.method("POST", HttpRequest.BodyPublishers.ofString(/* JSON */ "{ \"reasonCode\": \"O-3\", \"comment\": \"Goods not received\" }"))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body()); Преземете го точниот JSON од УЈП
# GET /v1/inbox/{id}/payload
Параметри
id (path)stringзадолжителноX-Company-Id (header)stringЗадолжително кога вашиот клуч/токен има пристап до повеќе од една компанија.
Враќа
- 200
Оригиналниот JSON на продавачот, непроменет.
### GET /v1/inbox/{id}/payload
Преземете го точниот JSON од УЈП
```bash
curl -X GET "https://api.efaktura.merot.com/v1/inbox/einv_123/payload" \
-H "Authorization: Bearer YOUR_API_KEY"
``` cURL
curl -X GET "https://api.efaktura.merot.com/v1/inbox/einv_123/payload" \
-H "Authorization: Bearer YOUR_API_KEY" const response = await fetch("https://api.efaktura.merot.com/v1/inbox/einv_123/payload", {
method: "GET",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
},
});
const data = await response.json();
console.log(data); import requests
response = requests.get(
"https://api.efaktura.merot.com/v1/inbox/einv_123/payload",
headers={
"Authorization": "Bearer YOUR_API_KEY",
},
)
print(response.json()) <?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.efaktura.merot.com/v1/inbox/einv_123/payload', [
'headers' => [
'Authorization' => 'Bearer YOUR_API_KEY',
],
]);
echo $response->getBody(); using System.Net.Http;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Get, "https://api.efaktura.merot.com/v1/inbox/einv_123/payload");
request.Headers.Add("Authorization", "Bearer YOUR_API_KEY");
using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body); import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.efaktura.merot.com/v1/inbox/einv_123/payload"))
.headers("Authorization", "Bearer YOUR_API_KEY")
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body()); Архива
10-годишната WORM архива на секој испратен и примен документ.
Листа на архивирани артефакти за документ
# GET /v1/archive/einvoices/{id}
Прифаќа ID и на излезен и на влезен документ.
Параметри
id (path)stringзадолжителноX-Company-Id (header)stringЗадолжително кога вашиот клуч/токен има пристап до повеќе од една компанија.
Враќа
- 200
Артефактите на документот.
- 404
Не постои таков ресурс за оваа компанија.
### GET /v1/archive/einvoices/{id}
Листа на архивирани артефакти за документ
Прифаќа ID и на излезен и на влезен документ.
```bash
curl -X GET "https://api.efaktura.merot.com/v1/archive/einvoices/einv_123" \
-H "Authorization: Bearer YOUR_API_KEY"
```
**Пример-одговор**
```json
{
"items": [
{
"kind": "json",
"sha256": "9f2b...a01c",
"size": 2140,
"contentType": "application/json",
"retainUntil": "2036-10-08",
"url": "https://archive.efaktura.merot.com/…?X-Amz-Expires=900"
}
]
}
``` cURL
curl -X GET "https://api.efaktura.merot.com/v1/archive/einvoices/einv_123" \
-H "Authorization: Bearer YOUR_API_KEY" const response = await fetch("https://api.efaktura.merot.com/v1/archive/einvoices/einv_123", {
method: "GET",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
},
});
const data = await response.json();
console.log(data); import requests
response = requests.get(
"https://api.efaktura.merot.com/v1/archive/einvoices/einv_123",
headers={
"Authorization": "Bearer YOUR_API_KEY",
},
)
print(response.json()) <?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.efaktura.merot.com/v1/archive/einvoices/einv_123', [
'headers' => [
'Authorization' => 'Bearer YOUR_API_KEY',
],
]);
echo $response->getBody(); using System.Net.Http;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Get, "https://api.efaktura.merot.com/v1/archive/einvoices/einv_123");
request.Headers.Add("Authorization", "Bearer YOUR_API_KEY");
using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body); import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.efaktura.merot.com/v1/archive/einvoices/einv_123"))
.headers("Authorization", "Bearer YOUR_API_KEY")
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body()); {
"items": [
{
"kind": "json",
"sha256": "9f2b...a01c",
"size": 2140,
"contentType": "application/json",
"retainUntil": "2036-10-08",
"url": "https://archive.efaktura.merot.com/…?X-Amz-Expires=900"
}
]
} Побарајте групен извоз од архивата
# POST /v1/archive/exports
Тело на барањето
environmentenumзадолжителноsandboxproductiondirectionenum | nulloutboundinboundissuedFromstringзадолжителноissuedTostringзадолжителноkindsarray of enum
Враќа
- 202
Извозот е ставен во ред.
### POST /v1/archive/exports
Побарајте групен извоз од архивата
```bash
curl -X POST "https://api.efaktura.merot.com/v1/archive/exports" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
``` cURL
curl -X POST "https://api.efaktura.merot.com/v1/archive/exports" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}' const response = await fetch("https://api.efaktura.merot.com/v1/archive/exports", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({}),
});
const data = await response.json();
console.log(data); import requests
response = requests.post(
"https://api.efaktura.merot.com/v1/archive/exports",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={},
)
print(response.json()) <?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.efaktura.merot.com/v1/archive/exports', [
'headers' => [
'Authorization' => 'Bearer YOUR_API_KEY',
'Content-Type' => 'application/json',
],
'json' => [],
]);
echo $response->getBody(); using System.Net.Http;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Post, "https://api.efaktura.merot.com/v1/archive/exports");
request.Headers.Add("Authorization", "Bearer YOUR_API_KEY");
var json = /* lang=json */ @"{}";
request.Content = new StringContent(json, Encoding.UTF8, "application/json");
using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body); import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.efaktura.merot.com/v1/archive/exports"))
.headers("Authorization", "Bearer YOUR_API_KEY", "Content-Type", "application/json")
.method("POST", HttpRequest.BodyPublishers.ofString(/* JSON */ "{}"))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body()); Преземете статус на извоз од архивата
# GET /v1/archive/exports/{id}
ZIP-от содржи manifest.json со листа на sha256, EUID и број на документ за секоја датотека. Истекува 7 дена откако ќе биде подготвен.
Параметри
id (path)stringзадолжително
Враќа
- 200
Статусот на извозот (и URL за преземање, откако ќе биде подготвен).
### GET /v1/archive/exports/{id}
Преземете статус на извоз од архивата
ZIP-от содржи `manifest.json` со листа на sha256, EUID и број на документ за секоја датотека. Истекува 7 дена откако ќе биде подготвен.
```bash
curl -X GET "https://api.efaktura.merot.com/v1/archive/exports/einv_123" \
-H "Authorization: Bearer YOUR_API_KEY"
``` cURL
curl -X GET "https://api.efaktura.merot.com/v1/archive/exports/einv_123" \
-H "Authorization: Bearer YOUR_API_KEY" const response = await fetch("https://api.efaktura.merot.com/v1/archive/exports/einv_123", {
method: "GET",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
},
});
const data = await response.json();
console.log(data); import requests
response = requests.get(
"https://api.efaktura.merot.com/v1/archive/exports/einv_123",
headers={
"Authorization": "Bearer YOUR_API_KEY",
},
)
print(response.json()) <?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.efaktura.merot.com/v1/archive/exports/einv_123', [
'headers' => [
'Authorization' => 'Bearer YOUR_API_KEY',
],
]);
echo $response->getBody(); using System.Net.Http;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Get, "https://api.efaktura.merot.com/v1/archive/exports/einv_123");
request.Headers.Add("Authorization", "Bearer YOUR_API_KEY");
using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body); import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.efaktura.merot.com/v1/archive/exports/einv_123"))
.headers("Authorization", "Bearer YOUR_API_KEY")
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body()); Webhooks
Претплати на настани (webhooks), лог на испорака и повторно испраќање.
Endpoint-и
- GET
/v1/webhook-endpoints - POST
/v1/webhook-endpoints - GET
/v1/webhook-endpoints/{id} - PATCH
/v1/webhook-endpoints/{id} - DELETE
/v1/webhook-endpoints/{id} - POST
/v1/webhook-endpoints/{id}/rotate-secret - POST
/v1/webhook-endpoints/{id}/test - GET
/v1/webhook-endpoints/{id}/deliveries - GET
/v1/events - GET
/v1/events/{id} - POST
/v1/events/{id}/replay
### GET /v1/webhook-endpoints Листа на webhook endpoint-и ```bash curl -X GET "https://api.efaktura.merot.com/v1/webhook-endpoints" \ -H "Authorization: Bearer YOUR_API_KEY" ```
cURL
curl -X GET "https://api.efaktura.merot.com/v1/webhook-endpoints" \
-H "Authorization: Bearer YOUR_API_KEY" const response = await fetch("https://api.efaktura.merot.com/v1/webhook-endpoints", {
method: "GET",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
},
});
const data = await response.json();
console.log(data); import requests
response = requests.get(
"https://api.efaktura.merot.com/v1/webhook-endpoints",
headers={
"Authorization": "Bearer YOUR_API_KEY",
},
)
print(response.json()) <?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.efaktura.merot.com/v1/webhook-endpoints', [
'headers' => [
'Authorization' => 'Bearer YOUR_API_KEY',
],
]);
echo $response->getBody(); using System.Net.Http;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Get, "https://api.efaktura.merot.com/v1/webhook-endpoints");
request.Headers.Add("Authorization", "Bearer YOUR_API_KEY");
using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body); import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.efaktura.merot.com/v1/webhook-endpoints"))
.headers("Authorization", "Bearer YOUR_API_KEY")
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body()); Создадете webhook endpoint
# POST /v1/webhook-endpoints
Тело на барањето
urlstringзадолжителноMust be https in production.
eventsarray of enumзадолжителноcompanyIdsarray of string | nulldescriptionstring | null
Враќа
- 201
Endpoint-от е создаден. Тајниот клуч за потпишување се прикажува само еднаш.
### POST /v1/webhook-endpoints
Создадете webhook endpoint
```bash
curl -X POST "https://api.efaktura.merot.com/v1/webhook-endpoints" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/hooks/merot-efaktura",
"events": [
"einvoice.submitted",
"einvoice.rejected",
"inbox.received",
"inbox.deadline_approaching"
]
}'
```
**Пример-одговор**
```json
{
"id": "we_01J9Z4A1B2C3D4E5F6G7H8",
"url": "https://example.com/hooks/merot-efaktura",
"events": [
"einvoice.submitted",
"einvoice.rejected",
"inbox.received",
"inbox.deadline_approaching"
],
"companyIds": null,
"status": "enabled",
"secret": "whsec_5f2a...c9e1",
"createdAt": "2026-09-26T09:00:00Z"
}
``` cURL
curl -X POST "https://api.efaktura.merot.com/v1/webhook-endpoints" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://example.com/hooks/merot-efaktura",
"events": [
"einvoice.submitted",
"einvoice.rejected",
"inbox.received",
"inbox.deadline_approaching"
]
}' const response = await fetch("https://api.efaktura.merot.com/v1/webhook-endpoints", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({
"url": "https://example.com/hooks/merot-efaktura",
"events": [
"einvoice.submitted",
"einvoice.rejected",
"inbox.received",
"inbox.deadline_approaching"
]
}),
});
const data = await response.json();
console.log(data); import requests
response = requests.post(
"https://api.efaktura.merot.com/v1/webhook-endpoints",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"url": "https://example.com/hooks/merot-efaktura",
"events": [
"einvoice.submitted",
"einvoice.rejected",
"inbox.received",
"inbox.deadline_approaching"
]
},
)
print(response.json()) <?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.efaktura.merot.com/v1/webhook-endpoints', [
'headers' => [
'Authorization' => 'Bearer YOUR_API_KEY',
'Content-Type' => 'application/json',
],
'json' => [
'url' => 'https://example.com/hooks/merot-efaktura',
'events' => [
'einvoice.submitted',
'einvoice.rejected',
'inbox.received',
'inbox.deadline_approaching',
],
],
]);
echo $response->getBody(); using System.Net.Http;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Post, "https://api.efaktura.merot.com/v1/webhook-endpoints");
request.Headers.Add("Authorization", "Bearer YOUR_API_KEY");
var json = /* lang=json */ @"{
""url"": ""https://example.com/hooks/merot-efaktura"",
""events"": [
""einvoice.submitted"",
""einvoice.rejected"",
""inbox.received"",
""inbox.deadline_approaching""
]
}";
request.Content = new StringContent(json, Encoding.UTF8, "application/json");
using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body); import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.efaktura.merot.com/v1/webhook-endpoints"))
.headers("Authorization", "Bearer YOUR_API_KEY", "Content-Type", "application/json")
.method("POST", HttpRequest.BodyPublishers.ofString(/* JSON */ "{ \"url\": \"https://example.com/hooks/merot-efaktura\", \"events\": [ \"einvoice.submitted\", \"einvoice.rejected\", \"inbox.received\", \"inbox.deadline_approaching\" ] }"))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body()); {
"id": "we_01J9Z4A1B2C3D4E5F6G7H8",
"url": "https://example.com/hooks/merot-efaktura",
"events": [
"einvoice.submitted",
"einvoice.rejected",
"inbox.received",
"inbox.deadline_approaching"
],
"companyIds": null,
"status": "enabled",
"secret": "whsec_5f2a...c9e1",
"createdAt": "2026-09-26T09:00:00Z"
} Преземете webhook endpoint
# GET /v1/webhook-endpoints/{id}
Параметри
id (path)stringзадолжително
Враќа
- 200
Webhook endpoint-от.
### GET /v1/webhook-endpoints/{id}
Преземете webhook endpoint
```bash
curl -X GET "https://api.efaktura.merot.com/v1/webhook-endpoints/einv_123" \
-H "Authorization: Bearer YOUR_API_KEY"
``` cURL
curl -X GET "https://api.efaktura.merot.com/v1/webhook-endpoints/einv_123" \
-H "Authorization: Bearer YOUR_API_KEY" const response = await fetch("https://api.efaktura.merot.com/v1/webhook-endpoints/einv_123", {
method: "GET",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
},
});
const data = await response.json();
console.log(data); import requests
response = requests.get(
"https://api.efaktura.merot.com/v1/webhook-endpoints/einv_123",
headers={
"Authorization": "Bearer YOUR_API_KEY",
},
)
print(response.json()) <?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.efaktura.merot.com/v1/webhook-endpoints/einv_123', [
'headers' => [
'Authorization' => 'Bearer YOUR_API_KEY',
],
]);
echo $response->getBody(); using System.Net.Http;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Get, "https://api.efaktura.merot.com/v1/webhook-endpoints/einv_123");
request.Headers.Add("Authorization", "Bearer YOUR_API_KEY");
using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body); import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.efaktura.merot.com/v1/webhook-endpoints/einv_123"))
.headers("Authorization", "Bearer YOUR_API_KEY")
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body()); Ажурирајте webhook endpoint
# PATCH /v1/webhook-endpoints/{id}
Параметри
id (path)stringзадолжително
Тело на барањето
urlstringeventsarray of enumcompanyIdsarray of string | nulldescriptionstring | null
Враќа
- 200
Ажуриран webhook endpoint.
### PATCH /v1/webhook-endpoints/{id}
Ажурирајте webhook endpoint
```bash
curl -X PATCH "https://api.efaktura.merot.com/v1/webhook-endpoints/einv_123" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
``` cURL
curl -X PATCH "https://api.efaktura.merot.com/v1/webhook-endpoints/einv_123" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}' const response = await fetch("https://api.efaktura.merot.com/v1/webhook-endpoints/einv_123", {
method: "PATCH",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({}),
});
const data = await response.json();
console.log(data); import requests
response = requests.patch(
"https://api.efaktura.merot.com/v1/webhook-endpoints/einv_123",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={},
)
print(response.json()) <?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
$response = $client->request('PATCH', 'https://api.efaktura.merot.com/v1/webhook-endpoints/einv_123', [
'headers' => [
'Authorization' => 'Bearer YOUR_API_KEY',
'Content-Type' => 'application/json',
],
'json' => [],
]);
echo $response->getBody(); using System.Net.Http;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Patch, "https://api.efaktura.merot.com/v1/webhook-endpoints/einv_123");
request.Headers.Add("Authorization", "Bearer YOUR_API_KEY");
var json = /* lang=json */ @"{}";
request.Content = new StringContent(json, Encoding.UTF8, "application/json");
using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body); import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.efaktura.merot.com/v1/webhook-endpoints/einv_123"))
.headers("Authorization", "Bearer YOUR_API_KEY", "Content-Type", "application/json")
.method("PATCH", HttpRequest.BodyPublishers.ofString(/* JSON */ "{}"))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body()); Деактивирајте webhook endpoint
# DELETE /v1/webhook-endpoints/{id}
Го поставува endpoint-от во состојба disabled_by_user; престанува да прима нови испораки.
Параметри
id (path)stringзадолжително
Враќа
- 204
Деактивирано.
### DELETE /v1/webhook-endpoints/{id}
Деактивирајте webhook endpoint
Го поставува endpoint-от во состојба `disabled_by_user`; престанува да прима нови испораки.
```bash
curl -X DELETE "https://api.efaktura.merot.com/v1/webhook-endpoints/einv_123" \
-H "Authorization: Bearer YOUR_API_KEY"
``` cURL
curl -X DELETE "https://api.efaktura.merot.com/v1/webhook-endpoints/einv_123" \
-H "Authorization: Bearer YOUR_API_KEY" const response = await fetch("https://api.efaktura.merot.com/v1/webhook-endpoints/einv_123", {
method: "DELETE",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
},
});
const data = await response.json();
console.log(data); import requests
response = requests.delete(
"https://api.efaktura.merot.com/v1/webhook-endpoints/einv_123",
headers={
"Authorization": "Bearer YOUR_API_KEY",
},
)
print(response.json()) <?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
$response = $client->request('DELETE', 'https://api.efaktura.merot.com/v1/webhook-endpoints/einv_123', [
'headers' => [
'Authorization' => 'Bearer YOUR_API_KEY',
],
]);
echo $response->getBody(); using System.Net.Http;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Delete, "https://api.efaktura.merot.com/v1/webhook-endpoints/einv_123");
request.Headers.Add("Authorization", "Bearer YOUR_API_KEY");
using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body); import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.efaktura.merot.com/v1/webhook-endpoints/einv_123"))
.headers("Authorization", "Bearer YOUR_API_KEY")
.method("DELETE", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body()); Ротирајте го тајниот клуч за потпишување на webhook endpoint
# POST /v1/webhook-endpoints/{id}/rotate-secret
Стариот клуч продолжува да потпишува испораки уште 24 часа, заедно со новиот (два записи v1= во Merot-Signature).
Параметри
id (path)stringзадолжително
Враќа
- 200
Нов тајн клуч.
### POST /v1/webhook-endpoints/{id}/rotate-secret
Ротирајте го тајниот клуч за потпишување на webhook endpoint
Стариот клуч продолжува да потпишува испораки уште 24 часа, заедно со новиот (два записи `v1=` во `Merot-Signature`).
```bash
curl -X POST "https://api.efaktura.merot.com/v1/webhook-endpoints/einv_123/rotate-secret" \
-H "Authorization: Bearer YOUR_API_KEY"
``` cURL
curl -X POST "https://api.efaktura.merot.com/v1/webhook-endpoints/einv_123/rotate-secret" \
-H "Authorization: Bearer YOUR_API_KEY" const response = await fetch("https://api.efaktura.merot.com/v1/webhook-endpoints/einv_123/rotate-secret", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
},
});
const data = await response.json();
console.log(data); import requests
response = requests.post(
"https://api.efaktura.merot.com/v1/webhook-endpoints/einv_123/rotate-secret",
headers={
"Authorization": "Bearer YOUR_API_KEY",
},
)
print(response.json()) <?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.efaktura.merot.com/v1/webhook-endpoints/einv_123/rotate-secret', [
'headers' => [
'Authorization' => 'Bearer YOUR_API_KEY',
],
]);
echo $response->getBody(); using System.Net.Http;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Post, "https://api.efaktura.merot.com/v1/webhook-endpoints/einv_123/rotate-secret");
request.Headers.Add("Authorization", "Bearer YOUR_API_KEY");
using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body); import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.efaktura.merot.com/v1/webhook-endpoints/einv_123/rotate-secret"))
.headers("Authorization", "Bearer YOUR_API_KEY")
.method("POST", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body()); Испратете тест-настан (ping)
# POST /v1/webhook-endpoints/{id}/test
Параметри
id (path)stringзадолжително
Враќа
- 202
Ping-от е ставен во ред за испорака.
### POST /v1/webhook-endpoints/{id}/test
Испратете тест-настан (ping)
```bash
curl -X POST "https://api.efaktura.merot.com/v1/webhook-endpoints/einv_123/test" \
-H "Authorization: Bearer YOUR_API_KEY"
``` cURL
curl -X POST "https://api.efaktura.merot.com/v1/webhook-endpoints/einv_123/test" \
-H "Authorization: Bearer YOUR_API_KEY" const response = await fetch("https://api.efaktura.merot.com/v1/webhook-endpoints/einv_123/test", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
},
});
const data = await response.json();
console.log(data); import requests
response = requests.post(
"https://api.efaktura.merot.com/v1/webhook-endpoints/einv_123/test",
headers={
"Authorization": "Bearer YOUR_API_KEY",
},
)
print(response.json()) <?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.efaktura.merot.com/v1/webhook-endpoints/einv_123/test', [
'headers' => [
'Authorization' => 'Bearer YOUR_API_KEY',
],
]);
echo $response->getBody(); using System.Net.Http;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Post, "https://api.efaktura.merot.com/v1/webhook-endpoints/einv_123/test");
request.Headers.Add("Authorization", "Bearer YOUR_API_KEY");
using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body); import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.efaktura.merot.com/v1/webhook-endpoints/einv_123/test"))
.headers("Authorization", "Bearer YOUR_API_KEY")
.method("POST", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body()); Листа на обиди за испорака за еден endpoint
# GET /v1/webhook-endpoints/{id}/deliveries
Параметри
id (path)stringзадолжителноstate (query)enumpendingsucceededfailedabandonedcursor (query)string
Враќа
- 200
Страница со испораки.
### GET /v1/webhook-endpoints/{id}/deliveries
Листа на обиди за испорака за еден endpoint
```bash
curl -X GET "https://api.efaktura.merot.com/v1/webhook-endpoints/einv_123/deliveries" \
-H "Authorization: Bearer YOUR_API_KEY"
``` cURL
curl -X GET "https://api.efaktura.merot.com/v1/webhook-endpoints/einv_123/deliveries" \
-H "Authorization: Bearer YOUR_API_KEY" const response = await fetch("https://api.efaktura.merot.com/v1/webhook-endpoints/einv_123/deliveries", {
method: "GET",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
},
});
const data = await response.json();
console.log(data); import requests
response = requests.get(
"https://api.efaktura.merot.com/v1/webhook-endpoints/einv_123/deliveries",
headers={
"Authorization": "Bearer YOUR_API_KEY",
},
)
print(response.json()) <?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.efaktura.merot.com/v1/webhook-endpoints/einv_123/deliveries', [
'headers' => [
'Authorization' => 'Bearer YOUR_API_KEY',
],
]);
echo $response->getBody(); using System.Net.Http;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Get, "https://api.efaktura.merot.com/v1/webhook-endpoints/einv_123/deliveries");
request.Headers.Add("Authorization", "Bearer YOUR_API_KEY");
using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body); import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.efaktura.merot.com/v1/webhook-endpoints/einv_123/deliveries"))
.headers("Authorization", "Bearer YOUR_API_KEY")
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body()); Листа на настани
# GET /v1/events
Настаните се чуваат 30 дена.
Параметри
type (query)enumeinvoice.validated_failedeinvoice.signature_requiredeinvoice.submittedeinvoice.acceptedeinvoice.auto_acceptedeinvoice.rejectedeinvoice.cancelled_by_stornoeinvoice.correctedeinvoice.failedinbox.receivedinbox.deadline_approachinginbox.auto_acceptedsigning_agent.offlinesigning_agent.onlinearchive.export_readycreatedFrom (query)stringcursor (query)string
Враќа
- 200
Страница со настани.
### GET /v1/events Листа на настани Настаните се чуваат 30 дена. ```bash curl -X GET "https://api.efaktura.merot.com/v1/events" \ -H "Authorization: Bearer YOUR_API_KEY" ```
cURL
curl -X GET "https://api.efaktura.merot.com/v1/events" \
-H "Authorization: Bearer YOUR_API_KEY" const response = await fetch("https://api.efaktura.merot.com/v1/events", {
method: "GET",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
},
});
const data = await response.json();
console.log(data); import requests
response = requests.get(
"https://api.efaktura.merot.com/v1/events",
headers={
"Authorization": "Bearer YOUR_API_KEY",
},
)
print(response.json()) <?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.efaktura.merot.com/v1/events', [
'headers' => [
'Authorization' => 'Bearer YOUR_API_KEY',
],
]);
echo $response->getBody(); using System.Net.Http;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Get, "https://api.efaktura.merot.com/v1/events");
request.Headers.Add("Authorization", "Bearer YOUR_API_KEY");
using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body); import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.efaktura.merot.com/v1/events"))
.headers("Authorization", "Bearer YOUR_API_KEY")
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body()); ### GET /v1/events/{id}
Преземете настан
```bash
curl -X GET "https://api.efaktura.merot.com/v1/events/einv_123" \
-H "Authorization: Bearer YOUR_API_KEY"
``` cURL
curl -X GET "https://api.efaktura.merot.com/v1/events/einv_123" \
-H "Authorization: Bearer YOUR_API_KEY" const response = await fetch("https://api.efaktura.merot.com/v1/events/einv_123", {
method: "GET",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
},
});
const data = await response.json();
console.log(data); import requests
response = requests.get(
"https://api.efaktura.merot.com/v1/events/einv_123",
headers={
"Authorization": "Bearer YOUR_API_KEY",
},
)
print(response.json()) <?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.efaktura.merot.com/v1/events/einv_123', [
'headers' => [
'Authorization' => 'Bearer YOUR_API_KEY',
],
]);
echo $response->getBody(); using System.Net.Http;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Get, "https://api.efaktura.merot.com/v1/events/einv_123");
request.Headers.Add("Authorization", "Bearer YOUR_API_KEY");
using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body); import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.efaktura.merot.com/v1/events/einv_123"))
.headers("Authorization", "Bearer YOUR_API_KEY")
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body()); Повторете испорака на настан
# POST /v1/events/{id}/replay
Параметри
id (path)stringзадолжително
Тело на барањето
endpointIdstring | nullReplay to one endpoint only; omit to replay to all subscribed endpoints.
Враќа
- 202
Нова испорака е ставена во ред (
is_replay: true).
### POST /v1/events/{id}/replay
Повторете испорака на настан
```bash
curl -X POST "https://api.efaktura.merot.com/v1/events/einv_123/replay" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
``` cURL
curl -X POST "https://api.efaktura.merot.com/v1/events/einv_123/replay" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}' const response = await fetch("https://api.efaktura.merot.com/v1/events/einv_123/replay", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({}),
});
const data = await response.json();
console.log(data); import requests
response = requests.post(
"https://api.efaktura.merot.com/v1/events/einv_123/replay",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={},
)
print(response.json()) <?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.efaktura.merot.com/v1/events/einv_123/replay', [
'headers' => [
'Authorization' => 'Bearer YOUR_API_KEY',
'Content-Type' => 'application/json',
],
'json' => [],
]);
echo $response->getBody(); using System.Net.Http;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Post, "https://api.efaktura.merot.com/v1/events/einv_123/replay");
request.Headers.Add("Authorization", "Bearer YOUR_API_KEY");
var json = /* lang=json */ @"{}";
request.Content = new StringContent(json, Encoding.UTF8, "application/json");
using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body); import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.efaktura.merot.com/v1/events/einv_123/replay"))
.headers("Authorization", "Bearer YOUR_API_KEY", "Content-Type", "application/json")
.method("POST", HttpRequest.BodyPublishers.ofString(/* JSON */ "{}"))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body()); Агенти за потпишување
Merot Bridge (Режим А) и SDK-агенти за потпишување (Режим Б) — поврзување на уред и барања за потпишување.
Спарете Merot Bridge или SDK-агент за потпишување
# POST /v1/agents/pair
Разменува еднократен, 10-минутен код за спарување (генериран во конзолата) за акредитиви на агентот. Се повикува од Merot Bridge или од SigningWorker на SDK-то, обично не директно од вашиот код.
Тело на барањето
codestringзадолжителноkindenumзадолжителноbridgesdknamestringзадолжителноplatformenum | nullwindowsmacoslinuxserverversionstring | nullpublicKeyJwkobjectзадолжителноThe agent's Ed25519 device key (OKP).
Враќа
- 200
Акредитиви на агентот — се прикажуваат само еднаш.
### POST /v1/agents/pair
Спарете Merot Bridge или SDK-агент за потпишување
Разменува еднократен, 10-минутен код за спарување (генериран во конзолата) за
акредитиви на агентот. Се повикува од Merot Bridge или од `SigningWorker` на SDK-то,
обично не директно од вашиот код.
```bash
curl -X POST "https://api.efaktura.merot.com/v1/agents/pair" \
-H "Content-Type: application/json" \
-d '{}'
``` cURL
curl -X POST "https://api.efaktura.merot.com/v1/agents/pair" \
-H "Content-Type: application/json" \
-d '{}' const response = await fetch("https://api.efaktura.merot.com/v1/agents/pair", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({}),
});
const data = await response.json();
console.log(data); import requests
response = requests.post(
"https://api.efaktura.merot.com/v1/agents/pair",
headers={
"Content-Type": "application/json",
},
json={},
)
print(response.json()) <?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.efaktura.merot.com/v1/agents/pair', [
'headers' => [
'Content-Type' => 'application/json',
],
'json' => [],
]);
echo $response->getBody(); using System.Net.Http;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Post, "https://api.efaktura.merot.com/v1/agents/pair");
var json = /* lang=json */ @"{}";
request.Content = new StringContent(json, Encoding.UTF8, "application/json");
using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body); import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.efaktura.merot.com/v1/agents/pair"))
.headers("Content-Type", "application/json")
.method("POST", HttpRequest.BodyPublishers.ofString(/* JSON */ "{}"))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body()); Регистрирајте сертификат за потпишување за агент
# POST /v1/agents/{id}/certificates
Параметри
id (path)stringзадолжително
Тело на барањето
certificateDerstringзадолжителноBase64-encoded DER certificate.
companyIdstringзадолжително
Враќа
- 201
Сертификатот е регистриран и поврзан со компанијата.
### POST /v1/agents/{id}/certificates
Регистрирајте сертификат за потпишување за агент
```bash
curl -X POST "https://api.efaktura.merot.com/v1/agents/einv_123/certificates" \
-H "Authorization: Agent AGENT_ID.AGENT_SECRET" \
-H "Content-Type: application/json" \
-d '{}'
``` cURL
curl -X POST "https://api.efaktura.merot.com/v1/agents/einv_123/certificates" \
-H "Authorization: Agent AGENT_ID.AGENT_SECRET" \
-H "Content-Type: application/json" \
-d '{}' const response = await fetch("https://api.efaktura.merot.com/v1/agents/einv_123/certificates", {
method: "POST",
headers: {
"Authorization": "Agent AGENT_ID.AGENT_SECRET",
"Content-Type": "application/json",
},
body: JSON.stringify({}),
});
const data = await response.json();
console.log(data); import requests
response = requests.post(
"https://api.efaktura.merot.com/v1/agents/einv_123/certificates",
headers={
"Authorization": "Agent AGENT_ID.AGENT_SECRET",
"Content-Type": "application/json",
},
json={},
)
print(response.json()) <?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.efaktura.merot.com/v1/agents/einv_123/certificates', [
'headers' => [
'Authorization' => 'Agent AGENT_ID.AGENT_SECRET',
'Content-Type' => 'application/json',
],
'json' => [],
]);
echo $response->getBody(); using System.Net.Http;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Post, "https://api.efaktura.merot.com/v1/agents/einv_123/certificates");
request.Headers.Add("Authorization", "Agent AGENT_ID.AGENT_SECRET");
var json = /* lang=json */ @"{}";
request.Content = new StringContent(json, Encoding.UTF8, "application/json");
using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body); import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.efaktura.merot.com/v1/agents/einv_123/certificates"))
.headers("Authorization", "Agent AGENT_ID.AGENT_SECRET", "Content-Type", "application/json")
.method("POST", HttpRequest.BodyPublishers.ofString(/* JSON */ "{}"))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body()); Long-poll за барања за потпишување (резервна опција наместо WebSocket)
# GET /v1/agents/{id}/signing-requests
Merot Bridge вообичаено ги прима барањата за потпишување преку wss:// конекција на истата патека; оваа long-poll форма е резервна опција за мрежи што блокираат WebSocket.
Параметри
id (path)stringзадолжителноwait (query)integerСтандардна вредност:
25
Враќа
- 200
Барања за потпишување во исчекување за овој агент.
### GET /v1/agents/{id}/signing-requests
Long-poll за барања за потпишување (резервна опција наместо WebSocket)
Merot Bridge вообичаено ги прима барањата за потпишување преку `wss://` конекција на
истата патека; оваа long-poll форма е резервна опција за мрежи што блокираат WebSocket.
```bash
curl -X GET "https://api.efaktura.merot.com/v1/agents/einv_123/signing-requests" \
-H "Authorization: Agent AGENT_ID.AGENT_SECRET"
``` cURL
curl -X GET "https://api.efaktura.merot.com/v1/agents/einv_123/signing-requests" \
-H "Authorization: Agent AGENT_ID.AGENT_SECRET" const response = await fetch("https://api.efaktura.merot.com/v1/agents/einv_123/signing-requests", {
method: "GET",
headers: {
"Authorization": "Agent AGENT_ID.AGENT_SECRET",
},
});
const data = await response.json();
console.log(data); import requests
response = requests.get(
"https://api.efaktura.merot.com/v1/agents/einv_123/signing-requests",
headers={
"Authorization": "Agent AGENT_ID.AGENT_SECRET",
},
)
print(response.json()) <?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.efaktura.merot.com/v1/agents/einv_123/signing-requests', [
'headers' => [
'Authorization' => 'Agent AGENT_ID.AGENT_SECRET',
],
]);
echo $response->getBody(); using System.Net.Http;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Get, "https://api.efaktura.merot.com/v1/agents/einv_123/signing-requests");
request.Headers.Add("Authorization", "Agent AGENT_ID.AGENT_SECRET");
using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body); import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.efaktura.merot.com/v1/agents/einv_123/signing-requests"))
.headers("Authorization", "Agent AGENT_ID.AGENT_SECRET")
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body()); Листа на барања за потпишување во исчекување (Режим Б, инлајн потпишување)
# GET /v1/signing-requests
Параметри
state (query)enumpendingcompanyId (query)string
Враќа
- 200
Барања за потпишување во исчекување.
### GET /v1/signing-requests Листа на барања за потпишување во исчекување (Режим Б, инлајн потпишување) ```bash curl -X GET "https://api.efaktura.merot.com/v1/signing-requests" \ -H "Authorization: Bearer YOUR_API_KEY" ```
cURL
curl -X GET "https://api.efaktura.merot.com/v1/signing-requests" \
-H "Authorization: Bearer YOUR_API_KEY" const response = await fetch("https://api.efaktura.merot.com/v1/signing-requests", {
method: "GET",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
},
});
const data = await response.json();
console.log(data); import requests
response = requests.get(
"https://api.efaktura.merot.com/v1/signing-requests",
headers={
"Authorization": "Bearer YOUR_API_KEY",
},
)
print(response.json()) <?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.efaktura.merot.com/v1/signing-requests', [
'headers' => [
'Authorization' => 'Bearer YOUR_API_KEY',
],
]);
echo $response->getBody(); using System.Net.Http;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Get, "https://api.efaktura.merot.com/v1/signing-requests");
request.Headers.Add("Authorization", "Bearer YOUR_API_KEY");
using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body); import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.efaktura.merot.com/v1/signing-requests"))
.headers("Authorization", "Bearer YOUR_API_KEY")
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body()); Преземете барање за потпишување
# GET /v1/signing-requests/{id}
Параметри
id (path)stringзадолжително
Враќа
- 200
Барањето за потпишување.
### GET /v1/signing-requests/{id}
Преземете барање за потпишување
```bash
curl -X GET "https://api.efaktura.merot.com/v1/signing-requests/einv_123" \
-H "Authorization: Agent AGENT_ID.AGENT_SECRET"
``` cURL
curl -X GET "https://api.efaktura.merot.com/v1/signing-requests/einv_123" \
-H "Authorization: Agent AGENT_ID.AGENT_SECRET" const response = await fetch("https://api.efaktura.merot.com/v1/signing-requests/einv_123", {
method: "GET",
headers: {
"Authorization": "Agent AGENT_ID.AGENT_SECRET",
},
});
const data = await response.json();
console.log(data); import requests
response = requests.get(
"https://api.efaktura.merot.com/v1/signing-requests/einv_123",
headers={
"Authorization": "Agent AGENT_ID.AGENT_SECRET",
},
)
print(response.json()) <?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.efaktura.merot.com/v1/signing-requests/einv_123', [
'headers' => [
'Authorization' => 'Agent AGENT_ID.AGENT_SECRET',
],
]);
echo $response->getBody(); using System.Net.Http;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Get, "https://api.efaktura.merot.com/v1/signing-requests/einv_123");
request.Headers.Add("Authorization", "Agent AGENT_ID.AGENT_SECRET");
using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body); import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.efaktura.merot.com/v1/signing-requests/einv_123"))
.headers("Authorization", "Agent AGENT_ID.AGENT_SECRET")
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body()); Преземете (claim) барање за потпишување
# POST /v1/signing-requests/{id}/claim
Параметри
id (path)stringзадолжително
Враќа
- 200
Преземено.
- 409
already_claimed
### POST /v1/signing-requests/{id}/claim
Преземете (claim) барање за потпишување
```bash
curl -X POST "https://api.efaktura.merot.com/v1/signing-requests/einv_123/claim" \
-H "Authorization: Agent AGENT_ID.AGENT_SECRET"
``` cURL
curl -X POST "https://api.efaktura.merot.com/v1/signing-requests/einv_123/claim" \
-H "Authorization: Agent AGENT_ID.AGENT_SECRET" const response = await fetch("https://api.efaktura.merot.com/v1/signing-requests/einv_123/claim", {
method: "POST",
headers: {
"Authorization": "Agent AGENT_ID.AGENT_SECRET",
},
});
const data = await response.json();
console.log(data); import requests
response = requests.post(
"https://api.efaktura.merot.com/v1/signing-requests/einv_123/claim",
headers={
"Authorization": "Agent AGENT_ID.AGENT_SECRET",
},
)
print(response.json()) <?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.efaktura.merot.com/v1/signing-requests/einv_123/claim', [
'headers' => [
'Authorization' => 'Agent AGENT_ID.AGENT_SECRET',
],
]);
echo $response->getBody(); using System.Net.Http;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Post, "https://api.efaktura.merot.com/v1/signing-requests/einv_123/claim");
request.Headers.Add("Authorization", "Agent AGENT_ID.AGENT_SECRET");
using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body); import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.efaktura.merot.com/v1/signing-requests/einv_123/claim"))
.headers("Authorization", "Agent AGENT_ID.AGENT_SECRET")
.method("POST", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body()); Испратете потпис
# POST /v1/signing-requests/{id}/signature
Агентот пресметува RS256 врз base64url(header).base64url(payload) и враќа компактен JWS. Може да се користи и со API клуч во Режим Б, со scope signing:agent, за инлајн потпишување.
Параметри
id (path)stringзадолжително
Тело на барањето
jwsstringзадолжителноCompact JWS (header.payload.signature).
Враќа
- 200
Потписот е прифатен.
- 410
signature_expired — издадено е ново барање за потпишување.
- 422
signature_invalid, payload_mismatch или certificate_mismatch.
### POST /v1/signing-requests/{id}/signature
Испратете потпис
Агентот пресметува RS256 врз `base64url(header).base64url(payload)` и враќа компактен
JWS. Може да се користи и со API клуч во Режим Б, со scope `signing:agent`, за инлајн
потпишување.
```bash
curl -X POST "https://api.efaktura.merot.com/v1/signing-requests/einv_123/signature" \
-H "Authorization: Agent AGENT_ID.AGENT_SECRET" \
-H "Content-Type: application/json" \
-d '{}'
``` cURL
curl -X POST "https://api.efaktura.merot.com/v1/signing-requests/einv_123/signature" \
-H "Authorization: Agent AGENT_ID.AGENT_SECRET" \
-H "Content-Type: application/json" \
-d '{}' const response = await fetch("https://api.efaktura.merot.com/v1/signing-requests/einv_123/signature", {
method: "POST",
headers: {
"Authorization": "Agent AGENT_ID.AGENT_SECRET",
"Content-Type": "application/json",
},
body: JSON.stringify({}),
});
const data = await response.json();
console.log(data); import requests
response = requests.post(
"https://api.efaktura.merot.com/v1/signing-requests/einv_123/signature",
headers={
"Authorization": "Agent AGENT_ID.AGENT_SECRET",
"Content-Type": "application/json",
},
json={},
)
print(response.json()) <?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.efaktura.merot.com/v1/signing-requests/einv_123/signature', [
'headers' => [
'Authorization' => 'Agent AGENT_ID.AGENT_SECRET',
'Content-Type' => 'application/json',
],
'json' => [],
]);
echo $response->getBody(); using System.Net.Http;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Post, "https://api.efaktura.merot.com/v1/signing-requests/einv_123/signature");
request.Headers.Add("Authorization", "Agent AGENT_ID.AGENT_SECRET");
var json = /* lang=json */ @"{}";
request.Content = new StringContent(json, Encoding.UTF8, "application/json");
using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body); import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.efaktura.merot.com/v1/signing-requests/einv_123/signature"))
.headers("Authorization", "Agent AGENT_ID.AGENT_SECRET", "Content-Type", "application/json")
.method("POST", HttpRequest.BodyPublishers.ofString(/* JSON */ "{}"))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body()); Одбијте барање за потпишување
# POST /v1/signing-requests/{id}/refuse
Параметри
id (path)stringзадолжително
Тело на барањето
reasonenumзадолжителноuser_declinedpolicytoken_missingpin_lockedpayload_invalidmessagestring | null
Враќа
- 200
Одбивањето е запишано.
### POST /v1/signing-requests/{id}/refuse
Одбијте барање за потпишување
```bash
curl -X POST "https://api.efaktura.merot.com/v1/signing-requests/einv_123/refuse" \
-H "Authorization: Agent AGENT_ID.AGENT_SECRET" \
-H "Content-Type: application/json" \
-d '{}'
``` cURL
curl -X POST "https://api.efaktura.merot.com/v1/signing-requests/einv_123/refuse" \
-H "Authorization: Agent AGENT_ID.AGENT_SECRET" \
-H "Content-Type: application/json" \
-d '{}' const response = await fetch("https://api.efaktura.merot.com/v1/signing-requests/einv_123/refuse", {
method: "POST",
headers: {
"Authorization": "Agent AGENT_ID.AGENT_SECRET",
"Content-Type": "application/json",
},
body: JSON.stringify({}),
});
const data = await response.json();
console.log(data); import requests
response = requests.post(
"https://api.efaktura.merot.com/v1/signing-requests/einv_123/refuse",
headers={
"Authorization": "Agent AGENT_ID.AGENT_SECRET",
"Content-Type": "application/json",
},
json={},
)
print(response.json()) <?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.efaktura.merot.com/v1/signing-requests/einv_123/refuse', [
'headers' => [
'Authorization' => 'Agent AGENT_ID.AGENT_SECRET',
'Content-Type' => 'application/json',
],
'json' => [],
]);
echo $response->getBody(); using System.Net.Http;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Post, "https://api.efaktura.merot.com/v1/signing-requests/einv_123/refuse");
request.Headers.Add("Authorization", "Agent AGENT_ID.AGENT_SECRET");
var json = /* lang=json */ @"{}";
request.Content = new StringContent(json, Encoding.UTF8, "application/json");
using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body); import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.efaktura.merot.com/v1/signing-requests/einv_123/refuse"))
.headers("Authorization", "Agent AGENT_ID.AGENT_SECRET", "Content-Type", "application/json")
.method("POST", HttpRequest.BodyPublishers.ofString(/* JSON */ "{}"))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body()); Потрошувачка
Месечна потрошувачка на документи наспроти вашиот план.
Endpoint-и
Месечна потрошувачка на документи
# GET /v1/usage
Само продукциска потрошувачка — sandbox потрошувачката се прикажува одделно со environment=sandbox и никогаш не се наплатува.
Параметри
period (query)stringзадолжителноcompanyId (query)string
Враќа
- 200
Потрошувачка за периодот.
### GET /v1/usage
Месечна потрошувачка на документи
Само продукциска потрошувачка — sandbox потрошувачката се прикажува одделно со `environment=sandbox` и никогаш не се наплатува.
```bash
curl -X GET "https://api.efaktura.merot.com/v1/usage" \
-H "Authorization: Bearer YOUR_API_KEY"
```
**Пример-одговор**
```json
{
"period": "2026-10",
"plan": {
"code": "business",
"includedDocuments": 1000
},
"totals": {
"sent": 340,
"received": 128,
"billable": 468
},
"byCompany": [
{
"companyId": "cmp_01J9Z3K2N4R5T6V7W8X9Y0Z1",
"sent": 340,
"received": 128
}
]
}
``` cURL
curl -X GET "https://api.efaktura.merot.com/v1/usage" \
-H "Authorization: Bearer YOUR_API_KEY" const response = await fetch("https://api.efaktura.merot.com/v1/usage", {
method: "GET",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
},
});
const data = await response.json();
console.log(data); import requests
response = requests.get(
"https://api.efaktura.merot.com/v1/usage",
headers={
"Authorization": "Bearer YOUR_API_KEY",
},
)
print(response.json()) <?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.efaktura.merot.com/v1/usage', [
'headers' => [
'Authorization' => 'Bearer YOUR_API_KEY',
],
]);
echo $response->getBody(); using System.Net.Http;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Get, "https://api.efaktura.merot.com/v1/usage");
request.Headers.Add("Authorization", "Bearer YOUR_API_KEY");
using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body); import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.efaktura.merot.com/v1/usage"))
.headers("Authorization", "Bearer YOUR_API_KEY")
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body()); {
"period": "2026-10",
"plan": {
"code": "business",
"includedDocuments": 1000
},
"totals": {
"sent": 340,
"received": 128,
"billable": 468
},
"byCompany": [
{
"companyId": "cmp_01J9Z3K2N4R5T6V7W8X9Y0Z1",
"sent": 340,
"received": 128
}
]
} Sandbox
Endpoint-и достапни само со sandbox клучеви, за тестирање со симулатор на УЈП.
Симулирајте промена на статус (само во sandbox-симулаторот)
# POST /v1/sandbox/einvoices/{id}/simulate
Достапно само кога backend-от за sandbox на компанијата е Merot-симулаторот (не тест системот на УЈП). Ви овозможува да местите документ помеѓу статуси без вистински квалификуван токен.
Параметри
id (path)stringзадолжително
Тело на барањето
statusenumзадолжително030504rejectReasonCodestring | null
Враќа
- 200
Е-фактурата со нејзиниот нов, симулиран статус.
### POST /v1/sandbox/einvoices/{id}/simulate
Симулирајте промена на статус (само во sandbox-симулаторот)
Достапно само кога backend-от за sandbox на компанијата е Merot-симулаторот (не тест
системот на УЈП). Ви овозможува да местите документ помеѓу статуси без вистински
квалификуван токен.
```bash
curl -X POST "https://api.efaktura.merot.com/v1/sandbox/einvoices/einv_123/simulate" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
``` cURL
curl -X POST "https://api.efaktura.merot.com/v1/sandbox/einvoices/einv_123/simulate" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}' const response = await fetch("https://api.efaktura.merot.com/v1/sandbox/einvoices/einv_123/simulate", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({}),
});
const data = await response.json();
console.log(data); import requests
response = requests.post(
"https://api.efaktura.merot.com/v1/sandbox/einvoices/einv_123/simulate",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={},
)
print(response.json()) <?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.efaktura.merot.com/v1/sandbox/einvoices/einv_123/simulate', [
'headers' => [
'Authorization' => 'Bearer YOUR_API_KEY',
'Content-Type' => 'application/json',
],
'json' => [],
]);
echo $response->getBody(); using System.Net.Http;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Post, "https://api.efaktura.merot.com/v1/sandbox/einvoices/einv_123/simulate");
request.Headers.Add("Authorization", "Bearer YOUR_API_KEY");
var json = /* lang=json */ @"{}";
request.Content = new StringContent(json, Encoding.UTF8, "application/json");
using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body); import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.efaktura.merot.com/v1/sandbox/einvoices/einv_123/simulate"))
.headers("Authorization", "Bearer YOUR_API_KEY", "Content-Type", "application/json")
.method("POST", HttpRequest.BodyPublishers.ofString(/* JSON */ "{}"))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body()); Внесете симулирана влезна е-фактура (само во sandbox-симулаторот)
# POST /v1/sandbox/inbox
Тело на барањето
fromTaxNumberstring | nulllinesarray of objectПрикажи вгнездени параметри
skustring | nulldescriptionstringзадолжителноunitstring | nullquantitystringзадолжителноДецимален број како string.
unitPricestringзадолжителноДецимален износ како текстуална вредност (string), никогаш како JSON број.
unitDiscountstringДецимален износ како текстуална вредност (string), никогаш како JSON број.
vatPercentstringзадолжителноДецимален број како string, на пр. "18", "5", "0".
taxIndicatorstringзадолжителноКод од шифрарникот на УЈП за даночен индикатор.
domesticProductboolean | null
Враќа
- 201
Симулираниот влезен документ е создаден.
### POST /v1/sandbox/inbox
Внесете симулирана влезна е-фактура (само во sandbox-симулаторот)
```bash
curl -X POST "https://api.efaktura.merot.com/v1/sandbox/inbox" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
``` cURL
curl -X POST "https://api.efaktura.merot.com/v1/sandbox/inbox" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{}' const response = await fetch("https://api.efaktura.merot.com/v1/sandbox/inbox", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({}),
});
const data = await response.json();
console.log(data); import requests
response = requests.post(
"https://api.efaktura.merot.com/v1/sandbox/inbox",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={},
)
print(response.json()) <?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.efaktura.merot.com/v1/sandbox/inbox', [
'headers' => [
'Authorization' => 'Bearer YOUR_API_KEY',
'Content-Type' => 'application/json',
],
'json' => [],
]);
echo $response->getBody(); using System.Net.Http;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Post, "https://api.efaktura.merot.com/v1/sandbox/inbox");
request.Headers.Add("Authorization", "Bearer YOUR_API_KEY");
var json = /* lang=json */ @"{}";
request.Content = new StringContent(json, Encoding.UTF8, "application/json");
using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body); import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.efaktura.merot.com/v1/sandbox/inbox"))
.headers("Authorization", "Bearer YOUR_API_KEY", "Content-Type", "application/json")
.method("POST", HttpRequest.BodyPublishers.ofString(/* JSON */ "{}"))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body()); Bridge
Метаподатоци за изданијата на Merot Bridge (јавно, без автентикација).
Endpoint-и
Листа на изданија на Merot Bridge
# GET /v1/bridge/releases
Јавно и без потреба од автентикација. Ја снабдува страницата за преземање и сопствениот механизам за автоматско ажурирање на Bridge.
Параметри
channel (query)enumstablebetaСтандардна вредност:
"stable"
Враќа
- 200
Изданија на бараниот канал.
### GET /v1/bridge/releases Листа на изданија на Merot Bridge Јавно и без потреба од автентикација. Ја снабдува страницата за преземање и сопствениот механизам за автоматско ажурирање на Bridge. ```bash curl -X GET "https://api.efaktura.merot.com/v1/bridge/releases" ```
cURL
curl -X GET "https://api.efaktura.merot.com/v1/bridge/releases" const response = await fetch("https://api.efaktura.merot.com/v1/bridge/releases", {
method: "GET",
headers: {
},
});
const data = await response.json();
console.log(data); import requests
response = requests.get(
"https://api.efaktura.merot.com/v1/bridge/releases",
headers={
},
)
print(response.json()) <?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.efaktura.merot.com/v1/bridge/releases', [
'headers' => [
],
]);
echo $response->getBody(); using System.Net.Http;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Get, "https://api.efaktura.merot.com/v1/bridge/releases");
using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body); import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.efaktura.merot.com/v1/bridge/releases"))
.headers()
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body()); Статус
Јавен endpoint за статус (без автентикација).
Endpoint-и
### GET /v1/health
Статус на сервисот и достапноста на УЈП
```bash
curl -X GET "https://api.efaktura.merot.com/v1/health"
```
**Пример-одговор**
```json
{
"status": "ok",
"version": "2026-09-26",
"ujp": {
"test": "up",
"production": "not_configured"
}
}
``` cURL
curl -X GET "https://api.efaktura.merot.com/v1/health" const response = await fetch("https://api.efaktura.merot.com/v1/health", {
method: "GET",
headers: {
},
});
const data = await response.json();
console.log(data); import requests
response = requests.get(
"https://api.efaktura.merot.com/v1/health",
headers={
},
)
print(response.json()) <?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.efaktura.merot.com/v1/health', [
'headers' => [
],
]);
echo $response->getBody(); using System.Net.Http;
using System.Text;
using var client = new HttpClient();
using var request = new HttpRequestMessage(HttpMethod.Get, "https://api.efaktura.merot.com/v1/health");
using var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body); import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.efaktura.merot.com/v1/health"))
.headers()
.method("GET", HttpRequest.BodyPublishers.noBody())
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body()); {
"status": "ok",
"version": "2026-09-26",
"ujp": {
"test": "up",
"production": "not_configured"
}
}