ToolAssay

Playtest

Playtest: Play a web game (URL or ZIP build) as on a PC and as on a weak phone: errors, missing files, black or frozen screen, load time, draw calls, textures, shader stalls, memory leaks, build weight, video and screenshots. Full schema: https://rengi.dev/v1/playtest/schema

Answeringour last check, 2026-10-31
1 of 1checks answered this week
909 msmedian answer time
$0.25listed price per call
$0.25price it asked us

Paid test badge: not yet. The checks above are free: we call the tool without paying and read the payment request it sends back. The Verified badge needs paid calls whose answers match the promised output, and nobody can buy a badge.

Endpoint

POST https://rengi.dev/v1/playtest/run

CategoryImage and media
Provider hostrengi.dev
Networkseip155:8453, solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp
Payment schemesexact
Self-reported calls, 30 days1 from 1 payers (the provider's figure, not ours)

Our checks, last 30 days

DayResultHTTPAskedTime
2026-10-31 valid payment request 402$0.25 909 ms

Example input (from the provider)

{
  "body": {
    "seconds": 30,
    "steps": [
      {
        "do": "wait",
        "ms": 1500
      },
      {
        "do": "key",
        "holdMs": 100,
        "key": "Enter"
      },
      {
        "do": "key",
        "holdMs": 1200,
        "key": "ArrowRight"
      }
    ],
    "zipUrl": "https://rengi.dev/samples/playtest-demo.zip"
  },
  "bodyType": "json",
  "method": "POST",
  "type": "http"
}

Promised output schema (from the provider)

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "input": {
      "additionalProperties": false,
      "properties": {
        "body": {
          "additionalProperties": false,
          "properties": {
            "monkey": {
              "default": true,
              "description": "After the steps, press random keys, clicks and taps until the pass ends.",
              "type": "boolean"
            },
            "profiles": {
              "default": [
                "desktop",
                "phone"
              ],
              "description": "desktop: 1280x720; phone: 390x844 touch screen with the CPU slowed 4x.",
              "items": {
                "enum": [
                  "desktop",
                  "phone"
                ],
                "type": "string"
              },
              "maxItems": 2,
              "minItems": 1,
              "type": "array"
            },
            "seconds": {
              "default": 30,
              "description": "Play time per profile, not counting loading.",
              "maximum": 45,
              "minimum": 10,
              "type": "integer"
            },
            "seed": {
              "default": 1,
              "description": "Random input seed, to repeat a run.",
              "maximum": 1000000,
              "minimum": 0,
              "type": "integer"
            },
            "steps": {
              "default": [],
              "description": "Optional scenario played first: wait, key, click, tap, type.",
              "items": {
                "anyOf": [
                  {
                    "additionalProperties": false,
                    "properties": {
                      "do": {
                        "const": "wait",
                        "type": "string"
                      },
                      "ms": {
                        "maximum": 20000,
                        "minimum": 0,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "do",
                      "ms"
                    ],
                    "type": "object"
                  },
                  {
                    "additionalProperties": false,
                    "properties": {
                      "do": {
                        "const": "key",
                        "type": "string"
                      },
                      "holdMs": {
                        "default": 100,
                        "maximum": 5000,
                        "minimum": 10,
                        "type": "integer"
                      },
                      "key": {
                        "description": "A key name like ArrowRight, Space, Enter, w.",
                        "maxLength": 20,
                        "minLength": 1,
                        "type": "string"
                      }
                    },
                    "required": [
                      "do",
                      "key"
                    ],
                    "type": "object"
                  },
                  {
                    "additionalProperties": false,
                    "description": "x, y: fractions of the viewport (0.5, 0.5 is the middle).",
                    "properties": {
                      "do": {
                        "const": "click",
                        "type": "string"
                      },
                      "x": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      },
                      "y": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      }
                    },
                    "required": [
                      "do",
                      "x",
                      "y"
                    ],
                    "type": "object"
                  },
                  {
                    "additionalProperties": false,
                    "properties": {
                      "do": {
                        "const": "tap",
                        "type": "string"
                      },
                      "x": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      },
                      "y": {
                        "maximum": 1,
                        "minimum": 0,
                        "type": "number"
                      }
                    },
                    "required": [
                      "do",
                      "x",
                      "y"
                    ],
                    "type": "object"
                  },
                  {
                    "additionalProperties": false,
                    "properties": {
                      "do": {
                        "const": "type",
                        "type": "string"
                      },
                      "text": {
                        "maxLength": 200,
                        "type": "string"
                      }
                    },
                    "required": [
                      "do",
                      "text"
                    ],
                    "type": "object"
                  }
                ]
              },
              "maxItems": 40,
              "type": "array"
            },
            "url": {
              "description": "Public URL of the game page.",
              "format": "uri",
              "type": "string"
            },
            "zip": {
              "description": "ZIP of a static web build as base64, up to about 35 MB (index.html at the root or one folder down; Unity WebGL builds work). Bigger builds: zipUrl, up to 50 MB.",
              "type": "string"
            },
            "zipUrl": {
              "format"

This page as JSON