ServiceNow REST API endpoints the builder covers
All of them sit under /api/now/ on your instance and return JSON wrapped in a result property. Versioned paths such as /api/now/v2/table/ work too, and the builder reads them when you paste a URL.
| Method | Path | What it does |
|---|---|---|
| GET | /api/now/table/{table} | Read records that match a query |
| GET | /api/now/table/{table}/{sys_id} | Read one record |
| POST | /api/now/table/{table} | Create a record |
| PATCH / PUT | /api/now/table/{table}/{sys_id} | Update the fields you send |
| DELETE | /api/now/table/{table}/{sys_id} | Delete a record |
| GET | /api/now/stats/{table} | Count, group, average, sum, min and max (Aggregate API) |
| GET | /api/now/attachment | List attachment metadata, filtered with sysparm_query |
| GET | /api/now/attachment/{sys_id}/file | Download the file itself |
| POST | /api/now/attachment/file | Upload a file as the raw request body |
| DELETE | /api/now/attachment/{sys_id} | Delete an attachment |
| GET | /api/sn_sc/servicecatalog/items/{sys_id} | Read a catalog item and its variables (Service Catalog API) |
| POST | /api/sn_sc/servicecatalog/items/{sys_id}/order_now | Order a catalog item; creates the REQ and RITM |
| POST | /api/sn_chg_rest/change/normal | Create a normal change (also /emergency and /standard/{template}) |
| POST | /api/now/identifyreconcile | Create or update CIs through identification rules; /query only reports |
| POST | /api/now/import/{staging_table} | Insert a row into an import set table; the transform map runs straight away |
| POST | /api/now/import/{staging_table}/insertMultiple | Insert many rows in one call |
| Any | /api/{namespace}/{api}/{resource} | Your own Scripted REST APIs |
Tables with ready-made requests
Pick any of these and the builder fills in useful fields, a sample filter and sample bodies. Any other table, including your own u_ and x_ tables, works the same way without suggestions.
IT Service Management
incidentIncidentproblemProblemchange_requestChange requestchange_taskChange tasktask_slaTask SLAsys_journal_fieldJournal entry (work notes, comments)taskTask (all task types)
Service Catalog
sc_requestRequest (REQ)sc_req_itemRequested item (RITM)sc_item_option_mtomVariable answers of a RITMsc_taskCatalog task (SCTASK)sc_cat_itemCatalog itemsysapproval_approverApproval
Users and groups
sys_userUsersys_user_groupGroupsys_user_grmemberGroup membersys_user_has_roleUser rolecmn_locationLocationcmn_departmentDepartmentcore_companyCompany
CMDB and assets
cmdb_ciConfiguration item (all classes)cmdb_ci_serverServercmdb_ci_win_serverWindows servercmdb_ci_linux_serverLinux servercmdb_ci_computerComputercmdb_ci_serviceBusiness servicecmdb_rel_ciCI relationshipalm_hardwareHardware asset
Knowledge
kb_knowledgeKnowledge article
Platform
sys_choiceChoice values of a fieldsys_dictionaryFields of a tablesys_db_objectTablessys_attachmentAttachment metadatasys_emailEmail logsyslogSystem logsys_update_setUpdate setsys_propertiesSystem property
Table API sysparm parameters
These are the options that matter most day to day. Every value must be URL-encoded; the generated code does that for you.
| Parameter | What it does | Example |
|---|---|---|
sysparm_query | Filter, in encoded query syntax. Add ORDERBY or ORDERBYDESC to sort. | active=true^priority=1 |
sysparm_fields | Comma-separated fields to return. Dot-walking works. | number,caller_id.email |
sysparm_limit | Maximum records in one response. | 100 |
sysparm_offset | Records to skip, for paging. | 200 |
sysparm_display_value | false (stored values), true (what users see) or all (both). | true |
sysparm_exclude_reference_link | Drops the link object that comes with every reference field. | true |
sysparm_no_count | Skips the count behind X-Total-Count. Faster on big tables. | true |
sysparm_suppress_pagination_header | Leaves out the Link header. | true |
sysparm_input_display_value | On create and update: read the body as display values. | true |
sysparm_view | Return the fields of a UI view instead of sysparm_fields. | mobile |
Paging through large tables
Never pull a big table in one call. Ask for a page with sysparm_limit, move with sysparm_offset, and sort on a field
that does not change, such as sys_created_on, so records do not shift between pages. If you only need the number of records,
the Aggregate API returns it without sending the records at all.
# First page: 100 records
GET /api/now/table/incident?sysparm_query=active%3Dtrue%5EORDERBYsys_created_on&sysparm_limit=100&sysparm_offset=0
# The response headers tell you where you are
X-Total-Count: 2481
Link: <…sysparm_offset=100…>;rel="next",<…sysparm_offset=2400…>;rel="last"
# Next page
GET /api/now/table/incident?...&sysparm_limit=100&sysparm_offset=100 Status codes and what they usually mean
| Status | Usual cause |
|---|---|
200 OK | A read or update worked. A list with no matches is still 200, with an empty result array. |
201 Created | A POST created the record. The new record, with its sys_id, is in result. |
204 No Content | A DELETE worked. There is no body. |
400 Bad Request | Usually invalid JSON in the body or a malformed parameter. |
401 Unauthorized | Wrong user name, password or token, or the user is locked out. |
403 Forbidden | Signed in, but an ACL or a missing role blocks the table or field. |
404 Not Found | The table or the sys_id does not exist, or the path is mistyped. |
429 Too Many Requests | A REST rate limit rule on the instance was hit. Wait and retry. |
Errors come back as JSON too: { "error": { "message": "…", "detail": "…" }, "status": "failure" }. The detail usually names the ACL or field that caused it.