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
| Category | Image and media |
|---|---|
| Provider host | rengi.dev |
| Networks | eip155:8453, solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp |
| Payment schemes | exact |
| Self-reported calls, 30 days | 1 from 1 payers (the provider's figure, not ours) |
Our checks, last 30 days
| Day | Result | HTTP | Asked | Time |
|---|---|---|---|---|
| 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"