Skip to main content

Base URL

https://api.tablepro.app/v1

Endpoints

Three endpoints for license lifecycle management:
MethodEndpointDescription
POST/license/activateActivate a license on a machine
POST/license/validateValidate an active license
POST/license/deactivateDeactivate a license from a machine

Request Format

All requests must be JSON with the Content-Type: application/json header.

Common Parameters

ParameterTypeDescription
license_keystringLicense key in XXXXX-XXXXX-XXXXX-XXXXX-XXXXX format (alphanumeric)
machine_idstringSHA-256 hash of machine identifier (64 hex characters)

Response Format

Successful activation and validation responses return signed license data:
{
  "data": {
    "email": "[email protected]",
    "expires_at": "2027-02-11T00:00:00+00:00",
    "issued_at": "2026-02-12T10:30:00+00:00",
    "license_key": "ABCDE-12345-FGHIJ-67890-KLMNO",
    "status": "active"
  },
  "signature": "base64-encoded-signature"
}
The signature field is an RSA-SHA256 cryptographic signature of the data object. Verify it client-side with the public key to ensure response integrity.

Response Signing

All successful activate and validate responses are cryptographically signed:
  1. data object fields are sorted alphabetically by key
  2. The sorted object is JSON-encoded
  3. The JSON string is signed with RSA-SHA256
  4. The signature is returned as Base64
This lets the client verify that license data hasn’t been tampered with.

Rate Limiting

All endpoints are rate-limited. Rate limit info is in the response headers:
HeaderDescription
X-RateLimit-LimitMax requests allowed in the current window
X-RateLimit-RemainingRequests remaining in the current window
X-RateLimit-ResetUnix timestamp when the window resets
When exceeded, the API returns 429:
{
  "message": "Too many requests.",
  "retry_after": 60
}

Error Handling

Error responses use a consistent format:
{
  "message": "Human-readable error message."
}

Status Codes

CodeDescription
200Success
403License suspended, expired, or machine not activated
404License key not found
409Activation limit reached
422Validation error (invalid request parameters)
429Rate limit exceeded

Validation Errors

422 responses include field-level details:
{
  "message": "The given data was invalid.",
  "errors": {
    "license_key": ["The license key field is required."],
    "machine_id": ["The machine id must be 64 characters."]
  }
}

License Statuses

StatusDescription
activeLicense is valid and usable
suspendedLicense is suspended and cannot be activated or validated