Developer Portal Docs Authentication

Authentication & API Keys

How to authenticate, manage keys, handle permissions, and rotate credentials.

Authentication Method

All Enterprise API requests are authenticated via the X-API-Key header:

GET /api/enterprise/v1/talent/profiles/GPIN12345 HTTP/1.1
Host: api.genuinein.com
X-API-Key: gin_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2w3x4y5z6

Key Format

PropertyValue
Prefixgin_
Length64 characters total
Character setAlphanumeric (a-z, 0-9)
StorageSHA-256 hashed (raw key shown once at creation)
Examplegin_a1b2c3d4e5f6g7h8...z6

Key Lifecycle

CREATE ──→ ACTIVE ──→ ROTATE ──→ REVOKE
              │                      │
              │    (immediate)        │
              └──────────────────────┘

Creating a Key

  1. Developer Portal → API Keys → Create New Key
  2. Select permissions (see below)
  3. Optionally set: IP allowlist, expiration date, webhook URL
  4. Copy the raw key immediately — cannot be retrieved again

Rotating a Key

  1. Create a new key with same permissions
  2. Update your integration to use the new key
  3. Revoke the old key after confirming new one works
  4. Old key has no grace period after revocation

Revoking a Key

  • Immediate effect — all requests with this key return 401
  • Active webhook deliveries for this key stop immediately
  • Audit log entry created

Permission Model

Permissions are stored as JSONB on each key, scoped as resource:action:

{
  "talent": {
    "search": true,
    "read": true,
    "pool": true,
    "pool_write": true,
    "analytics": true,
    "export": true
  }
}

Available Permissions

PermissionGrants Access To
talent:searchPOST /talent/search, POST /talent/bulk-search
talent:readGET /talent/profiles/* (all profile endpoints)
talent:poolGET /talent/pool
talent:pool_writePOST /talent/pool/add, DELETE /talent/pool/{gpin}
talent:analyticsGET /talent/insights
talent:exportPOST /talent/export, status, download

Least Privilege Recommendations

Use CaseRecommended Permissions
ATS integration (search + view)talent:search, talent:read
Dashboard (analytics only)talent:pool, talent:analytics
Full integrationAll talent:*
Read-only monitoringtalent:read, talent:pool

Security Best Practices

PracticeWhy
Never commit keys to source controlKeys are permanent credentials
Use environment variablesGENUINEIN_API_KEY env var
Rotate keys every 90 daysLimit exposure window
Separate keys per environmentdev/staging/production isolation
Set IP allowlist in productionPrevent key theft abuse
Monitor usage in Developer PortalDetect anomalous patterns
Revoke immediately if compromisedNo grace period needed

Request & Response Headers

Request Headers

HeaderRequiredDescription
X-API-KeyYesYour API key
Content-TypeYes (POST/PUT)application/json
X-Idempotency-KeyRecommended (POST)Prevent duplicate operations
X-SandboxOptionaltrue for sandbox mode

Response Headers

HeaderDescription
X-Request-IdUnique request ID for support
X-RateLimit-LimitRequests allowed per minute
X-RateLimit-RemainingRemaining in current window
X-RateLimit-ResetUnix timestamp of window reset

Authentication Error Responses

{
  "success": false,
  "data": null,
  "error": {
    "code": "AUTH_REQUIRED",
    "message": "API key is required. Provide it via X-API-Key header.",
    "status_code": 401
  },
  "meta": { "request_id": "abc123def456" }
}
StatusCodeMeaning
401AUTH_REQUIREDNo key provided
401AUTH_EXPIREDKey expired or revoked
403FORBIDDENKey lacks required permission
403IP_BLOCKEDRequest from non-allowed IP
GenuineIN Products
Loading products...