Lühidalt
Merit Aktiva API on REST-liides JSONi ja HTTPSiga, kasutatav ainult Pro ja Premium litsentsiga. Baasaadress on https://aktiva.merit.ee/api/v2/. Iga päring kannab päringustringis apiId, timestamp kujul yyyyMMddHHmmss UTC-s ja signature, mis on base64(HMAC-SHA256(apiKey, apiId+timestamp+keha)). Arve luuakse aadressil /api/v2/sendinvoice ja saadetakse e-arvena aadressil /api/v2/sendinvoiceaseinv. Piirang on 100 päringut minutis ja 500 rida dokumendi kohta.
Mida Merit Aktiva API teeb ja mida mitte
Merit Aktiva API on REST-liides, mis vahetab JSONi üle HTTPSi. Kaks sisenemispunkti: https://aktiva.merit.ee/api/v1/ ja https://aktiva.merit.ee/api/v2/. Poola lokaliseeringu jaoks on eraldi host, Eesti ettevõttele piisab Eesti omast. V2 toetab dimensioone. Mitme maksega arve jaoks on dokumenteeritud eraldi otspunkt POST /api/v1/sendinvoice2, mille sisendis on massiiv Payments; juba loodud arvele saab makseid osade kaupa lisada ka /api/v2/sendpayment kaudu.
Kolm asja, mida dokumentatsioon ütleb ja mida tasub enne arhitektuuriotsust teada. API töötab ainult Pro- ja Premium-litsentsiga; madalama paketi korral tuleb 401 koodiga api-wronglicense. API-võti ja ID luuakse iga liidestatava tarkvara jaoks eraldi, seega üks võti ühe süsteemi kohta, mitte üks võti kõige jaoks. Ja võtit saab luua ainult peakasutaja.
Piir kahe süsteemi vahel ei ole ainult tehniline küsimus. Enne koodi kirjutamist tasub integratsiooni poolelt läbi mõelda, kas arve tuleb luua Merit Aktivas või on Merit ainult sihtkoht, kuhu arved jõuavad.
Mida API ei tee: see ei asenda e-arve operaatorit. Arve loomine ja arve saatmine e-arvena on kaks eraldi sammu, ja teine samm töötab ainult siis, kui operaatori seadistus on tehtud ning vastuvõtja saab e-arveid vastu võtta.
Autentimine: kolm parameetrit ja üks allkiri
Merit ei kasuta API-võtit päises. Iga päring kannab kolme päringustringi parameetrit: apiId, timestamp ja signature. Allkiri arvutatakse HMAC-SHA256-ga, võtmega apiKey, andmetest apiId + timestamp + keha, ja kodeeritakse base64-sse.
Päringu ajatempel (timestamp) peab olema UTC ajas kujul yyyyMMddHHmmss ja vastama päringu tegemise hetkele. Eesti suveajal tähendab see, et kohalikust kellaajast tuleb kolm tundi maha lahutada. Vananenud või tulevikus olev ajatempel lükatakse tagasi ja see viga tabab arendajat tavaliselt esimesel toodangupäeval, mitte testis.
import { createHmac } from "node:crypto";
const apiId = process.env.MERIT_API_ID;
const apiKey = process.env.MERIT_API_KEY;
function signedQuery(body = "") {
const timestamp = new Date().toISOString().replace(/[-:T]/g, "").slice(0, 14);
const signature = createHmac("sha256", apiKey)
.update(apiId + timestamp + body)
.digest("base64");
return new URLSearchParams({ apiId, timestamp, signature }).toString();
}
const qs = signedQuery();
await fetch(`https://aktiva.merit.ee/api/v2/taxes?${qs}`);
Allkiri võib sisaldada märke, mis tuleb URLis kodeerida. URLSearchParams teeb selle ära; käsitsi kokku pandud string mitte, ja siis tekib 401, mille põhjus on plussmärk, mitte võti.
Kui saad 429, tee uus ajatempel. Dokumentatsioon ütleb selle eraldi välja: korduskatse vana ajatempliga lükatakse tagasi isegi siis, kui allkiri on matemaatiliselt õige.
Keha allkirjastatakse täpselt nendes baitides, mis teele lähevad. Kui serialiseerid objekti kaks korda ja vahepeal muutub võtmete järjekord või tühikute arv, saad allkirja, mis ei vasta kehale. Praktiline reegel: serialiseeri üks kord, hoia string muutujas, saada see string ja allkirjasta sama string.
Enne arvet: maksu GUID
Arve ridade juures on TaxId kohustuslik ja see on GUID, mitte protsent. GUIDid tulevad aadressilt GET /api/v2/taxes. Vastus loetleb kõik ettevõtte maksuseadistuses olevad määrad: Id, Code, Name, TaxPct, NonActive, CountryId.
Õige muster on see GUID üks kord välja lugeda, vastendada oma süsteemis käibemaksumääraga ja hoida vastendus konfiguratsioonis. Kui iga arve loomise ajal maksunimekirja pärida, kulub kaks päringut ühe asja eest ja 100 päringu minutipiirangust saab kiiresti kitsas koht.
Kaks dokumenteeritud nõuet, mis päriselt ka põhjustavad vigu. Esiteks peab iga arve rida olema oma maksugrupis ja TaxAmount massiiv peab olema summeeritud TaxId kaupa. Teiseks ei tohi erineva käibemaksumääraga kaupu ja teenuseid summeerida sama kaubakoodi alla, sest siis ei lähe maksudeklaratsioon kokku.
Arve loomine: POST /api/v2/sendinvoice
Minimaalne toimiv päring sisaldab arve numbrit, kuupäevi, klienti, ridu ja maksusummasid. Allpool on lühendatud päringu näide; vajalikud väljad tuleb üle kontrollida kasutatava versiooni dokumentatsioonist.
POST /api/v2/sendinvoice?apiId=...×tamp=...&signature=...
{
"Customer": {
"Name": "Näidis OÜ",
"RegNo": "12345678",
"NotTDCustomer": false,
"VatRegNo": "EE123456789",
"CurrencyCode": "EUR",
"PaymentDeadLine": 14,
"CountryCode": "EE"
},
"DocDate": "20261028",
"DueDate": "20261111",
"InvoiceNo": "ARVE-2026-0412",
"InvoiceRow": [
{
"Item": { "Code": "TEENUS", "Description": "Kuu hooldus", "Type": 2 },
"Quantity": 1,
"Price": 500.0,
"DiscountPct": 0,
"TaxId": "<guid /api/v2/taxes vastusest>"
}
],
"TotalAmount": 500.0,
"TaxAmount": [{ "TaxId": "<sama guid>", "Amount": 120.0 }]
}
Kliendi plokil on kolm kasutusjuhti, mis käituvad erinevalt. Kui annad ainult Name, otsib Merit olemasolevat klienti nime järgi ja kui ei leia, loob uue. Kui annad CustomerId, kasutab Merit olemasolevat kirjet ja ülejäänud väljad ei loe. Kolmas variant on segu: ID puudub, aga nimi on olemas ja Merit võtab andmed kliendikaardilt, mitte päringust.
NotTDCustomer on Eesti puhul true füüsilistele isikutele ja välisettevõtetele. See väli mõjutab seda, kuidas arvet deklaratsioonides käsitletakse, ja vale väärtus on vaikne viga, mis ilmub alles KMD-l.
Vastus on lühike ja seda tasub alati salvestada: CustomerId, InvoiceId, InvoiceNo, RefNo, NewCustomer. InvoiceId on ainus võti, millega hiljem arvet e-arvena saata või selle PDFi küsida. RefNo genereeritakse, kui seda ei anna, aga dokumentatsioon palub selle ise valideerida.
Kui soovid arve kohe ka makstuks märkida, lisa Payment plokk: PaymentMethod (peab olema ettevõtte seadistuses olemas), PaidAmount koos käibemaksuga ja PaymDate. Seda kasutatakse juhul, kui arve luuakse alles pärast õnnestunud makset.
E-arvena saatmine: sendinvoiceaseinv
E-arve saatmine on eraldi päring: POST /api/v2/sendinvoiceaseinv kehaga {"Id": "<SIHId>", "DelivNote": false}. Üks päring, üks arve. DelivNote väärtusega true saadab arve ilma hindadeta, mis sobib saateleheks.
Õnnestumine annab vastuseks OK. Kui vastuvõtja ei saa e-arveid vastu võtta, tuleb api-noeinv. See ei ole viga sinu koodis ja seda ei paranda korduskatse: põhjus on vastuvõtja poolel. Käsitle seda olekuna, mis läheb järjekorda ja proovib hiljem uuesti, ning saada samal ajal kliendile PDF.
Kliendikaardil on e-arve jaoks kolm välja, mis tuleb enne saatmist paika panna: EInvPaymId (makse identifikaator), EInvOperator ja BankAccount. Operaatori koodid on dokumenteeritud: 1 ei ole, 2 e-arved panka läbi Omniva, 3 pank täies ulatuses, 4 pank piiratud ulatuses.
| Operaator | Kuidas aktiveeritakse | Hind | Kes arveldab |
|---|---|---|---|
| Merit Aktiva kasutajate vahel | Allkirjaõiguslik isik lülitab sisse seadistustes | Tasuta | Ei arveldata |
| Telema | Müügiarvete saatmine peakasutaja, ostuarvete vastuvõtt allkirjaõigusliku isiku kinnitusega | 10 senti + käibemaks iga saadetud või vastuvõetud e-arve eest | Merit Tarkvara koos litsentsiarvega |
| Finbite | Leping Finbite'iga, autentimiskood Aktivasse | Finbite'i lepingu järgi | Finbite otse |
| Apix (Soome) | Registreerimine Apixi juures, parool Aktivasse | Apixi krediit | Apix |
Ostuarvete vastuvõtmine ei hakka tööle enne, kui operaator on äriregistris kinnitatud. Telema puhul saadab Merit sama päeva õhtul operaatori info registrisse ja ettevõtte allkirjaõiguslik isik kinnitab selle järgmisel päeval ettevõtjaportaalis. See üks päev on realistlik plaanimisalus, mitte ebameeldiv üllatus.
Piirid, mis kujundavad integratsiooni
100 päringut minutis
Ületamisel tuleb 429 ja päised X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset ning Retry-After. Enne 2024. aasta märtsi ootas API lihtsalt, nüüd lõpetab päringu.
500 rida dokumendi kohta
Tellimuste, arvete, pakkumiste ja pearaamatu kannete ülempiir ühes dokumendis. Suurem arve tuleb tükeldada või koondada.
3 kuud päringu aknas
getinvoices lubab PeriodStart ja PeriodEnd vahel maksimaalselt kolm kuud. Aastaaruande jaoks tuleb teha neli päringut.
Klientide nimekirja maht
Dokumentatsioon ütleb otse, et kogu kliendinimekirja pärimine võib lõppeda serveri veaga, sest vastust ei õnnestu serialiseerida. Kliendid tuleb pärida muudatuse kuupäeva või nimeosa järgi.
Neist neljast tuleneb üks otsus: ehita sündmusepõhine integratsioon, mitte perioodiline täisskaneerimine. Kui CRM saadab arve loomise sündmuse, teeb sinu teenus ühe sendinvoice päringu ja ühe sendinvoiceaseinv päringu. Kui tahad öösel kõike võrrelda, kasuta müügiarvete getinvoices päringus DateType väärtust 1 (Changeddate) ning jaga periood sobivateks ajavahemikeks.
Korduste kaitse, mida API ise ei anna
Merit Aktiva API dokumentatsioonis ei ole idempotentsusvõtit. Kui võrk katkeb pärast seda, kui server on arve loonud, ei tea sinu kood, kas arve tekkis. Enne kordussaatmist kontrolli, kas arve on olemas, ning töötle sama arvenumbri saatmist korraga ainult ühes töös. Päringule järgnev loomine ei ole atomaarne: kaks paralleelset töötlejat võivad mõlemad saada tühja vastuse ja luua topeltarve.
Kontrolli, kas arve on juba olemas
Päri
/api/v2/getinvoices2väljagaInvNoja vaata, kas vastus on tühi. See on üks lisapäring, aga odavam kui topeltarve.Saada arve ja salvesta InvoiceId
Kirjuta oma andmebaasi
InvoiceNo,InvoiceId,CustomerIdja vastuse aeg. IlmaInvoiceId-ta ei saa e-arvet hiljem saata.Saada e-arve eraldi sammuna
Ebaõnnestunud e-arve ei tähenda, et arve ise ei tekkinud. Hoia need kaks olekut lahus ja korda ainult teist sammu.
Nummerda arved oma süsteemis
Kui
InvoiceNogenereeritakse Meritis, kaob võimalus kordust ära tunda numbri järgi. Anna number ise ja hoia see unikaalsena.
Mida see päriselt maksma läheb
Kaks kulu liiguvad koos: Merit Aktiva litsents, mille Pro või Premium tase on API eeldus, ja operaatoritasu iga e-arve eest. Viimase saab arvutada täpselt, sest Merit avaldab selle numbri.
| E-arveid kuus | Enne käibemaksu | Koos käibemaksuga | Aastas koos käibemaksuga |
|---|---|---|---|
| 50 | 5,00 € | 6,20 € | 74,40 € |
| 200 | 20,00 € | 24,80 € | 297,60 € |
| 500 | 50,00 € | 62,00 € | 744,00 € |
| 2 000 | 200,00 € | 248,00 € | 2 976,00 € |
Käibemaks on Eestis alates 1. juulist 2025 24 protsenti. Arvutuse mõte ei ole hirmutada, vaid näidata, et operaatoritasu kasvab lineaarselt ja jääb väikeseks kuni umbes tuhande arve piirini kuus. Suurema mahu juures tasub kaaluda otselepingut operaatoriga, sest Merit vahendab seda edasi ja lisab oma rea.
Millal Merit Aktiva API ei ole õige valik
Kui ettevõte on alles alustanud ja raamatupidamine käib e-arveldajas, ei ole Merit API mõttekas: e-arveldaja tavakasutus on esimesel aastal tasuta; hiljem maksab kuni kümne kande kuus tegija 5 eurot aastas ja suurema mahu korral algab tasu 5 eurost kuus, millele lisandub käibemaks. Kui ettevõtte raamatupidamine on Directos, tuleb lähtuda Directo liidesest. e-Financials on RIKi e-arveldaja ingliskeelne nimi, mitte eraldi tarkvara.
| Kriteerium | Merit Aktiva | e-arveldaja (RIK) | Directo |
|---|---|---|---|
| API olemas | Jah, v1 ja v2 | Jah, REST rmp-api.rik.ee | Jah, teenusepakkuja dokumentatsiooni järgi |
| Autentimine | apiId + timestamp + HMAC-SHA256 päringustringis | X-AUTH-KEY + X-AUTH-QUERYTIME, HMAC-SHA384 päises | Erijuhtudel erinev |
| Litsentsinõue | Pro või Premium | Kehtiv e-arveldaja leping, API-võti seadistustes | Lepingupõhine |
| E-arve saatmine | Eraldi päring operaatorile | Osa arve voost, avalikule sektorile tasuta | Operaatori seadistus |
| Sobib, kui | Raamatupidamine on juba Merit Aktivas | Väikeettevõte või avaliku sektori arveldus | Suurem maht ja olemasolev tarkvara |
Valik ei ole tehniline ega käi API ilu järgi. Kui raamatupidaja töötab Merit Aktivas, ehita Meritile. Kui raamatupidaja töötab e-arveldajas, ehita sinna. Kaks liidestust korraga tähendab kahte tõde samade arvete kohta ja seda ei kannata ükski kuuaruanne.
Kontrollnimekiri enne esimest päringut
Kontrolli litsentsi ja loo võti
Pro või Premium, seejärel Seadistused, ettevõtte andmed, API seadistus. Loo eraldi võti just selle süsteemi jaoks ja pane kommentaari süsteemi nimi.
Loe maksu GUIDid välja ja vastenda need
GET /api/v2/taxes, seejärel vastendus käibemaksumääradega oma koodis. Ilma selleta ei lähe ükski arve läbi.Kirjuta allkirjastaja nii, et keha serialiseeritakse üks kord
Üks string, üks allkiri, üks päring. See hoiab ära kõige sagedasema 401 põhjuse.
Sea sisse 429 käsitlus uue timestampiga
Loe
Retry-Afterpäis, oota, arvuta uus timestamp, proovi uuesti. Ilma uue timestampita korduskatse ebaõnnestub.Testi e-arve saatmist operaatori testkontoga
Kontrolli
EInvOperatorväärtust jaapi-noeinvkäsitlust enne, kui päris kliendid arveid saavad. Kui aktiveerid enda ettevõttele Telema kaudu ostuarvete vastuvõtu, saab allkirjaõiguslik isik operaatori seose Meriti juhendi järgi järgmisel päeval registris kinnitada.
Kui arved liiguvad edasi muudesse süsteemidesse, vaata ka e-arveldaja liidestamist ja API integratsioonide ülevaadet. Üldine tellimise pool on kirjas tarkvaraarenduse lehel: seal on ka see, mida ma integratsiooni juures alati enne töö algust kontrollin.
Küsimused
Millist Merit Aktiva paketti on API jaoks vaja?
Pro või Premium paketti. Kui ettevõttel on madalam pakett, vastab API päringule staatuskoodiga 401 ja kehaga api-wronglicense. Erandina töötavad kõikides pakettides e-arvete saatmine ja vastuvõtt, otseühendus pankadega, KMD esitamine ning dokumentide digiteerimine.
Kuidas Merit Aktiva API päringut autentida?
Iga päring kannab kolme päringustringi parameetrit: apiId, timestamp ja signature. Allkiri on base64(HMAC-SHA256(apiKey, apiId + timestamp + keha)). Timestamp peab olema UTC ajas kujul yyyyMMddHHmmss ja vastama päringu tegemise hetkele. Aegunud või tulevikus olev timestamp lükatakse tagasi.
Kas API-l on idempotentsusvõti?
Dokumentatsioonis idempotentsusvõtit ei ole. Enne kordussaatmist päri /api/v2/getinvoices2 arve numbri järgi ja saada uus päring alles siis, kui vastus on tühi. Kontroll ei ole atomaarne: kaks paralleelset töötlejat võivad mõlemad saada tühja vastuse, seega hoia sama arvenumbri töötlemine järjekorras ühe töö käes. Salvesta ka vastuseks saadud InvoiceId, et hiljem sama arvet uuesti mitte luua.
Mida tähendab vastus api-noeinv?
Seda, et arve saaja ei saa e-arveid vastu võtta ehk tema seos operaatoriga puudub. See kirjeldab vastuvõtja e-arvevalmidust, mitte saatja ostuarvete vastuvõtmise seadistust. Arve ise on seejuures loodud ja jääb Merit Aktivasse kehtima.
Kui palju maksab e-arve saatmine Telema kaudu?
Merit Aktiva kasutusjuhendi järgi on Telema operaatoriteenus 10 senti pluss käibemaks iga saadetud või vastuvõetud e-arve eest. Arve väljastab Merit Tarkvara koos litsentsiarvega eraldi reana. Finbite'i puhul sõlmitakse leping otse ja arveldus käib Finbite'iga.
Allikad
- Merit Aktiva API (ülevaade ja baasaadressid) · Merit Tarkvara · vaadatud 2026-10-28
- Authentication (apiId, timestamp, signature) · Merit Tarkvara · vaadatud 2026-10-28
- Rate limiter (100 päringut minutis, 429 ja X-RateLimit päised) · Merit Tarkvara · vaadatud 2026-10-28
- Create Sales Invoice (POST /api/v2/sendinvoice) · Merit Tarkvara · vaadatud 2026-10-28
- Create Sales Invoice with multiple payments (POST /api/v1/sendinvoice2) · Merit Tarkvara · vaadatud 2026-10-28
- Create Payment (osamaksed, /api/v2/sendpayment) · Merit Tarkvara · vaadatud 2026-10-28
- Send Sales Invoice as e-invoice (POST /api/v2/sendinvoiceaseinv) · Merit Tarkvara · vaadatud 2026-10-28
- Get list of sales invoices (max 3 kuud perioodi kohta) · Merit Tarkvara · vaadatud 2026-10-28
- API seadistus · Merit Tarkvara tugi · vaadatud 2026-10-28
- E-arvete jm integratsioonide seadistus (Telema, Finbite, Apix) · Merit Tarkvara tugi · vaadatud 2026-10-28
- Introduction to e-Financials · Registrite ja Infosüsteemide Keskus · vaadatud 2026-10-28
- E-arveldaja teenustasu · Registrite ja Infosüsteemide Keskus · vaadatud 2026-10-28