Aurea License Portal

Aurea License Portal

Aurea License Integration

A public contract describing how Aurea on-premise environments obtain and verify signed license files for active Community and paid organizations.

License scope Organization Licenses are assigned to Aurea organizations, not to VMs, installations or workspaces.
License delivery Signed JSON file The same license file can be downloaded automatically or manually.
Verification Local verification Aurea verifies the signature, organization, environment, validity and entitlements locally.

Overview

What this integration does

Aurea License Portal provides a signed license file for an active Community or paid Aurea organization. An on-premise Aurea environment uses this file to determine which edition, primary limit and validity period apply to the organization.

The license file can be obtained in two equivalent ways: Aurea may download it through a read-only API by using a license download token, or an administrator may download the same file from the portal and upload or paste it into Aurea.

The license file is verified locally by Aurea. A temporary network issue does not invalidate an already downloaded and still valid license file.

Transparency

What data is exchanged

The license download API is intentionally narrow. It is used to retrieve the current signed license file for one organization.

Direction Data Purpose
Aurea → License Portal organizationId in the URL Identifies the licensed Aurea organization.
Aurea → License Portal Authorization: Bearer ldt_... Authenticates license download for that organization only.
License Portal → Aurea Signed JSON license file Provides edition, validity, environment type and entitlements (Community: users.active=5).

Diagnostic and telemetry data

The license download endpoint described here returns a license file. Aurea may also exchange limited diagnostic data required to confirm license compliance, such as environment type, active user count or usage counters relevant to licensed limits.

Broader product telemetry is optional and intended to be based on customer consent. It should be limited to technical or statistical information and should not include business documents, form contents, process payloads or other customer business data.

The license format, API description and JSON Schema are public by design. Security depends on the license download token and on the private signing key, not on hiding the file format.

Concepts

Core license model

Account
Customer account in Aurea License Portal. It groups subscriptions, licensed organizations and portal users.
Organization
Licensed tenant in Aurea, identified by organizationId. The license is assigned to an organization, not to a VM, installation or workspace.
License
Commercial and technical grant for one organization. It defines the edition, validity period and entitlements.
License file
Signed JSON document issued by Aurea License Portal and verified locally by Aurea.
License download token
Secret token used only to download the license file for one organization. It starts with ldt_, is shown only once, and is stored by the portal only as a hash and fingerprint.
Environment type
One of production, staging, test or development. Aurea verifies that the license matches the current organization environment.

API contract

License retrieval endpoint

This endpoint returns the current signed license file for one active Community or paid organization. It does not grant access to account management, billing, users, subscriptions or other portal APIs.

Request

GET /api/v1/organizations/{organizationId}/license

Authorization: Bearer <license-download-token>
Accept: application/json

Example

curl -fsS \
  -H "Authorization: Bearer ldt_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
  -H "Accept: application/json" \
  "https://license.aurea.software/api/v1/organizations/org_01k2n7pmv9y4z6c5r8f2wq3hda/license" \
  -o aurea-license.json
Status Meaning Recommended Aurea behavior
200 Signed license file returned. Verify the file locally and store it as the latest valid license.
401 Missing, malformed or invalid license download token. Report configuration/token error to the administrator.
404 Organization not found or token does not belong to this organization. Check the configured organizationId and token pairing.
409 The organization is inactive or its paid grant is not currently issuable. Active Community returns 200. Keep using the last valid local license if it is still within validity or grace period.

License file

Signed JSON format

The top-level document contains payload and signature. The payload contains license data. The signature proves that the payload was issued by Aurea License Portal.

{
  "payload": {
    "schemaVersion": 1,
    "licenseRevision": 1,
    "licenseId": "lic_550e8400e29b41d4a716446655440000",
    "licenseType": "subscription",
    "edition": "standard",
    "account": {
      "accountId": "acct_550e8400e29b41d4a716446655440001",
      "name": "Tecna Sp. z o.o."
    },
    "organization": {
      "organizationId": "org_01k2n7pmv9y4z6c5r8f2wq3hda",
      "name": "Tecna",
      "environmentType": "production"
    },
    "validity": {
      "issuedAt": "2026-06-15T12:00:00Z",
      "validFrom": "2026-06-15T12:00:00Z",
      "validUntil": "2026-07-17T12:00:00Z",
      "graceUntil": "2026-07-31T12:00:00Z"
    },
    "entitlements": [
      {
        "code": "users.active",
        "value": 50
      }
    ]
  },
  "signature": {
    "algorithm": "Ed25519",
    "canonicalization": "jcs-rfc8785",
    "keyId": "aurea-license-signing-2026-01",
    "value": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
  }
}

