AppDirect ProductContext API

The ProductContext API from AppDirect — 2 operation(s) for productcontext.

Operations 2

GET /billing/v1/userProductContext/{applicationId} Retrieve a product context for the current user #
GET /billing/v1/userProductContext/{applicationId}/companies/{companyId}/users/{userId} Retrieve a product context for a supplied user and a company they belong to #

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/appdirect-productcontext-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 email required.

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

OpenAPI Specification

appdirect-productcontext-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  description: The Companies API allows developers to manage marketplace companies and their user memberships.
  title: Companies AI Embed Product Context API
  license:
    name: Apache License, Version 2.0
    url: http://www.apache.org/licenses/LICENSE-2.0
  version: v296.0-SNAPSHOT
servers:
- url: https://marketplace.appdirect.com/api
- url: https://virtserver.swaggerhub.com
tags:
- name: ProductContext
  x-displayName: Product Context
paths:
  /billing/v1/userProductContext/{applicationId}:
    get:
      description: Retrieve a product context for the current user
      tags:
      - ProductContext
      summary: Retrieve a product context for the current user
      operationId: resource_Other_readUserProductContext_GET
      parameters:
      - description: id of the application
        name: applicationId
        in: path
        required: true
        schema:
          type: number
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserProductContextWS'
              examples:
                response:
                  value:
                    status: null
                    assigned: false
                    numAssignedUsers: null
                    maxUsers: null
                    partOfExistingBundle: false
                    freeTrialDaysLeft: null
                    freeTrialAllowed: true
                    pendingEventType: ''
                    editionId: null
                    subscription: null
                    owner: null
                    paymentPlan: null
                    purchaseRestrictions: []
            application/xml:
              schema:
                $ref: '#/components/schemas/UserProductContextWS'
        '404':
          description: Application Not Found
      x-codeSamples:
      - lang: Shell + Curl
        source: "curl --request GET \\\n  --url https://marketplace.appdirect.com/api/billing/v1/userProductContext/%7BapplicationId%7D"
      - lang: Node + Request
        source: "const request = require('request');\n\nconst options = {\n  method: 'GET',\n  url: 'https://marketplace.appdirect.com/api/billing/v1/userProductContext/%7BapplicationId%7D'\n};\n\nrequest(options, function (error, response, body) {\n  if (error) throw new Error(error);\n\n  console.log(body);\n});\n"
      - lang: Java + Okhttp
        source: "OkHttpClient client = new OkHttpClient();\n\nRequest request = new Request.Builder()\n  .url(\"https://marketplace.appdirect.com/api/billing/v1/userProductContext/%7BapplicationId%7D\")\n  .get()\n  .build();\n\nResponse response = client.newCall(request).execute();"
  /billing/v1/userProductContext/{applicationId}/companies/{companyId}/users/{userId}:
    get:
      description: Retrieve a product context for a supplied user and a company they belong to
      tags:
      - ProductContext
      summary: Retrieve a product context for a supplied user and a company they belong to
      operationId: resource_Other_readUserCompanyProductContext_GET
      parameters:
      - description: id of the application
        name: applicationId
        in: path
        required: true
        schema:
          type: number
      - description: uuid of the desired users' company
        name: companyId
        in: path
        required: true
        schema:
          type: string
      - description: uuid of the desired user
        name: userId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserProductContextWS'
              examples:
                response:
                  value:
                    status: ACTIVE
                    assigned: true
                    numAssignedUsers: 1
                    maxUsers: 2
                    partOfExistingBundle: false
                    freeTrialDaysLeft: null
                    freeTrialAllowed: false
                    pendingEventType: ''
                    editionId: 22
                    subscription:
                      id: da43fcb9-988e-48d8-a132-fbc465e10aab
                      href: http://appdirect/api/billing/v1/subscriptions/da43fcb9-988e-48d8-a132-fbc465e10aab
                    owner:
                      id: 7e5ff840-1e1b-4b8f-b243-26ac12ebd427
                      href: http://appdirect/api/account/v1/users/7e5ff840-1e1b-4b8f-b243-26ac12ebd427
                    paymentPlan:
                      id: '41'
                      href: http://appdirect/api/marketplace/v1/products/22/editions/22/paymentPlans/41
                    purchaseRestrictions: []
            application/xml:
              schema:
                $ref: '#/components/schemas/UserProductContextWS'
        '404':
          description: User, Company or Application Not Found
      x-codeSamples:
      - lang: Shell + Curl
        source: "curl --request GET \\\n  --url https://marketplace.appdirect.com/api/billing/v1/userProductContext/%7BapplicationId%7D/companies/%7BcompanyId%7D/users/%7BuserId%7D"
      - lang: Node + Request
        source: "const request = require('request');\n\nconst options = {\n  method: 'GET',\n  url: 'https://marketplace.appdirect.com/api/billing/v1/userProductContext/%7BapplicationId%7D/companies/%7BcompanyId%7D/users/%7BuserId%7D'\n};\n\nrequest(options, function (error, response, body) {\n  if (error) throw new Error(error);\n\n  console.log(body);\n});\n"
      - lang: Java + Okhttp
        source: "OkHttpClient client = new OkHttpClient();\n\nRequest request = new Request.Builder()\n  .url(\"https://marketplace.appdirect.com/api/billing/v1/userProductContext/%7BapplicationId%7D/companies/%7BcompanyId%7D/users/%7BuserId%7D\")\n  .get()\n  .build();\n\nResponse response = client.newCall(request).execute();"
