Daha fazla bilgi
Links
How-tointermediateadmin

Service API Authentication

Issue an app key and secret, scope it to the right permissions, and protect it with a rate limit and IP allowlist.

5 min read0 viewsUpdated 2026-05-04
NovaGuide Assistant

Creating an app

Only tenant admins (owner, admin, manager, super_admin) can create apps.

  1. Open Dashboard → Security & Apps → Applications.
  2. Click New App, give it a descriptive name (e.g. "Booking Bot Production").
  3. Pick the permissions the integration needs (least-privilege; see the next section).
  4. Hit Create app. The plaintext app key and app secret are displayed once.
The secret is shown only at creation and rotation. Store it in a secrets manager (AWS Secrets Manager, HashiCorp Vault, GCP Secret Manager). Do not commit it to git or embed it in client-side code.

Each request must carry both headers:

X-Links-App-Key:    lk_app_...
X-Links-App-Secret: lk_sec_...

Permissions (scopes)

Apps are scoped per-permission. Pick only what the integration needs.

ScopeAllows
spaces:readList active spaces with working hours and location metadata.
spaces.availability:readGET available time slots for a space and date.
spaces.reservations:requestPOST a reservation request that lands as pending until a tenant admin approves.

Missing scope returns 403 SCOPE_MISSING. You can edit the scope set later from Applications → Manage → Permissions without rotating the secret.

Rotating and revoking

Rotation issues a fresh app key and secret while keeping the previous one alive for a grace window so you can deploy without downtime.

  1. Applications → [your app] → Rotate. Default grace is 60 minutes.
  2. Copy the new key and secret. Roll them into your secret store.
  3. Wait until your fleet picks the new credentials up, or click revoke now on the previous secret to end the grace early.

To kill an app entirely, use Revoke. All secrets are marked revoked immediately and any incoming request returns 401 SERVICE_AUTH_REVOKED.

Rate limit and IP allowlist

Each app has a per-minute rate limit (default 60 req/min). Once exceeded the API returns:

HTTP/1.1 429 Too Many Requests
Retry-After: 60

{ "error": { "code": "SERVICE_RATE_LIMITED" } }

Edit the rate limit from Applications → Manage → Settings.

The same Settings tab exposes an IP allowlist (one IP or CIDR per line). When set, only matching client IPs are accepted. Off-list requests return 403 SERVICE_IP_NOT_ALLOWED.

If your integration runs from a fixed cloud egress IP, locking the allowlist down to that range is the cheapest way to defang a leaked secret.

Authentication error codes

Authentication failures come back with a stable error.code so you can branch on them:

HTTPerror.codeMeaning
401SERVICE_CREDENTIALS_REQUIREDOne of the headers is missing.
401SERVICE_AUTH_INVALIDApp key not found.
401SERVICE_AUTH_SECRET_MISMATCHApp key valid, secret is wrong.
401SERVICE_AUTH_REVOKEDApp or secret has been revoked.
401SERVICE_AUTH_EXPIREDSecret is past its grace window.
403SCOPE_MISSINGApp is authenticated but lacks the scope for this endpoint.
403SERVICE_IP_NOT_ALLOWEDClient IP not in the app's allowlist.
429SERVICE_RATE_LIMITEDPer-minute rate limit reached, see Retry-After.
service-apiauthenticationcredentialssecurityapplications

Transform your workspace
infrastructure today

Enterprise-grade workspace management with intelligent automation, real-time analytics, and seamless hardware integration.

Enterprise-grade security99.9% uptime SLADedicated support