StampMitraDevelopers
लाइव

Authentication

StampMitra B2B API हर request को API key से authenticate करती है। Keys environment के हिसाब से अलग होती हैं और उनके scopes तय करते हैं कि कौन-सा endpoint चल सकता है।

5 मिनट का quickstart Verification APIs e-Stamp APIs

Environments

Sandbox बनाम Production

Sandbox keys का prefix sk_test_ होता है और production keys का sk_live_। Sandbox key self-signup से तुरंत मिल जाती है; production keys के लिए KYC-approved organization होना ज़रूरी है।

अपनी key भेजना

Authorization header

Authorization: Bearer sk_test_xxxxxxxxxxxx
# या
x-api-key: sk_test_xxxxxxxxxxxx

API Key Authentication

Bearer API key + scopes

Endpoint

GET (applies to every /v1/* endpoint)

GET(applies to every /v1/* endpoint)लाइव

हर protected endpoint के लिए Authorization: Bearer <key> या x-api-key: <key> header ज़रूरी है। Keys environment-scoped होती हैं (SANDBOX sk_test_... बनाम PRODUCTION sk_live_...) और उनमें OAuth-style scopes की सूची होती है (जैसे verification.pan.read, orders.create, payments.write)। संवेदनशील scopes को IP allowlist तक भी सीमित किया जा सकता है। Requests पर server-side per-endpoint rate limits भी लागू होती हैं।

उदाहरण

Call करके देखें

curl -X GET "https://api-b2b.stampmitra.in(applies to every /v1/* endpoint)" \
  -H "Authorization: Bearer sk_test_xxxxxxxxxxxx"
Playground

Try करें

यह endpoint planned है और अभी इसका backend नहीं है, इसलिए call नहीं हो सकता।

Dashboard Login (Email + Password + OTP)

Dashboard user sign up करें (email + password)

Endpoint

POST /v1/auth/password/signup

POST/v1/auth/password/signupलाइव

एक Organization बनाता है (या किसी में join नहीं करता - organizationName वैकल्पिक है और न देने पर personal workspace अपने-आप बन जाता है) और bcrypt-hashed password के साथ owner User बनाता है। अभी कोई session set नहीं होता; verification email भेजा जाता है। Per-IP और per-email rate-limited है।

Request

Request के parameters

Request के parameters
FieldTypeविवरण
fullNameज़रूरीstring1-150 characters।
emailज़रूरीstringValid email address।
passwordज़रूरीstring10-72 chars; upper, lower, digit और symbol ज़रूर हों।
organizationNamestringअधिकतम 200 characters। छोड़ देने पर personal workspace अपने-आप बनता है।
mobileNumberज़रूरीstringE.164-जैसा phone number, जैसे +919876543210।
उदाहरण

Call करके देखें

curl -X POST "https://api-b2b.stampmitra.in/v1/auth/password/signup" \
  -H "Authorization: Bearer sk_test_xxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"fullName":"Ravi Kumar","email":"[email protected]","password":"Str0ng!Passw0rd","organizationName":"Acme Traders","mobileNumber":"+919876543210"}'
Playground

Try करें

Response

Response का उदाहरण

ResponseJSON
{
  "organizationId": "org_5f2c1a9b3d7e4f6a",
  "userId": "usr_2b8e4d4a5fc9f3a1",
  "message": "Signup successful. Check your email to verify your account."
}
Response के fields
FieldType
organizationIdstring
userIdstring
messagestring
Errors

Error responses

400कमज़ोर password
{
  "error": {
    "code": "BAD_REQUEST",
    "message": "password must be at least 10 characters and include an uppercase letter, a lowercase letter, a digit and a symbol",
    "requestId": "a1b2c3d4-e5f6-4a1b-8c2d-9f0e1a2b3c4d"
  }
}
409Email पहले से registered है
{
  "error": {
    "code": "CONFLICT",
    "message": "A record with these details already exists.",
    "requestId": "a1b2c3d4-e5f6-4a1b-8c2d-9f0e1a2b3c4d"
  }
}
429Rate limit पार हो गई
{
  "error": {
    "code": "TOO_MANY_REQUESTS",
    "message": "Rate limit exceeded: 60 requests per 60 seconds for this endpoint.",
    "requestId": "a1b2c3d4-e5f6-4a1b-8c2d-9f0e1a2b3c4d"
  }
}

Login का step 1/2: email + password verify करें, OTP भेजें

Endpoint

POST /v1/auth/password/login

POST/v1/auth/password/loginलाइव

Email/password जोड़ी verify करता है और सफल होने पर एक one-time code email करता है और challengeId लौटाता है। अभी कोई session नहीं बनता - login पूरा करने के लिए code के साथ verify-otp call करें।

Request

Request के parameters

Request के parameters
FieldTypeविवरण
emailज़रूरीstringAccount का email।
passwordज़रूरीstringAccount का password।
rememberMebooleanपरिणामी session की अवधि बढ़ाता है।
उदाहरण

Call करके देखें

curl -X POST "https://api-b2b.stampmitra.in/v1/auth/password/login" \
  -H "Authorization: Bearer sk_test_xxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"email":"[email protected]","password":"Str0ng!Passw0rd","rememberMe":true}'
Playground

Try करें

Response

Response का उदाहरण

ResponseJSON
{
  "challengeId": "chal_7d3e1f2a9b4c5d6e"
}
Response के fields
FieldType
challengeIdstring
Errors

Error responses

401गलत credentials
{
  "error": {
    "code": "UNAUTHORIZED",
    "message": "Invalid email or password.",
    "requestId": "a1b2c3d4-e5f6-4a1b-8c2d-9f0e1a2b3c4d"
  }
}
403Email verify नहीं हुआ
{
  "error": {
    "code": "FORBIDDEN",
    "message": "Please verify your email before logging in.",
    "requestId": "a1b2c3d4-e5f6-4a1b-8c2d-9f0e1a2b3c4d"
  }
}
429Rate limit पार हो गई
{
  "error": {
    "code": "TOO_MANY_REQUESTS",
    "message": "Rate limit exceeded: 60 requests per 60 seconds for this endpoint.",
    "requestId": "a1b2c3d4-e5f6-4a1b-8c2d-9f0e1a2b3c4d"
  }
}

Login का step 2/2: email किया गया OTP verify करें, session बनाएँ

Endpoint

POST /v1/auth/password/login/verify-otp

POST/v1/auth/password/login/verify-otpलाइव

Step 1 में email किए गए 6-अंकों के code को verify करता है और सफल होने पर B2B origin तक सीमित httpOnly session cookie set करता है।

Request

Request के parameters

Request के parameters
FieldTypeविवरण
challengeIdज़रूरीstringLogin response से मिला।
codeज़रूरीstringठीक 6 अंक, जो user को email किए गए।
उदाहरण

Call करके देखें

curl -X POST "https://api-b2b.stampmitra.in/v1/auth/password/login/verify-otp" \
  -H "Authorization: Bearer sk_test_xxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"challengeId":"chal_7d3e1f2a9b4c5d6e","code":"482913"}'
Playground

Try करें

Response

Response का उदाहरण

ResponseJSON
{
  "user": {
    "id": "usr_2b8e4d4a5fc9f3a1",
    "email": "[email protected]",
    "fullName": "Ravi Kumar",
    "organizationId": "org_5f2c1a9b3d7e4f6a",
    "organizationName": "Acme Traders",
    "emailVerified": true
  }
}
Response के fields
FieldType
userobject
Errors

Error responses

400गलत या expire हो चुका code
{
  "error": {
    "code": "BAD_REQUEST",
    "message": "This code is invalid or has expired.",
    "requestId": "a1b2c3d4-e5f6-4a1b-8c2d-9f0e1a2b3c4d"
  }
}
429Rate limit पार हो गई
{
  "error": {
    "code": "TOO_MANY_REQUESTS",
    "message": "Rate limit exceeded: 60 requests per 60 seconds for this endpoint.",
    "requestId": "a1b2c3d4-e5f6-4a1b-8c2d-9f0e1a2b3c4d"
  }
}
ध्यान दें

जानने लायक बातें

नोट

Response का Set-Cookie header (ऊपर नहीं दिखाया गया) httpOnly session cookie रखता है; इसके बाद हर password-auth call पर frontend को credentials: "include" भेजना होगा।

मौजूदा session का user पाएँ

Endpoint

GET /v1/auth/password/me

GET/v1/auth/password/meलाइव

मौजूदा session cookie के लिए logged-in user लौटाता है।

उदाहरण

Call करके देखें

curl -X GET "https://api-b2b.stampmitra.in/v1/auth/password/me" \
  -H "Authorization: Bearer sk_test_xxxxxxxxxxxx"
Playground

Try करें

Response

Response का उदाहरण

ResponseJSON
{
  "user": {
    "id": "usr_2b8e4d4a5fc9f3a1",
    "email": "[email protected]",
    "fullName": "Ravi Kumar",
    "organizationId": "org_5f2c1a9b3d7e4f6a",
    "organizationName": "Acme Traders",
    "emailVerified": true
  }
}
Response के fields
FieldType
userobject
Errors

Error responses

401कोई active session नहीं
{
  "error": {
    "code": "UNAUTHORIZED",
    "message": "Missing or invalid API key.",
    "requestId": "a1b2c3d4-e5f6-4a1b-8c2d-9f0e1a2b3c4d"
  }
}

Log out करें (session हटाएँ)

Endpoint

POST /v1/auth/password/logout

POST/v1/auth/password/logoutलाइव

मौजूदा session cookie को invalidate करता है।

उदाहरण

Call करके देखें

curl -X POST "https://api-b2b.stampmitra.in/v1/auth/password/logout" \
  -H "Authorization: Bearer sk_test_xxxxxxxxxxxx"
Playground

Try करें

Response

Response का उदाहरण

ResponseJSON
{
  "status": "logged_out"
}
Response के fields
FieldType
statusstring

Account का email address verify करें

Endpoint

POST /v1/auth/password/verify-email

POST/v1/auth/password/verify-emailलाइव

Signup पर email किए गए token को verify करता है।

Request

Request के parameters

Request के parameters
FieldTypeविवरण
tokenज़रूरीstringकम से कम 16 characters, verification email के link से।
उदाहरण

Call करके देखें

curl -X POST "https://api-b2b.stampmitra.in/v1/auth/password/verify-email" \
  -H "Authorization: Bearer sk_test_xxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"token":"vt_9f2a1c8b3d7e4f5a6b1c2d3e4f5a6b7c"}'
Playground

Try करें

Response

Response का उदाहरण

ResponseJSON
{
  "status": "verified"
}
Response के fields
FieldType
statusstring
Errors

Error responses

400Token invalid या expire हो चुका
{
  "error": {
    "code": "BAD_REQUEST",
    "message": "This verification link is invalid or has expired.",
    "requestId": "a1b2c3d4-e5f6-4a1b-8c2d-9f0e1a2b3c4d"
  }
}

Email-verification link दोबारा भेजें

Endpoint

POST /v1/auth/password/resend-verification

POST/v1/auth/password/resend-verificationलाइव

Per-email rate-limited; अगर account मौजूद है और verify नहीं हुआ है तो नया verification email भेजता है।

Request

Request के parameters

Request के parameters
FieldTypeविवरण
emailज़रूरीstringAccount का email।
उदाहरण

Call करके देखें

curl -X POST "https://api-b2b.stampmitra.in/v1/auth/password/resend-verification" \
  -H "Authorization: Bearer sk_test_xxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"email":"[email protected]"}'
Playground

Try करें

Response

Response का उदाहरण

ResponseJSON
{
  "message": "If that account exists and is unverified, a new link has been sent."
}
Response के fields
FieldType
messagestring
Errors

Error responses

429Rate limit पार हो गई
{
  "error": {
    "code": "TOO_MANY_REQUESTS",
    "message": "Rate limit exceeded: 60 requests per 60 seconds for this endpoint.",
    "requestId": "a1b2c3d4-e5f6-4a1b-8c2d-9f0e1a2b3c4d"
  }
}

Password-reset email का request करें

Endpoint

POST /v1/auth/password/forgot-password

POST/v1/auth/password/forgot-passwordलाइव

Account की मौजूदगी उजागर न हो, इसलिए email मौजूद हो या न हो, हमेशा 200 लौटाता है।

Request

Request के parameters

Request के parameters
FieldTypeविवरण
emailज़रूरीstringValid email address।
उदाहरण

Call करके देखें

curl -X POST "https://api-b2b.stampmitra.in/v1/auth/password/forgot-password" \
  -H "Authorization: Bearer sk_test_xxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"email":"[email protected]"}'
Playground

Try करें

Response

Response का उदाहरण

ResponseJSON
{
  "message": "If that account exists, a password reset link has been sent."
}
Response के fields
FieldType
messagestring
Errors

Error responses

429Rate limit पार हो गई
{
  "error": {
    "code": "TOO_MANY_REQUESTS",
    "message": "Rate limit exceeded: 60 requests per 60 seconds for this endpoint.",
    "requestId": "a1b2c3d4-e5f6-4a1b-8c2d-9f0e1a2b3c4d"
  }
}

Reset token से password reset करें

Endpoint

POST /v1/auth/password/reset-password

POST/v1/auth/password/reset-passwordलाइव

forgot-password से email किए गए token को use करके नया password set करता है (strength policy signup जैसी ही)।

Request

Request के parameters

Request के parameters
FieldTypeविवरण
tokenज़रूरीstringReset-password email के link से।
newPasswordज़रूरीstring10-72 chars; upper, lower, digit और symbol ज़रूर हों।
उदाहरण

Call करके देखें

curl -X POST "https://api-b2b.stampmitra.in/v1/auth/password/reset-password" \
  -H "Authorization: Bearer sk_test_xxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"token":"rt_3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f","newPassword":"N3wStr0ng!Pass"}'
Playground

Try करें

Response

Response का उदाहरण

ResponseJSON
{
  "status": "reset"
}
Response के fields
FieldType
statusstring
Errors

Error responses

400Token invalid या password कमज़ोर
{
  "error": {
    "code": "BAD_REQUEST",
    "message": "password must be at least 10 characters and include an uppercase letter, a lowercase letter, a digit and a symbol",
    "requestId": "a1b2c3d4-e5f6-4a1b-8c2d-9f0e1a2b3c4d"
  }
}

Team Management

Email + role देकर member को invite करें

Endpoint

POST /v1/team/invites

POST/v1/team/invitesलाइव

केवल Owner/Admin। एक pending invite बनाता है और accept link email करता है। Per-IP और per-email rate-limited है।

Request

Request के parameters

Request के parameters
FieldTypeविवरण
emailज़रूरीstringInvitee का email।
roleज़रूरीstringADMIN, MEMBER में से एक (invite से OWNER नहीं दिया जा सकता)।
उदाहरण

Call करके देखें

curl -X POST "https://api-b2b.stampmitra.in/v1/team/invites" \
  -H "Authorization: Bearer sk_test_xxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"email":"[email protected]","role":"MEMBER"}'
Playground

Try करें

Response

Response का उदाहरण

ResponseJSON
{
  "id": "inv_4f5a6b7c8d9e0f1a",
  "organizationId": "org_5f2c1a9b3d7e4f6a",
  "email": "[email protected]",
  "role": "MEMBER",
  "status": "PENDING",
  "invitedBy": "usr_2b8e4d4a5fc9f3a1",
  "createdAt": "2026-09-25T09:00:00.000Z",
  "expiresAt": "2026-10-02T09:00:00.000Z"
}
Response के fields
FieldType
idstring
organizationIdstring
emailstring
rolestring
statusstring
invitedBystring
createdAtstring
expiresAtstring
Errors

Error responses

403Owner/admin नहीं हैं
{
  "error": {
    "code": "FORBIDDEN",
    "message": "API key is valid but lacks the required scope for this endpoint.",
    "requestId": "a1b2c3d4-e5f6-4a1b-8c2d-9f0e1a2b3c4d"
  }
}
429Rate limit पार हो गई
{
  "error": {
    "code": "TOO_MANY_REQUESTS",
    "message": "Rate limit exceeded: 60 requests per 60 seconds for this endpoint.",
    "requestId": "a1b2c3d4-e5f6-4a1b-8c2d-9f0e1a2b3c4d"
  }
}

Pending invites की सूची

Endpoint

GET /v1/team/invites

GET/v1/team/invitesलाइव

केवल Owner/Admin।

उदाहरण

Call करके देखें

curl -X GET "https://api-b2b.stampmitra.in/v1/team/invites" \
  -H "Authorization: Bearer sk_test_xxxxxxxxxxxx"
Playground

Try करें

Response

Response का उदाहरण

ResponseJSON
{
  "invites": [
    {
      "id": "inv_4f5a6b7c8d9e0f1a",
      "email": "[email protected]",
      "role": "MEMBER",
      "status": "PENDING",
      "createdAt": "2026-09-25T09:00:00.000Z",
      "expiresAt": "2026-10-02T09:00:00.000Z"
    }
  ]
}
Response के fields
FieldType
invitesarray

Pending invite रद्द करें

Endpoint

DELETE /v1/team/invites/:id

DELETE/v1/team/invites/:idलाइव

केवल Owner/Admin।

उदाहरण

Call करके देखें

curl -X DELETE "https://api-b2b.stampmitra.in/v1/team/invites/:id" \
  -H "Authorization: Bearer sk_test_xxxxxxxxxxxx"
Playground

Try करें

Path parameters
Response

Response का उदाहरण

ResponseJSON
{
  "status": "revoked"
}
Response के fields
FieldType
statusstring
Errors

Error responses

404Resource नहीं मिला
{
  "error": {
    "code": "NOT_FOUND",
    "message": "The requested resource was not found.",
    "requestId": "a1b2c3d4-e5f6-4a1b-8c2d-9f0e1a2b3c4d"
  }
}

Organization के members की सूची

Endpoint

GET /v1/team/members

GET/v1/team/membersलाइव

Organization का कोई भी authenticated member।

उदाहरण

Call करके देखें

curl -X GET "https://api-b2b.stampmitra.in/v1/team/members" \
  -H "Authorization: Bearer sk_test_xxxxxxxxxxxx"
Playground

Try करें

Response

Response का उदाहरण

ResponseJSON
{
  "members": [
    {
      "userId": "usr_2b8e4d4a5fc9f3a1",
      "email": "[email protected]",
      "fullName": "Ravi Kumar",
      "role": "OWNER",
      "joinedAt": "2026-06-01T10:00:00.000Z"
    },
    {
      "userId": "usr_7a1b2c3d4e5f6a7b",
      "email": "[email protected]",
      "fullName": "Priya Sharma",
      "role": "MEMBER",
      "joinedAt": "2026-09-10T14:30:00.000Z"
    }
  ]
}
Response के fields
FieldType
membersarray

Member का role बदलें

Endpoint

PATCH /v1/team/members/:userId/role

PATCH/v1/team/members/:userId/roleलाइव

केवल Owner/Admin। आख़िरी owner को demote नहीं किया जा सकता।

Request

Request के parameters

Request के parameters
FieldTypeविवरण
roleज़रूरीstringADMIN, MEMBER में से एक (इस endpoint से OWNER में promote करना supported नहीं है)।
उदाहरण

Call करके देखें

curl -X PATCH "https://api-b2b.stampmitra.in/v1/team/members/:userId/role" \
  -H "Authorization: Bearer sk_test_xxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"role":"ADMIN"}'
Playground

Try करें

Path parameters
Response

Response का उदाहरण

ResponseJSON
{
  "userId": "usr_7a1b2c3d4e5f6a7b",
  "organizationId": "org_5f2c1a9b3d7e4f6a",
  "role": "ADMIN",
  "updatedAt": "2026-09-25T09:15:00.000Z"
}
Response के fields
FieldType
userIdstring
organizationIdstring
rolestring
updatedAtstring
Errors

Error responses

400आख़िरी owner demote हो जाएगा
{
  "error": {
    "code": "BAD_REQUEST",
    "message": "Cannot change the role of the organization's last owner.",
    "requestId": "a1b2c3d4-e5f6-4a1b-8c2d-9f0e1a2b3c4d"
  }
}
404Resource नहीं मिला
{
  "error": {
    "code": "NOT_FOUND",
    "message": "The requested resource was not found.",
    "requestId": "a1b2c3d4-e5f6-4a1b-8c2d-9f0e1a2b3c4d"
  }
}

Organization से member हटाएँ

Endpoint

DELETE /v1/team/members/:userId

DELETE/v1/team/members/:userIdलाइव

केवल Owner/Admin। आख़िरी owner को हटाया नहीं जा सकता।

उदाहरण

Call करके देखें

curl -X DELETE "https://api-b2b.stampmitra.in/v1/team/members/:userId" \
  -H "Authorization: Bearer sk_test_xxxxxxxxxxxx"
Playground

Try करें

Path parameters
Response

Response का उदाहरण

ResponseJSON
{
  "status": "removed"
}
Response के fields
FieldType
statusstring
Errors

Error responses

400आख़िरी owner हट जाएगा
{
  "error": {
    "code": "BAD_REQUEST",
    "message": "Cannot remove the organization's last owner.",
    "requestId": "a1b2c3d4-e5f6-4a1b-8c2d-9f0e1a2b3c4d"
  }
}
404Resource नहीं मिला
{
  "error": {
    "code": "NOT_FOUND",
    "message": "The requested resource was not found.",
    "requestId": "a1b2c3d4-e5f6-4a1b-8c2d-9f0e1a2b3c4d"
  }
}

Team invite accept करें

Endpoint

POST /v1/team/invites/:token/accept

POST/v1/team/invites/:token/acceptलाइव

Public endpoint (route level पर auth ज़रूरी नहीं)। अगर caller के पास invited email का active session है तो invite तुरंत attach हो जाता है; वरना यह signup_required लौटाता है ताकि frontend invite token साथ रखकर signup पर route कर सके।

उदाहरण

Call करके देखें

curl -X POST "https://api-b2b.stampmitra.in/v1/team/invites/:token/accept" \
  -H "Authorization: Bearer sk_test_xxxxxxxxxxxx"
Playground

Try करें

Path parameters
Response

Response का उदाहरण

ResponseJSON
{
  "status": "accepted",
  "organizationId": "org_5f2c1a9b3d7e4f6a",
  "role": "MEMBER"
}
Response के fields
FieldType
statusstring
organizationIdstring
rolestring
Errors

Error responses

200Invited email से logged in नहीं हैं
{
  "status": "signup_required",
  "email": "[email protected]"
}
404Resource नहीं मिला
{
  "error": {
    "code": "NOT_FOUND",
    "message": "The requested resource was not found.",
    "requestId": "a1b2c3d4-e5f6-4a1b-8c2d-9f0e1a2b3c4d"
  }
}