Lago Entitlements API

Everything about Entitlement collection

Operations 10

POST /plans/{code}/entitlements Create an entitlement #
GET /plans/{code}/entitlements List all entitlements #
PATCH /plans/{code}/entitlements Partial update of an entitlement #
GET /plans/{code}/entitlements/{feature_code} Retrieve an entitlement #
DELETE /plans/{code}/entitlements/{feature_code} Delete an entitlement #
DELETE /plans/{code}/entitlements/{feature_code}/privileges/{privilege_code} Remove a privilege from an entitlement #
GET /subscriptions/{external_id}/entitlements List all subscription entitlements #
PATCH /subscriptions/{external_id}/entitlements Update subscription entitlements #
DELETE /subscriptions/{external_id}/entitlements/{feature_code} Remove an entitlement from a subscription #
DELETE /subscriptions/{external_id}/entitlements/{feature_code}/privileges/{privilege_code} Remove a privilege from a subscription entitlement override #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/lago:lago-entitlements-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

lago-entitlements-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Lago API documentation Entitlements API
  description: Lago API allows your application to push customer information and metrics (events) from your application to the billing application.
  version: 1.55.0
  license:
    name: AGPLv3
    url: https://github.com/getlago/lago-openapi/blob/main/LICENSE
  contact:
    email: tech@getlago.com
servers:
- url: https://api.getlago.com/api/v1
  description: US Lago cluster
- url: https://api.eu.getlago.com/api/v1
  description: EU Lago cluster
security:
- bearerAuth: []
tags:
- name: Entitlements
  description: Everything about Entitlement collection
  externalDocs:
    description: Find out more
    url: https://getlago.com/docs/api-reference/entitlements/plan-entitlements/plan-entitlement-object
