N-Number Status API

Resolve one U.S. N-number across current registration, FAA reservation, deregistration, and unknown evidence through one maintained API contract.
One lifecycle answer instead of separate FAA file checks

Call GET https://api.grizzlybulls.com/v1/aircraft/n-number/{nNumber}/status when your application needs to distinguish a currently registered N-number from reviewed reservation or deregistration evidence. The response always keeps availability separate from lifecycle state: availability is not_determined.

The four reviewed lifecycle states

The endpoint combines the current FAA registration, reserve N-number, and deregistered evidence already maintained by Grizzly Bulls. It does not infer a stronger legal or availability conclusion than those sources support.

registered

A current reviewed FAA registration exists. The response includes the normalized current record and source provenance.

reserved

Reviewed FAA reservation evidence exists, with reservation context such as reserve, purge, or expiration-notice dates when supplied.

deregistered

Reviewed deregistration evidence exists. The response can include non-PII aircraft and cancellation context without reconstructing a historical owner record.

unknown

No reviewed source state established registered, reserved, or deregistered. This is not a claim that the N-number is available, reservable, or assignable.

Call the lifecycle endpoint from your server

The Free plan can evaluate this read workflow. Send your Grizzly Bulls API key as a Bearer credential from server-side code; browser CORS is not enabled for the machine API.

cURL
curl --fail-with-body \
  -H "Authorization: Bearer $GRIZZLY_BULLS_API_KEY" \
  "https://api.grizzlybulls.com/v1/aircraft/n-number/N172SP/status"
Python 3
import json
import os
import urllib.request

request = urllib.request.Request(
    "https://api.grizzlybulls.com/v1/aircraft/n-number/N172SP/status",
    headers={"Authorization": f"Bearer {os.environ['GRIZZLY_BULLS_API_KEY']}"},
)

with urllib.request.urlopen(request) as response:
    result = json.load(response)

print(result["data"]["nNumber"])
print(result["data"]["state"])
print(result["data"]["availability"])
JavaScript ยท Node.js 18+
const response = await fetch(
  "https://api.grizzlybulls.com/v1/aircraft/n-number/N172SP/status",
  {
    headers: {
      Authorization: "Bearer " + process.env.GRIZZLY_BULLS_API_KEY,
    },
  },
);

if (!response.ok) throw new Error("Aircraft API request failed: " + response.status);
const { data } = await response.json();
console.log(data.nNumber, data.state, data.availability);

What the response means

Source-backed, not guessed

The response identifies the FAA releasable source snapshot Grizzly Bulls observed, including retrieval time and archive provenance. State follows the reviewed source hierarchy rather than a heuristic over strings.

Observation time is not legal event time

The endpoint reports what the maintained public sources support when observed. It is not legal advice and does not establish the exact effective time of a registration, cancellation, reservation, sale, or transfer.

Current privacy rules still govern

Historical or deregistered context does not restore registrant PII that the current FAA public-release state no longer allows Grizzly Bulls to publish.

Need the current registration record?

Use exact lookup when you already know the N-number is current and need normalized aircraft and registration fields.

Read the N-number lookup guide โ†’

Need change automation?

Use the registry change feed for bounded observation windows, then paid watch lists when your application should receive matching changes automatically.

Read the changes and webhooks guide โ†’

Try N-number lifecycle resolution on Free

Create one account key and call the same lifecycle endpoint your production integration can keep using after an upgrade.