canonical: https://jentic.com/apis/keyserv.solutions/keyserv

# Keyserv Solutions KeyServ

The KeyServ API is the public surface for KeyServ's licence-key management service. The 24 endpoints split into KeysApi operations - finding a key by serial, reading the current key, fetching the active expiry, and reading custom metadata - and ProductsApi operations that count, list, find, save, create, update, and delete the products that licence keys are issued against. The base URL is https://keyserv.solutions and most write operations live under `/v1/ProductsApi` while the read-side licence checks live under `/v1/KeysApi.` The spec does not declare a security scheme; KeyServ accounts authorise calls through their own deployment-level policies.

## For AI agents

Look up licence keys by serial, read current and custom key metadata, and manage the product catalog that licence keys are issued against through 24 KeyServ endpoints.

## Scope

Does not handle payments, checkout, or end-user licence delivery emails - use for KeyServ licence-key validation and product-catalog management only.

## Capabilities

- Find a licence key by its serial number through the KeysApi endpoints
- Read the current key state and active expiry date for a serial
- Read custom metadata stored against a licence key
- List, count, and find products in the KeyServ product catalog
- Create, update, save, and delete products that licence keys are issued against
- Look up product details by serial through the ProductsApi

## Use cases

### Licence Validation at Application Startup

Validate a customer's licence key when their application starts up by calling `/v1/KeysApi/Current/{serial}` and `/v1/KeysApi/Expiry/{serial}` from the app's licensing module. The endpoints return the current key state and active expiry so the app can decide whether to allow the session, prompt for renewal, or run in a degraded mode. Most teams ship licence checks in a few hours.

Example prompt: GET `/v1/KeysApi/Current/{serial}` for the customer's serial, then GET `/v1/KeysApi/Expiry/{serial}` to confirm the expiry date is in the future

### Custom Licence Metadata Retrieval

Retrieve custom metadata stored against a licence - such as feature flags, seat counts, or contract identifiers - through `/v1/KeysApi/Custom/{serial}.` The application reads this on each session to decide which features to enable, without holding a separate entitlements database. KeyServ becomes the single source of truth for licence metadata.

Example prompt: GET `/v1/KeysApi/Custom/{serial}` and parse the returned metadata into the feature flags the application reads at runtime

### Product Catalog Lifecycle

Maintain the catalog of products that licence keys are issued against through the ProductsApi. POST creates a new product, PATCH updates an existing one, DELETE retires it, and the count and list endpoints surface the catalog state for an internal admin tool. Pair these endpoints with the KeysApi to keep keys aligned with the products they unlock.

Example prompt: POST `/v1/ProductsApi` to create a new product, then GET `/v1/ProductsApi/Count` to confirm the catalog total reflects the addition

### AI Agent Licence Operations Helper

An AI agent that helps a support team handle licence questions uses Jentic to call KeyServ on demand - looking up a customer's serial, reading expiry, surfacing custom metadata, or finding the related product. Because the surface is small and well-named, intent-based discovery returns the right operation reliably for each request.

Example prompt: Through Jentic, search for 'look up a keyserv licence', load GET `/v1/KeysApi/Find/{serial}`, and execute it for the customer's serial

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| GET | `/v1/KeysApi/Find/{serial}` | Find a licence key by serial |
| GET | `/v1/KeysApi/Current/{serial}` | Read the current key state for a serial |
| GET | `/v1/KeysApi/Custom/{serial}` | Read custom metadata for a licence key |
| GET | `/v1/KeysApi/Expiry/{serial}` | Read the active expiry for a serial |
| POST | `/v1/ProductsApi/Count` | Count products in the catalog |
| POST | `/v1/ProductsApi/Find` | Find a product by criteria |
| POST | `/v1/ProductsApi` | Create a new product |
| DELETE | `/v1/ProductsApi/{serial}` | Delete a product by serial |

## Key resources

- **KeysApi** — Find, read, and inspect licence keys by serial number
- **ProductsApi** — List, count, find, create, update, save, and delete products in the catalog

## Why Jentic

- **Setup:** Wiring KeyServ by hand means setting up whatever auth header your deployment requires, calling keyserv.solutions, and mapping licence-key lookups and product management to their shapes yourself. Through Jentic you install once, import KeyServ from the API Directory, store the credential once, and your agent calls it.
- **Permission scoping:** KeyServ splits its work across licence lookups and product operations, so scope the agent by the ones it needs, such as finding a licence by serial or counting products. You pick that set, so a destructive one like deleting a product is not included unless you add it.
- **Credential handling:** Whatever auth header your KeyServ deployment requires is stored once, encrypted, by your own Jentic One instance and injected at execution time. It never enters the agent's prompt, logs, or context.
- **Discovery method:** Agents search Jentic by intent such as 'look up a KeyServ licence' or 'find a product', and Jentic returns the matching KeysApi or ProductsApi operation with its input schema so the agent calls the right endpoint without reading the reference docs.

## Related APIs

- **Gumroad** — Gumroad sells software licences end-to-end with built-in checkout and licence-key issuance.
- **Paddle** — Paddle is a merchant of record that handles billing, tax, and licence delivery for software vendors.
- **Stripe** — Stripe handles the payment side that KeyServ does not, while KeyServ stores and validates the resulting licence.

## FAQ

### What authentication does the KeyServ API use?

The OpenAPI spec does not declare a security scheme. KeyServ deployments authorise calls through their own account-level policies; check the headers expected by your KeyServ instance and configure them in the Jentic credential store. Jentic injects whatever credential is configured on every call so the raw value never enters the agent's context.

### Can I look up a licence key by serial with the KeyServ API?

Yes. GET `/v1/KeysApi/Find/{serial}` returns the matching key record. For the most common runtime checks use GET `/v1/KeysApi/Current/{serial}` for the current key state and GET `/v1/KeysApi/Expiry/{serial}` for the active expiry date.

### What are the rate limits for the KeyServ API?

The OpenAPI spec does not publish a rate limit. KeyServ deployments are typically sized for licence-validation traffic, which is usually one call per session start, so per-second limits are rarely the constraint. If you receive HTTP 429, back off exponentially and retry.

### How do I read custom licence metadata through Jentic?

Search Jentic for 'read keyserv custom metadata' to find GET `/v1/KeysApi/Custom/{serial}`, load its schema, and execute it with the licence serial. The Jentic flow is pip install jentic, then client.search, client.load, and client.execute.

### Can I manage the product catalog through the KeyServ API?

Yes. POST `/v1/ProductsApi` creates a product, PATCH `/v1/ProductsApi` updates one, POST `/v1/ProductsApi/Save` persists changes, and DELETE `/v1/ProductsApi/{serial}` retires a product. Use POST `/v1/ProductsApi/List` and POST `/v1/ProductsApi/Count` for read-side reporting.

### Can I limit what my agent is allowed to do with the KeyServ API?

Yes. Because Jentic One is self-hosted, you decide which KeyServ operations your agent can call, and your own rules govern the set. You can allow only read-side licence lookups such as GET `/v1/KeysApi/Find/{serial}`, `/v1/KeysApi/Current/{serial}`, `/v1/KeysApi/Expiry/{serial}`, and `/v1/KeysApi/Custom/{serial}` while leaving out product writes. A destructive operation like DELETE `/v1/ProductsApi/{serial}` or POST `/v1/ProductsApi` is available to the agent only if you add it, and the credential your deployment requires is stored by your own instance and injected at call time rather than exposed to the agent.
