P2P Calculator REST API

Production endpoint hosted at www.promptbox.cn/api/p2p.php. This API computes P2P bandwidth and related metrics used in display/TCON planning.

Auth: None Format: JSON CORS: Enabled Rate limits: None (be polite) Version: 1.0

Base URL #

https://www.promptbox.cn/api/p2p.php

The API is a single-file router using PATH_INFO. Append paths like /health or /calculate.

GET  https://www.promptbox.cn/api/p2p.php/health
POST https://www.promptbox.cn/api/p2p.php/calculate

Tip (Apache/Nginx): ensure PATH_INFO is forwarded so that trailing segments are visible to the script.

Concepts #

rawBandwidthGbps = hRes * vRes * refRate * bpp * 1.18125e-9
p2pBandwidthGbps = ceil(rawBandwidthGbps * 10) / 10

numDrivers = ceil((hRes * 3) / (numChannels * muxLevel))
p2pPairs   = numDrivers * pairsPerPort

rawSpeedPerPairGbps = p2pBandwidthGbps / p2pPairs
speedPerPairGbps    = ceil(rawSpeedPerPairGbps * 10) / 10

Endpoints #

GET /health

Lightweight health check.

Query / BodyNone
Response200 OK JSON: { "status":"ok", "time":"<ISO 8601 UTC>" }
Example
curl -s https://www.promptbox.cn/api/p2p.php/health
{
  "status": "ok",
  "time": "2025-01-01T12:34:56Z"
}

POST /calculate

Compute P2P bandwidth, number of drivers, pairs, and speed per pair.

Request

Headers Content-Type: application/json
JSON Body
{
  "hRes": number,          // horizontal resolution (e.g., 1920) > 0
  "vRes": number,          // vertical resolution (e.g., 1200) > 0
  "refRate": number,       // refresh rate Hz (e.g., 60) > 0
  "numChannels": number,   // total source channels (e.g., 1440) > 0
  "pairsPerPort": number,  // P2P pairs per port (e.g., 2) > 0
  "muxLevel": number       // muxing factor (1, 2, or 3) > 0
}

Response

Status 200 OK on success
400 Bad Request for validation errors
405 Method Not Allowed wrong HTTP verb
404 Not Found wrong path
Body (success)
{
  "inputs": {
    "hRes": number,
    "vRes": number,
    "refRate": number,
    "numChannels": number,
    "pairsPerPort": number,
    "muxLevel": number,
    "bpp": 24
  },
  "results": {
    "p2pBandwidth_gbps": "number (1dp, rounded up)",
    "numDrivers": number,
    "p2pPairs": number,
    "speedPerPair_gbps": "number (1dp, rounded up)"
  },
  "intermediates": {
    "rawBandwidth_gbps": number,
    "rawSpeedPerPair_gbps": number
  }
}

Example Requests

cURL

curl -s -X POST https://www.promptbox.cn/api/p2p.php/calculate \
  -H 'Content-Type: application/json' \
  -d '{
        "hRes": 1920,
        "vRes": 1200,
        "refRate": 60,
        "numChannels": 1440,
        "pairsPerPort": 2,
        "muxLevel": 1
      }'

HTTPie

http POST https://www.promptbox.cn/api/p2p.php/calculate \
  hRes:=1920 vRes:=1200 refRate:=60 numChannels:=1440 pairsPerPort:=2 muxLevel:=1

Example Success Response

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8

{
  "inputs": {
    "hRes": 1920,
    "vRes": 1200,
    "refRate": 60,
    "numChannels": 1440,
    "pairsPerPort": 2,
    "muxLevel": 1,
    "bpp": 24
  },
  "results": {
    "p2pBandwidth_gbps": "39.2",
    "numDrivers": 4,
    "p2pPairs": 8,
    "speedPerPair_gbps": "4.9"
  },
  "intermediates": {
    "rawBandwidth_gbps": 39.14496,
    "rawSpeedPerPair_gbps": 4.89312
  }
}

Validation & Errors

CaseHTTPBody
Missing field 400 {"error":"Missing field: <name>"}
Non-numeric value 400 {"error":"Field '<name>' must be numeric"}
Non-positive hRes/vRes/refRate 400 {"error":"hRes, vRes, and refRate must be > 0"}
Non-positive numChannels/pairsPerPort/muxLevel 400 {"error":"numChannels, pairsPerPort, and muxLevel must be > 0"}
Computed p2pPairs ≤ 0 400 {"error":"Computed p2pPairs <= 0; check inputs"}
Wrong method on endpoint 405 {"error":"Method not allowed"}
Unknown path 404 {"error":"Not found"}

