Solo.io Subscriptions API

Subscription management endpoints

OpenAPI Specification

solo-io-subscriptions-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Solo Io Subscriptions API
  version: 1.0.0
  description: 'Operations tagged subscriptions across 2 of this provider''s published API definitions: solo-io-portal-backend-openapi.yml, solo-io-portal-server-openapi.yml. Each path carries the servers of the definition it was published in.'
servers:
- url: /v1
  description: API v1 base path
- url: http://portal.example.com/v1
tags:
- name: subscriptions
  description: Subscription management endpoints
paths:
  /apps/{appID}/subscriptions:
    servers:
    - url: /v1
      description: API v1 base path
    get:
      summary: List app subscriptions
      description: Returns all subscriptions for an application
      operationId: ListAppSubscriptions
      tags:
      - subscriptions
      security:
      - bearerAuth: []
      - identityToken: []
      - accessToken: []
      parameters:
      - name: appID
        in: path
        description: Application ID
        required: true
        schema:
          type: string
      responses:
        '200':
          description: List of subscriptions
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Subscription'
        '401':
          description: Authentication required
        '404':
          description: App not found
        '500':
          description: Internal server error
    post:
      summary: Create app subscription
      description: Creates a new subscription for an application to an API product. The subscription starts in pending status.
      operationId: CreateAppSubscription
      tags:
      - subscriptions
      security:
      - bearerAuth: []
      - identityToken: []
      - accessToken: []
      parameters:
      - name: appID
        in: path
        description: Application ID
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateSubscriptionRequest'
      responses:
        '201':
          description: Subscription created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Subscription'
        '400':
          description: Invalid request - apiProductId required
        '401':
          description: Authentication required
        '404':
          description: App not found
        '409':
          description: Subscription already exists
        '500':
          description: Internal server error
  /apps/{appID}/subscriptions/{subscriptionID}:
    servers:
    - url: /v1
      description: API v1 base path
    delete:
      summary: Delete app subscription
      description: Deletes a subscription from an application
      operationId: DeleteAppSubscription
      tags:
      - subscriptions
      security:
      - bearerAuth: []
      - identityToken: []
      - accessToken: []
      parameters:
      - name: appID
        in: path
        description: Application ID
        required: true
        schema:
          type: string
      - name: subscriptionID
        in: path
        description: Subscription ID
        required: true
        schema:
          type: string
      responses:
        '204':
          description: Subscription deleted
        '401':
          description: Authentication required
        '500':
          description: Internal server error
  /subscriptions:
    servers:
    - url: /v1
      description: API v1 base path
    get:
      summary: List all subscriptions
      description: Returns all subscriptions across all apps. Optionally filtered by status.
      operationId: ListSubscriptions
      tags:
      - subscriptions
      security:
      - bearerAuth: []
      - identityToken: []
      - accessToken: []
      parameters:
      - name: status
        in: query
        description: Filter subscriptions by status
        schema:
          $ref: '#/components/schemas/SubscriptionStatus'
      responses:
        '200':
          description: List of subscriptions
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Subscription'
        '401':
          description: Authentication required
        '500':
          description: Internal server error
  /subscriptions/{subscriptionID}:
    servers:
    - url: /v1
      description: API v1 base path
    delete:
      summary: Delete subscription
      description: Deletes a subscription by ID
      operationId: DeleteSubscription
      tags:
      - subscriptions
      security:
      - bearerAuth: []
      - identityToken: []
      - accessToken: []
      parameters:
      - name: subscriptionID
        in: path
        description: Subscription ID
        required: true
        schema:
          type: string
      responses:
        '204':
          description: Subscription deleted
        '401':
          description: Authentication required
        '500':
          description: Internal server error
  /subscriptions/{subscriptionID}/metadata:
    servers:
    - url: /v1
      description: API v1 base path
    post:
      summary: Set subscription metadata (Admin)
      description: Sets rate limit and custom metadata on a subscription. Requires admin privileges.
      operationId: SetSubscriptionMetadata
      tags:
      - subscriptions
      security:
      - bearerAuth: []
      - identityToken: []
      - accessToken: []
      parameters:
      - name: subscriptionID
        in: path
        description: Subscription ID
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SetMetadataRequest'
      responses:
        '200':
          description: Subscription metadata updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Subscription'
        '400':
          description: Invalid request or rate limit unit
        '401':
          description: Authentication required
        '403':
          description: Admin access required
        '404':
          description: Subscription not found
        '500':
          description: Internal server error
  /subscriptions/{subscriptionID}/{action}:
    servers:
    - url: /v1
      description: API v1 base path
    post:
      summary: Approve or reject subscription (Admin)
      description: Approves or rejects a pending subscription. Requires admin privileges.
      operationId: SubscriptionAction
      tags:
      - subscriptions
      security:
      - bearerAuth: []
      - identityToken: []
      - accessToken: []
      parameters:
      - name: subscriptionID
        in: path
        description: Subscription ID
        required: true
        schema:
          type: string
      - name: action
        in: path
        description: Action to perform on the subscription
        required: true
        schema:
          type: string
          enum:
          - approve
          - reject
      responses:
        '200':
          description: Subscription updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Subscription'
        '400':
          description: Invalid action
        '401':
          description: Authentication required
        '403':
          description: Admin access required
        '404':
          description: Subscription not found
        '500':
          description: Internal server error
  /subscriptions/{subscriptionId}:
    servers:
    - url: http://portal.example.com/v1
    delete:
      description: Deletes a subscription, revoking the associated application's access to the specified API product.
      operationId: DeleteApplicationProductSubscription
      parameters:
      - description: The unique identifier of the subscription to delete.
        in: path
        name: subscriptionId
        required: true
        schema:
          type: string
      responses:
        '204':
          description: Subscription successfully deleted.
        '400':
          description: Invalid request parameters.
        '403':
          description: Unauthorized to delete subscription.
        '404':
          description: Subscription not found.
        '500':
          description: Internal server error.
      summary: Delete subscription
      tags:
      - subscriptions
