Revoke user's refresh token and logout
Request Body
Fields
Responses
Example 200 response
{
"data": null
}
Get Started
Use the tmsign API to create signing requests, deliver signature journeys, track status changes, and retrieve final signed documents inside your own application.
This portal is built for third-party teams integrating tmsign signing journeys. The focus is on clear workflow guidance, consistent request patterns, and production-ready event tracking.
Partners, platform teams, and internal product teams embedding signing.
Onboarding, contracts, identity verification, and regulated approvals.
One click nav, clear flows, and concrete payload examples.
Get Started
You will receive a company ID plus a client ID and client secret from the tmsign team. Use those to request an access token and start creating signing requests.
Request a `client_id`, `client_secret`, and `x-company-id` from the integration team.
Call `POST /v1/auth/token` with the `client_credentials` grant type.
Use `POST /v1/documents` with files and signer data to start a signing flow.
Poll document status or receive webhook events, then download the signed PDF.
Get Started
A clear end-to-end path from authentication to signed PDFs.
Exchange client credentials for an access token.
Upload PDFs or use templates with signer details.
Signers receive email/SMS based on delivery settings.
Poll `/v1/documents/{id}` or receive webhooks.
Get the signed document when status is `Completed`.
Development
The API follows OAuth-style token exchange. The recommended integration grant is `client_credentials`.
curl -X POST https://dev.api.tmsign.co.uk/v1/auth/token \
-H "Content-Type: application/json" \
-d '{
"grant_type": "client_credentials",
"client_id": "YOUR_CLIENT_ID",
"client_secret": "YOUR_CLIENT_SECRET",
"scope": "company"
}'
{
"access_token": "eyJhbGciOi...",
"refresh_token": "eyJhbGciOi...",
"token_type": "Bearer",
"expires_in": 3600
}
Using the API
Quick lookup for the primary endpoints used in integrations.
Most endpoints return `{ data, metadata }`. List endpoints return `{ data, metadata }` with pagination.
Using the API
All endpoints grouped by controller/tag. Each entry lists parameters, request bodies, and responses.
7 endpoints
Revoke user's refresh token and logout
{
"data": null
}
{
"data": {
"message": "If an account exists with this email, a password reset link will be sent"
},
"metadata": {
"requestId": "123e4567-e89b-12d3-a456-426614174000",
"timestamp": "2026-04-07T15:56:50.018Z"
}
}
{
"data": {
"message": "Password has been reset successfully"
},
"metadata": {
"requestId": "123e4567-e89b-12d3-a456-426614174000",
"timestamp": "2026-04-07T15:56:50.019Z"
}
}
Set up a PIN for a user
{
"data": {
"message": "PIN set up successfully"
}
}
Register a new user with email verification
{
"data": {
"message": "User created successfully",
"email": "user@example.com",
"status": "pending_verification"
}
}
OAuth 2.0 token endpoint supporting multiple grant types
{
"data": {
"access_token": "your.access.token",
"token_type": "Bearer",
"expires_in": 3600,
"refresh_token": "your.refresh.token"
}
}
Verify OTP code for user authentication
{
"data": {
"access_token": "your.access.token",
"token_type": "Bearer",
"expires_in": 3600,
"refresh_token": "your.refresh.token"
}
}
17 endpoints
Retrieve all users within a specific company
{
"data": [
{
"id": "123",
"email": "user@example.com",
"name": "John Doe",
"telephoneNumber": "+1234567890",
"isActive": true,
"createdAt": "2026-04-07T15:56:49.855Z",
"updatedAt": "2026-04-07T15:56:49.855Z",
"nationality": "UK"
}
],
"metadata": {
"total": 100,
"page": 1,
"limit": 10,
"totalPages": 10,
"timestamp": "2026-04-07T15:56:49.855Z"
}
}
Create a new user
{
"data": {
"id": "123",
"email": "user@example.com",
"name": "John Doe",
"telephoneNumber": "+1234567890",
"isActive": true,
"createdAt": "2026-04-07T15:56:49.865Z",
"updatedAt": "2026-04-07T15:56:49.865Z",
"nationality": "UK"
}
}
Get the current user's details
{
"data": {
"id": "123",
"email": "user@example.com",
"name": "John Doe",
"telephoneNumber": "+1234567890",
"isActive": true,
"createdAt": "2026-04-07T15:56:49.857Z",
"updatedAt": "2026-04-07T15:56:49.857Z",
"verified": false,
"nationality": "UK"
}
}
{
"data": {
"id": "123",
"email": "user@example.com",
"name": "Updated Name",
"telephoneNumber": "+1234567890",
"isActive": true,
"createdAt": "2026-04-07T15:56:49.866Z",
"updatedAt": "2026-04-07T15:56:49.866Z",
"nationality": "UK"
}
}
Get the current user's details and associated companies
{
"data": {
"user": {
"id": "123",
"email": "user@example.com",
"name": "John Doe",
"telephoneNumber": "+1234567890",
"isActive": true,
"createdAt": "2026-04-07T15:56:49.858Z",
"updatedAt": "2026-04-07T15:56:49.858Z",
"nationality": "UK",
"transactionID": "975873900988",
"transactionExpiresAt": "2026-04-07T15:56:49.858Z",
"isGrantAccess": true
},
"companies": [
{
"id": "company123",
"name": "Example Company",
"scopes": [
"lawtech-admin"
]
}
]
}
}
Get the current user's documents
{
"data": {
"id": "123",
"email": "user@example.com",
"name": "John Doe",
"telephoneNumber": "+1234567890",
"isActive": true,
"createdAt": "2026-04-07T15:56:49.859Z",
"updatedAt": "2026-04-07T15:56:49.859Z",
"documents": [
{
"id": "doc123",
"name": "Example Document",
"status": "draft",
"createdAt": "2026-04-07T15:56:49.859Z"
}
]
}
}
Get the current user's documents where they are a signer
{
"data": [
{
"document": {
"companyId": "company123",
"description": "Example document",
"id": "doc123",
"name": "Example Document",
"status": "draft",
"templateId": "template123",
"type": "Standard",
"signingUrl": "https://example.com/sign/123",
"user": {
"email": "user@example.com",
"id": "user123",
"isActive": true,
"name": "John Doe",
"telephoneNumber": "+1234567890",
"nationality": "UK"
}
}
}
],
"metadata": {
"total": 100,
"page": 1,
"limit": 10,
"totalPages": 10,
"timestamp": "2026-04-07T15:56:49.860Z"
}
}
Change the current user's existing Personal Identification Code (PIN).
{
"data": {
"message": "PIN updated successfully"
}
}
Set up the current user's Personal Identification Code (PIN).
{
"data": {
"message": "PIN set up successfully"
}
}
Verify the current user's PIN and receive an access token
{
"data": {
"access_token": "<jwt>",
"token_type": "Bearer",
"expires_in": 86400
}
}
Update the user's verification data (va_data, securityContext).
{
"data": {
"message": "Verification PIN updated successfully"
}
}
Search for users by email or name within a specific company
{
"data": [
{
"id": "123",
"email": "user@example.com",
"name": "John Doe",
"telephoneNumber": "+1234567890",
"isActive": true,
"createdAt": "2026-04-07T15:56:49.856Z",
"updatedAt": "2026-04-07T15:56:49.856Z",
"nationality": "UK"
}
],
"metadata": {
"total": 100,
"page": 1,
"limit": 10,
"totalPages": 10,
"timestamp": "2026-04-07T15:56:49.856Z"
}
}
Delete a user
{
"data": {
"message": "User deleted successfully",
"success": true
}
}
Get a user by ID
{
"data": {
"id": "123",
"email": "user@example.com",
"name": "John Doe",
"telephoneNumber": "+1234567890",
"isActive": true,
"createdAt": "2026-04-07T15:56:49.864Z",
"updatedAt": "2026-04-07T15:56:49.864Z",
"nationality": "UK"
}
}
{
"data": {
"id": "123",
"email": "user@example.com",
"name": "Updated Name",
"telephoneNumber": "+1234567890",
"isActive": true,
"createdAt": "2026-04-07T15:56:49.866Z",
"updatedAt": "2026-04-07T15:56:49.866Z",
"nationality": "UK"
}
}
Get the company associated with a user for the specified company ID
{
"data": {
"id": "company123",
"name": "Example Company",
"scopes": [
"company-admin"
]
}
}
Get a user's documents
{
"data": {
"id": "123",
"email": "user@example.com",
"name": "John Doe",
"telephoneNumber": "+1234567890",
"isActive": true,
"createdAt": "2026-04-07T15:56:49.864Z",
"updatedAt": "2026-04-07T15:56:49.864Z",
"nationality": "UK",
"documents": [
{
"id": "doc123",
"name": "Example Document",
"status": "draft",
"createdAt": "2026-04-07T15:56:49.864Z"
}
]
}
}
8 endpoints
Get the current user's company information
{
"data": {
"id": "company-123",
"name": "Example Company Ltd",
"isActive": true,
"createdAt": "2026-04-07T15:56:49.996Z",
"updatedAt": "2026-04-07T15:56:49.996Z"
},
"metadata": {
"timestamp": "2026-04-07T15:56:49.996Z"
}
}
Update the current company
{
"data": {
"id": "company-123",
"name": "Updated Company Name",
"webhookUrl": "https://example.com/webhook",
"createdAt": "2026-04-07T15:56:49.996Z",
"updatedAt": "2026-04-07T15:56:49.996Z",
"isActive": true
},
"metadata": {
"timestamp": "2026-04-07T15:56:49.996Z"
}
}
Delete the company's client credentials
{
"data": {
"clientId": "string",
"clientSecret": "clientId",
"companyId": "clientId",
"webhookSecret": "clientId"
}
}
Get the company's client credentials
{
"data": {
"clientId": "client-123",
"clientSecret": "secret-456",
"webhookSecret": "webhook-secret-789",
"companyId": "company-123"
},
"metadata": {
"timestamp": "2026-04-07T15:56:49.999Z"
}
}
Create the company's client credentials
{
"data": {
"clientId": "string",
"clientSecret": "clientId",
"companyId": "clientId",
"webhookSecret": "clientId"
}
}
Get company statistics
{
"data": {
"totalUsers": 10,
"roles": {
"lawtechAdmin": 1,
"companyAdmin": 2,
"companyUser": 5,
"companySigner": 2
},
"documents": {
"awaitingUs": 5,
"awaitingOthers": 3,
"completed": 10,
"terminated": 2,
"needsAttention": 1,
"declined": 1,
"expired": 1,
"revoked": 1,
"draft": 2,
"scheduled": 1,
"total": 20
}
},
"metadata": {
"timestamp": "2026-04-07T15:56:49.997Z"
}
}
Get all users associated with the current company
{
"data": [
{
"id": "user-123",
"email": "john.doe@example.com",
"name": "John Doe",
"scopes": [
"company-admin"
]
},
{
"id": "user-124",
"email": "jane.smith@example.com",
"name": "Jane Smith",
"scopes": [
"company-user"
]
}
],
"metadata": {
"total": 2,
"page": 1,
"limit": 10,
"totalPages": 1,
"timestamp": "2026-04-07T15:56:49.998Z"
}
}
Search users within the current company
{
"data": [
{
"id": "user-123",
"email": "john.doe@example.com",
"name": "John Doe",
"scopes": [
"company-admin"
]
}
],
"metadata": {
"total": 1,
"page": 1,
"limit": 10,
"totalPages": 1,
"timestamp": "2026-04-07T15:56:49.998Z"
}
}
8 endpoints
Get all companies
{
"data": [
{
"id": "123",
"name": "Example Company",
"isActive": true,
"createdAt": "2026-04-07T15:56:50.007Z",
"updatedAt": "2026-04-07T15:56:50.007Z"
}
],
"metadata": {
"total": 100,
"page": 1,
"limit": 10,
"totalPages": 10,
"timestamp": "2026-04-07T15:56:50.007Z"
}
}
Create a new company
{
"data": {
"id": "company123",
"name": "Example Company",
"webhookUrl": "https://example.com/webhook",
"createdAt": "2026-04-07T15:56:50.008Z",
"updatedAt": "2026-04-07T15:56:50.008Z",
"isActive": true
}
}
Delete a company
{
"data": {
"success": true
}
}
Get detailed information about a specific company
{
"data": {
"id": "company123",
"name": "Example Company",
"createdAt": "2026-04-07T15:56:50.007Z",
"updatedAt": "2026-04-07T15:56:50.007Z",
"isActive": true
}
}
Update an existing company
{
"data": {
"id": "company123",
"name": "Updated Company Name",
"webhookUrl": "https://example.com/webhook",
"createdAt": "2026-04-07T15:56:50.008Z",
"updatedAt": "2026-04-07T15:56:50.008Z",
"isActive": true
}
}
Get a company's client credentials
{
"data": {
"clientId": "client123",
"clientSecret": "new-secret-key",
"webhookSecret": "new-webhook-secret",
"companyId": "company123"
}
}
Get all users associated with a company
{
"data": [
{
"id": "user123",
"email": "user@example.com",
"name": "John Doe",
"scopes": [
"company-admin"
]
}
],
"metadata": {
"total": 1,
"page": 1,
"limit": 10,
"totalPages": 1,
"timestamp": "2026-04-07T15:56:50.010Z"
}
}
Search users within a specific company
{
"data": [
{
"id": "user123",
"email": "user@example.com",
"name": "John Doe",
"scopes": [
"company-admin"
]
}
],
"metadata": {
"total": 1,
"page": 1,
"limit": 10,
"totalPages": 1,
"timestamp": "2026-04-07T15:56:50.010Z"
}
}
8 endpoints
Retrieve all documents
{
"data": [
{
"id": "23f3ed80-7688-4152-91ff-b74fda59bd57",
"name": "Contract Agreement",
"description": "Please review and sign",
"type": "Standard",
"companyId": "company-123",
"status": "Waiting For Me",
"createdAt": "2026-04-07T15:56:49.989Z",
"updatedAt": "2026-04-07T15:56:49.989Z",
"signers": [
{
"id": "1624b7d5-1b96-436d-a576-7c64735a045d",
"name": "John Doe",
"email": "john@example.com",
"status": "Completed",
"signedAt": "2026-04-07T15:56:49.989Z",
"updatedAt": "2026-04-07T15:56:49.989Z",
"order": 1,
"signerType": "Signer"
}
]
}
],
"metadata": {
"total": 100,
"page": 1,
"limit": 10,
"totalPages": 10,
"timestamp": "2026-04-07T15:56:49.989Z"
}
}
Create a new document
When documentSource=Upload, attach files[] (PDF). When documentSource=Template, pass templateId instead.
{
"data": {
"id": "doc-123",
"name": "Contract Agreement",
"description": "Please review and sign",
"companyId": "company-123",
"company": {
"id": "company-123",
"name": "Example Company",
"createdAt": "2026-04-07T15:56:49.994Z",
"updatedAt": "2026-04-07T15:56:49.994Z",
"isActive": true
},
"createdAt": "2026-04-07T15:56:49.994Z",
"updatedAt": "2026-04-07T15:56:49.994Z",
"type": "Standard",
"typeRecipient": "ID_DOCUMENT",
"status": "Draft",
"signers": [
{
"id": "signer-1",
"name": "John Doe",
"email": "john@example.com",
"status": "Pending",
"order": 1,
"signerType": "Signer",
"signerRole": "Primary Signer",
"phoneNumber": "+1234567890",
"nationality": "UK"
},
{
"id": "signer-2",
"name": "Jane Smith",
"email": "jane@example.com",
"status": "Pending",
"order": 2,
"signerType": "Signer",
"signerRole": "Secondary Signer",
"phoneNumber": "+0987654321",
"nationality": "GB"
}
]
},
"metadata": {
"timestamp": "2026-04-07T15:56:49.994Z"
}
}
Search for documents by name or description within a specific company
{
"data": [
{
"id": "23f3ed80-7688-4152-91ff-b74fda59bd57",
"name": "Contract Agreement",
"description": "Please review and sign",
"type": "Standard",
"companyId": "company-123",
"status": "Waiting For Me",
"createdAt": "2026-04-07T15:56:49.989Z",
"updatedAt": "2026-04-07T15:56:49.989Z",
"signers": [
{
"id": "1624b7d5-1b96-436d-a576-7c64735a045d",
"name": "John Doe",
"email": "john@example.com",
"status": "Completed",
"signedAt": "2026-04-07T15:56:49.989Z",
"updatedAt": "2026-04-07T15:56:49.989Z",
"order": 1,
"signerType": "Signer"
}
]
}
],
"metadata": {
"total": 100,
"page": 1,
"limit": 10,
"totalPages": 10,
"timestamp": "2026-04-07T15:56:49.989Z"
}
}
Get document statistics for both company and individual user
{
"data": {
"company": {
"awaitingUs": 5,
"awaitingOthers": 3,
"completed": 10,
"terminated": 2,
"needsAttention": 1,
"declined": 1,
"expired": 1,
"revoked": 1,
"draft": 2,
"scheduled": 1,
"total": 20
},
"user": {
"awaitingMe": 2,
"awaitingOthers": 3,
"completed": 5,
"terminated": 1,
"needsAttention": 1,
"declined": 1,
"expired": 1,
"revoked": 1,
"draft": 2,
"scheduled": 1,
"total": 11
}
},
"metadata": {
"timestamp": "2026-04-07T15:56:49.990Z"
}
}
{
"data": [
{
"month": "Jan",
"monthNumber": 0,
"awaitingMe": 0,
"awaitingOthers": 0,
"needsAttention": 0,
"revoked": 0,
"signed": 0,
"notSigned": 0,
"total": 0
}
],
"metadata": {
"timestamp": "2026-04-07T15:56:49.991Z"
}
}
Get a document by ID
{
"data": {
"id": "23f3ed80-7688-4152-91ff-b74fda59bd57",
"name": "Contract Agreement",
"description": "Please review and sign",
"type": "Standard",
"companyId": "company-123",
"status": "Waiting For Me",
"createdAt": "2026-04-07T15:56:49.991Z",
"updatedAt": "2026-04-07T15:56:49.991Z",
"signers": [
{
"id": "1624b7d5-1b96-436d-a576-7c64735a045d",
"name": "John Doe",
"email": "john@example.com",
"status": "Completed",
"signedAt": "2026-04-07T15:56:49.991Z",
"updatedAt": "2026-04-07T15:56:49.991Z",
"order": 1,
"signerType": "Signer"
}
]
},
"metadata": {
"timestamp": "2026-04-07T15:56:49.991Z"
}
}
Update an existing document
Download a document file
6 endpoints
List Esign template records for current user
Create a Esign template record
The roles field can be JSON string or array.
{
"data": {
"id": "template-uuid",
"boldSignTemplateId": "boldsign-template-id",
"name": "Employment Contract",
"description": "Standard employment contract",
"signersCount": 2,
"roles": [
{
"name": "Employee",
"signerType": "Signer",
"index": 1
},
{
"name": "Employer",
"signerType": "Signer",
"index": 2
}
],
"userId": "user-uuid",
"errorMessage": null,
"createUrl": "https://app.boldsign.com/embedded/...",
"status": "completed",
"files": [
{
"name": "employment-contract.pdf",
"type": "application/pdf"
}
],
"createdAt": "2026-04-07T15:56:50.011Z",
"updatedAt": "2026-04-07T15:56:50.011Z",
"deletedAt": null
}
}
Soft delete Esign template record
Get Esign template record by ID
Update Esign template record
The roles field can be JSON string or array.
Get embedded template edit URL
{
"data": {
"editUrl": "https://app.boldsign.com/embedded/..."
}
}
2 endpoints
{
"contentType": "application/pdf"
}
Get a file by its key
{
"contentType": "application/pdf"
}
4 endpoints
Get ID card information
{
"data": {
"id": "id-card-123",
"createdAt": "2024-03-20T12:00:00.000Z",
"updatedAt": "2024-03-20T12:00:00.000Z"
}
}
Create a new ID card
Supports up to 3 images. File size max 40MB.
{
"data": {
"id": "id-card-123",
"createdAt": "2024-03-20T12:00:00.000Z",
"updatedAt": "2024-03-20T12:00:00.000Z"
}
}
Delete an ID card
{
"data": {
"data": "Delete id card success"
}
}
Update an existing ID card
{
"data": {
"id": "id-card-123",
"createdAt": "2024-03-20T12:00:00.000Z",
"updatedAt": "2024-03-20T12:00:00.000Z"
}
}
3 endpoints
Verify user identity
{
"data": {
"id": "123",
"decisionDate": "2026-04-07T15:56:49.869Z",
"localName": "John Doe",
"document": {
"type": "Passport",
"number": "P123456789",
"validFrom": "2020-01-01T00:00:00.000Z",
"validUntil": "2030-01-01T00:00:00.000Z",
"firstName": "John",
"lastName": "Doe",
"gender": "Male",
"citizenship": "Untied Kingdom",
"dateOfBirth": "1990-01-01T00:00:00.000Z",
"placeOfBirth": "London",
"status": "verified"
}
},
"metadata": {
"timestamp": "2026-04-07T15:56:49.869Z"
}
}
Get verification status
{
"data": {
"id": "123",
"decisionDate": "2026-04-07T15:56:49.870Z",
"localName": "John Doe",
"document": {
"type": "Passport",
"number": "P123456789",
"validFrom": "2020-01-01T00:00:00.000Z",
"validUntil": "2030-01-01T00:00:00.000Z",
"firstName": "John",
"lastName": "Doe",
"gender": "Male",
"citizenship": "United Kingdom",
"dateOfBirth": "1990-01-01T00:00:00.000Z",
"placeOfBirth": "London",
"status": "verified"
}
},
"metadata": {
"timestamp": "2026-04-07T15:56:49.870Z"
}
}
Download verification PDF
5 endpoints
Handle Evrotrust Web SDK callback (via Redirect)
Get Evrotrust document identification data
{
"data": {
"transactionID": "975873900988",
"threadID": "432A97C5F068"
}
}
Download Evrotrust document
Get Evrotrust document status
{
"data": {
"transactionID": "601071623405"
}
}
Create an Evrotrust Web SDK session
2 endpoints
Handle BoldSign webhook events
Signed payload from BoldSign. Verify signature with x-webhook-signature header.
{
"data": [
{
"status": "signed",
"signerEmail": "user@example.com"
}
]
}
Listener webhook event
Listener endpoint for webhook events.
{
"data": {
"status": "received",
"event": "signed",
"data": {
"json": {
"documentId": "123"
},
"files": [
{
"name": "document.pdf",
"content": "base64content",
"type": "application/pdf",
"size": 1024,
"metadata": {
"pageCount": 5,
"signedBy": "John Doe"
}
}
]
}
},
"metadata": {
"timestamp": "2026-04-07T15:56:49.830Z"
}
}
1 endpoints
Check application health and dependencies
{
"data": {
"buildId": "v1.0.0-20240320.1"
}
}
Using the API
Standard HTTP errors with structured error payloads.
Missing required fields or invalid form-data.
Invalid token or missing `Authorization` header.
Token lacks the required scopes for the endpoint.
Unexpected exception. Provide `X-Request-ID` for support.
{
"data": null,
"error": {
"code": "AUTH_401",
"message": "Invalid access token",
"details": {
"field": "Authorization",
"reason": "expired"
}
}
}