{"x402Version":2,"service":"HALOWERK researchwerk","version":"1.0.0","network":"eip155:8453","network_name":"Base Mainnet","chain_id":8453,"recipient":"0x2880EdfFF13100677Bf97A3CBdF3Bc34771C4E5E","asset":{"symbol":"USDC","address":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","decimals":6},"facilitators":["CDP","https://facilitator.xpay.sh"],"payment_headers":{"primary":"PAYMENT-SIGNATURE","accepted":["PAYMENT-SIGNATURE","X-Payment","PAYMENT"],"challenge":["PAYMENT-REQUIRED"],"response":["PAYMENT-RESPONSE"]},"resources":[{"url":"https://research.halowerk.com/v1/official-sources","method":"POST","name":"official_sources","description":"Answers the two questions that open any serious piece of research. First, where does something stand officially: filter a curated directory of authorities, registers, standards bodies and intergovernmental organisations by subject and country and get, for each one, what it is actually authoritative for, which is the real answer rather than a bare list of links. Second, is this address official: a URL is matched against the directory and, failing that, against the domain suffixes reserved for state bodies, which reaches far beyond any list since most authorities worldwide sit under one. A directory hit and a suffix hit are reported as different rules with different confidence, because a suffix says the body is official without saying what it is competent for. The endpoint is explicit about its limits in every answer: no hit is never evidence that a source is unofficial, only that it is not confirmed here, since sixty entries cannot represent the authorities of the world and many standards bodies use ordinary domains. It performs no web search and no network access at all, so an entry is a statement about a name, not about the server behind it or whether that server answers today. The directory carries the date it was last maintained.","summary":"Name the authoritative body for a subject and country — law, company registers, statistics, standards, patents, medicines, financial supervision — and judge whether a given URL belongs to an official source, from a curated directory without any web search.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"domain":{"type":"string","enum":["recht","unternehmensregister","statistik","normung","schutzrechte","gesundheit","chemikalien","finanzaufsicht","vergabe","datenportal","umwelt","internet"],"description":"Subject area to filter by: recht, unternehmensregister, statistik, normung, schutzrechte, gesundheit, chemikalien, finanzaufsicht, vergabe, datenportal, umwelt, internet."},"country":{"type":"string","pattern":"^[A-Za-z]{2,3}$","description":"Jurisdiction as ISO country code, or EU for the Union, or INT for intergovernmental bodies."},"url":{"type":"string","maxLength":2000,"description":"Address or domain to classify as official or not."},"query":{"type":"string","maxLength":200,"description":"Free text matched against names and remits, for example Patente or statistics."}}},"mimeType":"application/json","accepts":[{"scheme":"exact","network":"eip155:8453","payTo":"0x2880EdfFF13100677Bf97A3CBdF3Bc34771C4E5E","price":{"amount":"2000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","extra":{"asset":"USDC","network_name":"Base Mainnet","name":"USD Coin","version":"2","assetTransferMethod":"eip3009","eip712Domain":{"name":"USD Coin","version":"2","chainId":8453,"verifyingContract":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"}}},"maxTimeoutSeconds":300}]},{"url":"https://research.halowerk.com/v1/grounding-score","method":"POST","name":"grounding_score","description":"Splits the answer into sentences and measures, for each one, how much of it is covered by the supplied sources. Coverage is asymmetric on purpose: the question is what share of the statement appears in the source, so a long source can fully cover a short claim, and it combines single-word overlap with word-pair overlap because the same words in a different order can mean something else. Two checks override coverage and this is the point of the endpoint. Negation is compared separately, so a sentence that matches its source almost perfectly but flips a not is reported as a possible contradiction rather than as supported, no matter how high the overlap. Numbers, years, percentages and amounts are extracted and looked for in the matched source, because an invented figure is the most expensive error in a generated answer and the one plain word overlap cannot see, since the sentence around it is correct. German and English decimal styles are folded together so the same number is not counted twice. Every claim carries its best source, its score, the matched phrase and a verdict; the overall grounding_score weights supported at one and weakly supported at one half. The endpoint measures textual coverage, not logical entailment, and supported here means the sentence stands in the source you provided, never that the source is right. No network access and no language model is involved.","summary":"Check an answer sentence by sentence against the sources you supply: which statements are covered by a source, which are not, which contain numbers that appear nowhere, and which may contradict the source through a flipped negation.","inputSchema":{"type":"object","required":["answer","sources"],"additionalProperties":false,"properties":{"answer":{"type":"string","minLength":10,"maxLength":40000,"description":"The answer or text to be checked against the sources."},"sources":{"type":"array","minItems":1,"maxItems":50,"description":"The sources the answer is supposed to rest on.","items":{"type":"object","required":["text"],"additionalProperties":false,"properties":{"id":{"type":"string","maxLength":100,"description":"Optional identifier, echoed back on every match."},"text":{"type":"string","minLength":1,"maxLength":200000,"description":"Full text of the source."},"url":{"type":"string","maxLength":2000,"description":"Optional origin, passed through unchanged."}}}},"min_coverage":{"type":"number","minimum":0.1,"maximum":1,"default":0.6,"description":"Coverage from which a sentence counts as supported. Default 0.6."}}},"mimeType":"application/json","accepts":[{"scheme":"exact","network":"eip155:8453","payTo":"0x2880EdfFF13100677Bf97A3CBdF3Bc34771C4E5E","price":{"amount":"2000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","extra":{"asset":"USDC","network_name":"Base Mainnet","name":"USD Coin","version":"2","assetTransferMethod":"eip3009","eip712Domain":{"name":"USD Coin","version":"2","chainId":8453,"verifyingContract":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"}}},"maxTimeoutSeconds":300}]},{"url":"https://research.halowerk.com/v1/paper-search","method":"POST","name":"paper_search","description":"Searches OpenAlex and Crossref for publications and returns each with its DOI, authors and their affiliations, publication year, venue, abstract, citation count and, where one exists, a direct link to a legally free full text with the licence it is offered under. OpenAlex stores abstracts as an inverted word index rather than text; it is reconstructed here, because the raw structure is unusable. Results can be filtered by year and restricted to open access. Citation counts are a popularity measure, not a quality measure, and they lag: a paper published last month has few citations regardless of merit. Coverage differs by field — well indexed in the natural sciences and computer science, patchier in the humanities and for non-English work — so an absent paper is not evidence it does not exist.","summary":"Search academic publications by topic, author or DOI and get title, authors, abstract, citation count, venue and where an open-access full text is available.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"query":{"type":"string","maxLength":300,"description":"Search terms. Either this or doi."},"doi":{"type":"string","maxLength":200,"description":"Exact DOI. Either this or query."},"author":{"type":"string","maxLength":200,"description":"Restrict to an author name."},"from_year":{"type":"integer","minimum":1600,"maximum":2100,"description":"Earliest publication year."},"to_year":{"type":"integer","minimum":1600,"maximum":2100,"description":"Latest publication year."},"open_access_only":{"type":"boolean","default":false,"description":"Only publications with a free full text."},"sort":{"type":"string","enum":["relevance","citations","newest"],"default":"relevance","description":"Result ordering."},"limit":{"type":"integer","minimum":1,"maximum":25,"default":10,"description":"How many results."}}},"mimeType":"application/json","accepts":[{"scheme":"exact","network":"eip155:8453","payTo":"0x2880EdfFF13100677Bf97A3CBdF3Bc34771C4E5E","price":{"amount":"5000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","extra":{"asset":"USDC","network_name":"Base Mainnet","name":"USD Coin","version":"2","assetTransferMethod":"eip3009","eip712Domain":{"name":"USD Coin","version":"2","chainId":8453,"verifyingContract":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"}}},"maxTimeoutSeconds":300}]},{"url":"https://research.halowerk.com/v1/patent-search","method":"POST","name":"patent_search","description":"Queries the European Patent Office Linked Open Data endpoint, which is the only patent source still reachable without a key: PatentsView has been retired, and both EPO OPS and the USPTO Open Data Portal answer 403 without credentials. Coverage is therefore EP publications and this is stated in every response, because an empty result here proves only that no European publication exists, not that no patent does. Three search axes are offered and named in the schema: publication number, applicant name, and IPC class with an optional date range. Free text across all titles is deliberately absent, since that query runs into the endpoint timeout rather than returning a slow answer. Each hit carries its titles in all published languages, the abstract where present, applicants and inventors resolved from their vCard records into readable names rather than left as opaque identifiers, and the IPC classes. For a lookup by number the sibling publications of the same application are listd as well, which is where the one defensible status signal comes from: a B kind code means a granted specification exists. That is explicitly not the legal status. Whether a patent is in force today, has lapsed or was opposed lives in the register, which needs a key, so legal_status stays null with the reason attached instead of being inferred from a publication.","summary":"Search European patent publications by publication number, by applicant name or by IPC class and period, returning titles in every published language, abstract, applicants, inventors, classes, the publications of the same application and whether a granted specification exists.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"publication_number":{"type":"string","pattern":"^(EP)?\\s?\\d{6,8}$","description":"EP publication number, for example EP1000000 or 1000000. The precise axis."},"applicant":{"type":"string","minLength":3,"maxLength":80,"description":"Applicant name or part of it, matched case sensitively as it is written on the publication, for example Siemens."},"ipc":{"type":"string","pattern":"^[A-H]\\d{2}[A-Z]\\d{1,4}-\\d{2,6}$","description":"IPC class in EPO notation, for example B28B7-00. Combine with from/to."},"from":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Earliest publication date, ISO."},"to":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Latest publication date, ISO."},"limit":{"type":"integer","minimum":1,"maximum":25,"default":10,"description":"Maximum number of publications."}}},"mimeType":"application/json","accepts":[{"scheme":"exact","network":"eip155:8453","payTo":"0x2880EdfFF13100677Bf97A3CBdF3Bc34771C4E5E","price":{"amount":"5000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","extra":{"asset":"USDC","network_name":"Base Mainnet","name":"USD Coin","version":"2","assetTransferMethod":"eip3009","eip712Domain":{"name":"USD Coin","version":"2","chainId":8453,"verifyingContract":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"}}},"maxTimeoutSeconds":300}]},{"url":"https://research.halowerk.com/v1/tender-search","method":"POST","name":"tender_search","description":"Searches Tenders Electronic Daily, the EU procurement journal, and returns notices with buyer, title, place of performance, estimated value, procedure type and publication date, each linked to the full notice. Search runs on CPV codes because that is how TED is indexed — free text finds a fraction of what a category search does — and fifteen common categories are mapped to their codes so a caller need not know them. On deadlines, a measured limitation is stated rather than papered over: the search interface does not expose the submission deadline through its flat field set, so where it is absent days_left is null and the count of notices without one is reported; the deadline stands in the linked notice. Only notices published in the journal are covered, so procurement below the EU thresholds, which runs on national portals, is absent entirely.","summary":"Search EU public tenders by CPV category, country and publication window, with buyer, place of performance, procedure type and a direct link to each notice.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"category":{"type":"string","enum":["it","software","telekommunikation","bau","beratung","forschung","gesundheit","bildung","transport","energie","umwelt","sicherheit","moebel","fahrzeuge","medizintechnik"],"description":"Service category, mapped to its CPV code."},"cpv_code":{"type":"string","maxLength":12,"description":"Exact CPV code, if you know it. Overrides category."},"query":{"type":"string","maxLength":200,"description":"Additional free text, combined with the category."},"country":{"type":"string","minLength":2,"maxLength":2,"description":"Country of the buyer, ISO code."},"min_days_left":{"type":"integer","minimum":0,"maximum":365,"description":"Only notices with at least this many days until the deadline."},"published_since_days":{"type":"integer","minimum":1,"maximum":365,"default":90,"description":"Only notices published within this many days."},"limit":{"type":"integer","minimum":1,"maximum":25,"default":10,"description":"How many notices."}}},"mimeType":"application/json","accepts":[{"scheme":"exact","network":"eip155:8453","payTo":"0x2880EdfFF13100677Bf97A3CBdF3Bc34771C4E5E","price":{"amount":"5000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","extra":{"asset":"USDC","network_name":"Base Mainnet","name":"USD Coin","version":"2","assetTransferMethod":"eip3009","eip712Domain":{"name":"USD Coin","version":"2","chainId":8453,"verifyingContract":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"}}},"maxTimeoutSeconds":300}]},{"url":"https://research.halowerk.com/v1/dataset-discovery","method":"POST","name":"dataset_discovery","description":"Searches the official EU open data portal and returns datasets with what decides whether they are usable: the licence, classified by whether commercial reuse is allowed and what attribution or share-alike it demands. A dataset under a non-commercial licence is marked as unusable for a paid product rather than listd as if equivalent. Each result also carries its publisher, country, last modification date, the distribution formats available and how many there are, and direct links. Filter by format, country or a maximum age, and optionally hide everything that cannot be used commercially. The licence text comes from the portal and is not always the licence on the file itself; where nothing is declared it is reported as unknown, which means reuse is legally uncertain, not permitted.","summary":"Find open datasets on the EU data portal with the licence classified for commercial reuse, plus formats, update date and publisher.","inputSchema":{"type":"object","required":["query"],"additionalProperties":false,"properties":{"query":{"type":"string","minLength":2,"maxLength":200,"description":"Search terms, e.g. \"air quality\", \"energy consumption\"."},"format":{"type":"string","maxLength":20,"description":"Required distribution format, e.g. CSV, JSON, GEOJSON."},"country":{"type":"string","minLength":2,"maxLength":2,"description":"Publisher country, ISO code."},"commercial_use_only":{"type":"boolean","default":false,"description":"Hide datasets whose licence forbids commercial reuse."},"max_age_days":{"type":"integer","minimum":1,"maximum":7300,"description":"Only datasets modified within this many days."},"limit":{"type":"integer","minimum":1,"maximum":25,"default":10,"description":"How many results."}}},"mimeType":"application/json","accepts":[{"scheme":"exact","network":"eip155:8453","payTo":"0x2880EdfFF13100677Bf97A3CBdF3Bc34771C4E5E","price":{"amount":"5000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","extra":{"asset":"USDC","network_name":"Base Mainnet","name":"USD Coin","version":"2","assetTransferMethod":"eip3009","eip712Domain":{"name":"USD Coin","version":"2","chainId":8453,"verifyingContract":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"}}},"maxTimeoutSeconds":300}]},{"url":"https://research.halowerk.com/v1/web-archive","method":"POST","name":"web_archive","description":"Queries the Internet Archive for the captured versions of a URL and returns them with capture time, HTTP status, MIME type and content digest, oldest and newest first. Because consecutive captures share a digest when nothing changed, the versions where the content actually differed are marked — that is the list worth reading, not the raw capture log. A target date returns the nearest snapshot with the gap in days, which is what a citation of a page as it stood on a given day needs. Captures that returned an error at the time are separated from successful ones, so a run of 404s reveals when a page disappeared. The CDX index is the complete source but goes down regularly; when it does, the availability endpoint answers with the closest capture and the degraded state is reported rather than passed off as an empty history.","summary":"List archived versions of a URL with dates, status codes and content changes, and get the snapshot closest to any date you name.","inputSchema":{"type":"object","required":["url"],"additionalProperties":false,"properties":{"url":{"type":"string","maxLength":2000,"description":"The URL to look up."},"target_date":{"type":"string","maxLength":30,"description":"Find the snapshot closest to this date (YYYY-MM-DD or ISO)."},"from_date":{"type":"string","maxLength":10,"description":"Earliest capture to list (YYYY-MM-DD)."},"to_date":{"type":"string","maxLength":10,"description":"Latest capture to list (YYYY-MM-DD)."},"limit":{"type":"integer","minimum":1,"maximum":200,"default":25,"description":"How many captures to return."},"changes_only":{"type":"boolean","default":false,"description":"Only captures whose content differed from the previous one."},"include_errors":{"type":"boolean","default":false,"description":"Include captures that recorded an HTTP error."}}},"mimeType":"application/json","accepts":[{"scheme":"exact","network":"eip155:8453","payTo":"0x2880EdfFF13100677Bf97A3CBdF3Bc34771C4E5E","price":{"amount":"5000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","extra":{"asset":"USDC","network_name":"Base Mainnet","name":"USD Coin","version":"2","assetTransferMethod":"eip3009","eip712Domain":{"name":"USD Coin","version":"2","chainId":8453,"verifyingContract":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"}}},"maxTimeoutSeconds":300}]},{"url":"https://research.halowerk.com/v1/source-authority","method":"POST","name":"source_authority","description":"Scores a source along the dimensions that decide whether a claim can rest on it. Recency: how old the material is against how fast the field moves, because a five-year-old figure is fine in history and worthless in pricing. Directness: whether it reports its own research, official record or announcement, or relays someone else — every relay step loses detail and adds interpretation. Attribution: whether a named, identifiable author stands behind it. Publisher: what kind of organisation issued it, read from the domain and from what you supply. Conflict of interest: whether the publisher has a stake in the conclusion, which is the single most under-weighted factor in practice. The result is a score with every deduction itemised and the threshold it was judged against, so the verdict can be recomputed or disagreed with. It judges provenance, never truth: a well-attributed recent primary source can still be wrong.","summary":"Judge how much weight a source carries: recency, primary versus secondary, named authorship, publisher type and declared conflicts of interest.","inputSchema":{"type":"object","required":["url"],"additionalProperties":false,"properties":{"url":{"type":"string","maxLength":2000,"description":"The source URL. Not fetched — only parsed."},"title":{"type":"string","maxLength":500,"description":"Title of the piece."},"published_date":{"type":"string","maxLength":30,"description":"Publication date, ISO or YYYY-MM-DD."},"updated_date":{"type":"string","maxLength":30,"description":"Last update, if different."},"author":{"type":"string","maxLength":300,"description":"Named author or authors."},"publisher":{"type":"string","maxLength":300,"description":"Publishing organisation."},"is_original_research":{"type":"boolean","description":"Reports its own study with a method section."},"is_official_document":{"type":"boolean","description":"Official record, statute or regulator publication."},"is_press_release":{"type":"boolean","description":"Announcement by the acting party itself."},"cites_sources":{"type":"boolean","description":"Names its own sources."},"peer_reviewed":{"type":"boolean","description":"Went through peer review."},"funded_by":{"type":"string","maxLength":300,"description":"Who funded the work, if disclosed."},"publisher_has_stake":{"type":"boolean","description":"The publisher benefits commercially from the conclusion."},"topic_volatility":{"type":"string","enum":["static","slow","fast","realtime"],"default":"slow","description":"How quickly this subject goes out of date. static = history, realtime = prices."}}},"mimeType":"application/json","accepts":[{"scheme":"exact","network":"eip155:8453","payTo":"0x2880EdfFF13100677Bf97A3CBdF3Bc34771C4E5E","price":{"amount":"2000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","extra":{"asset":"USDC","network_name":"Base Mainnet","name":"USD Coin","version":"2","assetTransferMethod":"eip3009","eip712Domain":{"name":"USD Coin","version":"2","chainId":8453,"verifyingContract":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"}}},"maxTimeoutSeconds":300}]},{"url":"https://research.halowerk.com/v1/conflict-events","method":"POST","name":"conflict_events","description":"Searches global news coverage for protest, conflict and diplomatic activity in a region and returns the reporting with source counts, languages, countries of publication and the article links. Ranking is by breadth of coverage rather than by recency, because a story three outlets carry and one three hundred carry look identical in a raw feed, and the number of independent sources is the only signal available here for whether something is significant or merely recent. Language and publishing-country distribution are returned alongside, since a story carried only by outlets in one country is a different kind of finding from one carried across a dozen. The response states throughout that this measures coverage and not events: an increase means more is being written, not that more is happening, and coverage is systematically thinner for regions with fewer monitored outlets, so a quiet result from an under-covered region is not evidence of quiet. Article text is not returned, only metadata and links.","summary":"Retrieve protest, conflict and diplomatic reporting for a region and period, ranked by how many independent sources carry each story rather than by recency.","inputSchema":{"type":"object","required":["query"],"additionalProperties":false,"properties":{"query":{"type":"string","minLength":3,"maxLength":200,"description":"Search terms, e.g. protest pension reform."},"country":{"type":"string","minLength":2,"maxLength":2,"description":"Two-letter country code to restrict publishing country."},"timespan":{"type":"string","maxLength":6,"default":"7d","description":"Window like 24h, 7d, 4w, 3m."},"limit":{"type":"integer","minimum":5,"maximum":250,"default":60}}},"mimeType":"application/json","accepts":[{"scheme":"exact","network":"eip155:8453","payTo":"0x2880EdfFF13100677Bf97A3CBdF3Bc34771C4E5E","price":{"amount":"6000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","extra":{"asset":"USDC","network_name":"Base Mainnet","name":"USD Coin","version":"2","assetTransferMethod":"eip3009","eip712Domain":{"name":"USD Coin","version":"2","chainId":8453,"verifyingContract":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"}}},"maxTimeoutSeconds":300}]},{"url":"https://research.halowerk.com/v1/supply-chain-pulse","method":"POST","name":"supply_chain_pulse","description":"For each node you name — a port, a plant, a corridor, a supplier — the service counts reporting on five disruption themes over a recent window and compares it against the same term own longer baseline. Self-referential comparison is the design: Rotterdam and a regional port have entirely different normal reporting levels, so a fixed threshold is blind for one and a permanent alarm for the other, and only the ratio against a term own history means anything. Each finding carries the recent count, the baseline rate, the ratio, the theme that rose and links to the articles behind it, so a spike can be read rather than trusted. Themes are kept separate because a strike and a storm call for different responses. As everywhere on this source, what rises is coverage rather than events, and a node in a region with few monitored outlets can be badly disrupted with no signal here at all — stated rather than implied.","summary":"Detect unusual rises in reporting about strikes, port closures, border problems, weather and production halts for named supply chain nodes — measured against each term own baseline.","inputSchema":{"type":"object","required":["nodes"],"additionalProperties":false,"properties":{"nodes":{"type":"array","minItems":1,"maxItems":8,"items":{"type":"string","minLength":3,"maxLength":80},"description":"Named supply chain nodes, e.g. Port of Rotterdam, Suez Canal."},"themes":{"type":"array","maxItems":5,"items":{"type":"string","enum":["strike","port","border","weather","production"]}},"window":{"type":"string","maxLength":6,"default":"3d","description":"Recent window."},"baseline":{"type":"string","maxLength":6,"default":"4w","description":"Baseline period."},"sensitivity":{"type":"string","enum":["low","normal","high"],"default":"normal"}}},"mimeType":"application/json","accepts":[{"scheme":"exact","network":"eip155:8453","payTo":"0x2880EdfFF13100677Bf97A3CBdF3Bc34771C4E5E","price":{"amount":"7000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","extra":{"asset":"USDC","network_name":"Base Mainnet","name":"USD Coin","version":"2","assetTransferMethod":"eip3009","eip712Domain":{"name":"USD Coin","version":"2","chainId":8453,"verifyingContract":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"}}},"maxTimeoutSeconds":300}]},{"url":"https://research.halowerk.com/v1/controversy-pulse","method":"POST","name":"controversy_pulse","description":"Tracks how much is written about an organisation and in what tone, comparing a recent window against the same term own longer baseline, and returns both the volume ratio and the tone shift with the articles behind them. The framing is fixed and repeated in the response: this is an attention signal and not a judgement. A tone drop means more negative language is being used, not that something happened, and a product recall, a lawsuit and a critical opinion piece produce the same deflection. Tone itself is a machine estimate from word lists and measures the language of articles rather than the situation, which matters most for organisations whose ordinary coverage uses charged vocabulary. Volume and tone are reported separately because they move independently: a rise in volume with unchanged tone is interest, and a tone drop without volume change is a shift in framing among the same outlets. Links to the driving articles are included so the reader can look rather than infer.","summary":"Measure media volume and tone around an organisation against its own baseline — explicitly as an attention signal, never as a finding of fact.","inputSchema":{"type":"object","required":["organisation"],"additionalProperties":false,"properties":{"organisation":{"type":"string","minLength":2,"maxLength":120},"window":{"type":"string","maxLength":6,"default":"7d"},"baseline":{"type":"string","maxLength":6,"default":"8w"},"include_articles":{"type":"boolean","default":true}}},"mimeType":"application/json","accepts":[{"scheme":"exact","network":"eip155:8453","payTo":"0x2880EdfFF13100677Bf97A3CBdF3Bc34771C4E5E","price":{"amount":"6000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","extra":{"asset":"USDC","network_name":"Base Mainnet","name":"USD Coin","version":"2","assetTransferMethod":"eip3009","eip712Domain":{"name":"USD Coin","version":"2","chainId":8453,"verifyingContract":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"}}},"maxTimeoutSeconds":300}]},{"url":"https://research.halowerk.com/v1/narrative-velocity","method":"POST","name":"narrative_velocity","description":"Computes the growth of coverage for a topic between a recent window and a baseline, and reports the spread across languages and publishing countries alongside it. The spread is the more informative half: a topic exploding in one language is a national event, one rising simultaneously across eight languages is something else entirely, and a growth rate alone cannot tell them apart. The response gives the volume ratio, the number of languages and countries carrying the topic in each period, which languages are new since the baseline, and the concentration of coverage across countries. A topic whose growth comes entirely from additional outlets in one country is marked as such. Because the source measures coverage rather than events, acceleration here describes attention: a topic can grow quickly because it matters or because one large outlet picked it up and others followed, and the country and language spread is what separates those two.","summary":"Measure how fast a topic is growing and — the part that matters more — across how many languages and countries it is spreading.","inputSchema":{"type":"object","required":["topic"],"additionalProperties":false,"properties":{"topic":{"type":"string","minLength":3,"maxLength":200},"window":{"type":"string","maxLength":6,"default":"3d"},"baseline":{"type":"string","maxLength":6,"default":"4w"}}},"mimeType":"application/json","accepts":[{"scheme":"exact","network":"eip155:8453","payTo":"0x2880EdfFF13100677Bf97A3CBdF3Bc34771C4E5E","price":{"amount":"6000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","extra":{"asset":"USDC","network_name":"Base Mainnet","name":"USD Coin","version":"2","assetTransferMethod":"eip3009","eip712Domain":{"name":"USD Coin","version":"2","chainId":8453,"verifyingContract":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"}}},"maxTimeoutSeconds":300}]},{"url":"https://research.halowerk.com/v1/location-heatmap","method":"POST","name":"location_heatmap","description":"Returns the geographic places named in coverage of a topic, each with the number of articles mentioning it, the number of distinct sources, and coordinates where the source supplies them. The distinction the service is built on is between mention and occurrence: an article about a decision taken in Brussels affecting mining in Chile names both places, and reading the resulting map as an event map puts the decision in Chile and the mining in Brussels. Places are therefore ranked by how many independent sources mention them rather than by raw article count, since one outlet repeating a location across twenty pieces is one source and not twenty. Coverage is uneven by language and region as everywhere on this source, so a place with few monitored outlets appears small regardless of what happens there. Coordinates come from the source and are returned unmodified; where they are absent the place is still listd with its name rather than dropped.","summary":"Map which places are mentioned alongside a topic, weighted by article count and source diversity — as a mention map, explicitly not an event map.","inputSchema":{"type":"object","required":["topic"],"additionalProperties":false,"properties":{"topic":{"type":"string","minLength":3,"maxLength":200},"timespan":{"type":"string","maxLength":6,"default":"7d"},"limit":{"type":"integer","minimum":5,"maximum":200,"default":50}}},"mimeType":"application/json","accepts":[{"scheme":"exact","network":"eip155:8453","payTo":"0x2880EdfFF13100677Bf97A3CBdF3Bc34771C4E5E","price":{"amount":"6000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","extra":{"asset":"USDC","network_name":"Base Mainnet","name":"USD Coin","version":"2","assetTransferMethod":"eip3009","eip712Domain":{"name":"USD Coin","version":"2","chainId":8453,"verifyingContract":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"}}},"maxTimeoutSeconds":300}]},{"url":"https://research.halowerk.com/v1/patent-prior-art","method":"POST","name":"patent_prior_art","description":"Collects up to 15 recent EP publication candidates from a caller-supplied IPC class through the official EPO Linked Open Data endpoint, embeds concept and title/abstract text locally with nomic-embed-text, and returns the closest matches. The IPC scope prevents a misleading full-corpus keyword scan that times out at the source. Coverage is European publications only and candidate retrieval is not exhaustive. Similarity is a screening signal, not a novelty opinion, freedom-to-operate analysis or legal conclusion.","summary":"Embed a technical concept and semantically rank freshly published European patent candidates from a supplied IPC class in the EPO Linked Open Data corpus.","inputSchema":{"type":"object","required":["concept","ipc"],"additionalProperties":false,"properties":{"concept":{"type":"string","minLength":20,"maxLength":5000},"ipc":{"type":"string","pattern":"^[A-H]\\d{2}[A-Z]\\d{1,4}-\\d{2,6}$","description":"Required EPO-style IPC class such as B28B7-00; it defines the official candidate set before semantic ranking."},"published_since_days":{"type":"integer","minimum":7,"maximum":3650,"default":365},"limit":{"type":"integer","minimum":1,"maximum":15,"default":5}}},"mimeType":"application/json","accepts":[{"scheme":"exact","network":"eip155:8453","payTo":"0x2880EdfFF13100677Bf97A3CBdF3Bc34771C4E5E","price":{"amount":"15000","asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","extra":{"asset":"USDC","network_name":"Base Mainnet","name":"USD Coin","version":"2","assetTransferMethod":"eip3009","eip712Domain":{"name":"USD Coin","version":"2","chainId":8453,"verifyingContract":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"}}},"maxTimeoutSeconds":300}]}]}