components:
  schemas:
    CreateSubscriptionRequest:
      type: object
      description: Request body for creating a subscription
      required:
      - apiProductId
      properties:
        apiProductId:
          type: string
          description: ID of the API product to subscribe to
    ResourceMetadata:
      type: object
      description: Metadata attached to a resource (app or subscription) including rate limits and custom key-value pairs
      required:
      - id
      properties:
        id:
          type: string
          description: Metadata record ID (resource ID + "-metadata" suffix)
        customMetadata:
          type: object
          description: Custom metadata key-value pairs
          additionalProperties:
            type: string
        rateLimit:
          $ref: '#/components/schemas/RateLimit'
        createdAt:
          type: string
          format: date-time
          description: Timestamp when the parent resource was created
        updatedAt:
          type: string
          format: date-time
          description: Timestamp when the parent resource was last updated
    Subscription:
      description: Subscription to an API product
      allOf:
      - $ref: '#/components/schemas/BaseEntity'
      - type: object
        required:
        - applicationId
        - apiProductId
        - approved
        - rejected
        properties:
          applicationId:
            type: string
            description: ID of the subscribing application
          apiProductId:
            type: string
            description: ID of the subscribed API product
          approved:
            type: boolean
            description: Whether the subscription is approved
          rejected:
            type: boolean
            description: Whether the subscription is rejected
          requestedAt:
            type: string
            format: date-time
            description: Timestamp when the subscription was requested
          metadata:
            $ref: '#/components/schemas/ResourceMetadata'
    SetMetadataRequest:
      type: object
      description: Request body for setting metadata (rate limit and/or custom metadata) on a resource
      properties:
        rateLimit:
          $ref: '#/components/schemas/RateLimit'
        customMetadata:
          type: object
          description: Custom metadata key-value pairs
          additionalProperties:
            type: string
    RateLimit:
      type: object
      description: Rate limit configuration
      required:
      - requestsPerUnit
      - unit
      properties:
        requestsPerUnit:
          type: string
          description: Number of requests allowed per unit
        unit:
          type: string
          description: Time unit for rate limiting
          enum:
          - SECOND
          - MINUTE
          - HOUR
          - DAY
          - MONTH
          - YEAR
    SubscriptionStatus:
      type: string
      description: Subscription status
      enum:
      - pending
      - approved
      - rejected
    BaseEntity:
      type: object
      description: Base entity with common fields
      required:
      - id
      - createdAt
      properties:
        id:
          type: string
          description: Unique identifier
        createdAt:
          type: string
          format: date-time
          description: Timestamp when the entity was created
        updatedAt:
          type: string
          format: date-time
          description: Timestamp when the entity was last updated
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: Bearer token passed in the Authorization header
    identityToken:
      type: apiKey
      in: cookie
      name: id_token
      description: id_token cookie set by the identity provider after OIDC login
    accessToken:
      type: apiKey
      in: cookie
      name: access_token
      description: access_token cookie set by the identity provider after OIDC login
x-refined-from:
- solo-io-portal-backend-openapi.yml
- solo-io-portal-server-openapi.yml