Look up Lithuanian companies (profile, management, shareholders, beneficial owners, real property, seizure acts, court cases) and order attorney-attested remote identification of a company's...
Lithuanian company data and remote client identification, provided as a legal service by a certified Lithuanian attorney-at-law (advokatas) who attests the provenance and integrity of every answer.
Two things follow from that and shape how you should use it:
MCP over Streamable HTTP at https://api.tvarka.pro/mcp, or REST at
https://api.tvarka.pro/v1/.... Both take Authorization: Bearer <key> and
cost the same.
claude mcp add --transport http tvarka-due-diligence https://api.tvarka.pro/mcp \
--header "Authorization: Bearer $TVARKA_API_KEY"
Listing the tools needs no key. Calling one does.
Sandbox keys need nothing else - no agreement, no payment method, no linked
entity - so a whole integration can be built before any paperwork. Ask at
dd@tvarka.pro. A production key additionally needs acceptance of the Terms of
Service, a signed engagement agreement, and a linked Tvarka entity that can be
billed; until all three are in place it answers 402 (see Billing). The
contract and the data shape are identical in both environments.
Every company tool takes one input, the Lithuanian legal-entity code
(juridinio asmens kodas, 7 to 9 digits).
| Tool | Answers |
|---|---|
lookup_company |
Profile, legal form, status, address, capital, activities, current management |
get_participants |
Shareholders and members with holdings |
get_beneficial_owners |
Declared beneficial owners, percentages, control basis |
get_real_estate |
Real property held, with registered rights |
get_seizures |
Property seizure acts, basis, parties, seized assets |
get_court_cases |
Court hearings where the entity is a party |
get_due_diligence_report |
All of the above in one call, cheaper than the parts |
Choose the composite deliberately. If the user wants a general picture of a
counterparty, get_due_diligence_report is one call and costs less than buying
the parts. If they asked one narrow question, answer it with the one narrow
tool rather than billing them for six answers they did not ask for.
A purpose is required for get_beneficial_owners and
get_due_diligence_report, because beneficial-ownership data is served under
the legitimate-interest regime and the stated purpose is logged. Pass the
purpose the user actually has. Do not invent one to get past the parameter; if
you do not know why they want it, ask.
interpret: true is available on lookup_company, get_beneficial_owners,
get_seizures and get_due_diligence_report. It adds the attorney's
standardized reading of what the data means under Lithuanian law, with statute
citations, and it adds a fee. Use it when the user needs the legal meaning, not
when they just need the facts.
This is the asynchronous product, and it is the part most likely to be used wrongly. It answers: is the person I am dealing with really the manager, shareholder or beneficial owner the register says?
The register says who holds a role. The package makes that person prove they are that person: they sign a composed dossier with their own qualified electronic signature, the personal code inside their signing certificate is matched against the register record, and the attorney attests that verified correspondence. The result is one ASiC-E evidence container.
There is no video call, no selfie and no biometric processing anywhere in it. This is what Lithuanian anti-money-laundering law accepts as identification of a client who is not physically present.
create_kyc_package with the entity code, the claimed role (vadovas,
dalyvis or naudos_gavejas) and a purpose. It returns immediately with an
orderId and a ceremonyUrl.ceremonyUrl to the subject. Nothing happens until a human
opens it and signs. Pass subjectEmail instead and Tvarka sends it.get_kyc_package reports the state. A webhook to your
callbackUrl, HMAC-signed with your webhook secret, is the equal
alternative and the better one for anything long-running.GET /v1/kyc-packages/{orderId}/artifact once the status is delivered.
The bytes do not come back through the MCP tool.get_kyc_package is the one tool keyed by order id, not by company code.Per answered call. Never billed: a no-data answer, an upstream source outage, any failure on Tvarka's side. For identification, billed on delivery only β an order for a role nobody holds, a ceremony the subject abandons, and an identity mismatch all cost nothing.
Do not retry a failed call reflexively to "make sure". Errors are RFC 9457
application/problem+json, and the right response differs by type:
404 .../no-data - the source answered and holds nothing. Not billed.
This is an answer, not a failure. Report it as "no record", and do not ask
again; it will say the same thing.
502 .../upstream-unavailable - the source did not answer. Not billed.
Worth exactly one retry, later.
402 .../payment-required - the account behind the production key cannot
be billed right now. Nothing was pulled and nothing was charged. Do not
retry in a loop: three of its four causes need a human to act, and looping
will never clear them. Read detail and tell the user which:
A sandbox key never sees a 402. If you are hitting one while testing, you are on a production key.
If asked what the attestation proves, be precise: that the named attorney relayed this data unmodified from the named official source at the stated time, and for identification, that a specific qualified signature corresponds to a specific role as the register declares it. Not that the underlying facts are true.
Sandbox keys answer synthetic data at no cost, so an integration can be built before any paperwork. An identification order can be advanced to the outcomes an integrator must handle β an identity mismatch and an abandoned ceremony β but never to a delivered package. That would take a real qualified signature, and this platform does not mint test ones. Do not build a test that expects a delivered sandbox package; it cannot happen by design.