{"x402Version":2,"service":"HALOWERK kartenwerk","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://karte.halowerk.com/v1/ev-charging","method":"POST","name":"ev_charging","description":"Queries OpenStreetMap for charging stations within a radius of a point and returns each with its position, distance, operator, network, connector types with their individual power ratings and socket counts, access restrictions, fee status, opening hours and whether authentication is required. Results are sorted nearest first and can be filtered to a minimum power or a required connector type, which is the question a vehicle actually has. The response carries a completeness figure per field, and that is the part that matters: OpenStreetMap records charging infrastructure very unevenly — the location is nearly always right, the power rating often absent, the socket count rarely present — and a list without that figure invites the reader to treat a missing value as a missing socket. Power ratings are read from the connector-specific tags where present and from the station-level tag otherwise, with the source of each value stated. Nothing here is a live availability check: OpenStreetMap describes what exists, not what is free right now, and no amount of tagging changes that.","summary":"List electric vehicle charging points around a coordinate with connector types, power ratings, operator, access and fee, sorted by distance — and with a per-field completeness figure so a missing rating is not read as an absent one.","inputSchema":{"type":"object","required":["lat","lon"],"additionalProperties":false,"properties":{"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180},"radius_km":{"type":"number","minimum":0.1,"maximum":50,"default":5},"min_power_kw":{"type":"number","minimum":0,"maximum":400,"description":"Only stations with at least this rating on any connector."},"connector":{"type":"string","enum":["type2","type2_combo","type2_cable","chademo","tesla_supercharger","tesla_destination","ccs","type1","schuko","cee_blue","cee_red"],"description":"Only stations offering this connector."},"limit":{"type":"integer","minimum":1,"maximum":200,"default":60}}},"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://karte.halowerk.com/v1/accessible-venue","method":"POST","name":"accessible_venue","description":"Searches OpenStreetMap for venues of a chosen kind near a coordinate and reports accessibility as the separate facts it actually consists of: step-free entrance, accessible toilet, lift, designated parking, plus entrance width and step count where recorded. They are kept apart because they are not interchangeable — a restaurant with a step-free entrance and no accessible toilet is usable for one person and not for another, and collapsing that into a single accessible flag would not be a simplification but a false statement. The second rule the response holds to is that unknown never becomes no. OpenStreetMap records yes, limited and no, and for most objects records nothing at all, so every field carries one of four states and the response counts how many venues have each. Filtering to fully accessible venues is possible and then explicitly excludes the unknowns, saying how many were dropped that way, because those are the ones most likely to be accessible but unmapped. Tagging reflects what a volunteer observed, often years ago, and is not a substitute for calling ahead.","summary":"Find venues around a point with wheelchair accessibility reported separately for entrance, toilet, lift and parking — and with unknown kept strictly distinct from no.","inputSchema":{"type":"object","required":["lat","lon"],"additionalProperties":false,"properties":{"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180},"radius_km":{"type":"number","minimum":0.1,"maximum":20,"default":2},"venue_type":{"type":"string","enum":["restaurant","cafe","bar","hotel","museum","pharmacy","doctor","hospital","bank","supermarket","toilets","station","townhall","library","theatre","cinema","any_shop"],"default":"restaurant"},"require":{"type":"array","maxItems":4,"items":{"type":"string","enum":["entrance","toilet","lift","parking"]},"description":"Only venues where these are recorded as yes. Unknowns are excluded and counted separately."},"limit":{"type":"integer","minimum":1,"maximum":200,"default":50}}},"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://karte.halowerk.com/v1/last-mile-access","method":"POST","name":"last_mile_access","description":"Examines the ways and barrier objects around a destination for anything that stops a vehicle getting there. Barriers such as gates, bollards, lift gates and cycle barriers are returned with their position, distance and whether they are locked. Ways carrying access tags are returned with the restriction and who it applies to, and physical limits — maximum height, weight, width and length — are compared against the vehicle dimensions you supply, so the answer is specific rather than a list to read yourself. Surfaces without load-bearing capacity, unpaved tracks and steps in the approach are reported separately, because they stop a heavy vehicle without any tag saying so. The response never states that the approach is clear: an unmapped bollard still stands there, so the wording is always that no restriction is recorded, together with a density figure for how thoroughly the surrounding ways are tagged at all. That figure is what tells you whether an empty result is informative or merely a blank area of the map.","summary":"Check the approach to a delivery point for barriers, bollards, access restrictions and height, weight and width limits — measured against your vehicle — and never report an empty result as clear passage.","inputSchema":{"type":"object","required":["lat","lon"],"additionalProperties":false,"properties":{"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180},"radius_m":{"type":"integer","minimum":50,"maximum":3000,"default":400,"description":"How far around the destination to look."},"vehicle_height_m":{"type":"number","minimum":0.5,"maximum":6},"vehicle_weight_t":{"type":"number","minimum":0.5,"maximum":60},"vehicle_width_m":{"type":"number","minimum":0.5,"maximum":4},"vehicle_length_m":{"type":"number","minimum":1,"maximum":25}}},"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://karte.halowerk.com/v1/parking-rules","method":"POST","name":"parking_rules","description":"Returns parking areas, street-side parking, garages and multi-storey car parks near a coordinate, each with what governs whether you may leave a vehicle there: access class, whether a fee applies and what it is where recorded, total and disabled-designated capacity, maximum stay, height restriction for covered facilities, surface, and whether it is a park-and-ride. Vehicle-specific restrictions for heavy goods vehicles, buses and caravans are reported separately, since the general capacity says nothing about whether a lorry may use it. Time rules come back in the raw OpenStreetMap syntax and are not evaluated into an is-it-open-now verdict — that syntax covers public holidays, school terms, seasons and exceptions, and a half-correct evaluation is worse than none because it produces a confident answer and a parking ticket. Completeness per field is reported for the same reason as everywhere in this hub: a missing fee tag is not free parking, it is an unmapped fee.","summary":"List parking facilities around a point with access, fee, capacity, maximum stay, vehicle restrictions and the raw opening-hours rule — deliberately not evaluated into an is-it-open-now answer.","inputSchema":{"type":"object","required":["lat","lon"],"additionalProperties":false,"properties":{"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180},"radius_km":{"type":"number","minimum":0.05,"maximum":10,"default":1},"free_only":{"type":"boolean","default":false,"description":"Only facilities recorded as fee=no. Excludes unmapped ones and says how many."},"min_capacity":{"type":"integer","minimum":1,"maximum":5000},"limit":{"type":"integer","minimum":1,"maximum":200,"default":60}}},"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://karte.halowerk.com/v1/bicycle-infrastructure","method":"POST","name":"bicycle_infrastructure","description":"Measures how well an area is equipped for cycling from four things that can actually be counted. Separation from motor traffic is the heaviest factor and is ranked explicitly: a physically separate track, a painted lane on the carriageway and a shared bus lane are three different levels of protection, the ranking used is returned with the result, and roads carrying cycle traffic with no provision at all are counted as the fourth level. Surface is assessed because a gravel path is not everyday cycling infrastructure regardless of what it is tagged as. Parking is counted by capacity and by type, since a wheel-bender stand and a covered secure enclosure are not comparable. Network gaps are identified as roads of a traffic class that would normally warrant provision but carry none, weighted by that class, which is the figure a planner asks for. The result is a grade with all components and thresholds returned. Length figures are computed from the way geometry and are approximate for very large areas; the sampled length and the area size are both stated so the reader can judge the resolution.","summary":"Score the cycling infrastructure of an area by separation from motor traffic, surface quality, parking provision and the gaps in the network — with the ranking of separation types stated rather than hidden in a formula.","inputSchema":{"type":"object","required":["lat","lon"],"additionalProperties":false,"properties":{"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180},"radius_km":{"type":"number","minimum":0.2,"maximum":5,"default":1.5}}},"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://karte.halowerk.com/v1/public-toilets","method":"POST","name":"public_toilets","description":"Returns public toilets within a radius of a coordinate, sorted by distance, each with what decides whether it is usable: whether a fee applies and how much, the opening hours in raw OpenStreetMap syntax, wheelchair accessibility, whether a baby changing table is present, whether it is unisex or separated, whether drinking water is available, and the operator. Filters for step-free access, no fee or a changing table are available and, when used, explicitly exclude the entries where the attribute is simply not recorded, reporting how many were dropped that way — those are the ones most likely to qualify but unmapped. Opening hours are returned verbatim and not evaluated into an open-now answer, because the syntax carries holidays and seasonal rules and a wrong answer here has an immediate physical cost. Toilets inside cafes, stations and shops are frequently not mapped as separate objects, so an empty result in a busy area usually means unmapped rather than absent, and the response says so instead of implying scarcity.","summary":"Find public toilets near a point with distance, fee, opening hours as recorded, wheelchair access, baby changing and drinking water — with unknown never rendered as no.","inputSchema":{"type":"object","required":["lat","lon"],"additionalProperties":false,"properties":{"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180},"radius_km":{"type":"number","minimum":0.05,"maximum":10,"default":1},"wheelchair_only":{"type":"boolean","default":false},"free_only":{"type":"boolean","default":false},"changing_table_only":{"type":"boolean","default":false},"limit":{"type":"integer","minimum":1,"maximum":100,"default":30}}},"mimeType":"application/json","accepts":[{"scheme":"exact","network":"eip155:8453","payTo":"0x2880EdfFF13100677Bf97A3CBdF3Bc34771C4E5E","price":{"amount":"4000","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://karte.halowerk.com/v1/parcel-locker","method":"POST","name":"parcel_locker","description":"Returns parcel lockers, packstations and staffed pickup points around a point, each with operator, brand, opening hours as recorded, access class, whether it is indoors, and the distance. The distinction the response insists on is between an automated locker and a staffed shop: in OpenStreetMap both frequently carry the same brand tag, and treating them as one thing promises round-the-clock collection and delivers shop hours. Each entry therefore carries an explicit kind, derived from the amenity and shop tags rather than from the brand. Filtering by operator is available and matches on operator and brand together, since which of the two carries the company name varies by region and mapper. Opening hours are returned verbatim without evaluation. Coverage for this category is notably uneven — lockers appear and are removed faster than they are mapped — so the age of the last edit is reported per entry, which is the closest available signal for whether an entry is still real.","summary":"Find parcel lockers and pickup points near a coordinate by operator, access and distance — keeping automated lockers strictly apart from staffed shops, because one is open around the clock and the other closes.","inputSchema":{"type":"object","required":["lat","lon"],"additionalProperties":false,"properties":{"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180},"radius_km":{"type":"number","minimum":0.1,"maximum":25,"default":3},"operator":{"type":"string","maxLength":60,"description":"Filter by operator or brand, matched case-insensitively against both."},"lockers_only":{"type":"boolean","default":false,"description":"Only automated lockers, excluding staffed shops."},"limit":{"type":"integer","minimum":1,"maximum":150,"default":40}}},"mimeType":"application/json","accepts":[{"scheme":"exact","network":"eip155:8453","payTo":"0x2880EdfFF13100677Bf97A3CBdF3Bc34771C4E5E","price":{"amount":"4000","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://karte.halowerk.com/v1/emergency-coverage","method":"POST","name":"emergency_coverage","description":"For a location, returns per facility type the nearest one with its distance and details, the count within the radius, and the density per square kilometre. Hospitals are additionally reported with whether they have an emergency department where that is tagged, since a hospital without one does not answer the question being asked. Defibrillators come with their access class and indoor flag, because one locked inside a closed office building at night is not available. The distances are straight-line and the response says so in every reading: three kilometres across a river with no bridge is further away than eight along the bypass, and anyone deriving a response time from these figures is using the wrong number. Genuine response-time coverage requires a routing engine and dispatch data, neither of which is available here, and inventing an estimate from straight-line distance would be a fabrication dressed as a service. A rural area with an empty result should be read as thin mapping as much as thin provision.","summary":"Report distance to and density of fire stations, ambulance stations, hospitals, clinics, pharmacies, defibrillators and police around a location — as straight-line distance, stated as such and never as a response time.","inputSchema":{"type":"object","required":["lat","lon"],"additionalProperties":false,"properties":{"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180},"radius_km":{"type":"number","minimum":0.5,"maximum":40,"default":10},"types":{"type":"array","maxItems":7,"items":{"type":"string","enum":["fire_station","ambulance_station","hospital","clinic","pharmacy","defibrillator","police"]},"description":"Which facility types to include. All by default."}}},"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://karte.halowerk.com/v1/quiet-site","method":"POST","name":"quiet_site","description":"Builds a noise context for a site from what surrounds it. Roads within the radius are weighted by class, by recorded speed limit and lane count where present, and by distance with a falloff, because a motorway at eight hundred metres and a residential street at twenty are different problems. Railways are counted separately with their usage class, since freight lines at night dominate what people actually complain about. Airports, industrial land use, and noisy amenities such as nightclubs and shooting ranges are reported as named contributors rather than folded into the number, so the reason for a score is always visible. The result is a band from very quiet to very noisy with every weight and threshold returned. This is a proxy and the response says so in the strongest terms available: nothing is measured, no decibel value is produced, and it does not replace an acoustic survey or an official noise map under the Environmental Noise Directive. What it answers is the question that comes before a survey — is this site worth looking at more closely, and what would the surveyor be looking for.","summary":"Assess the noise exposure of a location from its surroundings — road class, speed limit, lane count, distance, railways, airports and noisy land uses — explicitly as a proxy for screening, never as a measurement.","inputSchema":{"type":"object","required":["lat","lon"],"additionalProperties":false,"properties":{"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180},"radius_m":{"type":"integer","minimum":100,"maximum":3000,"default":800}}},"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://karte.halowerk.com/v1/emission-zone","method":"POST","name":"emission_zone","description":"Looks for low-emission zones, congestion charge areas and access-restricted areas around a coordinate and reports each with its type, the vehicle classes it restricts where tagged, the operator, and the distance from your point. Zones are matched by the tags actually used for this in OpenStreetMap, including boundary relations and landuse areas carrying emission tags, and the response lists which tag produced each hit so a questionable match can be judged. The warning is the product here as much as the result: coverage of these zones in OpenStreetMap is incomplete and inconsistent. Some cities are mapped carefully, many are not mapped at all, and the tagging conventions have changed over time. A negative result therefore means that no zone is recorded in OpenStreetMap for this location, which is not the same as no zone existing, and the response says this in the result field itself rather than in a footnote. For any decision carrying a fine, the municipal authority is the only source that settles it, and the response names that rather than implying it has answered the question.","summary":"Check whether a point or route segment lies inside a low-emission, congestion or restricted-access zone as recorded in OpenStreetMap — with an explicit statement that a negative result is not clearance.","inputSchema":{"type":"object","required":["lat","lon"],"additionalProperties":false,"properties":{"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180},"radius_km":{"type":"number","minimum":0.1,"maximum":25,"default":5,"description":"How far around the point to look for zones."}}},"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://karte.halowerk.com/v1/port-congestion","method":"POST","name":"port_congestion","description":"Reports what actually moves through a European port and how that developed, from the quarterly Eurostat port statistics covering 837 ports, addressable by name or by UN/LOCODE. Throughput is given per quarter split into inbound and outbound, with the imbalance between the two, the change against the same quarter a year earlier, and the direction over the whole observed window. When coordinates are supplied, the berths, cranes, terminals and quays recorded in OpenStreetMap around that point are counted as an indication of the handling capacity behind those tonnes. The endpoint is explicit about what it is not, because its name promises otherwise: it measures no waiting times and no ships at anchor, since that requires AIS and AIS is not available without a paid feed. More importantly it states in every response how old the newest figure is, because these statistics lag by two to three quarters, so the answer describes the load a port carried last year and says nothing about the queue outside it today. Both limits are carried as fields rather than footnotes, and the congestion assessment names the basis it rests on instead of implying a live measurement.","summary":"Freight throughput of a European seaport by quarter, split inbound and outbound, with the year-on-year direction, the imbalance between the two, an explicit statement of how many quarters the statistics lag, and optionally the loading infrastructure recorded in OpenStreetMap.","inputSchema":{"type":"object","required":["port"],"additionalProperties":false,"properties":{"port":{"type":"string","minLength":3,"maxLength":60,"description":"Port name or UN/LOCODE, for example Hamburg, Rotterdam or DEHAM."},"quarters":{"type":"integer","minimum":4,"maximum":20,"default":8,"description":"How many quarters of history to return."},"lat":{"type":"number","minimum":-90,"maximum":90,"description":"Optional: adds the OpenStreetMap handling infrastructure around this point."},"lon":{"type":"number","minimum":-180,"maximum":180,"description":"Belongs with lat."},"radius_km":{"type":"number","minimum":0.5,"maximum":25,"default":6,"description":"Radius for the infrastructure count."}}},"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://karte.halowerk.com/v1/restricted-route","method":"POST","name":"restricted_route","description":"Collects the physical and legal restrictions recorded in OpenStreetMap within a corridor around the straight line between two points, or around a single point, and decides for each one whether it stops the vehicle described in the request. The work is in reading the values. OpenStreetMap carries a height limit as a bare number, with a comma, with a unit, or in feet and inches, and it also carries none and default, which are statements about the law rather than measurements: none means no limit is posted, default means the statutory limit applies and no figure is recorded. Reading default as zero would close an open road and skipping it would hide it, so unreadable and non-numeric values get their own state and are counted separately from the ones that clear or block. Access tags are treated the same way: a lorry tagged destination or delivery is bound to the purpose of the journey, which this endpoint cannot know and therefore does not decide, while no and private do block. This is not a routing engine and the response repeats that in its own result field: a real road route may avoid restrictions listed here and may meet others that are not, so a clear answer is a statement about what is recorded in a corridor, never clearance to drive. Coverage in OpenStreetMap is uneven, so a missing restriction means nobody mapped it, not that the road is free.","summary":"Height, weight, width, length and axle-load limits plus lorry and hazardous-goods access rules recorded along a corridor, each judged against the vehicle you describe, saying which ones actually stop it and which values cannot be read as a number at all.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"from":{"type":"object","required":["lat","lon"],"additionalProperties":false,"properties":{"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180}},"description":"Start of the corridor."},"to":{"type":"object","required":["lat","lon"],"additionalProperties":false,"properties":{"lat":{"type":"number","minimum":-90,"maximum":90},"lon":{"type":"number","minimum":-180,"maximum":180}},"description":"End of the corridor. Without it, from is treated as a single point."},"corridor_km":{"type":"number","minimum":0.1,"maximum":10,"default":1,"description":"Half width of the corridor, or the radius around a single point."},"vehicle":{"type":"object","additionalProperties":false,"description":"The vehicle to judge the restrictions against. Anything omitted is not judged.","properties":{"height_m":{"type":"number","minimum":0.5,"maximum":10},"width_m":{"type":"number","minimum":0.5,"maximum":8},"length_m":{"type":"number","minimum":1,"maximum":40},"weight_t":{"type":"number","minimum":0.1,"maximum":250},"axleload_t":{"type":"number","minimum":0.1,"maximum":30},"hazmat":{"type":"boolean","description":"Carrying dangerous goods."}}}}},"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://karte.halowerk.com/v1/elevation-profile","method":"POST","name":"elevation_profile","description":"Takes a list of coordinates and returns the elevation at each, the distance and gradient between consecutive points, total ascent and descent, the steepest ramp with the segment it belongs to, and the mean gradient over the whole line. An optional resample interval inserts intermediate points along the great circle between the given ones, which is what makes a steepest-ramp figure meaningful on a route described by a handful of corners. The data is Copernicus DEM GLO-30, free for commercial use and read straight from the AWS Open Data bucket over HTTP range requests, so only the blocks actually needed are fetched rather than a local copy of the dataset. Four limits are stated in every answer rather than buried. It is a surface model, not a terrain model: over forest the measurement is the tree canopy and over built-up ground the roof, a difference that runs to twenty or forty metres in central Europe, so a profile for a path under trees is not what this returns. The grid is 30 metres, so anything between grid points is bilinearly interpolated and not measured, and a narrow cutting or embankment can disappear entirely between two samples. Water surfaces and voids carry fill values in the dataset, and those come back as null with the reason and the raw value, never as an elevation of zero — and where a coordinate falls on open sea there is no tile at all, which is reported as such. Ascent and descent are summed only over segments where both ends have a real measurement, and the number of segments skipped for that reason is returned, because a total over an incomplete profile is worth less than the knowledge that it is incomplete. Attribution is required when the result is used: Copernicus DEM, produced using EU data.","summary":"Returns an elevation profile along a list of coordinates from Copernicus DEM GLO-30 — elevation per point, total ascent and descent, the steepest ramp with its position, and the mean gradient — reading only the needed bytes of each tile over HTTP range requests.","inputSchema":{"type":"object","required":["points"],"additionalProperties":false,"properties":{"points":{"type":"array","minItems":2,"maxItems":300,"description":"The line, in order. At least two coordinates.","items":{"type":"object","required":["lat","lon"],"additionalProperties":false,"properties":{"lat":{"type":"number","minimum":-90,"maximum":90,"description":"Latitude, WGS 84."},"lon":{"type":"number","minimum":-180,"maximum":180,"description":"Longitude, WGS 84."},"label":{"type":"string","maxLength":80,"description":"Optional name, echoed back."}}}},"resample_m":{"type":"number","minimum":10,"maximum":10000,"description":"Insert intermediate points every this many metres along each segment. Without it only the given points are sampled. Billing follows the resulting sample count, capped at 300."},"interpolate":{"type":"boolean","default":true,"description":"Bilinear interpolation between the four surrounding grid values. Off returns the nearest grid value unchanged."},"include_points":{"type":"boolean","default":true,"description":"Return the per-point list. Off returns only the summary figures."}}},"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://karte.halowerk.com/v1/tides","method":"POST","name":"tides","description":"Returns tide predictions for a NOAA CO-OPS station: every high and low water in the window with its time and height above datum, the range between them, and which extreme comes next with the time remaining. Where the station also measures, the observed water level is fetched and compared with the prediction — wind and air pressure routinely push the real level away from the astronomical forecast, and that residual is the figure that matters for anyone near a limit, so it is returned rather than left implicit. A coordinate is resolved to the nearest station and the distance is reported, because a station 80 km away describes a different piece of coast. Coverage is United States coasts and territories only: NOAA does not measure the North Sea, the Baltic or the Mediterranean, and for a coordinate outside coverage the answer says so instead of returning a distant station as if it fitted.","summary":"High and low tide times and heights for a NOAA station or the nearest one to a coordinate, with the measured water level and how far it currently departs from prediction.","inputSchema":{"type":"object","additionalProperties":false,"properties":{"station":{"type":"string","maxLength":20,"description":"NOAA station id, e.g. 8454000. Either this or a coordinate."},"latitude":{"type":"number","minimum":-90,"maximum":90,"description":"Latitude; the nearest station is used."},"longitude":{"type":"number","minimum":-180,"maximum":180,"description":"Longitude."},"days":{"type":"integer","minimum":1,"maximum":7,"default":2,"description":"How many days of predictions."},"datum":{"type":"string","enum":["MLLW","MSL","MHW","NAVD"],"default":"MLLW","description":"Vertical datum heights are given against."},"units":{"type":"string","enum":["metric","english"],"default":"metric","description":"metric = metres, english = feet."},"include_observed":{"type":"boolean","default":true,"description":"Also fetch the measured level and compare it with the prediction."},"max_station_distance_km":{"type":"number","minimum":1,"maximum":500,"default":100,"description":"Refuse a coordinate whose nearest station is further away than this."}}},"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://karte.halowerk.com/v1/trip-metrics","method":"POST","name":"trip_metrics","description":"Takes an ordered list of positions with timestamps, optionally carrying the battery state of charge at each fix, and returns what a fleet operator asks of a trace: total distance over ground, how much of the elapsed time the vehicle was moving and how much it stood, each individual stop with its position and duration, the mean and maximum speed, and — where a battery capacity is supplied — the energy drawn and the consumption per kilometre. Nothing is fetched: the endpoint queries no map, no road network and no external service, so the same payload always yields the same numbers and no third-party outage can affect the result. Segments are classified before they are summed. A segment whose implied speed exceeds the plausibility limit is rejected rather than averaged in, because one bad fix in a tunnel otherwise adds kilometres that were never driven, and each rejection is returned with its index and the reason so the caller can see what was dropped instead of guessing why the total looks short. A segment with a repeated timestamp is treated the same way. Idle time is time below the standing-speed threshold; a stop is a run of such time that lasts at least the minimum stop duration, which is what separates a traffic light from a delivery. Distance is great-circle distance between consecutive fixes and is therefore a lower bound on the driven distance: the trace is not matched to a road network, so a curve sampled every two minutes is cut across. Consumption is derived from the reported state of charge, not measured, so it carries every error the vehicle reporting carries, and where the state of charge rises the endpoint reports the recovered share separately rather than netting it off and calling the difference consumption. Diagnostic trouble codes are deliberately out of scope in both directions: the authoritative code list is licensed, and a home-made translation would be either wrong or a licence breach.","summary":"Turns a submitted GPS trace with timestamps and battery state of charge into trip metrics — distance, moving and idle time, the individual stops, and energy use per kilometre — computed only from the payload, with every implausible segment named rather than silently averaged away.","inputSchema":{"type":"object","required":["points"],"additionalProperties":false,"properties":{"points":{"type":"array","minItems":2,"maxItems":5000,"description":"The trace, in chronological order. At least two fixes.","items":{"type":"object","required":["lat","lon","time"],"additionalProperties":false,"properties":{"lat":{"type":"number","minimum":-90,"maximum":90,"description":"Latitude, WGS 84."},"lon":{"type":"number","minimum":-180,"maximum":180,"description":"Longitude, WGS 84."},"time":{"type":"string","minLength":4,"maxLength":40,"description":"ISO 8601 timestamp of the fix. Must not go backwards from one fix to the next."},"soc_percent":{"type":"number","minimum":0,"maximum":100,"description":"Battery state of charge at this fix, in percent. Optional, and may be present on only some fixes."}}}},"stop_speed_kmh":{"type":"number","minimum":0,"maximum":30,"default":2,"description":"At or below this speed a segment counts as standing."},"stop_min_s":{"type":"integer","minimum":10,"maximum":86400,"default":120,"description":"Minimum duration of standing time before it is reported as a stop."},"battery_capacity_kwh":{"type":"number","minimum":0.1,"maximum":1000,"description":"Usable battery capacity. Without it, energy is reported in percent of charge only, never in kWh."},"max_speed_kmh":{"type":"number","minimum":1,"maximum":400,"default":250,"description":"Plausibility limit. A segment implying more than this is rejected instead of summed."}}},"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://karte.halowerk.com/v1/flood-exposure","method":"POST","name":"flood_exposure","description":"Returns the geometric facts that sit underneath any flood question, each with the source that produced it and the limit that applies to it. The first is height above water: the nearest watercourse or water body mapped in OpenStreetMap is located, the closest point on its geometry is computed rather than the distance to its centre, and the elevation difference between that point and the queried coordinate is read from Copernicus DEM GLO-30. The second is the nearest stream gauge from the USGS site service, with its distance, its identifier so the reading itself can be fetched separately, and the height difference measured in the same elevation model so the two figures are comparable. The third is a depression scan: a square grid is sampled around the point and every cell lying below all eight of its neighbours is reported with its depth below the lowest rim, which is what distinguishes a hollow that collects water from a slope that sheds it. What the response refuses to do is the point of it. There is no hazard class, no return period, no probability and no statement usable for insurance, lending or valuation, because those are official or expert findings and a derived number dressed up as one would be worse than no answer. The limits are named in the payload, not in a footnote. The elevation model is a surface model, so over forest and buildings the measurement is the canopy or the roof rather than the ground, and it is a thirty metre grid, so a flood wall, a levee or a narrow ditch can fall between two samples and never appear. Water surfaces carry fill values that come back as null with the reason rather than as an elevation of zero. Watercourse coverage is volunteer-contributed, so an empty result means nothing is mapped here, not that no water exists. Gauge coverage comes from the United States Geological Survey and therefore stops at the borders of the United States, which is reported as a coverage limit rather than as an absence of gauges. Where a source is slow or unavailable its section returns unavailable with the reason and the rest of the answer still stands.","summary":"Measures three checkable geometry figures for a coordinate — its height above the nearest mapped watercourse, the distance and height difference to the nearest stream gauge, and the terrain depressions around it — and states in the response itself that this is not a flood hazard map and carries no probability.","inputSchema":{"type":"object","required":["lat","lon"],"additionalProperties":false,"properties":{"lat":{"type":"number","minimum":-90,"maximum":90,"description":"Latitude, WGS 84."},"lon":{"type":"number","minimum":-180,"maximum":180,"description":"Longitude, WGS 84."},"water_radius_km":{"type":"number","minimum":0.2,"maximum":3,"default":1.5,"description":"How far around the point to look for watercourses and water bodies. Kept small on purpose: full geometry is fetched so the closest point on the feature can be computed, and a wide box does not fit the time budget."},"gauge_radius_km":{"type":"number","minimum":1,"maximum":25,"default":10,"description":"How far around the point to look for USGS stream gauges."},"sink_scan_radius_m":{"type":"number","minimum":100,"maximum":2000,"default":500,"description":"Half-width of the square grid sampled for terrain depressions around the point."}}},"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://karte.halowerk.com/v1/airspace-check","method":"POST","name":"airspace_check","description":"Combines coordinate-level current weather from Open-Meteo, nearby worldwide METAR observations and worldwide SIGMETs from the U.S. Aviation Weather Center, official FAA TFR NOTAM polygons with time and vertical limits, plus broader NOTAMs when an authorized official API is configured. FAA TFR coverage is reported separately from full NOTAM coverage. Missing coverage remains unknown rather than falsely clear. This is a screening result, not flight authorization; local UAS zones, operator obligations and visual inspection remain outside the endpoint.","summary":"Check aviation weather, official FAA TFR NOTAM polygons and configured full-NOTAM coverage around exact 3D coordinates, returning a conservative machine-readable drone-flight advisory.","inputSchema":{"type":"object","required":["latitude","longitude","altitude_m"],"additionalProperties":false,"properties":{"latitude":{"type":"number","minimum":-90,"maximum":90},"longitude":{"type":"number","minimum":-180,"maximum":180},"altitude_m":{"type":"number","minimum":0,"maximum":20000},"altitude_reference":{"type":"string","enum":["AGL","MSL"],"default":"AGL"},"radius_km":{"type":"number","minimum":1,"maximum":100,"default":10},"at":{"type":"string","format":"date-time","description":"UTC time to screen; current time is used when omitted."}}},"mimeType":"application/json","accepts":[{"scheme":"exact","network":"eip155:8453","payTo":"0x2880EdfFF13100677Bf97A3CBdF3Bc34771C4E5E","price":{"amount":"8000","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}]}]}