Reading the
Wire.
The module that turns a 5G signalling trace from noise into a story. The Service Based Interface at protocol depth — why the core runs on HTTP/2, the REST resource model and URI shape, the CRUD methods and custom operations, the pseudo- and 3gpp-Sbi headers, the full status-code table, ProblemDetails, subscribe/notify, the SCP and SEPP, and graceful overload control — narrated and fully animated, with flowing packets and a cinematic camera.
SBI — every message is a method on a URI
The player screen is a live animation stage — packets flow along the wire, request/response arrows fire, and the status codes light up exactly as the narration reads them. Karaoke subtitles in English, two subtitle modes, fullscreen.
Every structure on the wire
Each SBI structure the video reads — its interface, direction, purpose and clause. Click any row to open its full breakdown. Filter to find any of them.
| Structure | Interface | Dir | What it does | Clause |
|---|
The Service Based Interface, at protocol depth
Everything the video reads on the wire, as reference you can scan: the HTTP/2 transport, the URI shape, the service names, the CRUD methods, the pseudo- and 3gpp-Sbi headers, the full status-code table, ProblemDetails, and subscribe/notify. Cited to TS 29.500 V19.4.0 and TS 29.501 V19.3.0.
Framing & streams
- HEADERS frame (HPACK-compressed) + DATA frame(s) for the body.
- Each request/response on a numbered stream; client streams are odd.
- Multiplexing → no head-of-line blocking.
Control
- WINDOW-UPDATE = flow control.
- RST-STREAM = cancel one request, keep the connection.
- One long-lived connection per NF pair.
Rules
- Runs over TLS (Module 6).
- HTTP/2 server push is NOT used (§5.2.5).
- Connections precious; streams cheap.
| Part | What it is | Example |
|---|---|---|
| {apiRoot} | scheme ("http"/"https") + "://" + authority (host[:port]) | https://smf.op.com |
| <apiName> | the service — read it, and you know the function + intent | nsmf-pdusession |
| <apiVersion> | "v" + the major version only (minor/patch stay compatible) | v1 |
| <resourceUriPart> | the resource-specific path (+ custom-op name for RPCs) | sm-contexts/42 |
| Common api-names | nnrf-nfm · nnrf-disc · namf-comm · nsmf-pdusession · nudm-sdm · nudm-ueau · nausf-auth · npcf-smpolicycontrol · nchf-convergedcharging | |
POST
- create child (producer picks id) → 201 + Location
- not idempotent
PUT
- create/replace (consumer picks id)
- idempotent
GET
- read; never changes state
- query params + Accept · ETag/If-Match
PATCH
- partial update
- Merge Patch / JSON Patch
DELETE
- remove → 204 No Content
- idempotent
custom op
- POST …/{resource}/{custOpName}
- the verbs CRUD can't express
Idempotency: GET · PUT · DELETE are idempotent (safe to retry); POST is not. This is exactly what decides safe retries under overload (§5.2.8).
Pseudo & standard
- :method :scheme :authority :path :status — the skeleton.
- Content-Type: application/json · multipart/related · application/problem+json.
- Location (after POST/PUT) · Accept (→406/415) · Retry-After · Allow · ETag/If-Match.
- Authorization: Bearer — the OAuth JWT (Module 6).
3gpp-Sbi-* (the telecom headers)
- Target-apiRoot — the real producer when :authority is a proxy.
- Callback · Message-Priority · Sender-Timestamp · Max-Rsp-Time.
- Routing-Binding/Binding — pin requests to one instance.
- Discovery-* (delegated discovery) · Lci/Oci (load/overload).
- Reserved chars (e.g. JSON) are percent-encoded.
Support: M mandatory · SS service-specific · N/A not used. Per HTTP method: DELETE · GET · PATCH · POST · PUT.
| Status | DEL | GET | PATCH | POST | PUT | Meaning on SBI |
|---|---|---|---|---|---|---|
| 200 OK | SS | M | SS | SS | SS | success with a body |
| 201 Created | N/A | N/A | N/A | SS | SS | resource created (+ Location) |
| 202 Accepted | SS | N/A | SS | SS | SS | accepted, finished asynchronously |
| 204 No Content | M | N/A | SS | SS | SS | success, nothing to return (DELETE, notify) |
| 307 Temporary Redirect | SS | SS | SS | SS | SS | go to another instance (overload) |
| 308 Permanent Redirect | SS | SS | SS | SS | SS | resource moved permanently |
| 400 Bad Request | M | M | M | M | M | malformed request / schema error |
| 401 Unauthorized | M | M | M | M | M | authentication failed |
| 403 Forbidden | M | M | M | M | M | authorized identity, not permitted |
| 404 Not Found | M | M | M | M | M | resource does not exist |
| 405 Method Not Allowed | SS | SS | SS | SS | SS | wrong verb (+ Allow header) |
| 406 Not Acceptable | N/A | M | N/A | N/A | N/A | can't produce an accepted format |
| 409 Conflict | N/A | SS | SS | SS | SS | state conflict / already exists |
| 411 Length Required | N/A | N/A | M | M | M | Content-Length required |
| 412 Precondition Failed | SS | SS | SS | SS | SS | If-Match failed (resource changed) |
| 413 Content Too Large | N/A | N/A | M | M | M | body too big |
| 415 Unsupported Media Type | N/A | N/A | M | M | M | format not supported (+ Accept-Patch) |
| 429 Too Many Requests | M | M | M | M | M | rate-limit — slow down |
| 500 Internal Server Error | M | M | M | M | M | generic server failure |
| 501 Not Implemented | SS | SS | SS | SS | SS | method unsupported by the API |
| 502 Bad Gateway | M | M | M | M | M | bad response via a proxy |
| 503 Service Unavailable | M | M | M | M | M | overloaded/down (+ Retry-After) |
| 504 Gateway Timeout | SS | SS | SS | SS | SS | proxy waited for the producer, gave up |
Standard fields
- type — URI naming the problem kind.
- title — short human summary.
- status — the HTTP code, echoed in the body.
- detail — explanation of this occurrence.
- instance — URI of the specific occurrence.
3GPP extensions (the afternoon-savers)
- cause — machine-readable application error code.
- invalidParams — exactly which fields were wrong.
- Content-Type: application/problem+json.
- Lets a SEPP/SCP add error detail on errors it originates.
| Step | Who | What |
|---|---|---|
| ① | consumer → producer | POST /subscriptions carrying its callbackUri → 201 Created + Location |
| ② | producer → consumer | on the event, producer becomes a client: POST {callbackUri} (notification body) |
| ③ | consumer → producer | 204 No Content — acknowledged |
| ④ | consumer → producer | DELETE /subscriptions/{id} — unsubscribe |
Filter by name, code, or family — TRANSPORT · METHOD · HEADER · STATUS · FLOW.
| Element | Family | Where | Clause | What it is |
|---|
The rule to remember: the 5G core is a web of REST resources, and every message is a method on a URI with a status in return. Read the api-name for the actor, the method + URI for the action, the status + ProblemDetails for the outcome, and the 3gpp-Sbi headers for the routing — and any trace in your career becomes a document you can read, not a puzzle you must solve.
Built from ETSI TS 129 500 V19.4.0 & TS 129 501 V19.3.0Reading-the-Wire mastery check
Questions and answers reshuffle every load. 70%+ to consider Module 7 done.