Diagnose API permission errors using the profile and capability endpoints

Use the authenticated account endpoints to explain why an API request is denied. A route existing in the documentation does not mean that every credential, reseller group, DNS package or upstream provider can use it. Start with the same credential that failed, so the diagnosis reflects that integration's actual identity.

01 Read the account evidence

Method Resource Scope Idempotency-Key
GET /v2/profile profile:read Not required by this route
GET /v2/profile/permissions profile:read Not required by this route
GET /v2/capabilities profile:read Not required by this route
GET /v2/profile/limits profile:read Not required by this route
  1. Read the profile and check the recorded reseller status and account context.
  2. Read permissions to inspect the scopes attached to this API identity. Empty grants do not imply unrestricted access.
  3. Read capabilities to understand what the installation reports for the account, then compare the failed route's required scope in the current OpenAPI contract.
  4. Read the stored limit rows if the error concerns a quota or feature restriction. This response is not a live utilisation report for every service.
  5. Confirm that the domain, zone or other resource ID belongs to the authenticated account. Use a returned public identifier rather than guessing a database number.

02 Choose the correct remedy

A missing scope requires an authorised credential or role change. A missing entitlement requires a package or service review. A provider refusal requires checking upstream permission or capability. These are separate conditions, even when the visible symptom is an unavailable action.

Keep the original problem code, HTTP status and request reference. After an authorised change, repeat a read before retrying the mutation. For a paid or uncertain operation, reconcile its existing request first so troubleshooting does not create a second order.

03 Example: inspect permissions using the same credential that failed

Use the server-side PHP request helper in the API getting-started article without substituting an administrator's stronger credential. The following reads require profile:read. Keep the output in your authorised diagnostic view so it reflects the integration's actual permissions and reported capabilities.

Code or configuration example
$permissions = nabtechRequest('GET', '/v2/profile/permissions');
$capabilities = nabtechRequest('GET', '/v2/capabilities');
if ($permissions['http_status'] !== 200 || $capabilities['http_status'] !== 200) {
    throw new RuntimeException('Account diagnostics could not be read.');
}
$effectivePermissions = $permissions['response']['data'];
$reportedCapabilities = $capabilities['response']['data'];

Read the result: Compare the denied route's required scope with the returned permission information, then review any entitlement or provider restriction. Success here does not mean a domain purchase can complete, the wallet has sufficient available funds or every provider supports every capability.

Retain the original failure code and request reference. If these reads are also denied, inspect credential status and source-address policy through API Access. Do not respond by granting all scopes to every key or retrying an uncertain paid operation with a new business reference.

Can I grant everything listed in capabilities to another key?

No. Capability information describes the current account's reported features. Delegating key scopes still checks the caller's grant rights, and a key cannot elevate itself beyond those rights.

Does a healthy public endpoint prove my account is ready?

No. Public discovery and shallow health do not test your account approval, wallet, provider credentials or ability to register a domain. Use the authenticated evidence and a controlled supported workflow.

  • 0 Users Found This Useful
  • domain-nexus, development
Was this answer helpful?

Related Articles

Get started with the current Nabtech Domain Nexus v2 API

The current Nabtech reseller API uses Domain Nexus v2. It provides domain ordering and...

Renew a domain through the Domain Nexus v2 API

Renew an owned domain with POST /v2/domains/{domainId}/renew. The request uses the current...

Request and retrieve a domain EPP authorisation code through the API

The current EPP workflow uses POST /v2/domains/{domainId}/epp-code to request an authorisation...

Read stored domain contact assignments through the v2 API

Use GET /v2/domains/{domainId}/contacts to read the contact assignments stored for a domain in...

Read a domain's desired nameservers through the v2 API

Use GET /v2/domains/{domainId}/nameservers to read the desired nameserver records stored for an...