{"openapi":"3.1.0","info":{"title":"HALOWERK gamingwerk","version":"1.0.0","description":"HALOWERK gamingwerk — bezahlte Endpunkte nach x402. Preise in USDC auf Base Mainnet.","contact":{"url":"https://gaming.halowerk.com/"}},"servers":[{"url":"https://gaming.halowerk.com"}],"paths":{"/v1/npc-dialogue-gen":{"post":{"operationId":"gamingwerk_npc_dialogue_gen","summary":"Composes a reproducible NPC dialogue beat from structured facts, intent, and tone.","description":"Selects and fills a small declared dialogue template using a caller-supplied seed, NPC name, intent, tone, and facts. It produces a reproducible writing prompt, not model-generated prose, lore verification, localization, or a complete conversation system.","tags":["gamingwerk"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["seed","npc_name","player_name","intent","tone","facts"],"additionalProperties":false,"properties":{"seed":{"type":"string","minLength":1,"maxLength":256,"description":"Stable seed used only for deterministic template selection."},"npc_name":{"type":"string","minLength":1,"maxLength":128},"player_name":{"type":"string","minLength":1,"maxLength":128},"intent":{"type":"string","enum":["greet","warn","offer_quest","trade","refuse"]},"tone":{"type":"string","enum":["warm","formal","wary","urgent","dry"]},"facts":{"type":"array","minItems":1,"maxItems":20,"items":{"type":"string","minLength":1,"maxLength":512,"description":"A fact that may be surfaced verbatim."}}}}}}},"responses":{"200":{"description":"Result","content":{"application/json":{"schema":{"type":"object","required":["method"],"properties":{"method":{"type":"string"}},"additionalProperties":true}}}},"400":{"description":"Eingabe ungültig, charged=false"},"402":{"description":"Zahlung erforderlich. Die Antwort trägt accepts, description und inputSchema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"429":{"description":"Zu viele unbezahlte Anfragen, charged=false"},"502":{"description":"Gegenstelle nicht erreichbar, charged=false"},"504":{"description":"Zeitbudget überschritten, charged=false"}}}},"/v1/asset-procedural":{"post":{"operationId":"gamingwerk_asset_procedural","summary":"Creates a reproducible parametric specification for a simple game asset.","description":"Maps a seed and asset category to declared silhouette, material, palette, symmetry, and detail parameters. The result is a machine-readable design specification only; it does not render geometry, textures, animation, or production-ready art.","tags":["gamingwerk"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["seed","asset_type","complexity"],"additionalProperties":false,"properties":{"seed":{"type":"string","minLength":1,"maxLength":256},"asset_type":{"type":"string","enum":["prop","vehicle","creature","building","weapon"]},"complexity":{"type":"integer","minimum":1,"maximum":10},"palette":{"type":"array","minItems":1,"maxItems":8,"uniqueItems":true,"items":{"type":"string","pattern":"^#[0-9a-fA-F]{6}$"}}}}}}},"responses":{"200":{"description":"Result","content":{"application/json":{"schema":{"type":"object","required":["method"],"properties":{"method":{"type":"string"}},"additionalProperties":true}}}},"400":{"description":"Eingabe ungültig, charged=false"},"402":{"description":"Zahlung erforderlich. Die Antwort trägt accepts, description und inputSchema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"429":{"description":"Zu viele unbezahlte Anfragen, charged=false"},"502":{"description":"Gegenstelle nicht erreichbar, charged=false"},"504":{"description":"Zeitbudget überschritten, charged=false"}}}},"/v1/economy-sink-sim":{"post":{"operationId":"gamingwerk_economy_sink_sim","summary":"Simulates a game-currency supply under declared daily sources and sinks.","description":"Iterates a deterministic daily stock-flow model with a fixed source, fixed sinks, and percentage-of-current-supply sinks. It clamps supply at zero and reports each day; it does not model player adaptation, market prices, distribution, or causal behavior.","tags":["gamingwerk"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["starting_supply","days","daily_source","sinks"],"additionalProperties":false,"properties":{"starting_supply":{"type":"number","minimum":0,"maximum":1000000000000000000},"days":{"type":"integer","minimum":1,"maximum":365},"daily_source":{"type":"number","minimum":0,"maximum":1000000000000000},"source_daily_growth_percent":{"type":"number","minimum":-100,"maximum":1000},"sinks":{"type":"array","minItems":1,"maxItems":100,"items":{"type":"object","required":["sink_id","fixed_daily_amount","daily_supply_percent"],"additionalProperties":false,"properties":{"sink_id":{"type":"string","minLength":1,"maxLength":128},"fixed_daily_amount":{"type":"number","minimum":0,"maximum":1000000000000000},"daily_supply_percent":{"type":"number","minimum":0,"maximum":100}}}}}}}}},"responses":{"200":{"description":"Result","content":{"application/json":{"schema":{"type":"object","required":["method"],"properties":{"method":{"type":"string"}},"additionalProperties":true}}}},"400":{"description":"Eingabe ungültig, charged=false"},"402":{"description":"Zahlung erforderlich. Die Antwort trägt accepts, description und inputSchema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"429":{"description":"Zu viele unbezahlte Anfragen, charged=false"},"502":{"description":"Gegenstelle nicht erreichbar, charged=false"},"504":{"description":"Zeitbudget überschritten, charged=false"}}}},"/v1/matchmaking-mmr":{"post":{"operationId":"gamingwerk_matchmaking_mmr","summary":"Forms reproducible two-player matches under rating-gap and latency limits.","description":"Enumerates feasible player pairs, ranks them by rating gap then worst latency, and greedily selects disjoint pairs. This is a transparent local pairing heuristic, not globally optimal team balancing, skill inference, anti-smurfing, or a live queue service.","tags":["gamingwerk"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["players","max_rating_gap","max_latency_ms"],"additionalProperties":false,"properties":{"players":{"type":"array","minItems":2,"maxItems":500,"items":{"type":"object","required":["player_id","rating","rating_uncertainty","latency_ms"],"additionalProperties":false,"properties":{"player_id":{"type":"string","minLength":1,"maxLength":128},"rating":{"type":"number","minimum":0,"maximum":10000},"rating_uncertainty":{"type":"number","minimum":0,"maximum":5000},"latency_ms":{"type":"number","minimum":0,"maximum":100000}}}},"max_rating_gap":{"type":"number","minimum":0,"maximum":10000},"max_latency_ms":{"type":"number","minimum":0,"maximum":100000}}}}}},"responses":{"200":{"description":"Result","content":{"application/json":{"schema":{"type":"object","required":["method"],"properties":{"method":{"type":"string"}},"additionalProperties":true}}}},"400":{"description":"Eingabe ungültig, charged=false"},"402":{"description":"Zahlung erforderlich. Die Antwort trägt accepts, description und inputSchema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"429":{"description":"Zu viele unbezahlte Anfragen, charged=false"},"502":{"description":"Gegenstelle nicht erreichbar, charged=false"},"504":{"description":"Zeitbudget überschritten, charged=false"}}}},"/v1/anti-cheat-scan":{"post":{"operationId":"gamingwerk_anti_cheat_scan","summary":"Screens gameplay telemetry for explicit impossible or extreme measurements.","description":"Evaluates caller-supplied telemetry samples against declared reaction-time, actions-per-second, movement-speed, and impossible-event rules. Flags are review signals only; the service does not identify software, inspect a device, establish intent, or justify an automatic ban.","tags":["gamingwerk"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["samples","minimum_human_reaction_ms","maximum_actions_per_second","speed_tolerance_percent","review_rule_count"],"additionalProperties":false,"properties":{"samples":{"type":"array","minItems":1,"maxItems":50000,"items":{"type":"object","required":["sample_id","reaction_ms","actions_per_second","observed_speed","permitted_speed","impossible_event"],"additionalProperties":false,"properties":{"sample_id":{"type":"string","minLength":1,"maxLength":128},"reaction_ms":{"type":"number","minimum":0,"maximum":600000},"actions_per_second":{"type":"number","minimum":0,"maximum":10000},"observed_speed":{"type":"number","minimum":0,"maximum":1000000000},"permitted_speed":{"type":"number","minimum":0,"maximum":1000000000},"impossible_event":{"type":"boolean"}}}},"minimum_human_reaction_ms":{"type":"number","minimum":0,"maximum":1000},"maximum_actions_per_second":{"type":"number","minimum":0,"maximum":10000},"speed_tolerance_percent":{"type":"number","minimum":0,"maximum":1000},"review_rule_count":{"type":"integer","minimum":1,"maximum":4}}}}}},"responses":{"200":{"description":"Result","content":{"application/json":{"schema":{"type":"object","required":["method"],"properties":{"method":{"type":"string"}},"additionalProperties":true}}}},"400":{"description":"Eingabe ungültig, charged=false"},"402":{"description":"Zahlung erforderlich. Die Antwort trägt accepts, description und inputSchema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"429":{"description":"Zu viele unbezahlte Anfragen, charged=false"},"502":{"description":"Gegenstelle nicht erreichbar, charged=false"},"504":{"description":"Zeitbudget überschritten, charged=false"}}}},"/v1/nft-metadata-mutate":{"post":{"operationId":"gamingwerk_nft_metadata_mutate","summary":"Applies a reproducible patch to structured asset metadata and hashes the result.","description":"Applies ordered set/remove attribute and set name/description operations to caller-supplied metadata, then hashes canonical output. It does not mint, sign, upload, mutate an on-chain token, preserve media, or verify ownership.","tags":["gamingwerk"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["asset_id","metadata","operations"],"additionalProperties":false,"properties":{"asset_id":{"type":"string","minLength":1,"maxLength":256},"metadata":{"type":"object","required":["name","description","attributes"],"additionalProperties":false,"properties":{"name":{"type":"string","minLength":1,"maxLength":256},"description":{"type":"string","minLength":0,"maxLength":4096},"attributes":{"type":"array","maxItems":1000,"items":{"type":"object","required":["key","value"],"additionalProperties":false,"properties":{"key":{"type":"string","minLength":1,"maxLength":128},"value":{"type":["string","number","boolean","null"]}}}}}},"operations":{"type":"array","minItems":1,"maxItems":1000,"items":{"type":"object","required":["op"],"additionalProperties":false,"properties":{"op":{"type":"string","enum":["set_attribute","remove_attribute","set_name","set_description"]},"key":{"type":"string","minLength":1,"maxLength":128},"value":{"type":["string","number","boolean","null"]}}}}}}}}},"responses":{"200":{"description":"Result","content":{"application/json":{"schema":{"type":"object","required":["method"],"properties":{"method":{"type":"string"}},"additionalProperties":true}}}},"400":{"description":"Eingabe ungültig, charged=false"},"402":{"description":"Zahlung erforderlich. Die Antwort trägt accepts, description und inputSchema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"429":{"description":"Zu viele unbezahlte Anfragen, charged=false"},"502":{"description":"Gegenstelle nicht erreichbar, charged=false"},"504":{"description":"Zeitbudget überschritten, charged=false"}}}},"/v1/gacha-rng-verify":{"post":{"operationId":"gamingwerk_gacha_rng_verify","summary":"Compares supplied gacha outcomes with declared probabilities using a chi-square test.","description":"Counts supplied outcomes, computes Pearson’s chi-square statistic, and estimates an upper-tail p-value with the Wilson-Hilferty normal approximation. It tests aggregate frequencies only; it cannot prove draw independence, seed fairness, code integrity, or manipulation, especially when expected counts are small.","tags":["gamingwerk"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["outcomes","draws"],"additionalProperties":false,"properties":{"outcomes":{"type":"array","minItems":2,"maxItems":100,"items":{"type":"object","required":["outcome","probability"],"additionalProperties":false,"properties":{"outcome":{"type":"string","minLength":1,"maxLength":128},"probability":{"type":"number","minimum":1e-9,"maximum":1}}}},"draws":{"type":"array","minItems":10,"maxItems":100000,"items":{"type":"string","minLength":1,"maxLength":128}},"alpha":{"type":"number","minimum":0.000001,"maximum":0.5}}}}}},"responses":{"200":{"description":"Result","content":{"application/json":{"schema":{"type":"object","required":["method"],"properties":{"method":{"type":"string"}},"additionalProperties":true}}}},"400":{"description":"Eingabe ungültig, charged=false"},"402":{"description":"Zahlung erforderlich. Die Antwort trägt accepts, description und inputSchema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"429":{"description":"Zu viele unbezahlte Anfragen, charged=false"},"502":{"description":"Gegenstelle nicht erreichbar, charged=false"},"504":{"description":"Zeitbudget überschritten, charged=false"}}}},"/v1/quest-generation":{"post":{"operationId":"gamingwerk_quest_generation","summary":"Builds a reproducible structured quest outline from theme and constraints.","description":"Selects objective framing, complication, and reward language from declared templates using a caller seed. It returns a bounded quest outline, not model-authored narrative, encounter balancing, unique lore, scripting, or playable content.","tags":["gamingwerk"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["seed","theme","location","target","difficulty","reward_unit","reward_base"],"additionalProperties":false,"properties":{"seed":{"type":"string","minLength":1,"maxLength":256},"theme":{"type":"string","minLength":1,"maxLength":128},"location":{"type":"string","minLength":1,"maxLength":128},"target":{"type":"string","minLength":1,"maxLength":128},"difficulty":{"type":"integer","minimum":1,"maximum":10},"reward_unit":{"type":"string","minLength":1,"maxLength":64},"reward_base":{"type":"number","minimum":0,"maximum":1000000000000}}}}}},"responses":{"200":{"description":"Result","content":{"application/json":{"schema":{"type":"object","required":["method"],"properties":{"method":{"type":"string"}},"additionalProperties":true}}}},"400":{"description":"Eingabe ungültig, charged=false"},"402":{"description":"Zahlung erforderlich. Die Antwort trägt accepts, description und inputSchema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"429":{"description":"Zu viele unbezahlte Anfragen, charged=false"},"502":{"description":"Gegenstelle nicht erreichbar, charged=false"},"504":{"description":"Zeitbudget überschritten, charged=false"}}}},"/v1/cross-game-bridge":{"post":{"operationId":"gamingwerk_cross_game_bridge","summary":"Maps bounded asset attributes between game schemas using explicit caller rules.","description":"Applies caller-supplied rename and numeric scale/offset rules to scalar attributes, optionally retaining unmapped fields, then hashes the canonical mapped payload. It does not transfer ownership, call a chain, validate either game, preserve semantics, or authorize asset use.","tags":["gamingwerk"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["source_game","target_game","asset_id","attributes","mappings","retain_unmapped"],"additionalProperties":false,"properties":{"source_game":{"type":"string","minLength":1,"maxLength":128},"target_game":{"type":"string","minLength":1,"maxLength":128},"asset_id":{"type":"string","minLength":1,"maxLength":256},"attributes":{"type":"array","maxItems":1000,"items":{"type":"object","required":["key","value"],"additionalProperties":false,"properties":{"key":{"type":"string","minLength":1,"maxLength":128},"value":{"type":["string","number","boolean","null"]}}}},"mappings":{"type":"array","maxItems":1000,"items":{"type":"object","required":["source_key","target_key"],"additionalProperties":false,"properties":{"source_key":{"type":"string","minLength":1,"maxLength":128},"target_key":{"type":"string","minLength":1,"maxLength":128},"numeric_scale":{"type":"number","minimum":-1000000000,"maximum":1000000000},"numeric_offset":{"type":"number","minimum":-1000000000000,"maximum":1000000000000}}}},"retain_unmapped":{"type":"boolean"}}}}}},"responses":{"200":{"description":"Result","content":{"application/json":{"schema":{"type":"object","required":["method"],"properties":{"method":{"type":"string"}},"additionalProperties":true}}}},"400":{"description":"Eingabe ungültig, charged=false"},"402":{"description":"Zahlung erforderlich. Die Antwort trägt accepts, description und inputSchema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"429":{"description":"Zu viele unbezahlte Anfragen, charged=false"},"502":{"description":"Gegenstelle nicht erreichbar, charged=false"},"504":{"description":"Zeitbudget überschritten, charged=false"}}}},"/v1/player-churn-risk":{"post":{"operationId":"gamingwerk_player_churn_risk","summary":"Scores a supplied aggregate engagement profile with a transparent churn-risk heuristic.","description":"Applies fixed coefficients to recency, session trend, playtime, support tickets, and recent purchases. It is an untrained scenario score, not an individualized prediction, psychological profile, causal model, or recommendation for manipulative retention.","tags":["gamingwerk"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["player_id","days_since_last_session","sessions_last_30_days","sessions_previous_30_days","average_session_minutes","support_tickets_last_30_days","purchases_last_90_days"],"additionalProperties":false,"properties":{"player_id":{"type":"string","minLength":1,"maxLength":128},"days_since_last_session":{"type":"number","minimum":0,"maximum":3650},"sessions_last_30_days":{"type":"integer","minimum":0,"maximum":10000},"sessions_previous_30_days":{"type":"integer","minimum":0,"maximum":10000},"average_session_minutes":{"type":"number","minimum":0,"maximum":1440},"support_tickets_last_30_days":{"type":"integer","minimum":0,"maximum":1000},"purchases_last_90_days":{"type":"integer","minimum":0,"maximum":10000}}}}}},"responses":{"200":{"description":"Result","content":{"application/json":{"schema":{"type":"object","required":["method"],"properties":{"method":{"type":"string"}},"additionalProperties":true}}}},"400":{"description":"Eingabe ungültig, charged=false"},"402":{"description":"Zahlung erforderlich. Die Antwort trägt accepts, description und inputSchema.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"429":{"description":"Zu viele unbezahlte Anfragen, charged=false"},"502":{"description":"Gegenstelle nicht erreichbar, charged=false"},"504":{"description":"Zeitbudget überschritten, charged=false"}}}}},"components":{"schemas":{"PaymentRequired":{"type":"object","properties":{"x402Version":{"type":"integer"},"error":{"type":"string"},"description":{"type":"string"},"inputSchema":{"type":"object"},"accepts":{"type":"array","items":{"type":"object"}}}}},"securitySchemes":{"x402":{"type":"apiKey","in":"header","name":"PAYMENT-SIGNATURE","description":"x402 Zahlungsnachweis"}}}}