Get one import session
Auth: Authorization: Bearer nsin_… or X-Api-Key: nsin_… — see API keys.
One session in any status, including finished ones — what was found,
what was committed and when. Requires domain.view.
Sessions are resolved within the domain, so an id belonging to another domain is reported as not found.
Path parameters
- domainstringrequiredpath
The domain name (for example
example.com) — not a numeric id. - sessionIdintegerrequiredpath
Numeric id of the record import session. Sessions are resolved within the domain, so an id from another domain reads as not found.
Responses
200The session.
Content type: application/json
- idinteger
- domain_idinteger
- statusstring
scanning— the sweep is running.ready— waiting for a commit or a discard.committing— a commit is in flight and holds the claim.auto_committed— nobody answered beforeauto_commit_atand the records were written anyway, rather than leaving the zone empty.superseded— replaced by a rescan.One of:"scanning""ready""committing""committed""auto_committed""discarded""superseded""failed" - sourcestringOne of:
"manual_scan""domain_create""zone_file" - clientstring
What started the session. An API key has nowhere to show a review screen, so adding a domain with a key still imports automatically; staged review is the panel path.
One of:"panel""api" - methodstring
Which branch found the records — a full zone transfer, or a resolver sweep of common names. The first support question about a bad import is where the records came from.
One of:"axfr""scan" - source_nsarray of string
The nameservers this scan read. Stored because a rescan has to reuse them: once the domain is delegated to NSIN, resolving it again finds our own — still empty — zone.
- errorstring
Why the scan, or the last commit attempt, failed.
- started_atstring (date-time)
- finished_atstring (date-time)
When the scan finished and the session turned
ready. - committed_atstring (date-time)
- auto_commit_atstring (date-time)
When an unanswered
readysession commits itself. Cleared by a commit, a discard or a rescan. - countsImportSessionCounts
The header line of a review screen.
Fields
- totalinteger
- preselectedinteger
Rows a
mode "all"commit would write. - proxiedinteger
- warningsinteger
Rows carrying at least one warning.
- recordsarray of ImportSessionRecord
Empty while
statusisscanning.Item fields
- idinteger
Staging row id. It is not a record id — it exists only until the session is committed or discarded.
- namestring
- typestringOne of:
"A""AAAA""CNAME""ANAME""NS""TXT""MX""SRV""PTR""CAA""TLSA""SSHFP""URI" - destinationstring
- ttlinteger
- mx_priorityinteger
- proxiedboolean
Whether this row would be proxied — and, because a
mode: "all"commit (the unattendedauto_commit_atone included) writes exactly this flag, what happens to the row if nobody answers.It is
truefor the rows the edge can carry: a proxyable type on a routable origin. It isfalsewherever proxying would take a service away rather than accelerate it — a mail host, the target of an in-zoneMX, an underscored name (_acme-challenge,selector1._domainkey), or a label that names something that does not speak HTTP (ssh,vpn,mysql,ns1, …). Those rows carry amail_hostornon_web_servicewarning saying so.An
overwriterow mirrors the record it would replace: an import refreshes content and TTL and never changes an existing record's proxy setting. - statusstring
overwritemeans the domain already holds a record with this name and type and it would be replaced. TXT is neveroverwrite: many TXT records share one name.One of:"new""overwrite""unsupported" - existing_idinteger
The record that would be replaced. Set when
statusisoverwrite. - proxy_eligibleboolean
Whether this row could be proxied if you switched it on — a proxyable type pointing at an address the edge will accept.
- preselectedboolean
Whether the row is included when you commit with
mode: "all". Rows carrying anerrorwarning arrive unticked. - warningsarray of ImportWarning
Item fields
- codestringOne of:
"unsupported""not_proxyable_type""private_address""points_at_nsin""proxy_ineligible_origin""mail_host""non_web_service""overwrite""wildcard" - severitystring
Only
errorrows arrive unticked (preselected: false) — they are the ones NSIN cannot import at all.One of:"info""warning""error" - messagestring
- reasonstring
The first warning's message, kept for clients written against the flat scan preview.
{
"id": 0,
"domain_id": 0,
"status": "scanning",
"source": "manual_scan",
"client": "panel",
"method": "axfr",
"source_ns": [
"string"
],
"error": "string",
"started_at": "2026-01-01T00:00:00Z",
"finished_at": "2026-01-01T00:00:00Z",
"committed_at": "2026-01-01T00:00:00Z",
"auto_commit_at": "2026-01-01T00:00:00Z",
"counts": {
"total": 0,
"preselected": 0,
"proxied": 0,
"warnings": 0
},
"records": [
{
"id": 0,
"name": "string",
"type": "A",
"destination": "string",
"ttl": 0,
"mx_priority": 0,
"proxied": true,
"status": "new",
"existing_id": 0,
"proxy_eligible": true,
"preselected": true,
"warnings": [
{
"code": "unsupported",
"severity": "info",
"message": "string"
}
],
"reason": "string"
}
]
}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 import session, the session belongs to another domain, or the domain is not visible to this account.
Content type: application/json
- errorstringrequired
Human-readable description of what went wrong.
{
"error": "import session not found"
}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/records/import-sessions/0" \
-H "Authorization: Bearer $NSIN_API_KEY"