nsindocs Search the docs⌘K
  1. Docs
  2. API reference
  3. Domains

Probe which HTTP versions the origins speak

gethttps://api.nsin.ir/domains/{domain}/origin-protocols

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_protocol setting.

    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

      false for a plain-HTTP origin, which can only be HTTP/1.1.

    • http1boolean
    • http2boolean
    • http3boolean
    • http3_viastring

      How HTTP/3 support was established. Absent when http3 is 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-svc when 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
json
{
  "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.

json
{
  "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.

json
{
  "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.

json
{
  "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.

json
{
  "error": "rate limit exceeded"
}

Example request

bash
curl -X GET "https://api.nsin.ir/domains/example.com/origin-protocols" \
  -H "Authorization: Bearer $NSIN_API_KEY"
esc