е-Фактура API
v1 Водичи EN Започнете

е-Фактура API

API референца

Базен URL https://api.efaktura.merot.com

OAuth

Токени со client credentials за софтверски куќи (vendor) што интегрираат во име на повеќе клиентски компании.

Добијте пристапен токен со 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).

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)string
  • limit (query)integer

    Стандардна вредност: 25

Враќа

  • 200

    Страница со компании.

  • 401

    Недостасуваат, се неважечки или се укинати акредитивите.

  • 429

    Премногу барања.

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 | null

    Your own identifier for this company.

  • signingModeenum
    bridgesdk

    Стандардна вредност: "bridge"

  • representativeobjectзадолжително
    Прикажи вгнездени параметриСкриј вгнездени параметри
    • namestringзадолжително
    • emailstringзадолжително

Враќа

  • 201

    Компанијата е создадена, во очекување на прифаќање на мандатот.

  • 400

    Телото на барањето не помина валидација.

  • 503

    Предпроверката во регистарот на УЈП е недостапна — компанијата не е создадена.

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

    Не постои таков ресурс за оваа компанија.

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 | null
  • signingModeenum
    bridgesdk

Враќа

  • 200

    Ажурирана компанија.

  • 404

    Не постои таков ресурс за оваа компанија.

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)enum
    validatinginvalidawaiting_signaturequeuedsubmittingfailedhelddeliveredacceptedauto_acceptedrejectedcancelled_by_stornocorrectedregistereddraft_at_ujp
  • documentType (query)string

    Код за тип на документ според УЈП (на пр. `100` фактура, `110` кредитно известие).

  • issuedFrom (query)string
  • issuedTo (query)string
  • clientReference (query)string
  • euid (query)string
  • cursor (query)string
  • limit (query)integer

    Стандардна вредност: 25

