Skip to main content
The session endpoint is the entry point for every signing integration. It returns a single JSON payload that encodes who you are in the Safeclose signing system—your manager row, admin row, signer rows, the module tiers granted to you through your role assignments, and a flat caps object you can use to gate UI and API calls without any additional round trips. All requests to /v1/signing/* require a valid Clerk session JWT in the Authorization: Bearer header. The session endpoint itself returns 200 for any authenticated Clerk user, but returns 403 if that user has no linked signing identity (no manager, admin, or signer row with a matching clerk_user_id).
GET /v1/signing/me is a legacy alias for this endpoint. Both paths return the identical payload. Prefer /v1/signing/session in new integrations.

Request

GET /v1/signing/session
No query parameters. No request body.
curl https://api.safeclose.com/v1/signing/session \
  -H "Authorization: Bearer <clerk_jwt>"

Response

Returns a SigningSessionJson object.
userId
string
required
Your Clerk user ID (sub claim from the JWT). This is the primary key used to look up all signing identity rows.
manager
object or null
Your manager identity record, if one is linked to your account. Numeric ID fields are serialized as strings. null if you are not a manager.
admin
object or null
Your admin identity record, if one exists. null if you are not an admin. Admin accounts carry elevated read access across all organizations.
signers
array
All signer records linked to your account. A single user may be a signer on multiple packages. Empty array if you have no signer assignments.
resolvedRoles
array
Which roles you currently hold. Each element is one of "manager", "admin", or "signer". A user may hold more than one role simultaneously—for example, a manager who is also assigned as a signer on a package.
managerModules
ManagerModuleCapsJson or null
Module access tiers derived by merging all roles assigned to you across your organization and location memberships. When you have access through multiple roles, the maximum tier per module wins, and vault booleans are OR-ed together. null if you are not a manager.
adminModules
ManagerModuleCapsJson or null
Fixed full-capability set for admin users ("full" on every tier, all vault booleans true). null if you are not an admin. The shape is identical to managerModules.
caps
object
required
Flattened capability object designed for fast client-side guards. Duplicates some information from managerModules/adminModules but avoids conditional null-checks.

Access tier values

ValueMeaning
"none"No access to this module. Feature-level UI should be hidden.
"read"Read-only access. List and detail endpoints are permitted.
"write"Read + mutation access. Create, update, cancel, and resend endpoints are permitted.
"full"Administrative or destructive operations (when implemented). Admins always receive "full" on every module.

Vault capabilities

All fields are boolean.
FieldDescription
shareDealMay share a deal with another party.
claimDealMay claim an unclaimed deal.
transferDealMay transfer a deal to another organization.
transferDocumentsMay transfer individual documents within a deal.
transferDealBackMay reverse a deal transfer.
archiveDealMay archive a completed deal.
linkDealsMay link two related deals together.
uploadDocumentsMay upload new documents to a deal.
replaceUploadedDocumentsMay replace previously uploaded documents.
changeSettingsMay change vault-level settings for a deal.
externDealDocsVideosMay share deal documents and videos with external parties.
externCompanyLocationsMay expose company location data externally.
externOrganizationsMay expose organization data externally.
exportSigningsListMay export the signings list.

Error responses

StatusCondition
401Missing or invalid Clerk JWT.
403Valid Clerk user but no manager, admin, or signer row is linked to this account.

Example response

{
  "userId": "user_2abc123XYZ",
  "manager": {
    "id": "42",
    "clerkUserId": "user_2abc123XYZ",
    "name": "Jordan Lee",
    "email": "jordan@dealership.com",
    "createdAt": "2025-01-15T09:00:00.000Z",
    "updatedAt": "2025-06-01T14:22:00.000Z"
  },
  "admin": null,
  "signers": [
    {
      "id": "801",
      "signingId": "3001",
      "clerkUserId": "user_2abc123XYZ",
      "status": "pending",
      "number": 1,
      "fullName": "Jordan Lee",
      "email": "jordan@dealership.com",
      "updatedAt": "2025-06-10T11:00:00.000Z"
    }
  ],
  "resolvedRoles": ["manager", "signer"],
  "managerModules": {
    "signings": "write",
    "templates": "read",
    "flows": "read",
    "reports": "none",
    "settings": "none",
    "vault": {
      "shareDeal": true,
      "claimDeal": false,
      "transferDeal": false,
      "transferDocuments": true,
      "transferDealBack": false,
      "archiveDeal": true,
      "linkDeals": false,
      "uploadDocuments": true,
      "replaceUploadedDocuments": false,
      "changeSettings": false,
      "externDealDocsVideos": false,
      "externCompanyLocations": false,
      "externOrganizations": false,
      "exportSigningsList": true
    }
  },
  "adminModules": null,
  "caps": {
    "organizationScope": "managed",
    "canListOrganizations": true,
    "canListCompanies": true,
    "canViewSignerAssignments": true,
    "manager": {
      "signings": "write",
      "templates": "read",
      "flows": "read",
      "reports": "none",
      "settings": "none",
      "vault": {
        "shareDeal": true,
        "claimDeal": false,
        "transferDeal": false,
        "transferDocuments": true,
        "transferDealBack": false,
        "archiveDeal": true,
        "linkDeals": false,
        "uploadDocuments": true,
        "replaceUploadedDocuments": false,
        "changeSettings": false,
        "externDealDocsVideos": false,
        "externCompanyLocations": false,
        "externOrganizations": false,
        "exportSigningsList": true
      }
    },
    "admin": null
  }
}