{"service":"everbowl-core","description":"The canonical identity layer for Everbowl Holdings. Read-only.","version":"v1","endpoints":["GET /v1/health","GET /v1/organizations","GET /v1/organizations/:id","GET /v1/parties?role=FRANCHISEE&status=ACTIVE","GET /v1/parties/:id","GET /v1/sites?type=STORE&status=ACTIVE","GET /v1/sites/:id","GET /v1/stores?ownership=FRANCHISE   (?include_merged=true to see merged duplicates)","GET /v1/stores/:id   (site id OR store code, e.g. EB1072, OR a code the store used to carry, e.g. EB1008 for 008; a merged id forwards to its survivor)","GET /v1/stores/:id/equipment   (?basis=AS_BUILT|AS_SPECIFIED, ?as_of=YYYY-MM-DD)","GET /v1/stores/:id/documents   (the store's Drive documents; signed-in readers)","GET /v1/stores/:id/mua   (the development agreements this store sits under; can be more than one)","GET /v1/items?class=CONSUMABLE&status=ACTIVE","GET /v1/items/:id","GET /v1/mua?status=ACTIVE&holder=PTY-000011","GET /v1/mua/:id   (MUA-000001 OR the document code, e.g. M001)","GET /v1/equipment-roles?category=BOH&status=ACTIVE","GET /v1/equipment-roles/:id","GET /v1/equipment-options?role_id=…&status=APPROVED","GET /v1/equipment-options/:id","GET /v1/resolve?system=SYSCO&ref_kind=SUPC&external_id=7502844","GET /v1/search?q=Meridian   (store name, city, street, franchisee, store code, FID or MUA code - you do not have to know the code)","GET /v1/search/agreement-stores?mua=M009   (the stores one development agreement covers)","GET /v1/franchisees?status=ACTIVE&q=Feldman   (every franchisee: FID, name, status, primary entity, store counts)","GET /v1/franchisees/:key   (THE FRANCHISEE FILE by FID or Core id: entities and people, stores with their dated holding, agreements with every ALLOWED and CHARGED term, leases with figures and guarantors, development agreements, Drive documents and folder, codes)","GET /franchisees   (the screen: every franchisee)","GET /franchisees/:fid   (the screen: one franchisee file, every layer one click from the next)","GET /stores   (the screen: every store Core knows, searchable)","GET /stores/:code   (the screen: one store in plain English, with the reason behind every blank)","GET /v1/review   (every field an import left blank rather than guess, grouped; /review is the screen)","GET /v1/review/items?entity=STORE&field=ownership&include=live   (the records behind one group)","GET /v1/owners/:id                           (THE OWNER'S PAGE: every company one person of record owns, with its stores; /owners/:id is the screen; GET /v1/owners lists them)","GET /v1/quarantine?status=PENDING&fid=FID008   (JEFF'S QUEUE: every value waiting for a named person, with why it waits; /queue is the screen. Reading it decides nothing)","GET /v1/settings   (the group-wide facts every app reads from Core, with who stated each and when: fiscal year ends 12-31)","GET /v1/settings/fiscal_year"],"notes":["Read-only. Data enters Core only through reviewed import scripts (CLAUDE.md rule 6).","Every record carries source_system, source_file, imported_at and data_flags.","A development agreement returns holder_party_id AND holder_name_stated. Where the first is null the second still says who signed, and data_flags says why Core cannot name the party. Core holds no compliance figure for an agreement: count /v1/stores instead.","List endpoints take limit, cursor and updated_since, and sort stably.","/v1/search returns every reading of the query, not the most likely one: \"1177\" finds EB1177 Pearl City AND EB1177T Elizabethtown, because a number reused under rule 8 is two different places. It never hides a merged record and it never ranks by a score - hits come back in reading order, then by store code.","/v1/review counts the SAME flag twice only if two records carry it. Its counts separate records somebody still operates from ones nobody does, because a blank address on a store that closed in 2021 is history, not work - and it says which fields an admin could fill in through /v1/admin versus which need a document Core does not have.","Every id Core ever issued still resolves. Where two rows turned out to be one place, the merged id forwards to the survivor and says so in merged_from (rule 2). Lists exclude merged duplicates so counts are right."]}