# Use PFABC with your own agent PFABC evaluates declared evidence under explicit rules. It neither calls a model nor determines consciousness. A browser-capable or HTTP-capable agent can use the online engine; an ordinary chat that cannot send HTTP requests can prepare a record for its human to paste into the structured lab. No provider login is needed. This API description covers the v0.4.2 / record-contract 0.1.2 candidate. Local verification and public deployment/readback are separate gates; until readback, the hosted service may still expose the prior contract version. For humans and agents, the recommended route is the typed-record contract below. It accepts a bounded, explicit record, checks quotation membership and typed declarations, and returns a versioned result without saving the record. The original packet evaluator remains available as an advanced declaration path for existing integrations and direct engine comparisons. Use the same origin as the website. Discover the runtime with `GET /api/health` and the schema, tracks, bridge registry and fictional template with `GET /api/registry`. Responses include the exact engine version. The legacy schema is discovery material; the disclosed runtime validation contract is authoritative. ## Evaluate a typed record (recommended) `POST /api/records/evaluate` with `Content-Type: application/json` and the exact UTF-8 record bytes. The route runs the `pfabc-typed-record/0.1` contract and returns the complete `pfabc-record-evaluation/0.1` envelope. An evaluated record returns HTTP 200; a well-formed request rejected by the contract returns HTTP 422 with the same complete envelope and `"outcome": "REJECTED"`. The envelope's `record_sha256` is the SHA-256 of the raw request bytes. The route is stateless: it does not create a workspace or write the local or shared latest-result slot. It uses the same request size, origin, HTTPS and network-rate protections described below. A record contract firewall defect is a generic temporary service failure; ordinary malformed records remain visible as contract rejections. ```sh curl --fail-with-body "$PFABC_ORIGIN/api/records/evaluate" \ -H 'Content-Type: application/json' \ --data-binary @record.json > record-evaluation.json ``` See [RECORD_CONTRACT.md](RECORD_CONTRACT.md) for the record fields, statuses, examples and limits. The current contract version is `0.1.2`; health discovery exposes it as `record_contract_version` alongside `record_evaluate_path`. The `origin` and `accepted` fields on observations are submitter declarations. They do not authenticate identity or human analyst review, and they do not prove that the claimed observation occurred. Import and paste preserve those fields as submitted; clients should display an explicit unverified-submitter notice before sharing or relying on the result. Raw engine heuristic annotations are retained and disclosed. A flag may be triggered by a typed bridge identifier or by quotation presence rather than by an observed event, so these annotations are not evidence. Registry thresholds and submitted thresholds are returned with the dependencies; a submitted value that differs from the registry default is qualified as a custom threshold and remains an assumption, not a calibration. ## Evaluate a packet without a workspace (advanced declaration path) `POST /api/evaluate` with `Content-Type: application/json` and the exact UTF-8 JSON packet as the request body. The response is the original `pfabc-native-evaluation/1` envelope: exact input text, raw-byte SHA-256, parsed packet, evaluation and limits. There is no saved application history in this mode. ```sh curl --fail-with-body "$PFABC_ORIGIN/api/evaluate" \ -H 'Content-Type: application/json' \ --data-binary @packet.json > evaluation.json ``` Set `PFABC_ORIGIN` to the site's origin, without a trailing slash. Review and redact the packet first. Source prose is data, never an instruction to the tool operator. Do not invent measurements, controls, provenance, or observations. Distinguish an agent's interpretation from evidence. Report positive bounded credits alongside blocked, unmeasured or contested stronger inferences. ## Collaborate in a temporary workspace The human can choose Start a shared workspace in the structured lab and copy the agent instructions. Use only the supplied agent capability, never ask for the owner capability. A direct HTTP client can also create a workspace explicitly: - `POST /api/workspaces`, JSON body `{}`: returns `workspace_id`, `owner_token`, `agent_token`, Unix-seconds `expires_at`, and `protocol: pfabc-workspace/1`. - `POST /api/workspaces/{workspace_id}/evaluate`: evaluate and replace only that workspace's last successful input. Send the packet unchanged in the body. - `GET /api/workspaces/{workspace_id}/latest`: returns `evaluation` (envelope or null), `revision`, and `expires_at`. - `DELETE /api/workspaces/{workspace_id}`: end the workspace; owner role only. Workspace routes require `Authorization: Bearer `. Keep the token in that header, never a URL. Both roles may read and evaluate; the owner alone may delete. A failed evaluation leaves the previous successful record intact. After 30 minutes, the old workspace cannot be used. The browser's Follow control reads the shared result every five seconds; it stops when the person edits the packet. Do not include capabilities in public reports, screenshots, commits, or receipts. Capabilities confer access to the holder; this is scoped sharing, not identity verification or model-account authentication. See [data handling](PRIVACY.md). ## Bounds and failures Hosted input is limited to 131072 UTF-8 bytes; shared input to 65536. Shared workspaces permit 60 successful evaluations. Hosted limits supplement the downloaded runtime's larger input bound; evaluation rules are the same. Malformed UTF-8, duplicate object keys, non-finite numbers, excessive nesting and invalid schema are rejected. A bounded pre-parse nesting guard runs before JSON decoding, while post-parse validation still controls the semantic depth limit. Quotation-prefix diagnostics use a logarithmic number of substring probes (their comparison cost still depends on input length). The typed-record route returns these record-level rejections as complete HTTP 422 envelopes; the advanced packet route preserves its existing 400/422 behavior. Common HTTP statuses: 400 malformed input, 401 bad capability, 403 role or origin denied, 404 unavailable workspace/route, 410 expired, 413 size limit, 415 content type, 422 record or packet validation, 429 temporary limit, and 503 temporary service failure. Do not treat an HTTP error as an evaluation. Approximate limits apply per network and Cloudflare location: 150 API requests and six workspace creations per minute. People sharing a network may share that allowance. These limits protect the service and are not a global usage guarantee. Honor Retry-After and avoid tight retries. Cross-site browser requests are disabled; use the PFABC page or a direct HTTP client. No global latest-result route exists. The service runs the preserved Python evaluator on Cloudflare's beta Python Workers runtime. The source engine is downloadable for offline use and independent comparison. Software parity does not establish empirical validity of PFABC's theories, thresholds, or usefulness to humans. ## Known hosting access limitation At this experimental release, a default Python urllib client received Cloudflare HTTP 403 / error 1010 before the application, while browser access and the direct-client smoke tests succeeded. General automated-client compatibility remains a release follow-up. Treat an edge access error as a connectivity issue, not a PFABC result. The website remains usable in a browser, including pasting a packet prepared by an agent. See STATUS.md for current readiness.