Probe which HTTP versions the origins speak
Auth: Authorization: Bearer nsin_… or X-Api-Key: nsin_… — see API keys.
Makes a TLS handshake (reading the ALPN answer), a QUIC handshake and one
HEAD / request (reading the Alt-Svc header) against every distinct
origin behind the domain's proxied records, from the NSIN control plane,
and reports whether each speaks HTTP/1.1, HTTP/2 and HTTP/3. HTTP/3
counts as supported when either the QUIC handshake completed or the
origin advertised h3 in Alt-Svc; http3_via says which. Use it
before changing origin_protocol. Answers younger than 20 seconds are
reused, so repeated calls do not hammer the origin. Requires domain.view.
Path parameters
- domainstringrequiredpath
The domain name (for example
example.com) — not a numeric id.
Responses
200Per-origin protocol support.
Content type: application/json
- currentstring
The domain's current
origin_protocolsetting.One of:"http1""http2""http3" - originsarray of object
One entry per distinct origin (destination, port, scheme) across the domain's proxied records. Gateway records are excluded.
Item fields
- hoststring
- portinteger
- snistring
The server name presented in the handshake.
- tlsboolean
falsefor a plain-HTTP origin, which can only be HTTP/1.1. - http1boolean
- http2boolean
- http3boolean
- http3_viastring
How HTTP/3 support was established. Absent when
http3is false.One of:"quic""alt-svc" - errorstring
Why the TCP/TLS handshake failed, when it did.
- http3_errorstring
Why the QUIC handshake failed. Absent when it succeeded. Present next to
http3_via=alt-svcwhen the origin advertises HTTP/3 but the control plane could not reach it over UDP. - checked_atstring (date-time)
- supportsobject
Whether EVERY TLS origin answered the protocol.
Fields
- http2boolean
- http3boolean
- recommendedstring
The highest protocol every origin supports.
One of:"http1""http2""http3" - probed_fromstring
{
"current": "http1",
"origins": [
{
"host": "string",
"port": 0,
"sni": "string",
"tls": true,
"http1": true,
"http2": true,
"http3": true,
"http3_via": "quic",
"error": "string",
"http3_error": "string",
"checked_at": "2026-01-01T00:00:00Z"
}
],
"supports": {
"http2": true,
"http3": true
},
"recommended": "http1",
"probed_from": "control plane"
}401Missing, malformed, revoked or expired API key. (A valid key whose
account has been deactivated gets 403 account is inactive instead.)
Content type: application/json
- errorstringrequired
Human-readable description of what went wrong.
{
"error": "invalid API key"
}403The key is read-only, your role on the domain lacks the required permission, or the domain's plan does not include the feature.
Content type: application/json
- errorstringrequired
Human-readable description of what went wrong.
{
"error": "read-only API key"
}404No such domain, or it is not visible to this account. Domains you cannot access are reported as not found rather than forbidden.
Content type: application/json
- errorstringrequired
Human-readable description of what went wrong.
{
"error": "read-only API key"
}429The key exceeded its request budget (300 requests per minute by default).
Content type: application/json
- errorstringrequired
Human-readable description of what went wrong.
{
"error": "rate limit exceeded"
}Example request
curl -X GET "https://api.nsin.ir/domains/example.com/origin-protocols" \
-H "Authorization: Bearer $NSIN_API_KEY"