Important payload fields

  • licenseId is lic_ plus 32 lowercase hexadecimal UUID characters.
  • licenseRevision starts at 1 and increases per organization whenever the effective license data changes. It is part of the signed payload.
  • licenseType is subscription, perpetual, or community.
  • edition describes functional scope: core or standard.
  • account.accountId is acct_ plus 32 lowercase hexadecimal UUID characters.
  • organization.organizationId binds the license to one Aurea organization.
  • Organization is always required; its ID is org_ plus a lowercase Crockford ULID.
  • organization.environmentType binds the license to one environment type.
  • entitlements contains exactly one primary limit. Community requires users.active=5.
  • Active Community organizations receive a signed Community License File: licenseType=community, edition=standard. Community is a license type, not an edition or perpetual license: Standard edition, up to 5 active users, no expiration.
  • Community validity contains only issuedAt and validFrom=issuedAt: NOT_YET_VALID when now < validFrom, and VALID when now >= validFrom. No expiry or grace applies.

The Community License File confirms/registers Community in License Portal. The future consumer will also use Community as a fallback without a registered License File; a missing downloaded file does not mean Community is unavailable. This fallback is the consumer's responsibility, not implemented in Portal.

Signature fields

  • algorithm: Ed25519.
  • canonicalization: jcs-rfc8785.
  • keyId: identifier of the signing key.
  • value: Ed25519 signature over canonical payload bytes.

Verification

How Aurea verifies the license

Aurea verifies the license file before trusting any payload field.

Verification rules

  1. Parse the JSON document.
  2. Read payload and signature.
  3. Verify supported schemaVersion.
  4. Verify signature.algorithm and signature.canonicalization.
  5. Canonicalize payload using JCS / RFC 8785.
  6. Verify the Ed25519 signature over canonical payload bytes.
  7. Verify organizationId and environmentType.
  8. Verify validity period and apply entitlements.

Pseudo-code

document = parseJson(licenseFile)
payload = document.payload
signature = document.signature

require(payload.schemaVersion == 1)
require(payload.licenseRevision >= 1)
require(signature.algorithm == "Ed25519")
require(signature.canonicalization == "jcs-rfc8785")

canonicalPayload = canonicalizeJcs(payload)
require(verifyEd25519(
  publicKey(signature.keyId),
  canonicalPayload,
  base64urlDecode(signature.value)
))

require(payload.organization.organizationId == currentOrganizationId)
require(payload.organization.environmentType == currentEnvironmentType)
require(now >= payload.validity.validFrom)
if (payload.licenseType == "subscription") {
  require(now < payload.validity.graceUntil)
}

applyEntitlements(payload.entitlements)

The signature covers only the payload object. It does not cover the top-level wrapper or the signature object itself.

Repeated successful downloads of unchanged license data return the exact same signed file, including its revision, license ID and issue time. A change issues a new revision; returning to earlier license data still creates a higher revision.

Canonical JSON

Signature input

Before signing and verifying, the payload object is canonicalized using JCS / RFC 8785. This makes the signature independent of whitespace, pretty-printing and JSON object field order.

For schema version 1, the payload uses only JSON types safe for canonicalization: object, array, string and integer values. Floating point numbers are not used in the license payload.

Validity

Validity and offline behavior

Field Meaning
issuedAt Timestamp when the license file was issued by License Portal.
validFrom Timestamp from which the license file is valid.
validUntil End of the normal subscription validity period. Omitted for perpetual and Community licenses.
graceUntil End of the subscription grace period. Omitted for perpetual and Community licenses.

Subscription validity contains all four fields above. Perpetual and Community validity contain only issuedAt and validFrom.

Subscription: before validFrom is NOT_YET_VALID; from validFrom (inclusive) to validUntil (exclusive) is VALID; from validUntil (inclusive) to graceUntil (exclusive) is GRACE; at or after graceUntil is EXPIRED. Perpetual and Community: before validFrom is NOT_YET_VALID, and at or after validFrom is VALID.

Aurea should keep the last successfully verified license file locally. A temporary API error should not remove or invalidate a local license file that is still within its validity or grace period.

Entitlements

Primary limits

For paid licenses, the entitlements array contains exactly one object with only a code and positive integer value. Aurea evaluates it locally after signature and validity checks pass.

Edition License type Primary entitlement
core subscription users.active
standard subscription or perpetual users.active, business_processes.active, or compute.cores
standard community Exactly users.active = 5
{
  "code": "compute.cores",
  "value": 16
}

compute.cores is the maximum CPU or vCPU allocated to the entire running Aurea environment. If multiple valid Processor files are loaded in one environment, the effective limit is the maximum compute.cores value, not their sum. Values 32, 32, and 32 produce an effective limit of 32; values 16 and 32 also produce 32. Each file remains organization-scoped.

Resources

Machine-readable contract

These files are provided for implementation, integration testing and security review.