Враќа

  • 200

    Страница со е-фактури.

  • 401

    Недостасуваат, се неважечки или се укинати акредитивите.

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 | null
  • periodStartstring | null
  • periodEndstring | null
  • notesstring | null
  • headerstring | null
  • footerstring | null
  • sellerobject | null

    Може да се постават само subsidiaryCode/contact/email — идентитетот на продавачот секогаш доаѓа од вашата компанија.

    Прикажи вгнездени параметриСкриј вгнездени параметри
    • subsidiaryCodestring | null
    • contactstring | null
    • emailstring | null
  • buyerobjectзадолжително
    Прикажи вгнездени параметриСкриј вгнездени параметри
    • countrystringзадолжително

      ISO 3166-1 alpha-2 код на држава.

    • taxNumberstring | null

      ЕДБ.

    • foreignTaxNumberstring | null
    • vatNumberstring | null
    • namestringзадолжително
    • addressobjectзадолжително
      Прикажи вгнездени параметриСкриј вгнездени параметри
      • streetstring | null
      • numberstring | null
      • postalCodestring | null
      • citystring | null
    • subsidiaryCodestring | null
    • subsidiaryNamestring | null
    • contactstring | null
    • emailstring | null
  • receiverobject | null
    Прикажи вгнездени параметриСкриј вгнездени параметри
    • countrystringзадолжително

      ISO 3166-1 alpha-2 код на држава.

    • taxNumberstring | null

      ЕДБ.

    • foreignTaxNumberstring | null
    • vatNumberstring | null
    • namestringзадолжително
    • addressobjectзадолжително
      Прикажи вгнездени параметриСкриј вгнездени параметри
      • streetstring | null
      • numberstring | null
      • postalCodestring | null
      • citystring | null
    • subsidiaryCodestring | null
    • subsidiaryNamestring | null
    • contactstring | null
    • emailstring | null
  • referencesarray of objectзадолжително
    Прикажи вгнездени параметриСкриј вгнездени параметри
    • typestringзадолжително

      Код од шифрарникот на УЈП за тип на референтен документ.

    • numberstringзадолжително
    • datestring | null
  • paymentobjectзадолжително
    Прикажи вгнездени параметриСкриј вгнездени параметри
    • typeCodestringзадолжително
    • dueDatestring | null
    • dueDaysinteger | null
    • termsstring | null
    • notestring | null
    • currencystringзадолжително
    • exchangeRatestring | null
    • exchangeRateDatestring | null
  • linesarray of objectзадолжително
    Прикажи вгнездени параметриСкриј вгнездени параметри
    • skustring | null
    • descriptionstringзадолжително
    • unitstring | null
    • quantitystringзадолжително

      Децимален број како string.

    • unitPricestringзадолжително

      Децимален износ како текстуална вредност (string), никогаш како JSON број.

    • unitDiscountstring

      Децимален износ како текстуална вредност (string), никогаш како JSON број.

    • vatPercentstringзадолжително

      Децимален број како string, на пр. "18", "5", "0".

    • taxIndicatorstringзадолжително

      Код од шифрарникот на УЈП за даночен индикатор.

    • domesticProductboolean | null
  • advanceobject | null
    Прикажи вгнездени параметриСкриј вгнездени параметри
    • amountstring

      Децимален износ како текстуална вредност (string), никогаш како JSON број.

    • datestring | null
    • descriptionstring | 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 со пресметаните вкупни износи.

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 | null
  • periodStartstring | null
  • periodEndstring | null
  • notesstring | null
  • headerstring | null
  • footerstring | null
  • sellerobject | null

    Може да се постават само subsidiaryCode/contact/email — идентитетот на продавачот секогаш доаѓа од вашата компанија.

    Прикажи вгнездени параметриСкриј вгнездени параметри
    • subsidiaryCodestring | null
    • contactstring | null
    • emailstring | null
  • buyerobjectзадолжително
    Прикажи вгнездени параметриСкриј вгнездени параметри
    • countrystringзадолжително

      ISO 3166-1 alpha-2 код на држава.

    • taxNumberstring | null

      ЕДБ.

    • foreignTaxNumberstring | null
    • vatNumberstring | null
    • namestringзадолжително
    • addressobjectзадолжително
      Прикажи вгнездени параметриСкриј вгнездени параметри
      • streetstring | null
      • numberstring | null
      • postalCodestring | null
      • citystring | null
    • subsidiaryCodestring | null
    • subsidiaryNamestring | null
    • contactstring | null
    • emailstring | null
  • receiverobject | null
    Прикажи вгнездени параметриСкриј вгнездени параметри
    • countrystringзадолжително

      ISO 3166-1 alpha-2 код на држава.

    • taxNumberstring | null

      ЕДБ.

    • foreignTaxNumberstring | null
    • vatNumberstring | null
    • namestringзадолжително
    • addressobjectзадолжително
      Прикажи вгнездени параметриСкриј вгнездени параметри
      • streetstring | null
      • numberstring | null
      • postalCodestring | null
      • citystring | null
    • subsidiaryCodestring | null
    • subsidiaryNamestring | null
    • contactstring | null
    • emailstring | null
  • referencesarray of objectзадолжително
    Прикажи вгнездени параметриСкриј вгнездени параметри
    • typestringзадолжително

      Код од шифрарникот на УЈП за тип на референтен документ.

    • numberstringзадолжително
    • datestring | null
  • paymentobjectзадолжително
    Прикажи вгнездени параметриСкриј вгнездени параметри
    • typeCodestringзадолжително
    • dueDatestring | null
    • dueDaysinteger | null
    • termsstring | null
    • notestring | null
    • currencystringзадолжително
    • exchangeRatestring | null
    • exchangeRateDatestring | null
  • linesarray of objectзадолжително
    Прикажи вгнездени параметриСкриј вгнездени параметри
    • skustring | null
    • descriptionstringзадолжително
    • unitstring | null
    • quantitystringзадолжително

      Децимален број како string.

    • unitPricestringзадолжително

      Децимален износ како текстуална вредност (string), никогаш како JSON број.

    • unitDiscountstring

      Децимален износ како текстуална вредност (string), никогаш како JSON број.

    • vatPercentstringзадолжително

      Децимален број како string, на пр. "18", "5", "0".

    • taxIndicatorstringзадолжително

      Код од шифрарникот на УЈП за даночен индикатор.

    • domesticProductboolean | null
  • advanceobject | null
    Прикажи вгнездени параметриСкриј вгнездени параметри
    • amountstring

      Децимален износ како текстуална вредност (string), никогаш како JSON број.

    • datestring | null
    • descriptionstring | null
  • expectedTotalsobject | null

    Опционално — ако е дадено и не се совпаѓа со вкупните износи пресметани од Merot, барањето враќа грешка 422 totals_mismatch.

    Прикажи вгнездени параметриСкриј вгнездени параметри
    • netstring

      Децимален износ како текстуална вредност (string), никогаш како JSON број.

    • vatstring

      Децимален износ како текстуална вредност (string), никогаш како JSON број.

    • grossstring

      Децимален износ како текстуална вредност (string), никогаш како JSON број.

    • currencystring