Schemas #

Request (POST /calculate)

FieldTypeRequiredConstraintsDescription
hResnumberYes> 0Horizontal resolution in pixels.
vResnumberYes> 0Vertical resolution in pixels.
refRatenumberYes> 0Refresh rate in Hz.
numChannelsnumberYes> 0Total source channels.
pairsPerPortnumberYes> 0P2P pairs per port.
muxLevelnumberYes> 0Muxing level (1, 2, or 3 typical).

Response (POST /calculate)

PathTypeDescription
inputs.*numberEcho of sanitized inputs; includes fixed bpp=24.
results.p2pBandwidth_gbpsstring (1dp)Total P2P bandwidth, rounded up to 0.1 Gbps.
results.numDriversintegerCeiling of drivers after mux consideration.
results.p2pPairsintegerDrivers × pairsPerPort.
results.speedPerPair_gbpsstring (1dp)Per-pair speed, rounded up to 0.1 Gbps.
intermediates.*numberRaw (unrounded) values for reference/analysis.

Worked Examples #

Example A: 1920×1200 @ 60 Hz, channels 1440, pairs/port 2, mux 1

Request:
{
  "hRes": 1920,
  "vRes": 1200,
  "refRate": 60,
  "numChannels": 1440,
  "pairsPerPort": 2,
  "muxLevel": 1
}

Key results (typical):
p2pBandwidth_gbps ≈ 39.2
numDrivers        = ceil((1920*3)/(1440*1)) = ceil(5760/1440) = 4
p2pPairs          = 4 * 2 = 8
speedPerPair_gbps ≈ ceil((39.2/8)*10)/10 = ceil(4.9*10)/10 = 4.9

Example B: 2560×1600 @ 120 Hz, channels 1920, pairs/port 2, mux 2

Inputs:
{ "hRes":2560,"vRes":1600,"refRate":120,"numChannels":1920,"pairsPerPort":2,"muxLevel":2 }

Sketch:
rawBandwidth = 2560*1600*120*24*1.18125e-9 ≈ 139.81 Gbps
p2pBandwidth = ceil(139.81*10)/10 = 139.9
numDrivers   = ceil((2560*3)/(1920*2)) = ceil(7680/3840) = 2
p2pPairs     = 2 * 2 = 4
speed/pair   = ceil((139.9/4)*10)/10 = ceil(34.975*10)/10 = 35.0 Gbps

Caching, CORS & Security #

Troubleshooting #

SymptomLikely CauseFix
404 Not Found Missing trailing path segment. Use /health or /calculate after the PHP filename.
405 Method Not Allowed Wrong HTTP verb. Use POST for /calculate, GET for /health.
400 Bad Request: Missing field JSON body incomplete. Provide all required numeric fields.
400: Field must be numeric String or null supplied. Send numbers, not quoted numerals or empty values.
400: p2pPairs ≤ 0 Inputs yield zero drivers or pairs. Increase numChannels, pairsPerPort, or adjust muxLevel.

OpenAPI (minimal) #

Convenience snippet for generators; adjust as needed.

openapi: 3.0.3
info:
  title: P2P Calculator API
  version: "1.0"
servers:
  - url: https://www.promptbox.cn/api/p2p.php
paths:
  /health:
    get:
      summary: Health check
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  status: { type: string, example: ok }
                  time:   { type: string, format: date-time }
  /calculate:
    post:
      summary: Compute P2P metrics
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required: [hRes,vRes,refRate,numChannels,pairsPerPort,muxLevel]
              properties:
                hRes:         { type: number, minimum: 1 }
                vRes:         { type: number, minimum: 1 }
                refRate:      { type: number, minimum: 1 }
                numChannels:  { type: number, minimum: 1 }
                pairsPerPort: { type: number, minimum: 1 }
                muxLevel:     { type: number, minimum: 1 }
      responses:
        '200':
          description: Computation OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  inputs: { type: object }
                  results:
                    type: object
                    properties:
                      p2pBandwidth_gbps: { type: string, example: "39.2" }
                      numDrivers:        { type: integer, example: 4 }
                      p2pPairs:          { type: integer, example: 8 }
                      speedPerPair_gbps: { type: string, example: "4.9" }
                  intermediates: { type: object }
        '400': { description: Bad Request }
        '405': { description: Method Not Allowed }
        '404': { description: Not Found }

Changelog #