paths:
  /plans/{code}/entitlements:
    parameters:
    - name: code
      in: path
      description: Code of the existing plan.
      required: true
      schema:
        type: string
        example: startup
    post:
      tags:
      - Entitlements
      summary: Create an entitlement
      description: This endpoint creates new entitlements by adding features to a plan. Note that all existing entitlements will be deleted and replaced by the ones provided. Sending an empty `entitlements` object, or omitting the key, therefore removes every entitlement of the plan. To add a new entitlement without removing the existing ones, use PATCH. The feature must exist and all privileges must be valid for the feature.
      operationId: createEntitlement
      requestBody:
        description: Entitlement payload
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EntitlementUpdateInput'
        required: true
      responses:
        '200':
          description: Entitlement created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlanEntitlements'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    get:
      tags:
      - Entitlements
      summary: List all entitlements
      description: This endpoint retrieves all entitlements for a specific plan.
      operationId: findAllEntitlements
      responses:
        '200':
          description: List of entitlements
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlanEntitlements'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    patch:
      tags:
      - Entitlements
      summary: Partial update of an entitlement
      description: This accepts a list of entitlements to update. If the feature isn't part of the plan yet, it's added with all the privileges from the payload. If the feature is already part of the plan, the privilege and values are updated or added. All privileges must be valid for the feature. All features and privileges not part of the payload are left untouched. To remove privileges or features, use the DELETE endpoints.
      operationId: updateEntitlement
      requestBody:
        description: Entitlement payload
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EntitlementUpdateInput'
        required: true
      responses:
        '200':
          description: Entitlement updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlanEntitlements'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /plans/{code}/entitlements/{feature_code}:
    parameters:
    - name: code
      in: path
      description: Code of the existing plan.
      required: true
      schema:
        type: string
        example: startup
    - name: feature_code
      in: path
      description: Code of the existing feature.
      required: true
      schema:
        type: string
        example: seats
    get:
      tags:
      - Entitlements
      summary: Retrieve an entitlement
      description: This endpoint retrieves a specific entitlement for a plan.
      operationId: findEntitlement
      responses:
        '200':
          description: Entitlement
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlanEntitlement'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    delete:
      tags:
      - Entitlements
      summary: Delete an entitlement
      description: This endpoint deletes an existing entitlement by removing the feature from the plan.
      operationId: destroyEntitlement
      responses:
        '200':
          description: Entitlement deleted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlanEntitlement'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /plans/{code}/entitlements/{feature_code}/privileges/{privilege_code}:
    parameters:
    - name: code
      in: path
      description: Code of the existing plan.
      required: true
      schema:
        type: string
        example: startup
    - name: feature_code
      in: path
      description: Code of the existing feature.
      required: true
      schema:
        type: string
        example: seats
    - name: privilege_code
      in: path
      description: Code of the privilege to remove from the entitlement.
      required: true
      schema:
        type: string
        example: max_admins
    delete:
      tags:
      - Entitlements
      summary: Remove a privilege from an entitlement
      description: This endpoint removes a specific privilege and its value from an entitlement. The privilege remains untouched on the original feature.
      operationId: removeEntitlementPrivilege
      responses:
        '200':
          description: Entitlement with privilege removed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PlanEntitlement'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /subscriptions/{external_id}/entitlements:
    parameters:
    - name: external_id
      in: path
      description: External ID of the existing subscription
      required: true
      schema:
        type: string
        example: 5eb02857-a71e-4ea2-bcf9-57d3a41bc6ba
    get:
      tags:
      - Entitlements
      summary: List all subscription entitlements
      description: This endpoint retrieves all entitlements for a specific subscription, including both plan entitlements and any subscription-specific overrides.
      operationId: findAllSubscriptionEntitlements
      parameters:
      - $ref: '#/components/parameters/subscription_status'
      responses:
        '200':
          description: List of subscription entitlements
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubscriptionEntitlements'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
    patch:
      tags:
      - Entitlements
      summary: Update subscription entitlements
      parameters:
      - $ref: '#/components/parameters/subscription_status'
      description: This accepts a list of entitlements to update. If the feature isn't part of the subscription yet, it's added with all the privileges from the payload. If the feature is already part of the subscription (via plan or via override), the privilege and values are updated or added. All privileges must be valid for the feature. All features and privileges not part of the payload are left untouched. To remove privileges or features, use the DELETE endpoints.
      operationId: updateSubscriptionEntitlements
      requestBody:
        description: Subscription entitlements payload
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EntitlementUpdateInput'
        required: true
      responses:
        '200':
          description: Subscription entitlements updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubscriptionEntitlements'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /subscriptions/{external_id}/entitlements/{feature_code}:
    parameters:
    - name: external_id
      in: path
      description: External ID of the existing subscription
      required: true
      schema:
        type: string
        example: 5eb02857-a71e-4ea2-bcf9-57d3a41bc6ba
    - name: feature_code
      in: path
      description: Code of the existing feature
      required: true
      schema:
        type: string
        example: seats
    delete:
      tags:
      - Entitlements
      summary: Remove an entitlement from a subscription
      description: This endpoint removes a specific feature entitlement from a subscription. The plan keeps the feature and other subscriptions are not affected, but this subscription stops getting it. It returns the full list of entitlements remaining on the subscription.
      operationId: destroySubscriptionEntitlement
      parameters:
      - $ref: '#/components/parameters/subscription_status'
      responses:
        '200':
          description: Remaining subscription entitlements
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubscriptionEntitlements'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /subscriptions/{external_id}/entitlements/{feature_code}/privileges/{privilege_code}:
    parameters:
    - name: external_id
      in: path
      description: External ID of the existing subscription
      required: true
      schema:
        type: string
        example: 5eb02857-a71e-4ea2-bcf9-57d3a41bc6ba
    - name: feature_code
      in: path
      description: Code of the existing feature.
      required: true
      schema:
        type: string
        example: seats
    - name: privilege_code
      in: path
      description: Code of the privilege to remove from the subscription entitlement override.
      required: true
      schema:
        type: string
        example: max_admins
    delete:
      tags:
      - Entitlements
      summary: Remove a privilege from a subscription entitlement override
      description: This endpoint removes a specific privilege from a subscription entitlement. The plan keeps the privilege and other subscriptions are not affected, but this subscription stops getting it. It returns the full list of entitlements remaining on the subscription.
      operationId: destroySubscriptionEntitlementPrivilege
      parameters:
      - $ref: '#/components/parameters/subscription_status'
      responses:
        '200':
          description: Remaining subscription entitlements
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubscriptionEntitlements'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
components:
  responses:
    BadRequest:
      description: Bad Request error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiErrorBadRequest'
    NotFound:
      description: Not Found error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiErrorNotFound'
    UnprocessableEntity:
      description: Unprocessable entity error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiErrorUnprocessableEntity'
    Unauthorized:
      description: Unauthorized error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiErrorUnauthorized'
  schemas:
    SubscriptionEntitlementObject:
      type: object
      required:
      - code
      - name
      - description
      - privileges
      - overrides
      properties:
        code:
          type: string
          example: seats
          description: Unique code used to identify the feature. Max 255 characters.
        name:
          type:
          - string
          - 'null'
          example: Number of seats
          description: Name of the feature. Max 255 characters.
        description:
          type:
          - string
          - 'null'
          example: Number of users of the account
          description: Description of the feature. Max 600 characters.
        privileges:
          type: array
          items:
            $ref: '#/components/schemas/SubscriptionEntitlementPrivilegeObject'
          example:
          - code: max
            name: Maximum
            value_type: integer
            config: {}
            value: 15
            plan_value: 10
            override_value: 15
          - code: max_admins
            name: Max Admins
            value_type: integer
            config: {}
            value: 5
            plan_value: 5
            override_value: null
          - code: root
            name: Allow root user
            value_type: boolean
            config: {}
            value: true
            plan_value: true
            override_value: null
          - code: provider
            name: SSO Provider
            value_type: select
            value: okta
            plan_value: google
            override_value: okta
            config:
              select_options:
              - google
              - okta
          description: Privileges associated with this feature. Each privilege shows the plan value and any subscription override.
        overrides:
          type: object
          additionalProperties: true
          example:
            max: 15
            provider: okta
          description: Privilege values set on this subscription only. Each key is a privilege code and each value is the subscription override. Privileges that use the plan value are not listed.
    PlanEntitlementPrivilegeObject:
      allOf:
      - $ref: '#/components/schemas/FeaturePrivilegeObject'
      - type: object
        required:
        - value
        properties:
          value:
            oneOf:
            - type: integer
              description: Value for integer type privileges
            - type: boolean
              description: Value for boolean type privileges
            - type: string
              description: Value for string or select type privileges
            example: 10
            description: Value assigned to this privilege in the entitlement. Type depends on the privilege's value_type.
    ApiErrorUnprocessableEntity:
      type: object
      required:
      - status
      - error
      - code
      - error_details
      properties:
        status:
          type: integer
          format: int32
          example: 422
        error:
          type: string
          example: Unprocessable entity
        code:
          type: string
          example: validation_errors
        error_details:
          type: object
    ApiErrorNotFound:
      type: object
      required:
      - status
      - error
      - code
      properties:
        status:
          type: integer
          format: int32
          example: 404
        error:
          type: string
          example: Not Found
        code:
          type: string
          example: object_not_found
    FeaturePrivilegeObject:
      type: object
      required:
      - code
      - name
      - value_type
      - config
      properties:
        code:
          type: string
          example: max
          description: Unique code for the privilege.
        name:
          type:
          - string
          - 'null'
          example: Maximum
          description: Display name for the privilege.
        value_type:
          type: string
          enum:
          - integer
          - boolean
          - string
          - select
          example: integer
          description: Data type of the privilege value. It defaults to `string`.
        config:
          type: object
          description: Extra configuration of the privilege. It is empty unless the value type is `select`.
          properties:
            select_options:
              type: array
              items:
                type: string
              example:
              - google
              - okta
              description: The values the privilege accepts. It is only sent when the value type is `select`.
    ApiErrorUnauthorized:
      type: object
      required:
      - status
      - error
      properties:
        status:
          type: integer
          format: int32
          example: 401
        error:
          type: string
          example: Unauthorized
    ApiErrorBadRequest:
      type: object
      required:
      - status
      - error
      properties:
        status:
          type: integer
          format: int32
          example: 400
        error:
          type: string
          example: Bad request
    EntitlementUpdateInput:
      type: object
      properties:
        entitlements:
          type: object
          additionalProperties:
            type: object
            additionalProperties:
              oneOf:
              - type: integer
              - type: boolean
              - type: string
            description: Privilege values for this feature. All privileges must exist on the feature.
          example:
            seats:
              max: 20
              max_admins: 10
              root: false
            sso:
              provider: okta
          description: Feature entitlements with their privilege values. Each key is a feature code, and the value is an object containing privilege codes with their associated values. The key is optional and defaults to an empty object. On the replacing endpoints (POST) an omitted or empty object removes every entitlement. On the partial update endpoints (PATCH) it changes nothing.
    PlanEntitlements:
      type: object
      required:
      - entitlements
      properties:
        entitlements:
          type: array
          items:
            $ref: '#/components/schemas/PlanEntitlementObject'
    PlanEntitlementObject:
      type: object
      required:
      - code
      - name
      - description
      - privileges
      properties:
        code:
          type: string
          example: seats
          description: Unique code used to identify the feature. Max 255 characters.
        name:
          type:
          - string
          - 'null'
          example: Number of seats
          description: Name of the feature. Max 255 characters.
        description:
          type:
          - string
          - 'null'
          example: Number of users of the account
          description: Description of the feature. Max 600 characters.
        privileges:
          type: array
          items:
            $ref: '#/components/schemas/PlanEntitlementPrivilegeObject'
          example:
          - code: max
            name: Maximum
            value_type: integer
            config: {}
            value: 10
          - code: max_admins
            name: Max Admins
            value_type: integer
            config: {}
            value: 5
          - code: root
            name: Allow root user
            value_type: boolean
            config: {}
            value: true
          - code: provider
            name: SSO Provider
            value_type: select
            value: google
            config:
              select_options:
              - google
              - okta
          description: Privileges associated with this feature. Each privilege must have a value assigned.
    PlanEntitlement:
      type: object
      required:
      - entitlement
      properties:
        entitlement:
          $ref: '#/components/schemas/PlanEntitlementObject'
    SubscriptionEntitlementPrivilegeObject:
      allOf:
      - $ref: '#/components/schemas/FeaturePrivilegeObject'
      - type: object
        required:
        - value
        - plan_value
        - override_value
        properties:
          value:
            oneOf:
            - type: integer
              description: Value for integer type privileges
            - type: boolean
              description: Value for boolean type privileges
            - type: string
              description: Value for string or select type privileges
            example: 10
            description: Applicable value for this subscription (override_value if set, plan_value otherwise). Type depends on the privilege's value_type.
          plan_value:
            oneOf:
            - type: integer
              description: Value for integer type privileges
            - type: boolean
              description: Value for boolean type privileges
            - type: string
              description: Value for string or select type privileges
            - type: 'null'
              description: No plan value set
            example: 10
            description: Value assigned to this privilege in the plan. Type depends on the privilege's value_type. Null when the privilege only exists as a subscription override.
          override_value:
            oneOf:
            - type: integer
              description: Value for integer type privileges
            - type: boolean
              description: Value for boolean type privileges
            - type: string
              description: Value for string or select type privileges
            - type: 'null'
              description: No override value set
            example: 10
            description: Value assigned to this subscription specifically. Type depends on the privilege's value_type. Null if no override is set.
    SubscriptionEntitlements:
      type: object
      required:
      - entitlements
      properties:
        entitlements:
          type: array
          items:
            $ref: '#/components/schemas/SubscriptionEntitlementObject'
  parameters:
    subscription_status:
      name: subscription_status
      in: query
      description: 'Filter by subscription status. When provided, the subscription is looked up with this status instead of the default `active` status. Possible values are `pending`, `active`, `terminated`, `canceled`, or `incomplete`.

        '
      required: false
      schema:
        type: string
        enum:
        - pending
        - active
        - terminated
        - canceled
        - incomplete
        default: active
        example: active
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
externalDocs:
  description: Lago Github
  url: https://github.com/getlago
x-provenance:
  method: harvested
  publisher: Lago
  source: https://getlago.com/api/openapi.yaml
  note: split by refine-openapis from the provider's own published document, verified by fetch (openapi/_original/*.fetch.json);
    stamped by stamp-openapi-provenance.py (roadmap#793)