е-Фактура API
Целосно поставување
Брз старт ве носи до „потпишана” фактура за пет минути, кон Merot-от симулатор, без компанија, без сертификат и без Bridge. Овој водич е другиот пат: сопствена компанија, вистински идентитет на потписник, инсталиран и спарен Merot Bridge на вашиот компјутер, вистински сертификат и sandbox е-фактура што ја потпишува вистински човек. Секој чекор подолу е проверен спрема системот во живо пред да се запише — каде нешто сè уште не е завршено или е привремено, тоа е јасно означено.
Важно
Едно нешто пред да почнете: Merot Bridge работи на Windows и macOS (Linux е планиран, но сè уште не е објавен). Регистрацијата и sandbox-компанијата се бесплатни — видете чекор 1.
1. Регистрирајте ја вашата сметка
Самостојната регистрација е вистинска и достапна веднаш, на developer.merot.com/console/signup. Формуларот бара вид на сметка, назив на компанија, е-пошта и лозинка.
Програмер — бесплатно, веднаш, само sandbox. Со поднесување на формуларот сметката се креира
веднаш и еднократно ви се прикажува sandbox клуч (mfk_test_...) во прозорче — копирајте го
веднаш, повторно не се прикажува. Без плаќање, без чекање. Можете да креирате една компанија
со неа — вашата сопствена, за да ја тестирате вашата интеграција (POST /v1/companies дозволува
точно една по сметка од вид „Програмер”; втора се одбива). Тоа е сè што му треба на остатокот од
овој водич. Сметка од вид „Програмер” никогаш не може да овозможи продукција на таа компанија ниту
да добие продукциски клуч — трајно само sandbox.
Бизнис или Софтверска куќа (vendor) — за управување со повеќе клиентски компании (случајот кога градите производ што издава е-фактури во име на многу други бизниси). Ниту еден не е бесплатен: со поднесување на формуларот сметката станува „во исчекување” и се пренасочувате кон плаќање преку Merot Billing (pay.merot.com) за вистинска претплата — најевтиниот план, Start, чини 990 МКД месечно — и ништо не се издава сè додека плаќањето не заврши. Ова ви треба само ако управувате со повеќе од една компанија; за овој водич, „Програмер” е доволно.
Забелешка
Можете да скокнете директно на планот што го сакате со ?plan=business или ?plan=vendor на
адресата за регистрација. Иста е-пошта што веќе има сметка добива иста порака „Проверете ја
е-поштата” без разлика на видот — конзолата никогаш не открива дали адресата веќе постои.
За остатокот од овој водич, претпоставете дека сте се регистрирале како Програмер и имате sandbox клуч.
2. Креирајте компанија
POST /v1/companies прима компанија-клиент по нејзиниот ЕДБ (13-цифрен даночен број; називот и
ДДВ-бројот доаѓаат од проверката во регистарот на УЈП, никогаш од телото на барањето).
representative е задолжително поле во барањето, но во моментов на пишување ништо реално не се
испраќа на таа адреса — чекорот за прифаќање мандат по е-пошта сè уште не е поврзан на бекендот,
па новосоздадените компании остануваат трајно означени со status: pending_mandate („Мандат во
тек”). Тоа е само козметика: ништо друго во овој водич не го проверува тој статус, продолжете
понатаму.
Истото може да го направите и од страницата Компании во конзолата (developer.merot.com/console) со копчето „Нова компанија”, ако не сакате директно да го повикате API-то — исти полиња, ист резултат.
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()); 3. Креирајте идентитет на потписник
Е-фактура ја потпишува лице, не компанија — УЈП го идентификува тоа лице преку EUJP-ID („Единствен идентификатор на корисникот (потписник)”). EUJP-ID добивате со регистрација директно кај УЈП како корисник на е-Фактура (преку сопствениот портал на УЈП за е-Фактура) — Merot не го издава и не го доделува, само го запишува веќе постоечкиот и го поврзува со вашиот сертификат и вашата компанија.
Прво создадете го потписникот (еднаш по лице), потоа поврзете го со компанијата од чекор 2 како нејзин стандарден потписник:
curl https://api.efaktura.merot.com/v1/signers \
-H "Authorization: Bearer mfk_test_..." \
-H "Content-Type: application/json" \
-d '{
"fullName": "Ана Петровска",
"eujpId": "AP123456"
}'curl https://api.efaktura.merot.com/v1/company-signers \
-H "Authorization: Bearer mfk_test_..." \
-H "Content-Type: application/json" \
-H "X-Company-Id: cmp_..." \
-d '{
"signerId": "sgn_...",
"isDefault": true
}'Штом Bridge поврзе сертификат (чекор 6), најдете ја неговата ID и активирајте го:
curl https://api.efaktura.merot.com/v1/signers/sgn_.../certificates \
-H "Authorization: Bearer mfk_test_..."curl -X POST https://api.efaktura.merot.com/v1/signer-certificates/cert_.../activate \
-H "Authorization: Bearer mfk_test_..."Активирањето е вистинска одлука за доверба, не формалност — тоа е моментот кога Merot почнува да го третира токму овој сертификат како овластен да потпишува за овој потписник. Страницата Signers во конзолата има копче Activate за истото, ако не сакате да го повикате API-то директно.
4. Преземете и инсталирајте Merot Bridge
Merot Bridge е десктоп апликацијата што го чува вашиот сертификат и потпишува во ваше име — видете Потпишување: Режим А наспроти Режим Б зошто потпишувањето никогаш не се случува на серверите на Merot.
Преземање (развојни верзии):
- Windows (64-bit): MerotBridgeSetup.msi
- macOS, Apple Silicon (M1, M2, M3, M4 и понови): MerotBridge-macos-arm64.dmg
- macOS, Intel: MerotBridge-macos-x64.dmg
Важно
Windows: ова е непотпишана развојна верзија — сè уште нема верзионирано, дигитално потпишано издание. Извршувањето на инсталерот ќе го активира Windows SmartScreen: „Windows protected your PC” (Windows го заштити вашиот компјутер). Ова е очекувано во моментов, не е ваша грешка. Кликнете „More info” (Повеќе информации), па „Run anyway” (Сепак изврши). Се инсталира по корисник, без потребни администраторски права. Ова предупредување ќе исчезне штом Merot објави дигитално потпишано издание — не е нешто што треба или можете самите да го поправите денес.
macOS: бара macOS 15 или понова верзија. Апликацијата е потпишана и нотаризирана од Apple („Merot, Inc.”), па се отвора нормално. Повлечете го Merot Bridge во Applications и отворете го оттаму. Хардверските токени (Gemalto IDPrime / SafeNet, што ги користат КИБС и Македонски Телеком) бараат SafeNet Authentication Client for Mac, верзија 10.8.29 или понова (universal); постарото преземање 10.2.100 од Телеком е само за Intel и не работи со верзијата за Apple Silicon.
Откако ќе се инсталира, Bridge работи во позадина: како икона во системската лента на Windows, како икона во лентата со мени (menu bar), без икона во Dock, на macOS.
5. Спарете го Bridge со вашата сметка
Пред спарување, проверете дали двофакторска автентикација (апликација за автентикација) е вклучена на вашата сметка во конзолата — спарувањето секогаш бара свеж код за дополнителна потврда, дури и кога веќе сте најавени.
- Во конзолата, отворете Потпишувачи (developer.merot.com/console) и кликнете Код за спарување. Копчето е оневозможено сè додека немате барем една компанија — вратете се на чекор 2 ако е засивено.
- Прозорче бара потврда со апликацијата за автентикација (внесете го тековниот шестцифрен код и
кликнете Генерирај код за спарување). Конзолата потоа прикажува 8-карактерен код за
спарување во две групи по четири (на пр.
ABCD-EFGH), важи 10 минути и се користи еднократно. - Во Bridge, кликнете со десното копче на иконата во системската лента и изберете Поврзи (или,
ако главниот прозорец е отворен, кликнете Поврзи со Merot; или извршете
merot-bridge pairод командната линија) и внесете го кодот. - Bridge прикажува прозорче за потврда со вистинската организација и компании, прочитани од серверот — не претпоставка. Ништо не се зачувува сè додека не кликнете потврда. Штом ќе го сторите тоа, Bridge генерира сопствен клуч на уредот и го чува во заштитениот трезор за акредитиви на Windows (DPAPI); агентот сега е прикажан како поврзан на страницата Потпишувачи во конзолата.
6. Изберете и активирајте сертификат
Во главниот прозорец на Bridge, за компанијата што ја спаривте кликнете Избери сертификат…. Прозорчето ги наведува сите сертификати за потпишување што Bridge ги пронашол на поврзаните уреди или во трезорот со сертификати на компјутерот — со тема (CN), важност (Важи до) и начин на заштита на клучот (Заштита на клучот: хардверски уред, платформски TPM или софтвер) — секој со ознака за подобност.
Подобност значи подобен за продукција: сертификатот мора да носи QcCompliance (вистинска
потврда за квалификуван сертификат од давател на доверливи услуги). Хардверски уред не е
задолжителен — обичен софтверски личен квалификуван сертификат, каков што стандардно издаваат
KIBS или Телеком, е подобен; тоа барање (QcSSCD) беше отстрането во моментот на пишување на овој
водич.
Забелешка
Конкретно за sandbox тестирање, проверката за подобност не ве блокира — Bridge ќе ви дозволи да поврзете и да потпишете со неквалификуван тест сертификат, само ќе прикаже предупредување. Продукциското потпишување строго ја наметнува проверката за квалификуван сертификат.
Изберете сертификат, кликнете Избери, па потврдете во второто прозорче (Поврзи сертификат) — повторно, ништо не се зачувува додека изречно не потврдите. Bridge отсега потпишува за таа компанија со овој сертификат, сè додека не го промените.
Одделно, означете го како активен наспроти идентитетот на потписникот од чекор 3 — или копчето
Activate во конзолата на истиот сертификат, или повиците GET .../certificates +
POST .../activate прикажани таму. Ништо друго во текот на потпишувањето во овој водич не
работи додека овој чекор не е завршен: неактивиран сертификат никогаш не се избира, дури и ако
Bridge веќе му верува.
7. Издадете и проверете тест е-фактура
Ова е истото повикување како во чекор 2 од Брз старт — разликата е она што се случува зад него. Со поврзан вистински потписник и сертификат, Merot повеќе не потпишува преку симулаторот: отвора барање за потпишување и чека вашиот сопствен Bridge да одговори.
Важно
Следете го вашиот Windows компјутер веднаш по ова повикување: Bridge ќе прикаже прозорче „Потврда за потпишување” што точно покажува што ќе се потпишува — вид документ, број, купувач, износ — и чека да кликнете Прифати. Ова не е автоматско, и не е грешка што треба да ја заобиколите со скрипта: квалификуваниот потпис мора да биде намерен чин на сопственикот на сертификатот, на неговиот сопствен уред. Ништо не стигнува до УЈП сè додека некој не кликне. (Сопственик на сметка може да ја пријави конкретна инсталација за неприсутно потпишување заради автоматизирани текови на работа — видете Потпишување — но тоа е посебна, изречна одлука, не стандардно однесување.)
Откако ќе кликнете Прифати во Bridge, проверувајте го резултатот:
Штом статусот стигне до delivered, accepted или auto_accepted, имате вистински euid и
qrLink од УЈП — целиот пат проработи од почеток до крај.
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": "P12",
"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": "DDV-A",
"domesticProduct": null
}
],
"advance": null,
"expectedTotals": {
"net": "10000.00",
"vat": "1800.00",
"gross": "11800.00"
}
}' 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": "P12",
"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": "DDV-A",
"domesticProduct": null
}
],
"advance": null,
"expectedTotals": {
"net": "10000.00",
"vat": "1800.00",
"gross": "11800.00"
}
}),
});
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": "P12",
"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": "DDV-A",
"domesticProduct": None
}
],
"advance": None,
"expectedTotals": {
"net": "10000.00",
"vat": "1800.00",
"gross": "11800.00"
}
},
)
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' => 'P12',
'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' => 'DDV-A',
'domesticProduct' => null,
],
],
'advance' => null,
'expectedTotals' => [
'net' => '10000.00',
'vat' => '1800.00',
'gross' => '11800.00',
],
],
]);
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"": ""P12"",
""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"": ""DDV-A"",
""domesticProduct"": null
}
],
""advance"": null,
""expectedTotals"": {
""net"": ""10000.00"",
""vat"": ""1800.00"",
""gross"": ""11800.00""
}
}";
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\": \"P12\", \"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\": \"DDV-A\", \"domesticProduct\": null } ], \"advance\": null, \"expectedTotals\": { \"net\": \"10000.00\", \"vat\": \"1800.00\", \"gross\": \"11800.00\" } }"))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body()); 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()); Следни чекори
- Потпишување: Режим А наспроти Режим Б — како функционира протоколот за барања за потпис, и неприсутно потпишување за автоматизирани текови на работа.
- Merot Bridge — што прави Bridge и како се дистрибуира.
- Webhooks — добивајте известувања при промена на статус, наместо постојано да проверувате.
- Postman колекција — извршете го секој чекор од овој водич во Postman.
- Sandbox — backend-от со симулатор што компаниите во овој водич не го користат.
- Целосна API референца — секој endpoint, поле и грешка.