verification
use it
# add to stunt.yaml
services:
servicenow:
adapter: embedded:servicenow-style
# then
$ stunt upThe embedded: source extracts this adapter from the binary — no git clone, fully offline.
how to mock the ServiceNow Table API locally
Install stunt, paste the service block above into stunt.yaml, run stunt up — then point your client at localhost instead of ServiceNow Table API. It works offline, keeps state across requests and restarts, and every response is synthetic: the route shapes, status codes, pagination, and webhook delivery follow the real ServiceNow Table API 2 surface — the data is fake, the behavior is real.
backing stores
incidentstaskschange_requestscmdb_cissys_userssys_user_groupssc_req_items
api surface (44)
generated from the adapter manifest — exactly what boots, nothing more
44 routes
GET/api/now/table/incident
POST/api/now/table/incident
GET/api/now/table/incident/{sys_id}
PUT/api/now/table/incident/{sys_id}
PATCH/api/now/table/incident/{sys_id}
DELETE/api/now/table/incident/{sys_id}
GET/api/now/table/task
POST/api/now/table/task
GET/api/now/table/task/{sys_id}
PUT/api/now/table/task/{sys_id}
PATCH/api/now/table/task/{sys_id}
DELETE/api/now/table/task/{sys_id}
GET/api/now/table/change_request
POST/api/now/table/change_request
GET/api/now/table/change_request/{sys_id}
PUT/api/now/table/change_request/{sys_id}
PATCH/api/now/table/change_request/{sys_id}
DELETE/api/now/table/change_request/{sys_id}
GET/api/now/table/cmdb_ci
POST/api/now/table/cmdb_ci
GET/api/now/table/cmdb_ci/{sys_id}
PUT/api/now/table/cmdb_ci/{sys_id}
PATCH/api/now/table/cmdb_ci/{sys_id}
DELETE/api/now/table/cmdb_ci/{sys_id}
GET/api/now/table/sys_user
POST/api/now/table/sys_user
GET/api/now/table/sys_user/{sys_id}
PUT/api/now/table/sys_user/{sys_id}
PATCH/api/now/table/sys_user/{sys_id}
DELETE/api/now/table/sys_user/{sys_id}
GET/api/now/table/sys_user_group
POST/api/now/table/sys_user_group
GET/api/now/table/sys_user_group/{sys_id}
PUT/api/now/table/sys_user_group/{sys_id}
PATCH/api/now/table/sys_user_group/{sys_id}
DELETE/api/now/table/sys_user_group/{sys_id}
GET/api/now/table/sc_req_item
POST/api/now/table/sc_req_item
GET/api/now/table/sc_req_item/{sys_id}
PUT/api/now/table/sc_req_item/{sys_id}
PATCH/api/now/table/sc_req_item/{sys_id}
DELETE/api/now/table/sc_req_item/{sys_id}
GET/api/now/table/sys_metadata
POST/api/now/import/u_my_table
VM-verified behaviors (9)
- ✓unknown credentials are 401 at the gate
- ✓create assigns a sys_id and INC number
- ✓get round-trips the fields
- ✓update persists the new state
- ✓sysparm_query narrows the list with a total count
- ✓offset/limit pagination pages via the Link header without repeats
- ✓tables are isolated from each other
- ✓unknown sys_id and unknown table are 404
- ✓delete removes the record for good
Not implemented (5)
- Only a fixed table set (incident, task, change_request, cmdb_ci, ...) — no custom tables
- No attachment API (/api/now/attachment)
- No aggregate statistics API (/api/now/stats/{table})
- No service catalog API (/api/sn_sc/servicecatalog)
- No batch API (/api/now/v1/batch)
Differs from the real API (1)
- sysparm_query supports an operator subset; NOT LIKE and similar 400-rejected
want more of the ServiceNow Table API surface? adapters are YAML + Starlark — the authoring guide covers adding routes, fixtures, and state machines. Open an issue for anything big first, or just file a PR — merged routes ship in the next release.