masters
List one kind of TallyPrime master per call—voucher types, godowns, units, stock groups, stock items with HSN/GST, cost centres, cost categories or account groups—for a company.
Instructions
List a company's masters of one kind: voucher types with the numbering value Tally reports at the type level (see below: it is not their numbering method), active and optional flags and series_numbering (the numbering method, under Automatic its sub-method, and the duplicate setting of the type's series), godowns, units (with decimal places and whether simple), stock groups, stock items (with their own dated HSN and GST lists), cost centres (with their category), cost categories (with three allocation flags), or account groups (groups). Each row of another kind carries name, guid, master_id, alter_id and parent (null where it does not apply or is absent; a parent that is Tally's reserved root is written  Primary, the text Tally sends, here and in stock_summary, ledger_masters, ledger_movement, gst_by_ledger and trial_balance; a group a user named Primary is written plain); a groups row carries name, parent and reserved_name only. Voucher types also carry active, optional (true, false or null when Tally did not say) and numbering_method (automatic, manual, default, {"unrecognised": <raw text>} for any other value Tally reports, or null when absent) and series_numbering ({"observation":"observed","method":"automatic"|"manual"|"automatic_manual_override"|{"unrecognised": <raw text>},"duplicates":"prevented"|"not_prevented"}, with "sub_method":"auto_retain"|"auto_renumber"|"absent"|{"unrecognised": <raw text>} under automatic and under no other method, {"observation":"series_count","count":n} when a type has no series or several, and nothing is read from it, or {"observation":"field_invalid","code":...}), read from a second paired read of the voucher-type export and joined to each row by GUID with the name as a second equality, so a type on one side only, or a GUID and name that disagree between the two reads, refuses the whole read (masters_numbering_names_differ for a type in one read only, masters_numbering_identity_differs for a GUID and name that disagree), as do masters_numbering_collection_changed (the numbering read changed between its two reads) and masters_bound_premise_violated (the numbering answer's row count or size), and a moved book is reported as masters_extent_changed in place of a join or premise refusal; units carry decimal_places and simple; cost centres carry category (always present: a centre without one is refused), cost categories allocates_revenue, allocates_non_revenue and affects_stock; stock items carry hsn and gst (see below); cost centres and categories are returned whether or not the company's Cost Centres setting is on (a book with the setting off was read with its centres, and a book with it on with its own), an empty cost-centre list does not say whether the feature is off or none is defined, and an empty cost-category list is refused (masters_cost_categories_empty, on the expectation that the predefined Primary Cost Category always exists), and how a voucher was allocated to a cost centre is not returned by this tool: the voucher reads carry it on each ledger entry (cost_centre_allocations). A stock item row carries hsn and gst, each the item's own dated list as Tally sent it: an observation of entries (sorted by applicable_from, each entry as sent; an HSN entry has applicable_from, hsn_code as text exactly as sent (never trimmed or cut), description, source and other_content_skipped; a GST entry has applicable_from, taxability, source, ineligible_itc (Tally's GSTINELIGIBLEITC as sent: true for Yes, false for No, null when the element was absent, never filled in; on one item it was Yes on the entry whose screen row read Eligible for Input Tax Credit: No and absent on the entry whose screen row read Yes, which fits an ineligibility flag; PARTIAL, one book, two rows, screen against wire; what an absent element means for the tax is not known, so do not read null as eligible or as ineligible, and do not read true as eligible; on an entry whose source is As per Company/Stock Group (the entry Tally adds itself on a first save; a person can also choose that source) a flag Tally sent is withheld: ineligible_itc is null and ineligible_itc_withheld is tally_default_entry, because the Yes seen on such an entry was never compared with the screen (both screen readings are of rows a person edited or keyed, and a row's origin and its flag cannot be told apart on one item); a flag Tally did not send stays null with no marker, and an entry with any other source is sent as it is), state rows and other_content_skipped, and a rate is absent, empty, zero or a value with its raw text and decimal, never merged), unreadable with its defect (an undated entry, an invalid date, a repeated field, two different entries on one date, a rate that is not a plain decimal, a credit flag other than Yes or No, a repeated state or duty-head row, or content only of a kind not modelled, such as text, a reference or CDATA directly in the list; that list of that item only, the read and the row stand) or not_observed (the row had no such list). Nothing chooses the code or the rate for a date. An empty list (entries with no entry) or not_observed is NOT a statement that the item has no HSN code or no GST rate: what its stock group or the company holds is not read. One thing was measured, on one book: after a code was keyed on a stock group, the group's four other items still carried empty lists; not measured: a GST rate on a group or on the company, an HSN code on the company, and whether an item that defers to a coded group inherits its code. ComplyEaze Bridge does not read that setting, so every stock item row carries inherited_from_group_or_company: not_read. Tally adds an entry of its own to an item when it is first saved (source As per Company/Stock Group, no code and no rate, dated the book's first day: 1 April 2025 on the one book measured, no other book's date measured, so recognise it by its source); it says the item defers to its group or the company. state_name and valuation_type carry the reserved-character marker (U+FFFD #4;) where Tally sends Any and Not Applicable. A Tally ERROR or LINEERROR anywhere in a list, markup inside a value, or a list cut off refuses the whole read. Measured on one synthetic book of TallyPrime 7.1 Silver (PARTIAL): a state row other than Any, slab rates, another release, a larger book and a zero-row stock-item answer are not measured. One kind per call, read inside one company, mode and book-extent bracket: the extent before and after must be equal and each collection is read twice and compared, so a book that changed during the read is refused. Whole reads only. Godowns, units, stock groups, stock items, cost centres and cost categories are read only when the book's master-alteration mark times an assumed worst-case row for that kind fits 16 MB (the mark counts the masters of every kind, so a book with few of this kind can be refused), and otherwise refuse before any request with masters_too_large and size (master_alter_id, estimated_bytes, limit_bytes, limit_master_alter_id); that admits marks up to 1,152 for godowns, 1,168 for units, 1,160 for stock groups, 489 for stock items (the item row is allowed for several dated entries: it is refused past 16,344 UTF-16 units, about seven further GST entries of the measured size, whatever its state rows; a limit of 489 refuses, by arithmetic, both client books measured, not tried on them), 1,037 for cost centres and 1,264 for cost categories. Retrying refuses again. The refusal's size carries limit_master_alter_id, the largest mark this kind is read at. Both stock-heavy client books measured, with marks of about 100,000 and 300,000, refuse godowns, units and stock groups, and by the same arithmetic stock items (cost centres, cost categories and stock items were not tried on them); how common such marks are across live books is unmeasured. voucher_types and groups have no size check before the read (voucher types keep the policy of ComplyEaze Bridge's other voucher-type read, and their second, numbering read is likewise sent with no size check). After a read of any kind other than groups, each row's length is checked against the assumed worst-case row (masters_row_exceeds_bound), and the row count, the rows' AlterIDs (at or under the mark, none repeated) and the response size (each collection is read twice, and the size check runs after both reads) are checked against the mark and the admitted size; a breach of those three refuses the whole read as masters_bound_premise_violated and returns no partial list, unless the closing extent shows the book moved, which is reported instead (masters_extent_changed). A response ComplyEaze Bridge cannot read refuses at once with a masters_* cause, and a voucher_types answer with no rows refuses as masters_voucher_types_empty, because every company has predefined voucher types. Not returned: alias names, counts and hints (no company NUM* fields), stock-item quantities, rates and values (use stock_summary), ledgers (use ledger_masters), and any write. The row shape was captured from one synthetic book on one licensed TallyPrime 7.1 (cost centres: three synthetic books, the third captured in a separate sitting whose own status read recorded TallyPrime 7.1, licence Silver, Education mode off; cost categories: two): the type-level numbering_method it carries is not the voucher type's numbering method: it read None for types a person had set to Automatic and to Manual on the screen, and the method is kept per number series, which series_numbering returns instead, so no value of numbering_method (default, automatic, manual or any other) says how a post is numbered. series_numbering was measured on one synthetic book (TallyPrime 7.1 Silver, Windows): 24 voucher types, each with one series named Default, of which three (Journal Automatic, Payment Manual with duplicates prevented, Receipt Manual with duplicates not prevented) were checked against Tally's screen; Automatic (Manual Override) through this tool (it is mapped from the series text measured on a synthetic book on 13 October 2026), more than one series, Multi-user Auto, a single series not named Default, a voucher type created new and other releases were not measured, an unrecognised method is never manual, and the integrated read, the two requests sent as one tool call, was run live on two synthetic books on 14 October 2026 and returned the numbering set or checked on Tally's screen for six types. sub_method is the series' own NUMBERINGSUBMETHOD (auto_retain is the screen's Retain Original Voucher No., auto_renumber its Renumber Vouchers, absent a series that printed none, and any other text, a blank one included, is returned raw under unrecognised); a Manual series printed Auto Retain too, which is not the numbering in force there, so it is not returned for one. It was measured on a second synthetic book (TallyPrime 7.1 Silver, Windows) and one voucher type, Receipt, set to Renumber Vouchers and back: with it on Renumber Vouchers, numbers already in the book changed, at the switch, when a voucher with an earlier date was entered by hand, and when one was sent by import without a number (the import's answer reported nothing altered and no voucher's AlterID moved); any other wording, a series that prints no sub-method, other voucher types, a batch of several vouchers, Gold, other releases and the same through ComplyEaze Bridge's own post are not measured. A value other than Automatic, Manual or Default is returned raw under unrecognised, not refused. default is Tally's reported value, not evidence that a type numbers automatically. The company's voucher-type count (NUMVOUCHERTYPES) did not equal the rows returned on two books (35 vs 26, 33 vs 24), and on one book equalled the number-series count (inferred to count series, unmeasured), so do not check these rows against it. The completeness of the voucher-type list is unverified: absence from it is not evidence that a voucher type is absent from the book. Under mask_parties, godown, stock-group, stock-item, cost-centre and cost-category names, their parents and a cost centre's category are masked, because a job-work godown, a supplier-named stock group or stock item or a customer-named cost centre can carry a party's name (Tally's reserved root as a parent is shown as  Primary and is not masked); a stock item's HSN codes and rates are not names and are returned as sent, but an HSN description, which Tally fills from its tariff list and a person can edit, is masked like an item name. Voucher-type, unit and account-group names are not masked: they are configuration labels, not counterparties. Education mode is refused. A first page (offset 0) always captures a fresh read and holds it in memory; a later page for the same kind (offset > 0) is served from it while the company's book extent, including ALTVCHID and ALTMSTID, is unchanged, at the cost of one small extent read. Each result reports snapshot (id, master_alter_id, voucher_alter_id, read_at, reused). Pass the first page's snapshot_id on later pages to have the call refused with listing_snapshot_changed (cause book_changed_since_first_page or snapshot_not_held) instead of continuing from a different read. A change that moves neither mark is not seen, so a later page can be up to 10 minutes old after such a change. Each call appends metadata-only receipt lines (tool, company, counts, request and response fingerprints; no book content) to ComplyEaze Bridge's local log on this computer; it writes nothing to Tally.
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"company_guid": "<company_guid>",
"kind": "<kind>"
},
"name": "masters"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | Which masters to list, one kind per call: voucher_types, godowns, units, stock_groups, stock_items (each with its own dated HSN and GST lists; an empty list does not mean the item has no HSN or GST), cost_centres, cost_categories or groups (account groups). | |
| limit | No | The most rows to return on this page. The default and the maximum are this server's row limit (500 unless it is configured otherwise). | |
| offset | No | How many rows to skip before this page: 0, the default, is the first page. | |
| snapshot_id | No | Optional, on a later page only: the first page's snapshot_id, so the call is refused (listing_snapshot_changed) rather than continuing from a different read. | |
| company_guid | Yes | The company's company_guid, as list_companies returns it. |