Враќа

  • 200

    Валидно — пресметани вкупни износи и евентуални предупредувања што не блокираат.

  • 422

    validation_failed — грешки на ниво на поле, или totals_mismatch со пресметаните вкупни износи.

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

    Не постои таков ресурс за оваа компанија.

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

    Не постои таков ресурс за оваа компанија.

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 — ниту еден агент за потпишување не одговори навреме.

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 или неважечка почетна состојба за сторно.

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 | null
  • replacementobjectзадолжително
    Прикажи вгнездени параметриСкриј вгнездени параметри
    • clientReferencestringзадолжително

      Ваш сопствен идентификатор за овој документ, за идемпотентност.

    • documentTypestringзадолжително

      Код од шифрарникот на УЈП за тип на документ (100 фактура, 110 кредитно известие, 130 аванс, 150/160 задолжница/друго, ...).

    • numberstringзадолжително
    • issueDatestringзадолжително
    • turnoverDatestringзадолжително
    • deliveryDatestring | null
    • periodStartstring | null
    • periodEndstring | null
    • notesstring | null
    • headerstring | null
    • footerstring | null
    • sellerobject | null

      Може да се постават само subsidiaryCode/contact/email — идентитетот на продавачот секогаш доаѓа од вашата компанија.

      Прикажи вгнездени параметриСкриј вгнездени параметри
      • subsidiaryCodestring | null
      • contactstring | null
      • emailstring | null
    • buyerobjectзадолжително
      Прикажи вгнездени параметриСкриј вгнездени параметри
      • countrystringзадолжително

        ISO 3166-1 alpha-2 код на држава.

      • taxNumberstring | null

        ЕДБ.

      • foreignTaxNumberstring | null
      • vatNumberstring | null
      • namestringзадолжително
      • addressobjectзадолжително
        Прикажи вгнездени параметриСкриј вгнездени параметри
        • streetstring | null
        • numberstring | null
        • postalCodestring | null
        • citystring | null
      • subsidiaryCodestring | null
      • subsidiaryNamestring | null
      • contactstring | null
      • emailstring | null
    • receiverobject | null
      Прикажи вгнездени параметриСкриј вгнездени параметри
      • countrystringзадолжително

        ISO 3166-1 alpha-2 код на држава.

      • taxNumberstring | null

        ЕДБ.

      • foreignTaxNumberstring | null
      • vatNumberstring | null
      • namestringзадолжително
      • addressobjectзадолжително
        Прикажи вгнездени параметриСкриј вгнездени параметри
        • streetstring | null
        • numberstring | null
        • postalCodestring | null
        • citystring | null
      • subsidiaryCodestring | null
      • subsidiaryNamestring | null
      • contactstring | null
      • emailstring | null
    • referencesarray of objectзадолжително
      Прикажи вгнездени параметриСкриј вгнездени параметри
      • typestringзадолжително

        Код од шифрарникот на УЈП за тип на референтен документ.

      • numberstringзадолжително
      • datestring | null
    • paymentobjectзадолжително
      Прикажи вгнездени параметриСкриј вгнездени параметри
      • typeCodestringзадолжително
      • dueDatestring | null
      • dueDaysinteger | null
      • termsstring | null
      • notestring | null
      • currencystringзадолжително
      • exchangeRatestring | null
      • exchangeRateDatestring | null
    • linesarray of objectзадолжително
      Прикажи вгнездени параметриСкриј вгнездени параметри
      • skustring | null
      • descriptionstringзадолжително
      • unitstring | null
      • quantitystringзадолжително

        Децимален број како string.

      • unitPricestringзадолжително

        Децимален износ како текстуална вредност (string), никогаш како JSON број.

      • unitDiscountstring

        Децимален износ како текстуална вредност (string), никогаш како JSON број.

      • vatPercentstringзадолжително

        Децимален број како string, на пр. "18", "5", "0".

      • taxIndicatorstringзадолжително

        Код од шифрарникот на УЈП за даночен индикатор.

      • domesticProductboolean | null
    • advanceobject | null
      Прикажи вгнездени параметриСкриј вгнездени параметри
      • amountstring

        Децимален износ како текстуална вредност (string), никогаш како JSON број.

      • datestring | null
      • descriptionstring | null
    • expectedTotalsobject | null

      Опционално — ако е дадено и не се совпаѓа со вкупните износи пресметани од Merot, барањето враќа грешка 422 totals_mismatch.

      Прикажи вгнездени параметриСкриј вгнездени параметри
      • netstring

        Децимален износ како текстуална вредност (string), никогаш како JSON број.

      • vatstring

        Децимален износ како текстуална вредност (string), никогаш како JSON број.

      • grossstring

        Децимален износ како текстуална вредност (string), никогаш како JSON број.

      • currencystring

