Storno CLI
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| auth_loginA | Authenticate with the Storno.ro API using email and password. Returns JWT access and refresh tokens, and stores them in the session config for all subsequent requests. Must be called before any other tool if STORNO_TOKEN is not set. |
| auth_registerA | Create a new Storno.ro user account. A default organization is automatically created. Returns JWT tokens on success. |
| auth_refreshA | Refresh an expired JWT access token using the refresh token. Both tokens are rotated. The new tokens are stored in the session config. Use when the current token has expired. |
| auth_meA | Get the current authenticated user profile including organization memberships and subscription plan. Returns flat JSON with user, organization, memberships, and subscription. |
| auth_update_profileA | Update the authenticated user's profile. Can update name, phone, timezone, quiet-hours preference, preferences, or change password (requires currentPassword when changing password). |
| auth_forgot_passwordA | Request a password reset email. Always returns success to prevent user enumeration — the email is only sent if the account exists. The reset link is valid for 1 hour. |
| auth_reset_passwordA | Reset a user password using the token received via email from auth_forgot_password. The token is single-use and expires after 1 hour. All existing sessions are revoked on success. |
| companies_listA | List all companies belonging to the authenticated user's organization. Returns company details including CIF, addresses, bank info, sync settings, and ANAF token status. Use this to find company UUIDs for the companies_select tool. |
| companies_getA | Get detailed information for a specific company by UUID. Returns all configuration settings, bank info, sync settings, and ANAF token validity status. |
| companies_createA | Add a company or an individual person to the organization. Company: give the CIF (with or without RO); ANAF supplies name, address and VAT status. Individual person (persoană fizică, the landlord who files D212 / C168 as a person): type "individual" with the CNP, full name, city and county (address optional); nothing is fetched from ANAF and the CNP is checked (13 digits, control digit). Never invent a CNP. |
| companies_updateA | Update configuration settings for a company. Note: core ANAF data (CIF, registration number, VAT status, official address) cannot be modified as they are synced from official ANAF sources. Only editable fields like contact info, bank details, and sync settings can be changed. |
| companies_deleteA | Permanently delete a company and all associated data (invoices, clients, products, ANAF tokens). This triggers an asynchronous cascade deletion. Only Owner or Admin roles can delete companies. This action cannot be undone. |
| companies_upload_logoB | Upload a logo image for a company. Accepts PNG, JPG, or SVG files up to 2MB. The logo appears on PDF documents (invoices, proformas, delivery notes, receipts). |
| companies_delete_logoB | Remove the logo from a company. PDFs will no longer include the company logo. |
| companies_toggle_syncA | Toggle ANAF SPV / e-Factura synchronization on or off for a specific company. Calls POST /api/v1/companies/{uuid}/toggle-sync — flips the company's syncEnabled boolean. Requires COMPANY_EDIT permission. Enabling fails with 422 (messageKey ERR_SYNC_ENABLE_NO_TOKEN) when the company has no valid ANAF OAuth token; connect via anaf_create_token_link first. Returns { syncEnabled, message }. To enable on a fresh company, the recipe is: companies_list → anaf_create_token_link (open the URL, complete OAuth) → anaf_validate_cif → companies_toggle_sync. |
| companies_set_activeA | Set the organization-level active company by UUID. Calls PUT /api/v1/companies/{uuid}/set-active on the server and returns the updated list of all companies with the new active company reflected. Requires COMPANY_EDIT permission. Use companies_list first to find available company UUIDs. |
| companies_selectA | Select the active company for the current session. This sets the X-Company header used by all subsequent invoice, client, product, and other company-scoped requests. Call companies_list first to find available company UUIDs. |
| invoices_listA | List invoices for the active company with pagination, filtering, and sorting. Supports filtering by status (draft/issued/sent_to_provider/validated/rejected/cancelled), direction (incoming/outgoing), date range, client, and search term. Returns paginated results with totals. |
| invoices_getA | Get complete details for a specific invoice by UUID, including all line items, payment history, events timeline, attachments, client and supplier info, XML/PDF generation status, and ANAF submission details. |
| invoices_createA | Create a new draft invoice. Requires at least one line item and either a clientId or receiverName/receiverCif. The invoice starts in "draft" status and can be edited until issued. Use invoices_issue to finalize and generate XML/PDF. |
| invoices_updateA | Update an existing draft invoice. Only invoices with status "draft" can be updated. When updating the lines array, the entire array is replaced — include all lines you want to keep. Once issued, use invoices_cancel instead. |
| invoices_deleteA | Permanently delete a draft invoice. Only invoices with status "draft" can be deleted. This action is irreversible. For issued invoices, use invoices_cancel instead. |
| invoices_issueA | Issue a draft invoice. Validates the data, assigns a series number, generates UBL 2.1 XML, generates PDF (Pro plan), and changes status from "draft" to "issued". Once issued, the invoice cannot be edited. Use invoices_submit to send to ANAF e-Factura. |
| invoices_submitA | Submit an issued invoice to the ANAF e-Factura system. The invoice must be in "issued" status. Changes status to "sent_to_provider". ANAF validates the invoice asynchronously — poll invoices_get or use invoices_events to check validation result. |
| invoices_validateA | Validate an invoice before issuing or submitting. Returns a list of errors and warnings. Use mode "quick" for fast validation (basic rules) or "full" for comprehensive UBL Schematron and CIUS-RO compliance checks. |
| invoices_cancelA | Cancel an issued invoice. Requires a cancellation reason (minimum 10 characters). Changes status to "cancelled". Cancelled invoices remain in the system for record-keeping. Use invoices_restore to undo an accidental cancellation. |
| invoices_sync_clientA | Resync a single invoice with its client's current profile data (receiver name, CUI/CNP, buyer snapshot, VAT rules). Only allowed while the invoice has not been uploaded to ANAF (or was rejected) and is not cancelled. Cached XML/PDF files are invalidated so they regenerate with the corrected data. Use clients_sync_invoices to resync all unsent invoices of a client at once. |
| invoices_restoreA | Restore a cancelled invoice back to "draft" status. Only for accidental cancellations. Cannot restore if the invoice was submitted to ANAF, has credit notes, or has recorded payments. The invoice can then be edited and reissued. |
| invoices_pdfA | Download the PDF representation of an invoice. Returns base64-encoded binary data with content type. Requires Pro plan. PDF is generated automatically on issue or on-demand when first requested. |
| invoices_xmlB | Download the UBL 2.1 XML file for an issued invoice. Returns the XML text content. The XML is the format required for ANAF e-Factura submission and conforms to CIUS-RO and EN 16931 standards. |
| invoices_emailA | Send an invoice via email with optional PDF and XML attachments. Use invoices_email_defaults first to get pre-filled subject and body. Emails are sent asynchronously via queue. PDF attachment requires Pro plan. Recipients (to, cc, bcc) must be client emails registered on the company; other addresses are rejected with EMAIL_RECIPIENT_NOT_CLIENT. |
| invoices_email_defaultsA | Get pre-filled email content for an invoice based on the company email template. Returns suggested "to", "cc", "subject", and "body" with template variables already substituted. Use this to populate the email form before calling invoices_email. |
| invoices_email_historyA | Get the complete history of emails sent for an invoice, including delivery status, open/click tracking, bounce information, and who sent each email. Useful for audit trails and verifying client received the invoice. |
| invoices_eventsA | Get the complete timeline of events for an invoice: status changes, ANAF submissions, validations, emails sent, payments received, and user actions. Useful for audit trails, debugging, and understanding invoice lifecycle history. |
| invoices_attachmentsA | Download a file attachment from an invoice. Returns base64-encoded binary data with the MIME type. Get attachment UUIDs from invoices_get (the "attachments" array). Supports PDF, images, Word, Excel, ZIP, and other file types. |
| invoices_verify_signatureA | Verify the ANAF digital signature on a validated invoice. Checks certificate validity, signature cryptographic integrity, and XML content integrity. Requires Pro plan and the invoice must be in "validated" status (ANAF-signed). |
| invoices_export_csvA | Export a filtered list of invoices to CSV format. Accepts the same filters as invoices_list (status, direction, date range, client, etc.). Returns CSV text with UTF-8 BOM for Excel compatibility. Max 10,000 invoices; use invoices_export_zip for large exports with files. |
| invoices_export_zipA | Export a set of invoices (by UUID list) to a ZIP archive containing PDFs, XMLs, and a CSV summary. Processed asynchronously — returns an exportId and statusUrl. Poll the statusUrl or wait for webhook. Requires Pro plan. Max 100 invoices per export. |
| invoices_bulk_deleteA | Delete multiple draft invoices in batch. Only invoices with status "draft" can be deleted. This action is irreversible. Returns count of deleted invoices and any per-item errors. |
| invoices_bulk_cancelB | Cancel multiple invoices in batch with an optional reason. Returns count of cancelled invoices and any per-item errors. |
| invoices_bulk_stornoA | Create storno (refund/credit note) invoices for multiple invoices in batch. Only outgoing invoices with status "issued" or "validated" are eligible. Returns count of created storno invoices and any per-item errors. |
| invoices_bulk_mark_paidA | Mark multiple invoices as fully paid in batch. Creates payment records for each invoice's remaining balance. paymentMethod defaults to "bank_transfer". Returns count of updated invoices and any per-item errors. |
| invoices_export_saga_xmlA | Export invoices in Saga XML format for accounting software integration (e.g., Saga C). Accepts the same filters as invoices_export_csv. Returns XML text content. |
| invoices_export_receipts_saga_xmlA | Export payment receipts (incasari) in Saga XML format. Exports all outgoing invoice payments for accounting software integration. Use accountCash/accountBank/accountCard to override the chart-of-accounts for this export (defaults come from the company’s stored SAGA settings; SAGA requires the leaf analytic for cards, e.g. 5125.2). |
| invoices_export_payments_saga_xmlA | Export supplier payments (plati) in Saga XML format. Exports all incoming invoice payments for accounting software integration. Use accountCash/accountBank/accountCard to override the chart-of-accounts for this export (defaults come from the company’s stored SAGA settings). |
| invoices_export_efactura_zipB | Export e-Factura XML files as a ZIP archive. For large batches (>100 invoices), the export is processed asynchronously and returns a job ID to poll for completion. |
| invoices_share_links_listB | List all share links for an invoice, including view counts, expiry info, and status (active/revoked/expired). |
| invoices_share_links_createB | Create a new shareable link for an invoice. Returns the share URL, token, and expiry date. The link allows the recipient to view the invoice without authentication. |
| invoices_share_links_revokeB | Revoke/delete a share link for an invoice, making it permanently inaccessible. Get linkId from invoices_share_links_list. |
| clients_listA | List clients for the active company. Results are grouped alphabetically by name and can be filtered by type (company/individual) or searched by name, CUI/CNP, or email. |
| clients_getA | Get detailed information about a specific client by UUID, including invoice summary statistics (total count, unpaid amount, overdue amount, total revenue) and a list of the 10 most recent invoices. |
| clients_createA | Create a new client manually. Supports both company and individual client types. Company details (address, VAT, bank account, etc.) can be auto-filled using clients_anaf_lookup or clients_from_registry before calling this tool. |
| clients_updateA | Update an existing client by UUID. All fields are optional — only the provided fields will be updated. |
| clients_sync_invoicesA | Resync all unsent invoices with the client's current profile data (name, CUI, tax details). Unlike the automatic propagation on client update (current month only), this also rewrites older invoices, as long as they were not uploaded to ANAF and are not cancelled. Cached XML/PDF files are invalidated so they regenerate with the new data. Returns the number of invoices updated. |
| clients_deleteB | Permanently delete a client by UUID. Clients with existing invoices or documents cannot be deleted. |
| clients_bulk_deleteB | Delete multiple clients in a single request. Accepts up to 100 client UUIDs. Clients with existing documents will be skipped or cause an error depending on server configuration. |
| clients_anaf_lookupA | Look up company details by CUI in the ANAF public registry without creating a client. Returns pre-filled form data (name, address, VAT status, registration number, etc.) that can be used to populate a clients_create call. |
| clients_vies_lookupA | Validate a VAT code against the EU VIES system. Returns whether the VAT number is valid and the registered company name/address. Use this to verify EU intra-community VAT numbers before applying reverse charge. |
| clients_from_registryA | Create a client by looking up a CUI in the ANAF registry and auto-filling all available details (name, address, VAT status, registration number, etc.). Use this instead of clients_create when you only have a CUI and want the company details resolved automatically. |
| clients_export_csvB | Export all clients for the active company as a CSV file. Returns base64-encoded binary data representing the CSV file contents. |
| clients_export_saga_xmlC | Export clients in Saga XML format for import into Saga accounting software. Returns the XML document as text. |
| products_listA | List products for the active company. Products are sync-only and are automatically extracted from invoice line items during ANAF synchronization — they cannot be manually created or edited. Results can be filtered by active status and searched by name, code, or description. |
| products_getB | Get detailed information about a specific product by UUID, including usage statistics (total usage count, total revenue generated, average quantity, first and last usage dates). |
| products_updateA | Update an existing product by UUID. All fields are optional — only provided fields are changed. Useful for assigning product codes (so sales can be grouped per plan/SKU), fixing names, or adjusting default prices on sync-created products. Pass code=null to clear a code. |
| product_categories_listA | List all product categories for the active company, ordered by sortOrder then name. Categories appear as a chip strip above the POS product grid and double as fallback colour swatches for products that don't have their own colour. |
| product_categories_createB | Create a new POS product category. Categories are scoped to a single company. |
| product_categories_updateA | Update a product category. All fields optional; omitted fields stay unchanged. Pass color=null to clear the swatch. |
| product_categories_deleteA | Delete a product category. Products that were in the category lose the assignment (categoryId is set to null) but are not deleted. |
| payments_listA | List all payments recorded for a specific invoice, ordered by payment date (most recent first). Returns payment amount, date, method, reference number, and notes. The sum of payments determines the invoice amountPaid and balance. |
| payments_createA | Record a payment received for an invoice. Updates the invoice amountPaid and balance, and automatically changes invoice status to "partially_paid" or "paid" as appropriate. Supports partial payments with full details (method, reference, notes). |
| payments_deleteA | Permanently delete a recorded payment from an invoice. Updates the invoice amountPaid and balance, and may change the invoice status back to "unpaid" or "partially_paid". This action is irreversible — use with caution for corrections. |
| defaults_invoiceA | Get all default values and dropdown options needed for invoice creation. Returns VAT rates, currencies with symbols, payment terms (in days), units of measure, payment methods, and current BNR exchange rates for EUR/USD/GBP/CHF relative to RON. Always fetch this before creating invoices — never hardcode these values. |
| vat_category_codes_listA | List all available VAT category codes with their i18n message keys. Codes: S (standard rate), Z (zero-rated), E (exempt from tax), AE (reverse charge), K (exempt for export), L (intra-community supply), O (outside scope), M (margin scheme). Does not require authentication. |
| vat_rates_listA | List all VAT rates configured for the active company, sorted by display position. Returns rate percentage, display label, e-Factura category code, and which rate is the default. Common Romanian rates: 19% (standard), 9% (reduced), 5% (super-reduced), 0% (exempt). |
| vat_rates_createA | Create a new VAT rate for the active company. If isDefault is true, any existing default rate is demoted. If this is the first VAT rate, it automatically becomes the default. Common e-Factura category codes: S=standard, AA=reduced, E=exempt, O=outside scope, Z=zero rated, AE=reverse charge. |
| vat_rates_updateA | Update an existing VAT rate. Note: changing the rate percentage does not retroactively affect existing invoices — those preserve the original rate. Only updates display label, category code, default status, or position. At least one field must be provided. |
| vat_rates_deleteA | Soft-delete a VAT rate. The rate is marked as deleted but not physically removed, preserving historical invoice integrity. Cannot delete the default rate (set another as default first) or the last remaining rate. Existing invoices are not affected. |
| bank_accounts_listA | List all bank accounts configured for the active company. Returns IBAN, bank name, currency, and which account is the default per currency. Bank accounts appear on invoices as payment instructions. |
| bank_accounts_createA | Add a new bank account to the active company. For type=bank, IBAN is required and must be unique within the company. For type=cash (the till that backs POS / cash-register reports), IBAN is optional and openingBalance/openingBalanceDate enable cash-register tracking. A company can have at most one cash account. If isDefault is true, any existing default account for that currency is demoted. |
| bank_accounts_updateA | Update an existing bank account. Can update type, IBAN, bank name, currency, default status, or initial opening balance. Once openingBalance has been persisted with a value > 0 it locks — further changes are rejected and corrections must be made via cash movements. At least one field must be provided. |
| bank_accounts_deleteA | Permanently delete a bank account. Cannot delete the last bank account for a company or the default account (set another as default first). Existing invoices that referenced this account retain the IBAN in their stored data. |
| cash_register_balanceA | Live snapshot of the till — opening balance, cash in/out since opening, manual movements, and current balance. Returns { configured: false } if no cash-type bank account exists or its opening balance is not set. |
| cash_register_ledgerA | Daily cash ledger across the requested date range. Each day bucket includes opening balance, chronological entries (receipts, cash payments, manual movements), totals, and closing balance. Range capped at 366 days. |
| cash_register_movements_listA | List manual cash movements (deposits, withdrawals, miscellaneous) in a date range. Receipts and invoice payments are NOT returned here — use cash_register_ledger for the full picture. |
| cash_register_movements_createA | Record a manual cash movement (deposit, withdrawal, or miscellaneous). Direction is auto-set for deposits (out) and withdrawals (in); for kind=other, direction must be supplied. movementDate cannot be earlier than the cash account opening date. |
| cash_register_movements_updateA | Update a manual cash movement. All fields optional; omitted fields keep their current value. Currency cannot be changed. Changing kind between deposit/withdrawal re-applies auto-direction. |
| cash_register_movements_deleteA | Permanently delete a manual cash movement. Receipts and invoice payments cannot be deleted via this endpoint — use their respective resources. |
| document_series_listA | List all document series for the active company, optionally filtered by type. Document series define the numbering prefixes for invoices (e.g., "FAC"), proformas ("PRO"), credit notes, and delivery notes. Each series tracks the current and next available number. |
| document_series_createA | Create a new document series. The prefix must be unique per company and document type. Common patterns: "FAC" for invoices, "FAC2026" for annual series, "PRO" for proformas. Use currentNumber to set the starting number (default: 0, so first document gets number 1). |
| document_series_updateA | Update an existing document series. Only "currentNumber" and "active" can be changed — prefix and type are immutable after creation. Use active=false to deactivate a series (e.g., at end of fiscal year). Changing currentNumber affects the next document number, use with extreme caution to avoid duplicates. |
| document_series_set_defaultA | Set a document series as the default for its type. The default series is auto-selected when creating new documents of that type. Only one series can be default per type. |
| document_series_deleteA | Permanently delete a document series. Cannot delete a series that has been used for any documents. Consider marking as inactive (active=false) instead, to preserve referential integrity and the audit trail. Only delete if the series was created by mistake and never used. |
| proforma_invoices_listA | List proforma invoices for the selected company with optional filtering by status, date range, client, and search term. Returns paginated results. |
| proforma_invoices_getB | Get complete details for a specific proforma invoice including all line items, client information, and calculated totals. |
| proforma_invoices_createB | Create a new proforma invoice in draft status with line items. Supports multiple currencies, discounts, and optional references. |
| proforma_invoices_updateA | Update an existing proforma invoice. Only invoices in draft status can be updated. Replaces all line items with the provided array. |
| proforma_invoices_deleteA | Permanently delete a proforma invoice. Only draft proforma invoices can be deleted. Use cancel for sent/accepted/rejected proformas to preserve audit trail. |
| proforma_invoices_sendB | Mark a proforma invoice as sent to the client. Transitions status from draft to sent. Once sent, the proforma becomes read-only. |
| proforma_invoices_acceptB | Mark a proforma invoice as accepted by the client. Transitions status to accepted. Once accepted, the proforma is ready to be converted to a final invoice. |
| proforma_invoices_rejectA | Mark a proforma invoice as rejected by the client. Optionally provide a rejection reason and notes. Once rejected, the proforma cannot be converted to an invoice. |
| proforma_invoices_cancelA | Cancel a proforma invoice. Can be cancelled from any status except converted or already cancelled. Preserves historical record unlike deletion. |
| proforma_invoices_convertA | Convert a proforma invoice into a final invoice. Creates a new invoice with all proforma data, marks proforma as converted, and links the two documents. Returns both the new invoice and updated proforma. |
| proforma_invoices_pdfA | Download the PDF of a proforma invoice. Returns base64-encoded binary data. Requires Pro plan. |
| proforma_invoices_bulk_deleteA | Delete multiple proforma invoices in batch. Only draft proformas can be deleted. Returns count of deleted and any errors. |
| recurring_invoices_listB | List recurring invoice templates for the selected company. Supports filtering by active status and frequency. |
| recurring_invoices_getA | Get detailed information about a specific recurring invoice template including all line items used as a template for generated invoices. |
| recurring_invoices_createB | Create a new recurring invoice template. The system will automatically generate invoices based on the specified frequency and schedule. Supports fixed, updated_product, bnr_rate and bnr_rate_markup pricing rules on line items. |
| recurring_invoices_updateA | Update an existing recurring invoice template. All fields are optional but at least one must be provided. When updating lines, the entire lines array replaces existing lines. |
| recurring_invoices_deleteA | Permanently delete a recurring invoice template. Previously generated invoices from this template are not affected. Use toggle to temporarily pause instead. |
| recurring_invoices_toggleB | Toggle the active status of a recurring invoice template to pause or resume automatic invoice generation. If active, it will be paused; if paused, it will be resumed. |
| recurring_invoices_bulk_deleteB | Delete multiple recurring invoice templates in a single request. Returns the count of deleted items and any errors for items that could not be deleted. |
| recurring_invoices_bulk_toggle_activeA | Toggle the active/paused status of multiple recurring invoices at once. Set active=true to resume or active=false to pause invoice generation. |
| recurring_invoices_bulk_issue_nowA | Immediately generate invoices from multiple recurring invoice templates. Useful for triggering generation outside the normal schedule. Does not update the nextIssuanceDate. |
| recurring_invoices_issue_nowA | Manually trigger immediate invoice generation from a recurring invoice template, bypassing the scheduled generation. Useful for testing configurations or creating one-off invoices. Does not update the nextIssuanceDate. |
| delivery_notes_listB | List delivery notes for the selected company with optional filtering by status, date range, client, and search term. Delivery notes document physical delivery of goods or completion of services. |
| delivery_notes_getB | Get complete details for a specific delivery note including all line items, client information, deputy details, and calculated totals. |
| delivery_notes_createA | Create a new delivery note in draft status. Delivery notes document physical delivery of goods or services and can later be converted to invoices. Include deputy information for proof of delivery. A default delivery_note series is auto-assigned if neither seriesId nor documentSeriesId is provided. |
| delivery_notes_updateA | Update an existing delivery note. Delivery notes in draft or issued status can be updated. Replaces all line items with the provided array. |
| delivery_notes_deleteA | Permanently delete a delivery note. Only draft delivery notes can be deleted. Use cancel for issued delivery notes to preserve audit trail. |
| delivery_notes_issueA | Mark a delivery note as issued when the physical delivery of goods or completion of services occurs. Transitions status from draft to issued. Once issued, the delivery note becomes read-only. |
| delivery_notes_cancelA | Cancel a delivery note when delivery will not occur. Can be cancelled from draft or issued status. Preserves historical record unlike deletion. Optionally provide a cancellation reason. |
| delivery_notes_pdfA | Download the PDF for a delivery note. Returns base64-encoded PDF binary data. The delivery note must be in issued or converted status. Optionally hide VAT or prices for simplified delivery documents. |
| delivery_notes_convertA | Convert a delivery note into a final invoice. Creates a new invoice with all delivery note data, marks the delivery note as converted, and establishes a link between the two documents. Returns both the new invoice and updated delivery note. |
| delivery_notes_restoreA | Restore a cancelled delivery note back to draft status. Only cancelled delivery notes can be restored. This reverses the cancellation and allows the delivery note to be re-issued. |
| delivery_notes_emailA | Send a delivery note to a client via email with the PDF attached. Supports custom subject, body, CC, and BCC recipients. Recipients (to, cc, bcc) must be client emails registered on the company; other addresses are rejected with EMAIL_RECIPIENT_NOT_CLIENT. |
| delivery_notes_email_defaultsA | Get pre-filled email content for a delivery note including default recipient, subject, and body text with template variables already substituted. |
| delivery_notes_email_historyA | Get the email sending history for a delivery note, including all sent emails with their status, timestamps, and recipient information. |
| delivery_notes_stornoB | Create a storno (return) delivery note with negated quantities from an existing issued delivery note. The storno delivery note is created as a draft and can be issued separately. |
| delivery_notes_from_proformaA | Create a new delivery note from an existing proforma invoice. Copies client, lines, dates, currency, and notes from the proforma. The delivery note is created in draft status. |
| delivery_notes_bulk_convertA | Convert multiple issued delivery notes into a single invoice. All delivery notes must be issued, have the same client, and use the same currency. Creates one invoice combining all lines and marks all delivery notes as invoiced. |
| delivery_notes_validate_etransportA | Validate a delivery note against Romania's e-Transport schema before submitting. Checks entity validation, XSD schema, and Schematron rules. Returns validation result with errors and warnings. Use this before submit_etransport to catch issues early. |
| delivery_notes_submit_etransportA | Submit an issued delivery note to Romania's ANAF e-Transport system for domestic transport declaration (TTN). The delivery note must be in issued status with e-Transport fields filled (vehicle number, route, transport data, line tariff codes and weights). Submission is asynchronous — the status will update from uploaded to ok (with UIT) or nok (with error). |
| suppliers_listB | List suppliers for the selected company grouped alphabetically. Suppliers are automatically created from incoming invoices via ANAF e-Factura synchronization. Supports search by name, CUI, or email. |
| suppliers_createB | Create a new supplier manually. Requires name, county, city, address, and registration number. If a supplier with the same CIF already exists, returns the existing supplier instead. |
| suppliers_export_csvA | Export all suppliers for the active company as a CSV file. Returns base64-encoded UTF-8 CSV with BOM. |
| suppliers_export_saga_xmlC | Export all suppliers in SAGA accounting XML format. Returns base64-encoded XML file compatible with SAGA import. |
| suppliers_bulk_deleteA | Soft-delete multiple suppliers in a single request. Returns the count of deleted items and any errors. |
| suppliers_getA | Get detailed information about a specific supplier including invoice history summary and the last 10 recent incoming invoices. Core data (name, CUI) comes from ANAF and is read-only. |
| suppliers_updateA | Update editable fields of a supplier record. Core data (name, CUI) from ANAF cannot be modified. Only contact information, address details, banking details, and internal notes can be updated. |
| suppliers_deleteA | Soft-delete a supplier record. The supplier is marked as deleted but not permanently removed. Existing incoming invoices from this supplier remain intact. If new invoices arrive from this supplier via ANAF sync, the supplier record will be restored automatically. |
| exchange_rates_listA | Get current BNR (Banca Nationala a Romaniei) exchange rates. Rates are updated daily around 13:00 EET. Returns rates for all supported currencies expressed as: 1 foreign currency = X RON. On weekends and holidays, the last available rates are returned. |
| exchange_rates_convertA | Convert an amount between two currencies using current BNR exchange rates. For non-RON to non-RON conversions, cross-rates through RON are calculated. Result is rounded to 2 decimal places. |
| email_templates_listA | List all email templates configured for the selected company. Templates support dynamic variables that are replaced with actual data when emails are sent. Use the category parameter to filter by document type: "invoice" (default), "delivery_note", or "receipt". |
| email_templates_createA | Create a new email template. Templates support dynamic variables that are replaced with actual data when emails are sent. Use the category parameter to specify the document type: "invoice" (default), "delivery_note", or "receipt". |
| email_templates_updateA | Update an existing email template. All fields are optional but at least one must be provided. Setting isDefault to true will unset the current default template in the same category. |
| email_templates_deleteA | Permanently delete an email template. Cannot delete the last remaining template or the default template (set another as default first). Emails already sent using this template are not affected. |
| anaf_statusA | Check the current ANAF integration status for the authenticated user. Returns token count, overall validity, and per-token details including CIF, expiry, and validity for each saved ANAF token. |
| anaf_tokensA | List all ANAF OAuth tokens associated with the authenticated user. Each token enables e-Factura synchronization for a specific company CIF. Returns token ID, CIF, expiry, and validity status. |
| anaf_create_token_linkA | Create a device-based authentication token link for completing the ANAF OAuth flow. Returns a unique URL that can be opened in a browser to complete ANAF authentication. Maximum 5 active links per user. Link expires after a short period. |
| anaf_delete_tokenA | Delete an ANAF OAuth token. This revokes e-Factura synchronization access for the CIF associated with this token. The token ID is an integer obtained from anaf_tokens. |
| anaf_validate_cifA | Validate that an ANAF token has proper access to e-Factura for a specific CIF. Checks organization ownership, ANAF registry, and e-Factura access permissions. Returns validation result with any error messages. |
| anaf_sync_triggerA | Manually trigger e-Factura synchronization for all companies with valid ANAF tokens. Validates token availability and subscription plan rate limits, then dispatches an async sync job to fetch new invoices from ANAF SPV. |
| anaf_sync_statusA | Get the current e-Factura synchronization status and configuration. Returns whether sync is enabled, the last successful sync timestamp, token validity, and the sync frequency interval. |
| anaf_sync_logA | Retrieve the recent e-Factura sync activity log showing the last 50 synced invoices. Each entry shows the invoice ID, company CIF, sync timestamp, and status (success, failed, or skipped). |
| efactura_messages_listA | List e-Factura messages from the ANAF SPV platform with pagination and filtering. Messages include responses to uploaded invoices, notifications (accepted/rejected), errors, warnings, and informational messages. Useful for troubleshooting invoice upload issues. |
| efactura_messages_getA | Get full details of a specific e-Factura message including both parsed details and raw ANAF response data. Includes related invoice information when available. Useful for diagnosing specific invoice upload errors. |
| einvoice_providersA | List all available e-invoicing providers. Returns provider identifiers, labels, and country codes. Providers include: anaf (Romania), xrechnung (Germany), sdi (Italy), ksef (Poland), facturx (France). |
| einvoice_submitA | Submit an invoice to an e-invoicing provider. Supports all EU providers: anaf (Romania e-Factura), xrechnung (Germany), sdi (Italy), ksef (Poland), facturx (France). For ANAF, uses the existing e-Factura submission flow. For other providers, generates country-specific XML and optionally submits via API if credentials are configured. |
| einvoice_submissionsB | List all e-invoice submissions for a specific invoice. Shows submission history across all providers (ANAF, XRechnung, SDI, KSeF, Factur-X) with status, external IDs, error messages, and metadata. Note: ANAF submissions are tracked separately via the existing e-Factura flow and may not appear here. |
| einvoice_config_listA | List all e-invoice provider configurations for a company. Shows which providers are enabled and their settings (API credentials, routing codes, etc.). Provider-specific config fields: anaf (managed via ANAF tokens), xrechnung (clientId, clientSecret for ZRE), sdi (certPath, certPassword or apiEndpoint, apiKey), ksef (authToken, nip), facturx (clientId, clientSecret, siret for Chorus Pro). |
| einvoice_config_saveA | Create or update an e-invoice provider configuration for a company. Use this to enable a provider and set API credentials. Config is provider-specific JSON: xrechnung requires {clientId, clientSecret} for ZRE API; sdi requires {certPath, certPassword} or {apiEndpoint, apiKey} for intermediary; ksef requires {authToken, nip}; facturx requires {clientId, clientSecret, siret} for Chorus Pro. ANAF config is managed separately via ANAF tokens. |
| einvoice_config_deleteB | Delete an e-invoice provider configuration for a company. Removes the provider settings and disables submissions for that provider. Existing submissions are not affected. |
| einvoice_config_testA | Test e-invoice provider connection with given credentials before saving. Validates that the credentials can authenticate with the provider API. Supports: xrechnung (ZRE OAuth2), sdi (intermediary API or cert validation), ksef (session init), facturx (Chorus Pro OAuth2). ANAF uses a separate OAuth flow and cannot be tested here. |
| dashboard_statsA | Get comprehensive dashboard statistics for the selected company. Returns invoice counts (total, draft, issued, paid, overdue), revenue amounts (total revenue, VAT, paid, unpaid), monthly breakdown, top clients, top products, recent activity, and payment summary. Supports predefined periods (month, quarter, year) or custom date ranges. |
| members_listA | List all members of the organization with their roles, active status, and allowed company access. Only organization admins and owners can list members. |
| members_updateA | Update a member's role, active status, allowed company access, and custom permissions. Cannot change role to OWNER or modify the organization owner. Roles: ADMIN, ACCOUNTANT, EMPLOYEE. Pass permissions as an array of permission strings to set custom permissions, or null to reset to role defaults. |
| members_deleteA | Deactivate (soft-delete) a member from the organization. Preserves historical data but prevents login. Cannot deactivate yourself, the organization owner, or super admins. |
| members_permissions_referenceA | Get the permissions reference: all available permissions grouped by category, and role default permissions for each role (owner, admin, accountant, employee). Useful for understanding which permissions exist before setting custom permissions on a member. |
| invitations_listA | List all pending invitations for the organization. Only returns invitations that have not yet been accepted. Only organization admins and owners can view invitations. |
| invitations_createA | Invite a new user to join the organization by email. An invitation email is sent automatically. Invitations expire after 7 days. Roles: ADMIN, ACCOUNTANT, EMPLOYEE (cannot invite as OWNER). |
| invitations_deleteA | Cancel a pending invitation. The invitation token is immediately invalidated and cannot be used. Cannot cancel invitations that have already been accepted. |
| invitations_resendA | Resend the invitation email for a pending invitation. Does not extend the expiration date. If the invitation has expired, cancel it and create a new one instead. |
| notifications_listA | Retrieve a paginated list of notifications for the authenticated user. Notification types include: invoice_received, invoice_paid, sync_completed, sync_failed, token_expiring, token_expired, payment_overdue, invitation_received. |
| notifications_unread_countA | Get the count of unread notifications for the authenticated user. This lightweight endpoint is suitable for polling to update notification badges. |
| notifications_read_allA | Mark all notifications as read for the authenticated user in a single operation. Resets the unread count to zero. This operation is idempotent. |
| notifications_mark_readA | Mark a specific notification as read. This operation is idempotent — marking an already-read notification has no error. Decrements the unread count by one. |
| notification_preferences_getA | Get the authenticated user's notification preferences for all event types. Returns per-event settings for email, in-app, push, and WhatsApp channels. |
| notification_preferences_updateB | Update notification preferences for specific event types. Each preference controls email, in-app, push, and WhatsApp delivery channels. Event types include: invoice.validated, invoice.rejected, invoice.due_soon, invoice.due_today, invoice.overdue, sync.completed, sync.error, efactura.new_documents, token.expiring_soon, token.refresh_failed, export_ready. |
| webhooks_listA | List all webhook endpoints configured for the current company. Secrets are masked in the listing. Requires X-Company header (companyId param or STORNO_COMPANY_ID env var). |
| webhooks_getA | Retrieve the full configuration of a single webhook endpoint. The secret is always masked in this response — use webhooks_regenerate_secret to obtain a new full secret. |
| webhooks_createA | Register a new webhook endpoint for the current company. The response includes the full signing secret — store it securely immediately as it will be masked in all subsequent responses. URL must use HTTPS. Use ["*"] for events to subscribe to all event types. |
| webhooks_updateA | Partially update an existing webhook endpoint. Only provided fields are changed. Providing events replaces the entire subscription list — send the complete desired set each time. URL must use HTTPS. |
| webhooks_deleteA | Permanently delete a webhook endpoint and all its delivery history. This is a hard delete with no recovery. To pause deliveries temporarily, use webhooks_update with isActive: false instead. |
| webhooks_eventsA | List all available webhook event types that can be subscribed to, including their descriptions and categories (invoices, payments, clients, sync, proforma). Use this to discover valid event names for webhook configuration. |
| webhooks_deliveriesA | Retrieve a paginated list of delivery attempts for a webhook endpoint. Can filter by status (success/failed), event type, and date range. Use webhooks_delivery_detail to inspect full request/response payloads. |
| webhooks_delivery_detailA | Retrieve the complete details of a single webhook delivery attempt, including the full request payload, request headers (with signature), and the full response received. Use this to debug failed deliveries. |
| webhooks_regenerate_secretA | Issue a new HMAC-SHA256 signing secret for a webhook endpoint, immediately invalidating the previous one. The new secret is returned in full only in this response — store it securely. Update your endpoint verification logic before calling this in production. |
| webhooks_testA | Send a synchronous test delivery to a webhook endpoint and return the outcome immediately. Uses a synthetic webhook.test event payload. The webhook must be active. The delivery is recorded in delivery history. |
| api_keys_listA | List all API tokens for the authenticated user within the current organization. Returns both active and revoked tokens sorted by creation date, newest first. The raw token value is never included — only the tokenPrefix for identification. |
| api_keys_scopesA | List all permission scopes available to the current user, grouped by category. Only scopes the user already holds are returned — useful for inspecting what permissions a token can be granted. |
| oauth2_clients_listA | List all registered OAuth2 applications for the current organization. Returns app name, client ID, client type, scopes, status, and creation date. |
| oauth2_clients_getA | Get details of a specific OAuth2 application by its UUID. |
| oauth2_clients_createA | Register a new OAuth2 application (third-party integration). Returns the client secret once for confidential clients — store it securely. Cannot be called via API key or OAuth2 token; requires a browser session JWT. |
| oauth2_clients_updateB | Update an existing OAuth2 application. Only provided fields are changed. Cannot be called via API key or OAuth2 token. |
| oauth2_clients_revokeA | Revoke an OAuth2 application and all its associated access and refresh tokens. This action is irreversible. Cannot be called via API key or OAuth2 token. |
| oauth2_clients_rotate_secretA | Rotate the client secret of a confidential OAuth2 application. Returns the new secret once — store it securely. The old secret is immediately invalidated. Cannot be called via API key or OAuth2 token. |
| oauth2_clients_scopesA | List all available permission scopes that can be granted to OAuth2 applications, grouped by category. Only returns scopes the authenticated user holds. |
| reports_vatB | Generate a detailed VAT (TVA) report for a specific month. Returns a summary of sales, purchases, VAT collected, VAT deductible, and net VAT due, along with per-invoice details. Requires X-Company header (companyId param or STORNO_COMPANY_ID env var). |
| reports_sales_analysisB | Generate a sales analysis report for a date range. Returns KPI summary (annual total, invoiced, collected, outstanding), monthly revenue trends, recent invoices, top clients, and top products. Requires X-Company header (companyId param or STORNO_COMPANY_ID env var). |
| balance_analysisA | Get balance analysis (Analiza Balante) for a year. Returns the standard indicator bag (revenue, expenses, profit, turnover, salaries, etc.), monthly evolution, top expenses, year-over-year comparison, plus 8 grouped financial-ratio sections: balanceSheet (raw figures), liquidity (current/quick/cash ratio + working capital + NFR + net cash), solvency (debt-to-equity, financial autonomy, debt ratio, general solvency, interest coverage), profitabilityRatios (gross/operating/EBITDA/net margins, ROA/ROE/ROCE, EBIT, EBITDA), efficiency (asset/fixed-asset/inventory turnover, DSO/DPO/CCC), fiscal (VAT payable, salary debts, state-budget debts, micro-enterprise EUR threshold, VAT RON threshold), cashflow (cash runway in months, burn rate, break-even, contribution rate, operating leverage), aging (receivables aging buckets 0-30/31-60/61-90/90+ with IFRS 9 simplified provision), concentration (top 5/10 client revenue share, top clients list). Each ratio carries status: normal|warning|critical|na. Trial-balance sections show hasData=false until balances are uploaded; aging and concentration come from invoice data. Requires X-Company header. |
| balance_listB | List uploaded trial balances (Balante de verificare) for a year. Shows upload status (pending/processing/completed/failed), month, account count, and source software for each uploaded balance. |
| balance_rowsA | Get the parsed account rows for a trial balance. Returns all account codes, names, and 10 numeric columns (initial/previous/current/total/final debit & credit). Useful for verifying PDF parsing results. |
| balance_reprocessB | Reprocess a trial balance PDF. Re-parses the PDF file and updates the account rows. Useful after parser improvements. |
| balance_deleteB | Delete an uploaded trial balance by ID. This soft-deletes the balance and its parsed account rows. |
| exports_downloadA | Download a generated export file (ZIP archive). Export files are single-use and auto-deleted after download. The filename is typically provided by the endpoint that generated the export (e.g. POST /api/v1/invoices/export). Common formats: invoices-export-YYYY-MM.zip, vat-report-YYYY-MM.zip, clients-export-YYYY-MM-DD.zip. |
| admin_organizationsA | List all organizations on the platform with pagination and filtering. SUPER_ADMIN only. Returns organization details including owner info, subscription plan, member/company/invoice counts, and ANAF token status. |
| admin_statsA | Get platform-wide statistics including user counts, organization metrics, company sync status, invoice totals, and system info. SUPER_ADMIN only. Results are typically cached for 5 minutes. |
| admin_usersA | List all users on the platform with pagination and filtering. SUPER_ADMIN only. Returns user account details, verification status, role, last login timestamp, and organization memberships. |
| admin_version_overridesA | List the per-platform version-gate overrides for the mobile app. SUPER_ADMIN only. Returns one entry per supported platform (ios/android/huawei) with the deploy-time YAML defaults, the live DB override (if any), and the merged effective values that drive /api/v1/version. Use admin_version_override_update to flip the kill switch. |
| admin_version_override_updateA | Set or clear per-field version-gate overrides for one mobile platform. SUPER_ADMIN only. Each override field is independent — set a string to override, set null to clear, omit to leave as-is. Audit-logged. Bumping |
| admin_email_logA | List lifecycle email log entries with filtering and pagination. SUPER_ADMIN only. Returns sent/skipped/failed lifecycle emails across all categories (re_engagement, trial_ended, feature_drip, account_without_login, first_company_created, first_invoice_created, dunning, trial_expiration). Use to audit delivery, debug suppressions, or check drip cadence. |
| licensing_create_keyA | Generate a new license key for a self-hosted Storno instance. Only the organization owner can create license keys. The full 64-character license key is returned ONLY ONCE — store it immediately. Each self-hosted instance should use its own key. |
| licensing_list_keysA | List all license keys issued for the current organization. Keys are returned with masked values (first and last 8 characters shown). Includes active and revoked keys with lastValidatedAt timestamps to verify self-hosted instances are running. Only the organization owner can list keys. |
| licensing_revoke_keyA | Revoke (deactivate) a license key. The associated self-hosted instance will fall back to the Free plan on its next validation cycle (within 24 hours). Revocation is a soft delete — the key record is kept with active: false. Revoked keys cannot be reactivated; generate a new key instead. Only the organization owner can revoke keys. |
| licensing_validateA | Validate a self-hosted license key and retrieve the current plan, features, and subscription details. This endpoint does NOT require authentication — the license key itself is the credential. Returns plan features, organization name, billing period end, and trial info if applicable. Used by self-hosted instances every 24 hours. |
| pdf_template_config_getA | Get the PDF template configuration for the current company. Returns the active template slug, primary color, font, logo/bank info visibility, footer text, and custom CSS. Creates a default config if none exists. |
| pdf_template_config_updateA | Update the PDF template configuration for the current company. Customize the template design, colors, fonts, logo visibility, bank info display, footer text, and custom CSS applied to all generated PDFs. |
| pdf_template_config_templatesA | List all available PDF template designs with their slugs, names, descriptions, and default colors. Use the slug value when updating the template configuration. |
| pdf_template_config_previewA | Generate an HTML preview of a PDF template with sample invoice data. Use this to preview how a template will look before saving configuration changes. |
| receipts_listB | List receipts (bonuri fiscale) for the selected company with optional filtering by status, date range, client, and search term. Receipts document point-of-sale transactions and can be converted to invoices. |
| receipts_getA | Get complete details for a specific receipt (bon fiscal) including all line items, payment breakdown, fiscal data, and calculated totals. |
| receipts_createA | Create a new receipt (bon fiscal) in draft status. Receipts document point-of-sale transactions with payment method details and optional fiscal register information. Can later be issued and converted to invoices. A default receipt series is auto-assigned if neither seriesId nor documentSeriesId is provided. |
| receipts_updateB | Update an existing receipt. Receipts in draft or issued status can be updated. Replaces all line items with the provided array. |
| receipts_deleteA | Permanently delete a receipt. Only draft receipts can be deleted. Use cancel for issued receipts to preserve the audit trail. |
| receipts_issueA | Mark a receipt as issued at the point of sale. Transitions status from draft to issued. Once issued, the receipt becomes read-only and its fiscal data is locked. |
| receipts_cancelB | Cancel a receipt. Can be cancelled from draft or issued status. Preserves the historical record unlike deletion. Optionally provide a cancellation reason. |
| receipts_convert_to_invoiceA | Convert an issued receipt into a final invoice. Creates a new invoice with all receipt data, marks the receipt as invoiced, and establishes a link between the two documents. Returns both the new invoice and updated receipt. |
| receipts_refundA | Issue a refund (counter-)receipt that mirrors the parent receipt with negative quantities and inverted payment amounts. The refund is auto-issued, linked back via refundOf, and inherits the parent receipt series. Parent must be issued and not itself a refund. Omit lineSelections for a full refund of the whole receipt; pass it to refund only specific lines (with possibly partial quantities). Multiple partial refunds against the same parent are allowed until the original quantities are exhausted. |
| receipts_pdfA | Download the PDF for a receipt (bon fiscal). Returns base64-encoded PDF binary data. The receipt must be in issued or invoiced status. |
| receipts_restoreA | Restore a cancelled receipt back to draft status. Only cancelled receipts can be restored. This reverses the cancellation and allows the receipt to be re-issued. |
| receipts_emailA | Send a receipt (bon fiscal) to a customer via email with the PDF attached. Supports custom subject, body, CC, and BCC recipients. Recipients (to, cc, bcc) must be client emails registered on the company; other addresses are rejected with EMAIL_RECIPIENT_NOT_CLIENT. |
| receipts_email_defaultsB | Get pre-filled email content for a receipt including default recipient, subject, and body text with template variables already substituted. |
| receipts_email_historyA | Get the email sending history for a receipt, including all sent emails with their status, timestamps, and recipient information. |
| company_registry_searchA | Search the Romanian company registry (ONRC) by company name. Returns matching companies with CUI, name, and registration details. Useful for finding a company before creating a client. Results are cached for 5 minutes. |
| company_registry_citiesA | Get a list of cities for a given Romanian county. Optionally filter by city name. Useful for address auto-complete when creating clients or companies. Results are cached for 5 minutes. |
| system_healthA | Check the Storno API system health status. Returns database, queue, storage, and service diagnostics when authenticated. Useful for troubleshooting connectivity or service issues. |
| system_versionA | Get backend version plus web and mobile (iOS/Android/Huawei) latest+min versions and store URLs. Pass |
| anaf_nomenclator_judeteA | ANAF county nomenclator (cod judet as used in declaration XSDs: 40 = Municipiul Bucuresti, 13 = Constanta …) with the fiscal offices (organe fiscale, ufisc codes) of each county. Public, served from Storno's local mirror of ANAF's nomenclators, no account needed. |
| anaf_nomenclator_localitatiA | ANAF locality nomenclator for a county: cod_localit (as required by declaration XSDs, e.g. C168 cod_localit_L), SIRUTA and town-hall codes. Optional q filters by name, diacritics-insensitive ("sector 6", "cluj"). Public, local mirror. |
| anaf_nomenclator_straziA | ANAF street nomenclator for a locality: cod_strada + name (e.g. C168 cod_strada_C). q filters by word prefix, diacritics-insensitive ("maniu" finds "Bld. Iuliu Maniu"). Streets are cached locally on first use per locality. Public. |
| document_typesA | Standard Romanian legal documents Storno can generate from structured fields (public, nothing stored): conventie_incetare_inchiriere (rental termination agreement between locator and locatar) and declaratie_incetare_contract (the locator's sworn statement that a rental contract ended, used as the mandatory C168 attachment). Returns each type with its required fields. |
| document_generateA | Generate a standard legal document as PDF (and HTML) from fields: 'conventie_incetare_inchiriere' (fields: data_conventie?, locator{nume, adresa, ci_serie?, ci_numar?, cnp?}, locatar{same}, contract{numar, data, adresa_imobil, numar_inregistrare_anaf?, data_inregistrare_anaf?}, data_incetare, termen_utilitati_zile?, garantie{suma?, valuta?, termen_zile?}) or 'declaratie_incetare_contract' (locator{nume, adresa, cnp?}, locatar{nume, cnp?}, contract{numar, data, adresa_imobil, data_inceput, data_sfarsit, chirie?, valuta?, numar_inregistrare_anaf?, data_inregistrare_anaf?}, data_incetare, motiv?, motiv_detalii?, organ_fiscal?, data_declaratie?). Dates as dd.mm.yyyy. Pass outFile to save the PDF locally (then sign it with agent_sign_pdf or have it signed by hand); otherwise the PDF comes back base64. Public, nothing stored. |
| declaration_formsA | ANAF declaration forms Storno can build from plain JSON for you (today: C168 rent contract registration/amendment/termination, D212 Declarația unică for rent income with tax and CASS computed). Returns type, title and description of each form. Public, no account. |
| declaration_form_specA | Everything needed to fill an ANAF declaration form correctly: the JSON input schema Storno expects (fields, required/optional, codes and their meaning, hints), how it maps to the ANAF XML (namespace, every XSD attribute with type and constraints), the business rules ANAF enforces (including the web-form rules the DUK validator misses, e.g. BR-C168-00991/0041/005911), the filing steps and a complete example. Read it before declaration_build. C168 addresses need the codes from anaf_nomenclator_*; never invent CNPs or CUIs. |
| declaration_buildA | Build an ANAF declaration from plain JSON (schema from declaration_form_spec): Storno writes the XML, applies its own rules (required fields, address codes, quotas, postal code, tenant CNP …), does the arithmetic (D212: 20 % forfait, 10 % tax, CASS tiers on the minimum wage), validates it with ANAF's DUKIntegrator and, for C168, with ANAF's online validator behind the web form (the authoritative BR-C168 rules). Returns valid, xml, issues[{level: error|warning|info, code, field, message}] (info = computed amounts to explain to the user) and validation{duk, anafOnline}. Loop: fix issues → build again until valid=true, then declaration_pdf. Public, nothing stored, 60 requests/hour per IP. |
| declaration_pdfA | Produce the PDF ANAF accepts for upload: DUKIntegrator renders the validated XML into ANAF's PDF form with the XML embedded and, where required (C168), a zip of attachments embedded (the scanned contract for a registration, the addendum for an amendment, the termination document or the landlord's sworn statement — document_generate — for a termination). Pass local file paths in attachmentPaths and/or base64 attachments (PDF, JPG, PNG, TIFF; 10 MB total). With outFile the PDF is written locally, ready for agent_submit_declaration_pdf (qualified certificate) or manual upload in SPV. Public, nothing stored. |
| anaf_declaration_statusA | Processing status of a declaration filed on the ANAF e-guvernare portal (after agent_submit_declaration_pdf or any upload that returned an index): ANAF's public StareD112 by upload index and the taxpayer's CUI/CNP. States: ok (accepted), nok (validation errors, see recipisa), processing, unknown (not indexed yet). Returns the recipisa PDF URL when available. Public, no account. |
| declaration_validate_xmlA | Validate an ANAF tax declaration XML (D212 Declaratia unica, C168 rent contract registration, D177, D700, D100, D112, D300, D390, D394 …) with ANAF's own DUKIntegrator validators, the same jars the ANAF portal uses. Public endpoint: no account needed, nothing is stored, 60 requests/hour per IP. Returns ANAF's errors and warnings verbatim. When the root namespace is missing or belongs to another reporting period, Storno applies the namespace ANAF asks for and returns the corrected XML (namespaceCorrected=true): upload that one. Use it before filing in SPV, or in a build → validate → fix loop when assembling a declaration from a taxpayer's documents. |
| storno_xml_generateA | Generate an e-Factura (UBL 2.1, CIUS-RO) XML for a storno / credit invoice without an account. Public endpoint: nothing is stored, no authentication needed, rate limited per IP. Returns the XML, the XSD + Schematron validation report, and totals. The result is an Invoice (type 380) with negated quantities and a BillingReference to the original document, exactly what Storno issues for stornos. RON only. Use it to correct an invoice already accepted in SPV, or to test XML output before integrating. |
| accounting_export_settings_getA | Get the accounting export configuration for the active company. Returns settings for Saga, Winmentor, and Ciel accounting software integrations including account codes, journal mappings, and export preferences. |
| accounting_export_settings_updateA | Update accounting export configuration for the active company. Settings are merged with existing config. Configure account codes, journal mappings, and export preferences for Saga, Winmentor, or Ciel. |
| accounting_export_zipA | Export accounting data as a ZIP archive for import into accounting software (Saga, Winmentor, or Ciel). The ZIP contains XML files for clients, suppliers, products, invoices, receipts, and payments. Filter by date range. For SAGA you may override the chart-of-accounts at export time (e.g. card analytic 5125.2) via accounts.{cash,bank,card,clients,suppliers}; values fall back to the company’s stored settings. |
| backup_createA | Create a new backup job for the active company. The backup is processed asynchronously and includes all company data (invoices, clients, products, settings). Optionally include uploaded files (PDFs, XMLs). Returns a job ID to check status. |
| backup_statusA | Get the status of a backup job. Returns progress percentage, current step, and download URL when complete. Statuses: pending, processing, completed, failed. |
| backup_downloadA | Download a completed backup as a ZIP file. Returns base64-encoded binary data. The backup must be in "completed" status. |
| backup_restoreA | Upload a backup ZIP file to restore company data. The restore runs asynchronously. Use backup_restore_status to check progress. WARNING: if purgeExisting is true, all current company data will be deleted before restoring. |
| backup_restore_statusA | Get the status of a restore job. Returns progress percentage and current step. Same as backup_status but specifically for restore jobs. |
| backup_historyB | List recent backup jobs for the active company. Returns job ID, status, creation date, file size, and whether files were included. |
| borderou_providersA | List available borderou (bank statement) providers. Returns supported banks and file formats for bank statement import and reconciliation. |
| borderou_uploadA | Upload a bank statement or borderou file (CSV, XLSX, XLS, or the original bank PDF) for transaction import and reconciliation. PDF statements are recognised automatically for Banca Transilvania, BRD, ING, CEC, Raiffeisen, UniCredit, BCR, Revolut, Garanti, Libra, Patria, Intesa Sanpaolo, Citi, Vista, Wise, myPOS, Viva, Nexent and Trezoreria Statului (pick the matching provider or generic_bank). Parses the file, creates transactions, and runs automatic matching against existing invoices. |
| borderou_transactionsB | List borderou transactions with pagination. Returns imported bank statement transactions with matching status, amounts, and linked invoice/proforma references. |
| borderou_transaction_getB | Get detailed information about a specific borderou transaction including matched invoice/proforma details. |
| borderou_transaction_updateA | Update a borderou transaction match. Link or unlink the transaction to an invoice or proforma invoice for reconciliation. |
| borderou_transaction_available_invoicesA | Get invoices or proforma invoices available to match against a borderou transaction. Search by number, client name, or amount. |
| borderou_transactions_saveC | Save and persist selected borderou transaction matches. Creates payment records for matched transactions and updates invoice payment status. |
| borderou_transactions_rematchB | Re-run the automatic matching algorithm on selected borderou transactions. Useful after adding new invoices or updating client data. |
| storage_config_getA | Get the organization's external storage configuration. Returns the current provider, bucket, region, and connection status. External storage allows storing PDFs and XMLs in your own S3-compatible bucket. |
| storage_config_updateB | Create or update external storage configuration. Supports S3-compatible providers (AWS S3, Cloudflare R2, MinIO, DigitalOcean Spaces, etc.). Credentials are encrypted at rest. |
| storage_config_deleteA | Delete the external storage configuration. Files already stored externally will no longer be accessible. This does NOT delete files from the external bucket. |
| storage_config_testB | Test the external storage connection. Attempts to write and read a test file to verify credentials and permissions. Uses existing config credentials if not provided. |
| storage_config_providersA | List available external storage providers with their configuration requirements and documentation links. |
| white_label_config_getA | Get the organization's white-label branding configuration (Business plan). Returns whether the org is entitled, plus the custom app name, logo URL, accent color, and whether Storno branding is removed from PDFs and client emails. |
| white_label_config_updateA | Create or update the organization's white-label branding (Business plan only). Set a custom app name, accent color, toggle white-label on/off, and remove the "Storno.ro" footer from generated PDFs and the emails your clients receive. |
| white_label_config_verify_domainA | Verify the custom domain by checking that the DNS TXT record (_storno-verify.) returned when the domain was set has been published. On success the domain becomes active for client links. |
| mailer_config_getA | Get the organization's custom email sender (SMTP) configuration (Business plan). Returns the host, port, encryption, username, from address/name, whether a password is saved, and the last test time. The password is never returned. |
| mailer_config_updateA | Create or update the organization's custom email sender (Business plan only). Invoices, receipts, and delivery notes to clients are then sent through this SMTP server from your own address. Omit the password on update to keep the saved one. |
| mailer_config_testA | Send a test message through the custom email sender to verify the SMTP settings. Uses the saved configuration unless overridden by the parameters. Sends to testEmail, or to the from address if omitted. |
| mailer_config_deleteA | Delete the organization's custom email sender configuration. Client documents revert to being sent from the default Storno address. |
| import_sourcesB | Get available import sources and import types. Returns supported import sources (SmartBill, Saga, Oblio, FGO, Facturis, etc.) and import types (clients, products, invoices_issued, invoices_received, recurring_invoices). |
| import_previewA | Get a preview of an uploaded import job including detected columns, sample data, and column mapping suggestions. Use after uploading a file to review before executing. |
| import_mappingA | Save column mapping for an import job. Maps CSV columns to Storno fields. Call after reviewing the preview to confirm or adjust mappings before executing. |
| import_executeA | Execute an import job after mapping is confirmed. The import runs asynchronously via a message queue. Check status with import_get. |
| import_getB | Get full status and details of an import job including progress, row counts (imported, skipped, failed), and error details. |
| import_uploadA | Upload a file (CSV, XLSX, or XML) to start a new import job. Requires importType (clients, products, invoices_issued, invoices_received, recurring_invoices) and source (smartbill, saga, oblio, fgo, facturis_online, easybill, ciel, factureaza, facturare_pro, icefact, bolt, facturis, emag, generic). Returns the created import job with preview data. |
| import_templateA | Download a CSV template for a specific import type. Returns base64-encoded CSV with column headers and example rows that can be filled in and uploaded via import_upload. |
| import_historyA | List past import jobs for the active company. Returns job ID, type, source, status, row counts, and timestamps. |
| cpv_codes_searchB | Search CPV (Common Procurement Vocabulary) classification codes by code number or description. CPV codes are used in e-Transport declarations and public procurement. Returns matching codes with their descriptions. |
| nc_codes_searchB | Search NC (Combined Nomenclature / NACE) classification codes by code number or description. NC codes are used in e-Transport declarations for goods classification. Returns matching codes with their descriptions. |
| telemetry_sendA | Send a batch of telemetry events for the current user and company. Events are processed asynchronously. Maximum 100 events per batch. Telemetry is always sent to api.storno.ro regardless of configured base URL. |
| declarations_listA | List tax declarations for the active company. Supports filtering by type, status, year, and month. Returns paginated list of declarations with their status and period. |
| declarations_getA | Get a single tax declaration by UUID. Returns full declaration details including populated data, status, metadata, and error messages. |
| declarations_createA | Create a new tax declaration. VAT and payroll types (d394, d300, d390, d100, d112) are auto-populated from the company's invoices for the period. Form-based types are filled from plain JSON: 'd212' (Declarația unică, rent income; month 12) and 'c168' (rental contract registration/amendment/termination; month 12) take |
| declarations_recalculateA | Recalculate a draft declaration by re-populating its data from current invoices. Only works on declarations in "draft" status. |
| declarations_validateA | Validate a draft declaration by generating and checking the XML output. Transitions the declaration to "validated" status if successful. |
| declarations_submitA | Submit a declaration to ANAF. Generates XML, uploads to ANAF SPV, and begins async status polling. Works on "draft" or "validated" declarations. |
| declarations_deleteA | Soft-delete a tax declaration. Cannot delete accepted declarations. |
| declarations_syncA | RETIRED server-side sync: ANAF SPVWS2 accepts only the qualified certificate (mTLS), so this endpoint now answers 409 AGENT_REQUIRED. Declarations and SPV messages are pulled through the local storno-agent from the web app (declarations page or the SPV documents page); the tools spv_sync_prepare / spv_sync_agent_result cover the same flow for automation. |
| declarations_refresh_statusesC | RETIRED server-side status refresh: answers 409 AGENT_REQUIRED because ANAF SPVWS2 requires the qualified certificate (mTLS). Refresh statuses from the web app through the local storno-agent. |
| declarations_download_xmlB | Download the generated XML for a tax declaration. Returns the raw XML content. |
| declarations_updateB | Update a draft declaration: |
| declarations_file_via_agentA | File a declaration at ANAF in one call, the way the web app does: Storno prepares the XML and the DUK PDF (with the attachment zip for c168), the local Storno Agent signs it with the qualified certificate and uploads it to the e-guvernare portal, and Storno records ANAF's upload index (status processing; the recipisa arrives in the SPV inbox and in the dosar). Needs the agent on this computer and the PIN (pin, STORNO_AGENT_PIN, or the PIN remembered on this computer by the agent). Check declarations_validate first. Remember: one C168 per landlord and period in processing at a time. |
| declarations_download_pdfA | The PDF ANAF accepts for this declaration (DUKIntegrator's form with the XML embedded and, for C168, the attachment zip), generated on demand from the current data. Use it when the user files by hand: they upload this file in SPV (persoane fizice: SPV → Depunere declarații) or on the e-guvernare portal with their own certificate. Written to outFile. Storno's rules and ANAF's validator run first; errors come back instead of a broken file. |
| declarations_prepareB | Prepare a declaration for agent-based submission. Returns XML content, ANAF URL, Bearer token, and CIF needed by the local agent to proxy the mTLS request. Use operation param for different flows: submit (default), listMessages, download. |
| declarations_agent_resultB | Submit the ANAF response received via the local agent back to the server. The server parses the response, extracts the upload ID, sets status to PROCESSING, and dispatches status checking. |
| spv_documents_listA | List the archived ANAF SPV inbox for a company: every message (somatii / enforcement notices, decizii, notificari, adrese, recipise, certificate, plati...) classified by category and severity, with archived-PDF status. Critical items (SOMATII, inactivation/VAT-cancellation decisions, risk reports) carry short legal deadlines. Documents get into the archive through the local storno-agent sync (certificate/mTLS), see spv_sync_prepare. |
| spv_documents_statsA | Counts for the SPV inbox archive of a company: total, unread, PDFs still to download, breakdown by category and by severity, plus the category and severity lists. |
| spv_documents_getA | Get one archived SPV document with all details (ANAF ids, dates, archive status, download errors). |
| spv_documents_downloadA | Download the archived PDF of an SPV document to a local file. Fails with SPV_FILE_PENDING when the agent has not fetched it yet, or SPV_FILE_PURGED when retention removed it. |
| spv_documents_mark_readA | Mark one SPV document as read (or all unread documents of the company when uuid is omitted). |
| spv_sync_prepareA | Step 1 of an SPV inbox sync. Returns the ANAF listaMesaje URL the local storno-agent must GET with the qualified certificate (mTLS; the OAuth token is not accepted by SPVWS2), plus any PDFs still pending download. Relay the ANAF response with spv_sync_agent_result. |
| spv_sync_agent_resultA | Step 2 of an SPV inbox sync: relay the raw ANAF listaMesaje response fetched by the agent. Every message is archived and classified, users are notified (push/email) about critical and important documents, and the response lists the PDFs the agent should now fetch from descarcare and upload with spv_document_upload. |
| spv_document_uploadA | Step 3 of an SPV inbox sync: store the PDF the agent fetched from ANAF descarcare for a document. Pass the body base64-encoded. HTML answers (expired SPV session) are rejected with SPV_NOT_A_DOCUMENT. |
| spv_request_typesA | Catalog of what can be requested from ANAF SPV (solicitari): reports (Fisa Rol, VECTOR FISCAL, Situatie Sintetica, Obligatii de plata, Istoric declaratii, Bilant), copies of filed declarations (D300, D394, D112, D212 ...), Duplicat Recipisa, Adeverinte Venit, certificates, decisions. Filtered for the company the way the SPV form does it: a CNP (individual person) gets D212, Duplicat declaratie unica, Adeverinte Venit, Istoric declaratii PF, C168, fisa rol…; a CUI gets the company returns, bilant, decisions. Each entry carries |
| spv_requests_listB | Requests sent to ANAF SPV for the company, newest first, with status (pending, requested, answered, error), ANAF id_solicitare and the archived answer document id when it arrived. |
| spv_request_prepareA | Step 1 of an SPV request: validate the type and parameters (see spv_request_types). Returns requestId and channel: "ws" with the ANAF cerere URL the local storno-agent must GET with the certificate, or "web" with a form the agent submits to the SPV website (POST /spv-web-request on the agent) for types the web service lacks (C168, certificates, decisions). Relay the answer with spv_request_agent_result. The answer document itself arrives later in listaMesaje with the same id_solicitare and is archived by the inbox sync. |
| spv_request_agent_resultA | Step 2 of an SPV request: relay the raw ANAF answer to cerere ({id_solicitare, titlu} or {eroare}). Records the ANAF request id or the error on the request. |
| spv_request_deleteA | Delete a pending or failed SPV request record (answered requests keep their history). |
| dosare_listB | Case files (dosare) of the company: rental contracts (with tenant, rent, period, the 30-day C168 deadline), yearly Declarația unică dosare (25 May deadline), periodic returns, fiscal standing. Each carries status (active / attention / closed), next step, deadline with days left, and counts of linked declarations, SPV requests and ANAF messages. |
| dosare_actionsA | What needs the user's attention across all dosare: "todo" (rejected filings with the reason, requests in error, dosare flagged for a decision, deadlines within 14 days, contracts expiring within 60 days, unread somații/decizii), "inProgress" (filings ANAF is processing, requests without answer) and "answers" (recipisas, answers, certificates received in the last 14 days). Start here when the user asks "what do I have to do?". |
| dosare_statsA | Rental portfolio of the company: every property with tenant, rent, period, active/expiring state and linked declarations; active contracts; contracts expiring within 60 days; monthly rent by currency; expected gross rent per income year from the contracts (RON) versus what the D212s declared per year (with the declaration status). Answers "how much rent did I collect and declare last year?". |
| dosare_getB | One dosar with its linked declarations, SPV requests, ANAF messages and the chronological timeline (filed, index, recipisa, answers). |
| dosare_createA | Create a dosar. For a rental contract pass subject {numar, data (contract date), adresa (property), chirias, chiriasCif (tenant CNP/CUI — needed for C168), chirie (monthly), moneda, deLa, panaLa, dataIncetare?}: the title and the 30-day C168 deadline are derived. For the yearly Declarația unică use dosare_annual_return instead. Other types: title, deadlineAt, deadlineLabel, nextStep, notes. |
| dosare_updateA | Update a dosar: title, subject fields (merged), status (active / attention / closed), nextStep, deadlineAt + deadlineLabel, notes, and the link to the other party as a client / supplier of the company (clientId / supplierId; null unlinks). The link is found by the tenant CUI/CNP automatically when a dosar is created; set it by hand when the client record has a different identifier. |
| dosare_deleteA | Delete a dosar. Its declarations, requests and messages are kept, only ungrouped. |
| dosare_attachA | Attach (or detach) a declaration, an SPV request or an ANAF message to a dosar. A declaration brings its archived recipisas along; a request brings its answer. |
| dosare_annual_returnA | Ensure the "Declarația unică " dosar (one per filing year) with its 25 May deadline; returns it. Default year: the one whose 25 May is next. Deadline reminders go out 30, 7 and 1 days before. |
| dosare_d212_prefillA | D212 rent-scenario input prefilled from the rental-contract dosare for the income year of a Declarația unică dosar (contract, period within the year, gross rent = monthly rent × months for RON contracts; foreign-currency rents come back as 0 with a note to convert at BNR rates). Review it with the user, then dosare_d212_create. |
| dosare_d212_createA | Create the D212 draft (rent scenario) inside a Declarația unică dosar from the reviewed input (schema: declaration_form_spec D212; omit input to use the prefill as is). The draft then goes through declarations_validate (ANAF DUKIntegrator), declarations_prepare / declarations_agent_result (sign + file with the certificate through the local agent) and the recipisa lands in the dosar. |
| dosare_files_uploadA | Put a file into a dosar: the scanned contract (kind contract), an addendum (act_aditional), the termination document or the signed sworn statement (incetare), a signed declaration (declaratie), anything else (altele). PDF, JPG, PNG or TIFF, up to 10 MB. Files in a dosar become the zip attachment of the C168 filed from it. |
| dosare_files_downloadA | Download a file kept in a dosar to a local path (e.g. to sign it with agent_sign_pdf, then upload the signed copy with dosare_files_upload). |
| dosare_c168_prefillA | The C168 input (registration / amendment / termination of the rental contract) prefilled from a rental-contract dosar and the company, with Storno's rule issues listing what is still missing (nomenclator address codes for the property, tenant and landlord; tenant CNP …). Fill the gaps with anaf_nomenclator_* and the user, then dosare_c168_create. Also lists the dosar files that can be attached. |
| dosare_c168_createA | Create the C168 declaration in the dosar from the reviewed input (schema: declaration_form_spec C168) with the attachment: dosar files by id (fileIds) and/or local files (attachmentPaths) — the scanned contract for a registration, the addendum for an amendment, the termination document or the signed sworn statement for a termination. Storno applies its rules (errors → 422 with issues), stores the reviewed addresses in the dosar for next time and sets the next step. Then declarations_validate and declarations_file_via_agent. ANAF processes one C168 per landlord and period at a time. |
| dosare_registry_proposalsA | Contracts listed in ANAF's registry extract ("Registrul contractelor de locatiune", the answer to the C168 SPV request — request it with spv_request_prepare type C168) with their state after all filings (active / expired without termination / terminated), each matched to the existing dosare. Reads the newest extract archived in the SPV inbox, or the PDF at pdfPath. Then dosare_registry_import for the ones without a dosar. |
| dosare_registry_importA | Create rental-contract dosare for registry contracts (pass the contract objects from dosare_registry_proposals, usually those with existingDosarId null). Terminated contracts become closed dosare; expired ones without a termination filing are flagged for attention (file C168 încetare or an addendum). |
| dosare_billingA | Everything invoiced between the landlord and the tenant of a rental dosar (matched by the tenant's CUI/CNP on clients and suppliers): the recurring invoice, the invoices issued to the tenant with paid / partial / unpaid / overdue state and days overdue, totals per currency, the invoices received from the tenant (e.g. works compensated with the rent) and, when the dosar records an investment clause, the compensation balance. Answers "did the tenant pay?" and "how much rent is outstanding?". |
| dosare_documentA | Generate a legal document from a rental-contract dosar, prefilled with the landlord (company), tenant, contract and property: 'conventie_incetare_inchiriere' (termination agreement), 'declaratie_incetare_contract' (landlord's sworn statement, the C168 termination attachment), 'act_aditional_inchiriere' (addendum: extension and/or new rent; fields act{numar,data}, prelungire{data_inceput,data_sfarsit}, chirie_noua{suma,valuta,de_la}) or 'notificare_incetare_inchiriere' (termination notice: data_incetare, preaviz_zile, motiv). Without |
| related_getA | Everything in Storno connected to one record, whatever it is: for a client → its dosare (rental contracts), recurring invoices, recent invoices, the declarations and ANAF messages of those dosare; for an invoice → the client, the rental dosar of that tenant, the recurring invoice that issued it, sibling invoices; for a declaration or SPV message → the dosar behind it and its client; for a dosar → client, supplier, recurring invoice, invoices, declarations, SPV requests and messages. Every item has type, id, title, subtitle, status, date and the web page (href). Use it to answer "what else do we have about X?" before searching list by list. |
| agent_statusA | Is the local Storno Agent running, which version, and is an update available. The agent lives on the user's computer and holds the qualified certificate (USB token) used for ANAF declarations, SPV and PDF signing. |
| agent_certificatesA | Qualified certificates the local Storno Agent can use (USB tokens, Keychain / Windows store identities): id, subject, issuer, expiry. The id is what agent_sign_pdf and the submission tools need. |
| agent_sign_pdfA | Sign one or many PDF files with the qualified certificate through the local Storno Agent (PAdES/CMS signature embedded in the PDF), e.g. declarations produced by DUKIntegrator, contracts, any document ANAF or a partner wants signed. Pass file paths and/or directories (all *.pdf inside); each signed copy is written next to the original as .signed.pdf (or into outDir). Requires the certificate PIN (pin, STORNO_AGENT_PIN, or the PIN remembered on this computer by the agent); the batch stops at the first PIN error to protect the token. |
| agent_submit_declaration_pdfA | File a declaration PDF (made by DUKIntegrator, XML embedded, e.g. from Storno's declarations or a C168/D212 built with the public tools) at ANAF: the local agent signs it with the certificate and uploads it to the e-guvernare declarations portal (WAS6DUS), then returns ANAF's upload index. Track it with anaf_declaration_status (index + CUI/CNP); the recipisa arrives in the SPV inbox and on StareD112. Requires the PIN (pin, STORNO_AGENT_PIN, or the PIN remembered on this computer by the agent). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 341 tools
With 341 tools spanning overlapping domains, many tools have unclear boundaries: invoices_submit vs einvoice_submit, declarations_submit vs declarations_file_via_agent vs agent_submit_declaration_pdf, and multiple sync/status tools (anaf_sync_trigger, anaf_sync_status, spv_sync_prepare, declarations_sync). Even with detailed descriptions, an agent would frequently struggle to pick the right tool for a task.
Most tools follow a resource_verb pattern (invoices_list, clients_create, webhooks_delete), but there are notable deviations: some use verb-first (auth_login, balance_list, import_get), some use bare nouns (borderou_providers, document_types, agent_status), and some mix conventions (spv_sync_agent_result vs spv_document_upload, dosare_d212_prefill vs dosare_c168_create). The pattern is readable but not consistently applied.
341 tools is an extreme count for any MCP server. While the server covers a broad ERP/accounting domain, the sheer number creates overwhelming selection complexity and suggests the entire REST API surface was exposed without curation. This is far beyond the typical well-scoped MCP server.
The tool surface is remarkably comprehensive for the domain: invoices, proformas, delivery notes, receipts, clients, suppliers, products, payments, VAT, declarations, SPV, dosare, webhooks, backups, imports, exports, and admin functions are all covered with full lifecycle operations. Minor gaps exist (e.g., no explicit tool for updating invoice line items after issue, no direct SPV request cancellation), but the coverage is extensive.