---
type: Skill
title: Verify a NepalHRM payroll figure over HTTP
description: A request-time endpoint that runs an Attested Computation on your parameters and returns a receipt, or checks a receipt you already hold.
resource: https://nepalhrm.com/api/okf/verify
tags: [nepalhrm, executor, api]
generated:
  by: process:nepalhrm-site-build
  at: 2026-08-07T00:00:00Z
verified:
  - by: human:rajesh
    at: 2026-08-07T00:00:00Z
status: stable
---

# Verify a NepalHRM payroll figure over HTTP

[`https://nepalhrm.com/api/okf/verify`](https://nepalhrm.com/api/okf/verify) runs [the attested salary-tax computation](../computations/salary-tax.md) on parameters you supply and returns a receipt, or checks a receipt you produced yourself. It is open, unauthenticated, CORS-open and free.

Prefer running the computation locally where you can: the published implementation is dependency-free and executing it yourself keeps the trust anchor in your hands. This endpoint is for the cases where you cannot execute code, cannot reach a JavaScript runtime, or want a second opinion from the publisher.

## Compute

```sh
curl -X POST https://nepalhrm.com/api/okf/verify \
  -H 'content-type: application/json' \
  -d '{"computation":"salary-tax","parameters":{"gross":75000,"basicPct":0.6,"system":"pf-cit","citPercent":10}}'
```

Returns `{ "attested": true, "receipt": { ... } }`, where `receipt` carries every field named in the computation's `executor.receipt` and will satisfy [the offline attester](../attesters/receipt_equality.mjs).

## Check a receipt you already hold

```sh
curl -X POST https://nepalhrm.com/api/okf/verify \
  -H 'content-type: application/json' \
  -d '{"receipt": { ... }}'
```

Returns `{ "attested": bool, "checks": [...] }`. Each check names what was tested and what it found, so a rejection tells you which rule was broken rather than only that something was.

## What it will refuse

* An undeclared parameter. The rule is the computation's, not the endpoint's: bind the declared holes, supply nothing else.
* A missing required parameter, or one of the wrong type.
* A `computation_sha256` that does not pin the currently published computation. That is the correct answer to a stale receipt, not a bug: the figures move with the annual budget.

## How it avoids being a second opinion in the wrong sense

The endpoint holds no copy of the tax constants. It reads them at request time from [`salary-tax.constants.json`](../computations/salary-tax.constants.json), which is generated from the same module as the computation above, and it re-runs the published test vectors against its own implementation before answering. If the two ever disagree it returns `503` and refuses to answer at all, rather than returning a number nothing has checked.

It runs at the edge, where dynamic code evaluation is blocked, so it cannot execute the published computation the way you can. That is the reason for the self-check, and the reason to prefer running the computation yourself when you are able to.
