/iloveapis I Love APIs html response /ip Get client ip as JSON /xml Get sample XML response /json Get sample JSON response /echo Returns request headers and body as JSON /user Greeting mesage with optional query parameter "user" /statuscode/:toReturn Returns the statusCode specified in the path parameter /auth Basic authentication. Use admin as username and secret as password /sse-events/:count? SSE events api which sends specific number of events before stream is closed. /sse-perf SSE events api for perf/regression testing. Streams events_count (default 20) normal events, each 'data: {"message":"Hello from the server! - ","ts":,"seq":<0-based idx>,"total":}', then (when final_marker=true, the default) one '[DONE]' sentinel event before res.end(). Optional back-compatible query params: events_rate (default 1, the lambda for the exponential inter-event delay, capped at 50s); min_bytes/max_bytes (default 0/250) give each normal event a random gibberish size in that range, so the stream is a mix of sizes (set max_bytes>16384 to span the HTTP/2 16KB DATA-frame boundary); large_event_bytes & large_event_count (both default 0=disabled) scatter exactly large_event_count events of large_event_bytes gibberish at RANDOM positions across the whole stream -- deterministic presence of >16KB events, random occurrence (the frame-boundary / large-then-small drop repro); burst_size (default 1) emits that many events back-to-back with ~0 delay before the next exponential delay (pile-up); final_marker=true|false toggles the [DONE] sentinel; seed= makes the ENTIRE stream (content, sizes, large-event positions, delays) deterministic -- the seed used is returned in the X-Sse-Perf-Seed response header (a fresh random one is generated and returned when seed is omitted), so any stream can be replayed byte-for-byte via ?seed=. Byte params cap at 1000000, counts at 100000. Malformed params return 400. /sse-echo SSE echo api. POST a multi-line data field; each line is streamed back as an SSE event whose data is a JSON string {"message":,"ts":}, with a send interval in between. Any ':' custom verb and query parameters in the URL are ignored. /bytes/:numBytesToReturn Returns random bytes of the specified size (0 <= size <= 2MB) /llm-judge Mock Gemini judge target for SGP perf testing. Responds (to any method/subpath, e.g. a generateContent POST) with a Gemini generateContent-shaped body whose parts[0].text is a scripted ALLOW/DENY verdict JSON, after a randomized LOG-NORMAL delay drawn via inverse-CDF sampling. Query params: profile=realistic|stress (default realistic); median & p95 in ms, or mu & sigma, to override the delay; maxDelayMs to cap it (default 30000); denyRate in [0,1] to weight the verdict mix (default 0.1); verdict=ALLOW|DENY to force a scripted verdict. Because a proxy under test may rebuild the URL and drop the query string, the verdict/delay can also be driven out-of-band via env vars: SGP_JUDGE_DENY_RATE (base deny probability), SGP_FORCE_ALLOW=1, SGP_FORCE_DENY=1, SGP_DENY_TOOL= (DENY only the named/positioned tool call, for deny-position sweeps), and SGP_JUDGE_DELAY_MS (fixed delay). Malformed query params return 400. /llm-target Mock governed LLM target for SGP perf testing. Responds (to any method/subpath, e.g. a generateContent POST) with a body whose scripted tool calls (NOT a verdict -- that's /llm-judge's job) mirror the SGP KinD governed-target mock, after a randomized LOG-NORMAL delay drawn via inverse-CDF sampling (the same delay mechanism as /llm-judge). Query params: format=gemini-vertex|openai|anthropic (default gemini-vertex) selects the response envelope -- gemini-vertex uses candidates[].content.parts[].functionCall, openai uses choices[].message.tool_calls[] (arguments as a JSON string), anthropic uses content[] tool_use blocks; profile=realistic|stress (default realistic); median & p95 in ms, or mu & sigma, to override the delay; maxDelayMs to cap it (default 30000); tool to select the first emitted tool call (book_flight (default) | get_weather), where book_flight trips the perf soak rule 'Do not allow booking flights'; count=N (integer 0..20, default 1) to emit N distinct tool calls (the first is 'tool', the rest are synthesized perf_tool_) so SGP makes one judge call per tool call, where count=0 models the governed LLM returning NO tool calls (a single plain-text answer in the selected format). Malformed params return 400.