Skip to content

Commit 490acf6

Browse files
tothandrashekike
andauthored
feat(api): v3 list entitlement access (#3693)
Co-authored-by: Peter Marton <peter@openmeter.io>
1 parent fb2c455 commit 490acf6

File tree

16 files changed

+623
-117
lines changed

16 files changed

+623
-117
lines changed
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import "../../types.tsp";
2+
import "./entitlements.tsp";
3+
4+
namespace Entitlements;
5+
6+
/**
7+
* Entitlement access result.
8+
*/
9+
@friendlyName("BillingEntitlementAccessResult")
10+
model EntitlementAccessResult {
11+
/**
12+
* The type of the entitlement.
13+
*/
14+
@example(EntitlementType.static)
15+
@visibility(Lifecycle.Read)
16+
type: EntitlementType;
17+
18+
/**
19+
* The feature key of the entitlement.
20+
*/
21+
@example("available_models")
22+
@visibility(Lifecycle.Read)
23+
feature_key: ExternalKey;
24+
25+
/**
26+
* Whether the customer has access to the feature.
27+
* Always true for `boolean` and `static` entitlements.
28+
* Depends on balance for `metered` entitlements.
29+
*/
30+
@example(true)
31+
@visibility(Lifecycle.Read)
32+
has_access: boolean;
33+
34+
/**
35+
* Only available for static entitlements.
36+
* Config is the JSON parsable configuration of the entitlement.
37+
* Useful to describe per customer configuration.
38+
*/
39+
@example("{ \"availableModels\": [\"gpt-5\", \"gpt-4o\"] }")
40+
@visibility(Lifecycle.Read)
41+
config?: string;
42+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
namespace Entitlements;
2+
3+
/**
4+
* The type of the entitlement.
5+
*/
6+
@friendlyName("BillingEntitlementType")
7+
enum EntitlementType {
8+
metered,
9+
static,
10+
boolean,
11+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import "./entitlements.tsp";
2+
import "./access.tsp";
3+
import "./operations.tsp";
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import "@typespec/http";
2+
import "@typespec/rest";
3+
import "@typespec/openapi";
4+
import "@typespec/openapi3";
5+
import "../common/error.tsp";
6+
import "../shared/index.tsp";
7+
import "./access.tsp";
8+
9+
using TypeSpec.Http;
10+
using TypeSpec.OpenAPI;
11+
12+
namespace Entitlements;
13+
14+
/**
15+
* List the customer's active features and their access.
16+
*/
17+
@friendlyName("ListCustomerEntitlementAccessResponse")
18+
model ListCustomerEntitlementAccessResponse {
19+
@Http.statusCode _: 200;
20+
@body body: ListCustomerEntitlementAccessResponseData;
21+
}
22+
23+
/**
24+
* List customer entitlement access response data.
25+
*/
26+
@friendlyName("ListCustomerEntitlementAccessResponseData")
27+
model ListCustomerEntitlementAccessResponseData {
28+
/**
29+
* The list of entitlement access results.
30+
*/
31+
@visibility(Lifecycle.Read)
32+
data: EntitlementAccessResult[];
33+
}
34+
35+
interface CustomerEntitlementsOperations {
36+
@get
37+
@operationId("list-customer-entitlement-access")
38+
@summary("List customer entitlement access")
39+
@extension(Shared.UnstableExtension, true)
40+
@extension(Shared.InternalExtension, true)
41+
list(
42+
@path customerId: Shared.ULID,
43+
): ListCustomerEntitlementAccessResponse | Common.NotFound | Common.ErrorResponses;
44+
}

api/spec/src/v3/konnect.tsp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import "./shared/index.tsp";
66
import "./events/index.tsp";
77
import "./meters/index.tsp";
88
import "./customers/index.tsp";
9+
import "./entitlements/index.tsp";
910

1011
using TypeSpec.Http;
1112
using TypeSpec.OpenAPI;
@@ -29,6 +30,10 @@ using TypeSpec.OpenAPI;
2930
@tagMetadata(Shared.MetersTag, #{ description: Shared.MetersDescription })
3031
@tagMetadata(Shared.EventsTag, #{ description: Shared.EventsDescription })
3132
@tagMetadata(Shared.CustomersTag, #{ description: Shared.CustomersDescription })
33+
@tagMetadata(
34+
Shared.EntitlementsTag,
35+
#{ description: Shared.EntitlementsDescription }
36+
)
3237
@useAuth(systemAccountAccessToken | personalAccessToken | konnectAccessToken)
3338
namespace MeteringAndBilling;
3439

@@ -47,6 +52,13 @@ interface MetersEndpoints extends Meters.MetersOperations {}
4752
@friendlyName("${Shared.MeteringAndBillingTitle}: ${Shared.CustomersTag}")
4853
interface CustomersEndpoints extends Customers.CustomersOperations {}
4954

55+
@route("/openmeter/customers/{customerId}/entitlement-access")
56+
@tag(Shared.CustomersTag)
57+
@tag(Shared.EntitlementsTag)
58+
@friendlyName("${Shared.MeteringAndBillingTitle}: ${Shared.EntitlementsTag}")
59+
interface CustomerEntitlementsEndpoints
60+
extends Entitlements.CustomerEntitlementsOperations {}
61+
5062
/**
5163
* The system account access token is meant for automations and integrations that are not directly associated with a human identity.
5264
*/

api/spec/src/v3/openmeter.tsp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@ using TypeSpec.OpenAPI;
2727
@tagMetadata(Shared.MetersTag, #{ description: Shared.MetersDescription })
2828
@tagMetadata(Shared.EventsTag, #{ description: Shared.EventsDescription })
2929
@tagMetadata(Shared.CustomersTag, #{ description: Shared.CustomersDescription })
30+
@tagMetadata(
31+
Shared.EntitlementsTag,
32+
#{ description: Shared.EntitlementsDescription }
33+
)
3034
namespace OpenMeter;
3135

3236
@route("/openmeter/events")
@@ -43,3 +47,10 @@ interface MetersEndpoints extends Meters.MetersOperations {}
4347
@tag(Shared.CustomersTag)
4448
@friendlyName("${Shared.OpenMeterTitle}: ${Shared.CustomersTag}")
4549
interface CustomersEndpoints extends Customers.CustomersOperations {}
50+
51+
@route("/openmeter/customers/{customerId}/entitlement-access")
52+
@tag(Shared.CustomersTag)
53+
@tag(Shared.EntitlementsTag)
54+
@friendlyName("${Shared.OpenMeterTitle}: ${Shared.EntitlementsTag}")
55+
interface CustomerEntitlementsEndpoints
56+
extends Entitlements.CustomerEntitlementsOperations {}

0 commit comments

Comments
 (0)