Враќа

  • 202

    Корекцискиот документ е создаден.

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 — документот сè уште не е финализиран кај УЈП.

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)enum
    pendingacceptedauto_acceptedrejected
  • deadlineBefore (query)string
  • cursor (query)string

Враќа

  • 200

    Страница со влезни документи.

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

    Не постои таков ресурс за оваа компанија.

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-ти веќе поминал (УЈП веќе автоматски прифатил).

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

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 на продавачот, непроменет.

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

    Не постои таков ресурс за оваа компанија.

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задолжително
    sandboxproduction
  • directionenum | null
    outboundinbound
  • issuedFromstringзадолжително
  • issuedTostringзадолжително
  • kindsarray of enum

Враќа

  • 202

    Извозот е ставен во ред.

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 за преземање, откако ќе биде подготвен).

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());

Листа на webhook endpoint-и

#

GET /v1/webhook-endpoints

Враќа

  • 200

    Листа на webhook endpoint-и.

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 | null
  • descriptionstring | null

Враќа

  • 201

    Endpoint-от е создаден. Тајниот клуч за потпишување се прикажува само еднаш.

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-от.

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задолжително

Тело на барањето

  • urlstring
  • eventsarray of enum
  • companyIdsarray of string | null
  • descriptionstring | null

Враќа

  • 200

    Ажуриран webhook endpoint.

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

    Деактивирано.

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

    Нов тајн клуч.

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-от е ставен во ред за испорака.

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)enum
    pendingsucceededfailedabandoned
  • cursor (query)string

Враќа

  • 200

    Страница со испораки.

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)enum
    einvoice.validated_failedeinvoice.signature_requiredeinvoice.submittedeinvoice.acceptedeinvoice.auto_acceptedeinvoice.rejectedeinvoice.cancelled_by_stornoeinvoice.correctedeinvoice.failedinbox.receivedinbox.deadline_approachinginbox.auto_acceptedsigning_agent.offlinesigning_agent.onlinearchive.export_ready
  • createdFrom (query)string
  • cursor (query)string

Враќа

  • 200

    Страница со настани.

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}

Параметри

  • id (path)stringзадолжително

Враќа

  • 200

    Настанот.

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 | null

    Replay to one endpoint only; omit to replay to all subscribed endpoints.

Враќа

  • 202

    Нова испорака е ставена во ред (is_replay: true).

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задолжително
    bridgesdk
  • namestringзадолжително
  • platformenum | null
    windowsmacoslinuxserver
  • versionstring | null
  • publicKeyJwkobjectзадолжително

    The agent's Ed25519 device key (OKP).

Враќа

  • 200

    Акредитиви на агентот — се прикажуваат само еднаш.

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

    Сертификатот е регистриран и поврзан со компанијата.

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

    Барања за потпишување во исчекување за овој агент.

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)enum
    pending
  • companyId (query)string

Враќа

  • 200

    Барања за потпишување во исчекување.

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

    Барањето за потпишување.

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

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.

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_invalid
  • messagestring | null

Враќа

  • 200

    Одбивањето е запишано.

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

    Потрошувачка за периодот.

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задолжително
    030504
  • rejectReasonCodestring | null

Враќа

  • 200

    Е-фактурата со нејзиниот нов, симулиран статус.

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 | null
  • linesarray of object
    Прикажи вгнездени параметриСкриј вгнездени параметри
    • skustring | null
    • descriptionstringзадолжително
    • unitstring | null
    • quantitystringзадолжително

      Децимален број како string.

    • unitPricestringзадолжително

      Децимален износ како текстуална вредност (string), никогаш како JSON број.

    • unitDiscountstring

      Децимален износ како текстуална вредност (string), никогаш како JSON број.

    • vatPercentstringзадолжително

      Децимален број како string, на пр. "18", "5", "0".

    • taxIndicatorstringзадолжително

      Код од шифрарникот на УЈП за даночен индикатор.

    • domesticProductboolean | null

Враќа

  • 201

    Симулираниот влезен документ е создаден.

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 (јавно, без автентикација).

Листа на изданија на Merot Bridge

#

GET /v1/bridge/releases

Јавно и без потреба од автентикација. Ја снабдува страницата за преземање и сопствениот механизам за автоматско ажурирање на Bridge.

Параметри

  • channel (query)enum
    stablebeta

    Стандардна вредност: "stable"

Враќа

  • 200

    Изданија на бараниот канал.

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

Враќа

  • 200

    Тековен статус.

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"
  }
}