Environments

SignCare operates two public environments — Stage/UAT and Live/Production.

Stage (UAT) vs Live (Production)

PropertyStage / UATLive / Production
Base URLhttps://uat-ext.signcare.iohttps://ext.signcare.io
PurposeIntegration testing, UAT, sandboxReal customer traffic
CredentialsStage-specific X-API-KEY + X-API-APP-IDSeparate Live X-API-KEY + X-API-APP-ID (issued at Go-Live)
Rate limitsRelaxed for testingPer your commercial agreement
Provider mocksMany endpoints return canned dataReal providers, real charges
Data retentionNon-production data may be purgedFull retention per agreement
Webhook deliveriesTo your configured URLsTo your configured URLs
Support SLABest-effort during business hoursPer your commercial SLA

Separate credentials per environment

Stage and Live use different X-API-KEY and X-API-APP-ID values. Stage credentials will not authenticate against ext.signcare.io, and vice versa. Treat your Live credentials like production secrets — store them in a secure secret manager, never in source control.

When switching from Stage to Live, both the base URL and the credential pair change:

- https://uat-ext.signcare.io/api/v1/pan/verify
- X-API-KEY: <stage-key>
- X-API-APP-ID: <stage-app-id>
+ https://ext.signcare.io/api/v1/pan/verify
+ X-API-KEY: <live-key>
+ X-API-APP-ID: <live-app-id>

Live credentials are issued separately when you complete the Go-Live process. Until then, your Live key does not exist — only Stage works.

Drive both the base URL and the credential pair from environment variables so a single deploy can target either SignCare environment without code changes:

# .env.development
SIGNCARE_BASE_URL=https://uat-ext.signcare.io
SIGNCARE_API_KEY=<stage-key>
SIGNCARE_APP_ID=<stage-app-id>

# .env.production
SIGNCARE_BASE_URL=https://ext.signcare.io
SIGNCARE_API_KEY=<live-key>
SIGNCARE_APP_ID=<live-app-id>

Example (Node.js):

const SIGNCARE_BASE_URL = process.env.SIGNCARE_BASE_URL;
const SIGNCARE_API_KEY  = process.env.SIGNCARE_API_KEY;
const SIGNCARE_APP_ID   = process.env.SIGNCARE_APP_ID;

async function verifyPan(pan) {
  const res = await fetch(`${SIGNCARE_BASE_URL}/api/v1/pan/verify`, {
    method: 'POST',
    headers: {
      'X-API-KEY': SIGNCARE_API_KEY,
      'X-API-APP-ID': SIGNCARE_APP_ID,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({ pan, consent: 'Y', consent_text: '...' })
  });
  return res.json();
}

The same variable names work for both environments — only the values differ between deploys.

What's different between stage and live

In stage, some endpoints return mocked data for common test inputs (e.g. certain PAN/Aadhaar patterns). Production always hits the real provider. Ask your account manager for the list of mock inputs if you need them.

  • Stage rate limits are relaxed — you can test without hitting 429s during development.
  • Stage does not charge against your billing usage.
  • Stage webhooks are delivered normally — use this to test your callback handlers.
  • Stage does not guarantee data retention beyond 7 days.

Going live checklist

Before switching your production app to ext.signcare.io:

  1. ✅ Complete any Go-Live onboarding steps required for the APIs you use (some need upstream registration that takes weeks).
  2. ✅ Receive your Live X-API-KEY and X-API-APP-ID from your account manager — they are different from Stage.
  3. ✅ Store the Live credentials in your production secret manager (not in source control).
  4. ✅ Whitelist SignCare's webhook source IPs in your firewall (see Webhooks).
  5. ✅ Confirm your billing agreement covers expected volume.
  6. ✅ Verify you handle all documented error codes gracefully.
  7. ✅ Run a smoke test against Live with a small batch before full rollout.