# HALOWERK handelswerk > HALOWERK handelswerk liefert maschinenlesbare Ergebnisse gegen Zahlung nach x402. > Netz Base Mainnet, Zahlungsmittel USDC, Empfänger 0x2880EdfFF13100677Bf97A3CBdF3Bc34771C4E5E. ## So wird bezahlt 1. Route ohne Zahlungskopf aufrufen. Die Antwort ist 402 und trägt accepts, description und inputSchema. 2. Bedingungen mit einem x402-Client signieren. 3. Aufruf wiederholen, Nachweis im Kopf PAYMENT-SIGNATURE. Eine 402-Antwort kostet nichts und löst keine Arbeit aus. Scheitert die Arbeit, trägt die Antwort charged=false und es wird nicht abgerechnet. ## Endpunkte ### POST /v1/local-business Searches OpenStreetMap through Overpass for businesses of a chosen trade within a radius of a coordinate, and returns each with its name, address, opening hours, phone, website, and the distance from your point, sorted nearest first. Around thirty trades are mapped to the OSM tags that actually hold them, because OSM is indexed by tags and not by free text — a plain word search finds almost nothing there. Coverage is what volunteers have mapped: dense in cities, thin in rural areas, and a business absent here may simply never have been entered, which is stated rather than presented as an empty market. Overpass rejects requests over quota with a normal-looking empty answer; that case is detected and reported as an upstream condition instead of being passed off as no results. Data is ODbL and attribution is required on any reuse. - Preis: 0.005 USDC - MCP-Werkzeug: `local_business` - Eingabe: `["latitude","longitude","trade","radius_km","limit","require_name","open_now_only"]` ### POST /v1/landed-cost Computes what an import actually costs at the destination. The customs value is assembled from goods, freight and insurance on the chosen basis (CIF or FOB), duty is applied to it, and import VAT is applied to the duty-inclusive value, which is the ordering most calculations get wrong. Duty rates come from the live tariff: the UK Trade Tariff for GB and the USITC HTS for the US, with the commodity description returned so a wrong classification is visible. For EU destinations only import VAT is computed — TARIC publishes no usable API, and rather than invent a duty rate the duty component is returned as null and flagged as outstanding, which is the honest state of the data. Reduced VAT rates, preferential origin, anti-dumping measures and quotas are not applied; a customs broker is not replaced. - Preis: 0.002 USDC - MCP-Werkzeug: `landed_cost` - Eingabe: `["hs_code","destination_country","origin_country","goods_value","freight_cost","insurance_cost","currency","valuation_basis"]` ### POST /v1/vat-resolve Two answers in one call. Validation: the number is checked against the VIES service of the member state that issued it, with the consultation date returned. Treatment: given the supplier country, the customer country and whether the customer is a business, it states whether the supply is domestic with the local rate, an intra-community B2B supply where the reverse charge shifts the liability to the customer, a B2C supply taxed where the customer sits, or an export outside the EU. VIES returns the trader name and address masked as three dashes unless a requester VAT number is supplied; that placeholder is never passed through — the fields come back as null with the reason stated, because a dash string in a name field silently poisons whatever consumes it. Standard rates only, with their effective date: reduced rates depend on the goods and would be guesswork without a tariff code. Not tax advice. - Preis: 0.002 USDC - MCP-Werkzeug: `vat_resolve` - Eingabe: `["vat_number","supplier_country","customer_is_business","supply_type"]` ### POST /v1/invoice-audit Rebuilds an invoice from its lines and compares the result with the stated totals. Line by line it checks quantity times unit price against the line total, applies line and document discounts in the right order, groups the net amounts by tax rate and computes the tax per group, then compares net, tax and gross with what the document claims. All arithmetic runs in whole cents, because adding decimal amounts as floating point produces cent-level noise that reads like an error by the issuer when it is an error by the checker. Rounding differences up to one cent per tax group are reported separately from real discrepancies. It also checks the formal side: a due date before the invoice date, a tax rate that is not one of the country standard rates, a negative line without a credit-note marker, and a missing VAT number where the reverse charge is claimed. - Preis: 0.002 USDC - MCP-Werkzeug: `invoice_audit` - Eingabe: `["lines","stated_net","stated_tax","stated_gross","document_discount_pct","default_tax_rate","currency","invoice_date","due_date","reverse_charge","customer_vat_number","country"]` ### POST /v1/po-invoice-match Compares a purchase order against a delivery note and an invoice, line by line. Lines are paired by article number where both sides carry one, and otherwise by text similarity — a text pairing is marked as such with its similarity score, because quietly matching on similar wording is exactly how a wrong invoice gets approved. Per pair it reports the ordered, delivered and invoiced quantity, the agreed and invoiced unit price, and flags the four cases that matter: invoiced more than delivered, delivered more than ordered, a unit price above the order beyond your tolerance, and a line on the invoice with no counterpart at all. Tolerances for quantity and price are yours to set. All arithmetic runs in whole cents. It compares the documents you supply and knows nothing about what was actually agreed or received. - Preis: 0.002 USDC - MCP-Werkzeug: `po_invoice_match` - Eingabe: `["purchase_order","delivery_note","invoice","quantity_tolerance_pct","price_tolerance_pct","text_match_threshold","currency"]` ### POST /v1/gtin-resolve Looks up a barcode number across Open Food Facts and a general product database, returning product name, brand, category, packaging, quantity and images where present. The check digit is computed locally before anything is queried: an invalid number is a typo, and reporting it as not found would send the caller looking in the wrong place. The GS1 country prefix is decoded and labelled for what it is — where the number was issued, not where the product was made, a distinction that is routinely confused. A prefix in the 2 range is flagged as an in-store number that exists only at the retailer who assigned it and is registered nowhere. Sources are named per field so a food entry from the open database is distinguishable from a general catalogue entry. Coverage is uneven: food is well covered, general goods much less, and absence is not evidence the product does not exist. - Preis: 0.005 USDC - MCP-Werkzeug: `gtin_resolve` - Eingabe: `["gtin","sources","skip_checksum"]` ## Weitere Flächen - OpenAPI: https://handel.halowerk.com/openapi.json - Preise: https://handel.halowerk.com/pricing - x402-Manifest: https://handel.halowerk.com/.well-known/x402 - Bazaar: https://handel.halowerk.com/.well-known/x402/bazaar - MCP: https://handel.halowerk.com/mcp ## Missing a capability? If you looked for something this service does not offer, say so. One call, no payment, no sign-up, no account: POST https://bedarf.halowerk.com/capabilities/request Content-Type: application/json {"requested_capability": "what you would buy", "description": "the use case, one sentence", "callback_url": "optional - we call back once it exists"} Only requested_capability is required, 3 to 160 characters. Schema and status: https://bedarf.halowerk.com/openapi.json Submissions are held for review and are never published verbatim.