components:
  schemas:
    AppEditionWS:
      description: Edition associated with a product
      type: object
      title: AppEdition
      properties:
        appId:
          description: Application ID
          type: number
        appName:
          description: Application name
          type: string
        editionId:
          description: Edition ID
          type: number
        editionName:
          description: Edition name
          type: string
      example:
        appId: 12345
        appName: '...'
        editionId: 12345
        editionName: '...'
    PurchaseRestrictionWS:
      description: Product that a user cannot buy due to restrictions of a currently/previously owned product or because other products are required
      type: object
      title: PurchaseRestriction
      properties:
        appId:
          description: Non-purchasable application ID
          type: number
        appName:
          description: Non-purchasable application name
          type: string
        browsedEditionId:
          description: 'Browsed edition ID

            If browsedEdition is null, then restrict the entire app.'
          type: number
        ownedEditionId:
          description: Owned edition ID
          type: number
        ownedEditionName:
          description: Owned edition name
          type: string
        requiredAppEdition:
          description: Editions required to purchase the browsed edition
          type: array
          items:
            $ref: '#/components/schemas/AppEditionWS'
        restrictionType:
          description: The type of restriction applied. Null if the type is unknown. For example, if the account is in transition.
          type: string
        upcomingSubscription:
          description: Is upcoming subscription
          type: boolean
      example:
        appId: 12345
        appName: '...'
        browsedEditionId: 12345
        ownedEditionId: 12345
        ownedEditionName: '...'
        requiredAppEdition:
        - appId: 12345
          appName: '...'
          editionId: 12345
          editionName: '...'
        - appId: 12345
          appName: '...'
          editionId: 12345
          editionName: '...'
        restrictionType: '...'
        upcomingSubscription: true
    LinkWS:
      type:
      - object
      - 'null'
      title: LinkWS
      properties:
        href:
          type: string
        id:
          type: string
      example:
        href: '...'
        id: '...'
    UserProductContextWS:
      type:
      - object
      - 'null'
      title: UserProductContext
      properties:
        assigned:
          description: True when the subscription has users assigned to it.
          type: boolean
        editionId:
          description: The pricing plan ID of the subscription.
          type:
          - number
          - 'null'
        freeTrialAllowed:
          description: True if a free trial is allowed for this edition or if the current subscription is in a free trial.
          type: boolean
        freeTrialDaysLeft:
          description: 'The number of days remaining in the free trial for the application.

            Not present if there is no free trial for the edition, if the free trial is over, or if the free trial has been

            activated to a paid subscription.'
          type:
          - number
          - 'null'
        maxUsers:
          description: Maximum number of users that can be assigned to the application. Not present when unlimited.
          type:
          - number
          - 'null'
        numAssignedUsers:
          description: Number of users assigned to the subscription.
          type:
          - number
          - 'null'
        owner:
          $ref: '#/components/schemas/LinkWS'
        partOfExistingBundle:
          description: True if this application was bought as part of a bundle.
          type: boolean
        paymentPlan:
          $ref: '#/components/schemas/LinkWS'
        pendingEventType:
          description: 'If the subscription is blocked due to communication with a third party, this field represents the latest event type that

            was blocked. Can be one of:


            SUBSCRIPTION_ORDER,

            SUBSCRIPTION_CHANGE,

            SUBSCRIPTION_CANCEL,

            SUBSCRIPTION_NOTICE,

            USER_ASSIGNMENT,

            USER_UNASSIGNMENT,

            USER_UPDATED,

            ADDON_ORDER,

            ADDON_CHANGE,

            ADDON_CANCEL,

            ADDON_BIND,

            ADDON_UNBIND'
          type:
          - string
          - 'null'
        purchaseRestriction:
          description: Products that the user cannot buy due to restrictions of a currently/previously owned product or because other products are required.
          type: array
          items:
            $ref: '#/components/schemas/PurchaseRestrictionWS'
        status:
          description: 'The subscription status for the product owned by the requested user. Can be one of:

            INITIALIZED,

            FAILED,

            FREE_TRIAL,

            FREE_TRIAL_EXPIRED,

            ACTIVE,

            SUSPENDED,

            CANCELLED;'
          type:
          - string
          - 'null'
        subscription:
          $ref: '#/components/schemas/LinkWS'
      example:
        assigned: true
        editionId: 12345
        freeTrialAllowed: true
        freeTrialDaysLeft: 12345
        maxUsers: 12345
        numAssignedUsers: 12345
        owner:
          href: '...'
          id: '...'
        partOfExistingBundle: true
        paymentPlan:
          href: '...'
          id: '...'
        pendingEventType: '...'
        purchaseRestriction:
        - appId: 12345
          appName: '...'
          browsedEditionId: 12345
          ownedEditionId: 12345
          ownedEditionName: '...'
          requiredAppEdition:
          - appId: 12345
            appName: '...'
            editionId: 12345
            editionName: '...'
          - appId: 12345
            appName: '...'
            editionId: 12345
            editionName: '...'
          restrictionType: '...'
          upcomingSubscription: true
        - appId: 12345
          appName: '...'
          browsedEditionId: 12345
          ownedEditionId: 12345
          ownedEditionName: '...'
          requiredAppEdition:
          - appId: 12345
            appName: '...'
            editionId: 12345
            editionName: '...'
          - appId: 12345
            appName: '...'
            editionId: 12345
            editionName: '...'
          restrictionType: '...'
          upcomingSubscription: true
        status: '...'
        subscription:
          href: '...'
          id: '...'