openapi: 3.0.0 info: description: The Companies API allows developers to manage marketplace companies and their user memberships. title: Companies AI Embed AppResellerOpportunities 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: AppResellerOpportunities x-displayName: Opportunities paths: /assistedSales/v1/opportunities: post: x-appdirect-api-stage: Early Access summary: Create opportunity description: 'Creates a new opportunity Required: Accept-Language header with Locale format. For example: en-US' tags: - AppResellerOpportunities operationId: createOpportunity x-appdirect-required-scopes: ROLE_RESELLER: - Allows access as a Reseller to the opportunity ROLE_SALES_SUPPORT: - Allows access as a Sales Support Representative to the opportunity ROLE_CHANNEL_ADMIN: - Allows access as a Marketplace Manager to the opportunity ROLE_PARTNER: - Allows access as a Partner to the opportunity parameters: - in: query name: context description: Deprecated. Parameter has no impact on this endpoint. required: false schema: type: string enum: - RESELLER - SSR requestBody: content: application/json: schema: $ref: '#/components/schemas/OpportunityCreationRequest' description: Information about the opportunity being created required: true responses: '200': description: Opportunity created content: application/json: schema: $ref: '#/components/schemas/Opportunity' examples: response: value: id: ef6c414f-39da-401f-a4b8-81adc6190fda ownerUser: id: d781ac09-b4fe-4d57-8ba2-4640fc5b7c49 email: john.doe@acme.com firstName: John lastName: Doe company: id: '1' name: Acme Corp. customerUser: id: 498c62ea-ad14-48e6-96ce-5400c617444c email: jane.smith@company.com firstName: Jane lastName: Smith company: id: '100' name: Customer Company createdOn: '1546300800000' currency: USD purchaseEffectiveDate: '1577750400000' name: Prospect N1 status: OPEN items: - id: 4ccf689b-4339-4fc9-a8b3-b05c5a87c1be pricingPlanId: 4bc864b5-f63f-4933-be19-3700aa9a8cc4 units: - quantity: '20' unit: USER subscriptionCustomAttributes: intended_os: - other - ios - macos sales_agent_id: - R353113R vendorRequiredFields: name: - John lastname: - Doe email: - john.doe@acme.com - id: dece524d-0466-4185-b3bb-1f8a300c37cd pricingPlanId: 80b85538-ffc1-4c4b-acb1-1bf87c8c2fc4 units: [] availableActions: - ADD_PRODUCT - EDIT - FINALIZE - SET_CUSTOM_PRICE - SET_CUSTOM_CONTRACT - SET_PROVISIONING_DATE - SET_BILLING_DATE - CHANGE_OPPORTUNITY_OWNER actionRestrictions: {} createdByUser: id: 8f6b3d29-4169-4fb0-91ff-bad9b7a3d0d4 email: peter.parker@marvel.com firstName: Peter lastName: Parker company: id: '99' name: Marvel Corp. '400': description: The owner's or customer's company membership is invalid, or the owner is a Reseller who is not linked to the opportunity customer content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 400 code: INVALID_FORMAT message: createOpportunity.arg0.ownerCompanyId may not be null '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 401 code: UNAUTHORIZED message: HTTP 401 Unauthorized '409': description: There is at least one restriction for a product in the opportunity content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 409 code: CONFLICT message: 'There is at least one restriction for a product in the opportunity. OwnerUUID: d781ac09-b4fe-4d57-8ba2-4640fc5b7c49 CustomerUUID: 498c62ea-ad14-48e6-96ce-5400c617444c - Restrictions by product: 58a8508e-f480-4dfa-b605-a0512c00c1ea ( ALREADY_PURCHASED )' x-codeSamples: - lang: Shell + Curl source: "curl --request POST \\\n --url 'https://marketplace.appdirect.com/api/assistedSales/v1/opportunities?context=SOME_STRING_VALUE' \\\n --header 'content-type: application/json' \\\n --data '{\"customerCompanyId\":\"498c62ea-ad14-48e6-96ce-5400c617444c\",\"customerId\":\"505f0a0c-57a7-4d9e-9fac-66bbf557ac4d\",\"ownerCompanyId\":\"6a62244e-aa2f-461b-8c7a-3a0e091be9d3\",\"ownerId\":\"d781ac09-b4fe-4d57-8ba2-4640fc5b7c49\",\"items\":[{\"pricingPlanId\":\"85d30404-c56b-4dff-9f3b-06636477fe55\",\"units\":[{\"quantity\":10,\"unit\":\"USER\"}]},{\"pricingPlanId\":\"d12931cf-eac6-45fa-8965-d33b1c5698b0\",\"units\":[]}],\"currency\":\"USD\",\"createdByCompanyId\":\"b7e0c48b-6d0d-45fc-9c8a-3fa3fd84d9f1\",\"createdById\":\"8f6b3d29-4169-4fb0-91ff-bad9b7a3d0d4\",\"purchaseCustomAttributes\":{\"paid_off_platform_contact\":[\"janet.doe@accounting.acme.com\"]}}'" - lang: Node + Request source: "const request = require('request');\n\nconst options = {\n method: 'POST',\n url: 'https://marketplace.appdirect.com/api/assistedSales/v1/opportunities',\n qs: {context: 'SOME_STRING_VALUE'},\n headers: {'content-type': 'application/json'},\n body: {\n customerCompanyId: '498c62ea-ad14-48e6-96ce-5400c617444c',\n customerId: '505f0a0c-57a7-4d9e-9fac-66bbf557ac4d',\n ownerCompanyId: '6a62244e-aa2f-461b-8c7a-3a0e091be9d3',\n ownerId: 'd781ac09-b4fe-4d57-8ba2-4640fc5b7c49',\n items: [\n {\n pricingPlanId: '85d30404-c56b-4dff-9f3b-06636477fe55',\n units: [{quantity: 10, unit: 'USER'}]\n },\n {pricingPlanId: 'd12931cf-eac6-45fa-8965-d33b1c5698b0', units: []}\n ],\n currency: 'USD',\n createdByCompanyId: 'b7e0c48b-6d0d-45fc-9c8a-3fa3fd84d9f1',\n createdById: '8f6b3d29-4169-4fb0-91ff-bad9b7a3d0d4',\n purchaseCustomAttributes: {paid_off_platform_contact: ['janet.doe@accounting.acme.com']}\n },\n json: true\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\nMediaType mediaType = MediaType.parse(\"application/json\");\nRequestBody body = RequestBody.create(mediaType, \"{\\\"customerCompanyId\\\":\\\"498c62ea-ad14-48e6-96ce-5400c617444c\\\",\\\"customerId\\\":\\\"505f0a0c-57a7-4d9e-9fac-66bbf557ac4d\\\",\\\"ownerCompanyId\\\":\\\"6a62244e-aa2f-461b-8c7a-3a0e091be9d3\\\",\\\"ownerId\\\":\\\"d781ac09-b4fe-4d57-8ba2-4640fc5b7c49\\\",\\\"items\\\":[{\\\"pricingPlanId\\\":\\\"85d30404-c56b-4dff-9f3b-06636477fe55\\\",\\\"units\\\":[{\\\"quantity\\\":10,\\\"unit\\\":\\\"USER\\\"}]},{\\\"pricingPlanId\\\":\\\"d12931cf-eac6-45fa-8965-d33b1c5698b0\\\",\\\"units\\\":[]}],\\\"currency\\\":\\\"USD\\\",\\\"createdByCompanyId\\\":\\\"b7e0c48b-6d0d-45fc-9c8a-3fa3fd84d9f1\\\",\\\"createdById\\\":\\\"8f6b3d29-4169-4fb0-91ff-bad9b7a3d0d4\\\",\\\"purchaseCustomAttributes\\\":{\\\"paid_off_platform_contact\\\":[\\\"janet.doe@accounting.acme.com\\\"]}}\");\nRequest request = new Request.Builder()\n .url(\"https://marketplace.appdirect.com/api/assistedSales/v1/opportunities?context=SOME_STRING_VALUE\")\n .post(body)\n .addHeader(\"content-type\", \"application/json\")\n .build();\n\nResponse response = client.newCall(request).execute();" get: x-appdirect-api-stage: Early Access summary: List opportunities description: "Retrieve a list of opportunities. Returned opportunities are limited to role visibility: \n Marketplace Manager, Partner, Partner Read: all opportunities. \n Reseller Manager: all opportunities owned by Reseller companies. \n Reseller, SSR: all opportunities owned by the company to which the Reseller or SSR belongs. \n When users have multiple roles, visibility is the sum of visibility for all their roles. \n Additional filter parameters are available for some roles.\n\nRequired: Accept-Language header with Locale format. For example: en-US" tags: - AppResellerOpportunities operationId: readOpportunities x-appdirect-required-scopes: ROLE_RESELLER: - Allows access as a Reseller to the opportunity ROLE_SALES_SUPPORT: - Allows access as a Sales Support to the opportunity ROLE_CHANNEL_ADMIN: - Allows access as a Marketplace Manager to the opportunity ROLE_RESELLER_MANAGER: - Allows access as a Reseller Manager to the opportunity ROLE_PARTNER: - Allows access as a Partner to the opportunity ROLE_PARTNER_READ: - Allows read access as a Partner to the opportunity parameters: - in: query name: ownerId description: Sales agent's user ID required: false schema: type: string - in: query name: ownerCompanyId description: Sales agent's company ID, which defines which company owns opportunities. This is an optional filter to only return opportunities that the sale's agent's company owns. Only valid for Marketplace Manager, Reseller Manager, Partner, and Partner Read roles (invalid for Reseller and SSR roles because they can only see opportunities owned by their company). No opportunities are returned when the call is filtered by a company ID for which the user does not have access. required: false schema: type: string - in: query name: customerId description: Customer's user ID required: false schema: type: string - in: query name: customerCompanyId description: Customer's company ID required: false schema: type: string - in: query name: context description: Optional. For Marketplace Manager, Partner, and Partner Read roles, filter the returned opportunities by those owned by SSRs or Resellers. required: false schema: type: string enum: - RESELLER - SSR - $ref: '#/components/parameters/OpportunityStatus' - in: query name: purchaseEffectiveDate description: 'Opportunity purchase effective date filter, defined by upper or lower inclusive or exclusive limits, in Unix timestamp format. Acceptable values are: gte([timestamp]) - ''greater than or equal to''; or lte([timestamp]) - ''less than or equal to''' required: false style: form explode: false schema: type: array items: type: string - in: query name: createdOn description: 'Opportunity creation date filter, defined by upper or lower inclusive or exclusive limits, in Unix timestamp format. Acceptable values are: gte([timestamp]) - ''greater than or equal to''; or lte([timestamp]) - ''less than or equal to''' required: false style: form explode: false schema: type: array items: type: string - in: query name: searchText description: General text search filter used for any ID (opportunity, sales agent, sales agent company, customer, or customer company) and opportunity name required: false schema: type: string - in: query name: number description: Page number required: false schema: type: integer default: 1 - in: query name: size description: Number of results per page required: false schema: type: integer default: 10 - in: query name: sort description: Sort field and order. For ascending sort order, use the '+[FieldName]' format. For descending order, use the '-[FieldName]' format. required: false schema: type: string responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/OpportunityPage' examples: response: value: page: number: 1 size: 10 totalElements: 2 totalPages: 1 content: - id: ef6c414f-39da-401f-a4b8-81adc6190fda name: Prospect N1 ownerUser: id: d781ac09-b4fe-4d57-8ba2-4640fc5b7c49 email: john.doe@acme.com firstName: John lastName: Doe company: id: '1' name: Acme Corp. customerUser: id: 498c62ea-ad14-48e6-96ce-5400c617444c email: jane.smith@company.com firstName: Jane lastName: Smith company: id: '100' name: Customer Company createdOn: 1557861989000 purchaseEffectiveDate: 1577750400000 status: CLOSED ownerType: PLATFORM_OWNER createdByUser: id: 8f6b3d29-4169-4fb0-91ff-bad9b7a3d0d4 email: peter.parker@marvel.com firstName: Peter lastName: Parker company: id: '99' name: Marvel Corp. - id: 70826bb4-bb6c-43b8-9c39-2c4e481a8b5e name: null ownerUser: id: d11cf5ef-6270-492f-9d2c-07fa01eeb5c2 email: jane.smith@globex.com firstName: Jane lastName: Smith company: id: '2' name: Globex Inc. customerUser: id: e0a6bec0-7e25-43a1-b601-6a8cec5a847f email: gsymons@stark.com firstName: Gary lastName: Symons company: id: '100' name: Customer Company createdOn: 1557861989000 purchaseEffectiveDate: null status: OPEN ownerType: PLATFORM_OWNER createdByUser: id: 8f6b3d29-4169-4fb0-91ff-bad9b7a3d0d4 email: peter.parker@marvel.com firstName: Peter lastName: Parker company: id: '99' name: Marvel Corp. '403': description: The user does not have permission to execute the action content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 403 code: FORBIDDEN message: Forbidden x-codeSamples: - lang: Shell + Curl source: "curl --request GET \\\n --url 'https://marketplace.appdirect.com/api/assistedSales/v1/opportunities?ownerId=SOME_STRING_VALUE&ownerCompanyId=SOME_STRING_VALUE&customerId=SOME_STRING_VALUE&customerCompanyId=SOME_STRING_VALUE&context=SOME_STRING_VALUE&status=SOME_STRING_VALUE&purchaseEffectiveDate=SOME_ARRAY_VALUE&createdOn=SOME_ARRAY_VALUE&searchText=SOME_STRING_VALUE&number=SOME_INTEGER_VALUE&size=SOME_INTEGER_VALUE&sort=SOME_STRING_VALUE'" - lang: Node + Request source: "const request = require('request');\n\nconst options = {\n method: 'GET',\n url: 'https://marketplace.appdirect.com/api/assistedSales/v1/opportunities',\n qs: {\n ownerId: 'SOME_STRING_VALUE',\n ownerCompanyId: 'SOME_STRING_VALUE',\n customerId: 'SOME_STRING_VALUE',\n customerCompanyId: 'SOME_STRING_VALUE',\n context: 'SOME_STRING_VALUE',\n status: 'SOME_STRING_VALUE',\n purchaseEffectiveDate: 'SOME_ARRAY_VALUE',\n createdOn: 'SOME_ARRAY_VALUE',\n searchText: 'SOME_STRING_VALUE',\n number: 'SOME_INTEGER_VALUE',\n size: 'SOME_INTEGER_VALUE',\n sort: 'SOME_STRING_VALUE'\n }\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/assistedSales/v1/opportunities?ownerId=SOME_STRING_VALUE&ownerCompanyId=SOME_STRING_VALUE&customerId=SOME_STRING_VALUE&customerCompanyId=SOME_STRING_VALUE&context=SOME_STRING_VALUE&status=SOME_STRING_VALUE&purchaseEffectiveDate=SOME_ARRAY_VALUE&createdOn=SOME_ARRAY_VALUE&searchText=SOME_STRING_VALUE&number=SOME_INTEGER_VALUE&size=SOME_INTEGER_VALUE&sort=SOME_STRING_VALUE\")\n .get()\n .build();\n\nResponse response = client.newCall(request).execute();" delete: x-appdirect-api-stage: Early Access summary: Remove opportunities description: 'Removes a list of opportunities Required: Accept-Language header with Locale format. For example: en-US' tags: - AppResellerOpportunities operationId: deleteOpportunities x-appdirect-required-scopes: ROLE_RESELLER: - Allows access as a Reseller to the opportunity ROLE_SALES_SUPPORT: - Allows Sales Support Representative access to opportunity ROLE_CHANNEL_ADMIN: - Allows access as a Marketplace Manager to the opportunity ROLE_RESELLER_MANAGER: - Allows access as a Reseller Manager to the opportunity ROLE_PARTNER: - Allows access as a Partner to the opportunity parameters: - in: query name: opportunityId description: This parameter is required. The parameter lists the opportunity IDs. required: true explode: true schema: type: array items: type: string responses: '204': description: No Content content: application/json: schema: description: No Content type: object '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 400 code: BAD_REQUEST message: The list of opportunityIds cannot be null. '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 401 code: UNAUTHORIZED message: HTTP 401 Unauthorized x-codeSamples: - lang: Shell + Curl source: "curl --request DELETE \\\n --url 'https://marketplace.appdirect.com/api/assistedSales/v1/opportunities?opportunityId=SOME_ARRAY_VALUE'" - lang: Node + Request source: "const request = require('request');\n\nconst options = {\n method: 'DELETE',\n url: 'https://marketplace.appdirect.com/api/assistedSales/v1/opportunities',\n qs: {opportunityId: 'SOME_ARRAY_VALUE'}\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/assistedSales/v1/opportunities?opportunityId=SOME_ARRAY_VALUE\")\n .delete(null)\n .build();\n\nResponse response = client.newCall(request).execute();" /assistedSales/v1/opportunities/{opportunityId}: get: x-appdirect-api-stage: Early Access summary: Get opportunity details description: 'Read an opportunity Required: Accept-Language header with Locale format. For example: en-US' tags: - AppResellerOpportunities operationId: readOpportunity x-appdirect-required-scopes: ROLE_RESELLER: - Allows access as a Reseller to the opportunity ROLE_SALES_SUPPORT: - Allows access as a Sales Support to the opportunity ROLE_CHANNEL_ADMIN: - Allows access as a Marketplace Manager to the opportunity ROLE_RESELLER_MANAGER: - Allows access as a Reseller Manager to the opportunity ROLE_PARTNER: - Allows access as a Partner to the opportunity ROLE_PARTNER_READ: - Allows read access as a Partner to the opportunity parameters: - in: path name: opportunityId description: Opportunity ID required: true schema: type: string responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/Opportunity' examples: response: value: id: ef6c414f-39da-401f-a4b8-81adc6190fda ownerUser: id: d781ac09-b4fe-4d57-8ba2-4640fc5b7c49 email: john.doe@acme.com firstName: John lastName: Doe company: id: '1' name: Acme Corp. customerUser: id: 498c62ea-ad14-48e6-96ce-5400c617444c email: jane.smith@company.com firstName: Jane lastName: Smith company: id: '100' name: Customer Company createdOn: '1546300800000' currency: USD purchaseEffectiveDate: '1577750400000' name: Prospect N1 status: OPEN items: - id: 4ccf689b-4339-4fc9-a8b3-b05c5a87c1be pricingPlanId: 4bc864b5-f63f-4933-be19-3700aa9a8cc4 units: - quantity: '20' unit: USER subscriptionCustomAttributes: intended_os: - other - ios - macos sales_agent_id: - R353113R vendorRequiredFields: name: - John lastname: - Doe email: - john.doe@acme.com - id: dece524d-0466-4185-b3bb-1f8a300c37cd pricingPlanId: 80b85538-ffc1-4c4b-acb1-1bf87c8c2fc4 units: [] availableActions: - ADD_PRODUCT - EDIT - FINALIZE - SET_CUSTOM_PRICE - SET_CUSTOM_CONTRACT - SET_PROVISIONING_DATE - SET_BILLING_DATE - CHANGE_OPPORTUNITY_OWNER actionRestrictions: {} createdByUser: id: 8f6b3d29-4169-4fb0-91ff-bad9b7a3d0d4 email: peter.parker@marvel.com firstName: Peter lastName: Parker company: id: '99' name: Marvel Corp. '206': description: The creation of the opportunity is still in progress and a partial result is returned. content: application/json: schema: $ref: '#/components/schemas/Opportunity' examples: response: value: id: ef6c414f-39da-401f-a4b8-81adc6190fda ownerUser: id: d781ac09-b4fe-4d57-8ba2-4640fc5b7c49 email: john.doe@acme.com firstName: John lastName: Doe company: id: '1' name: Acme Corp. customerUser: id: 498c62ea-ad14-48e6-96ce-5400c617444c email: jane.smith@company.com firstName: Jane lastName: Smith company: id: '100' name: Customer Company createdOn: '1546300800000' currency: USD purchaseEffectiveDate: '1577750400000' name: Prospect N1 status: OPEN items: [] availableActions: - ADD_PRODUCT - EDIT - CHANGE_OPPORTUNITY_OWNER actionRestrictions: {} createdByUser: id: 8f6b3d29-4169-4fb0-91ff-bad9b7a3d0d4 email: peter.parker@marvel.com firstName: Peter lastName: Parker company: id: '99' name: Marvel Corp. '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 401 code: UNAUTHORIZED message: HTTP 401 Unauthorized '403': description: The user does not have access to the opportunity content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 403 code: FORBIDDEN message: Forbidden '404': description: Invalid opportunity ID content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 404 code: NOT_FOUND message: Invalid opportunity ID x-codeSamples: - lang: Shell + Curl source: "curl --request GET \\\n --url https://marketplace.appdirect.com/api/assistedSales/v1/opportunities/%7BopportunityId%7D" - lang: Node + Request source: "const request = require('request');\n\nconst options = {\n method: 'GET',\n url: 'https://marketplace.appdirect.com/api/assistedSales/v1/opportunities/%7BopportunityId%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/assistedSales/v1/opportunities/%7BopportunityId%7D\")\n .get()\n .build();\n\nResponse response = client.newCall(request).execute();" patch: x-appdirect-api-stage: Early Access summary: Update opportunity description: 'Updates an existing opportunity: name, purchase effective date and purchase custom attributes Required: Accept-Language header with Locale format. For example: en-US' tags: - AppResellerOpportunities operationId: updateOpportunity x-appdirect-required-scopes: ROLE_RESELLER: - Allows access as a Reseller to the opportunity ROLE_SALES_SUPPORT: - Allows access as a Sales Support to the opportunity ROLE_CHANNEL_ADMIN: - Allows access as a Marketplace Manager to the opportunity ROLE_RESELLER_MANAGER: - Allows access as a Reseller Manager to the opportunity ROLE_PARTNER: - Allows access as a Partner to the opportunity parameters: - in: path name: opportunityId description: Opportunity ID required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/OpportunityUpdateRequest' description: Information about the opportunity being updated required: true responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/Opportunity' examples: response: value: id: ef6c414f-39da-401f-a4b8-81adc6190fda ownerUser: id: d781ac09-b4fe-4d57-8ba2-4640fc5b7c49 email: john.doe@acme.com firstName: John lastName: Doe company: id: '1' name: Acme Corp. customerUser: id: 498c62ea-ad14-48e6-96ce-5400c617444c email: jane.smith@company.com firstName: Jane lastName: Smith company: id: '100' name: Customer Company createdOn: '1546300800000' currency: USD purchaseEffectiveDate: '1577750400000' name: Prospect N1 status: OPEN items: - id: 4ccf689b-4339-4fc9-a8b3-b05c5a87c1be pricingPlanId: 4bc864b5-f63f-4933-be19-3700aa9a8cc4 units: - quantity: '20' unit: USER subscriptionCustomAttributes: intended_os: - other - ios - macos sales_agent_id: - R353113R vendorRequiredFields: name: - John lastname: - Doe email: - john.doe@acme.com - id: dece524d-0466-4185-b3bb-1f8a300c37cd pricingPlanId: 80b85538-ffc1-4c4b-acb1-1bf87c8c2fc4 units: [] availableActions: - ADD_PRODUCT - EDIT - FINALIZE - SET_CUSTOM_PRICE - SET_CUSTOM_CONTRACT - SET_PROVISIONING_DATE - SET_BILLING_DATE - CHANGE_OPPORTUNITY_OWNER actionRestrictions: {} createdByUser: id: 8f6b3d29-4169-4fb0-91ff-bad9b7a3d0d4 email: peter.parker@marvel.com firstName: Peter lastName: Parker company: id: '99' name: Marvel Corp. '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 401 code: UNAUTHORIZED message: HTTP 401 Unauthorized '403': description: The user does not have access to the opportunity or the opportunity status does not allow the action content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 403 code: FORBIDDEN message: Forbidden '404': description: Invalid opportunity ID content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 404 code: NOT_FOUND message: Invalid opportunity ID x-codeSamples: - lang: Shell + Curl source: "curl --request PATCH \\\n --url https://marketplace.appdirect.com/api/assistedSales/v1/opportunities/%7BopportunityId%7D \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"New opportunity\",\"purchaseEffectiveDate\":1577750400000,\"purchaseCustomAttributes\":{\"paid_off_platform_contact\":[\"janet.doe@accounting.acme.com\"]}}'" - lang: Node + Request source: "const request = require('request');\n\nconst options = {\n method: 'PATCH',\n url: 'https://marketplace.appdirect.com/api/assistedSales/v1/opportunities/%7BopportunityId%7D',\n headers: {'content-type': 'application/json'},\n body: {\n name: 'New opportunity',\n purchaseEffectiveDate: 1577750400000,\n purchaseCustomAttributes: {paid_off_platform_contact: ['janet.doe@accounting.acme.com']}\n },\n json: true\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\nMediaType mediaType = MediaType.parse(\"application/json\");\nRequestBody body = RequestBody.create(mediaType, \"{\\\"name\\\":\\\"New opportunity\\\",\\\"purchaseEffectiveDate\\\":1577750400000,\\\"purchaseCustomAttributes\\\":{\\\"paid_off_platform_contact\\\":[\\\"janet.doe@accounting.acme.com\\\"]}}\");\nRequest request = new Request.Builder()\n .url(\"https://marketplace.appdirect.com/api/assistedSales/v1/opportunities/%7BopportunityId%7D\")\n .patch(body)\n .addHeader(\"content-type\", \"application/json\")\n .build();\n\nResponse response = client.newCall(request).execute();" /assistedSales/v1/opportunities/{opportunityId}/items: post: x-appdirect-api-stage: Early Access summary: Add items description: 'Add one or more items to an opportunity Required: Accept-Language header with Locale format. For example: en-US' tags: - AppResellerOpportunities operationId: addItems x-appdirect-required-scopes: ROLE_RESELLER: - Allows access as a Reseller for the opportunity ROLE_SALES_SUPPORT: - Allows access as a Sales Support for the opportunity ROLE_CHANNEL_ADMIN: - Allows access as a Marketplace Manager to the opportunity ROLE_RESELLER_MANAGER: - Allows access as a Reseller Manager to the opportunity. Role permissions are required to execute this action. ROLE_PARTNER: - Allows access as a Partner to the opportunity parameters: - in: path name: opportunityId description: Opportunity ID required: true schema: type: string requestBody: content: application/json: schema: type: array items: $ref: '#/components/schemas/OpportunityItem' example: - pricingPlanId: a22c03e9-9e27-4e85-8433-78f246345685 units: - quantity: '8' unit: USER subscriptionCustomAttributes: intended_os: - other - ios - macos sales_agent_id: - R353113R vendorRequiredFields: name: - jonh lastname: - doe email: - john.doe@acme.com provisioningConfiguration: date: '1546300800000' strategy: CUSTOM billingConfiguration: date: '1546300800000' strategy: CUSTOM description: Information about the items being added to the opportunity. Request body must include either a product ID or pricing plan ID for each item. Item IDs are returned by the API after the items are added to the opportunity required: true responses: '200': description: Success content: application/json: schema: type: array items: $ref: '#/components/schemas/OpportunityItem' examples: response: value: - id: 37f56046-2cec-4bf4-a4e2-5a733dc849a9 pricingPlanId: a22c03e9-9e27-4e85-8433-78f246345685 units: - quantity: '8' unit: USER subscriptionCustomAttributes: intended_os: - other - ios - macos sales_agent_id: - R353113R vendorRequiredFields: name: - jonh lastname: - doe email: - john.doe@acme.com provisioningConfiguration: date: '1546300800000' strategy: CUSTOM billingConfiguration: date: '1546300800000' strategy: CUSTOM '400': description: Missing or invalid required parameter content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 400 code: BAD_REQUEST message: Missing or invalid required parameter '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 401 code: UNAUTHORIZED message: HTTP 401 Unauthorized '403': description: The user does not have access to the opportunity, or the user does not have permission to execute the action, or the opportunity status does not allow the action content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 403 code: FORBIDDEN message: Forbidden '404': description: Invalid opportunity ID, or product or pricing plan not found content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 404 code: NOT_FOUND message: Invalid opportunity ID, or product or pricing plan not found '409': description: Restrictions apply to one or more products content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 409 code: CONFLICT message: 'There''s at least one restriction for a product of the opportunity. OwnerUUID: d781ac09-b4fe-4d57-8ba2-4640fc5b7c49 CustomerUUID: 498c62ea-ad14-48e6-96ce-5400c617444c - Restrictions by product: 58a8508e-f480-4dfa-b605-a0512c00c1ea ( ALREADY_PURCHASED )' x-codeSamples: - lang: Shell + Curl source: "curl --request POST \\\n --url https://marketplace.appdirect.com/api/assistedSales/v1/opportunities/%7BopportunityId%7D/items \\\n --header 'content-type: application/json' \\\n --data '[{\"pricingPlanId\":\"a22c03e9-9e27-4e85-8433-78f246345685\",\"units\":[{\"quantity\":\"8\",\"unit\":\"USER\"}],\"subscriptionCustomAttributes\":{\"intended_os\":[\"other\",\"ios\",\"macos\"],\"sales_agent_id\":[\"R353113R\"]},\"vendorRequiredFields\":{\"name\":[\"jonh\"],\"lastname\":[\"doe\"],\"email\":[\"john.doe@acme.com\"]},\"provisioningConfiguration\":{\"date\":\"1546300800000\",\"strategy\":\"CUSTOM\"},\"billingConfiguration\":{\"date\":\"1546300800000\",\"strategy\":\"CUSTOM\"}}]'" - lang: Node + Request source: "const request = require('request');\n\nconst options = {\n method: 'POST',\n url: 'https://marketplace.appdirect.com/api/assistedSales/v1/opportunities/%7BopportunityId%7D/items',\n headers: {'content-type': 'application/json'},\n body: [\n {\n pricingPlanId: 'a22c03e9-9e27-4e85-8433-78f246345685',\n units: [{quantity: '8', unit: 'USER'}],\n subscriptionCustomAttributes: {intended_os: ['other', 'ios', 'macos'], sales_agent_id: ['R353113R']},\n vendorRequiredFields: {name: ['jonh'], lastname: ['doe'], email: ['john.doe@acme.com']},\n provisioningConfiguration: {date: '1546300800000', strategy: 'CUSTOM'},\n billingConfiguration: {date: '1546300800000', strategy: 'CUSTOM'}\n }\n ],\n json: true\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\nMediaType mediaType = MediaType.parse(\"application/json\");\nRequestBody body = RequestBody.create(mediaType, \"[{\\\"pricingPlanId\\\":\\\"a22c03e9-9e27-4e85-8433-78f246345685\\\",\\\"units\\\":[{\\\"quantity\\\":\\\"8\\\",\\\"unit\\\":\\\"USER\\\"}],\\\"subscriptionCustomAttributes\\\":{\\\"intended_os\\\":[\\\"other\\\",\\\"ios\\\",\\\"macos\\\"],\\\"sales_agent_id\\\":[\\\"R353113R\\\"]},\\\"vendorRequiredFields\\\":{\\\"name\\\":[\\\"jonh\\\"],\\\"lastname\\\":[\\\"doe\\\"],\\\"email\\\":[\\\"john.doe@acme.com\\\"]},\\\"provisioningConfiguration\\\":{\\\"date\\\":\\\"1546300800000\\\",\\\"strategy\\\":\\\"CUSTOM\\\"},\\\"billingConfiguration\\\":{\\\"date\\\":\\\"1546300800000\\\",\\\"strategy\\\":\\\"CUSTOM\\\"}}]\");\nRequest request = new Request.Builder()\n .url(\"https://marketplace.appdirect.com/api/assistedSales/v1/opportunities/%7BopportunityId%7D/items\")\n .post(body)\n .addHeader(\"content-type\", \"application/json\")\n .build();\n\nResponse response = client.newCall(request).execute();" get: x-appdirect-api-stage: Early Access summary: List items description: 'Lists all items in an opportunity. Required: Accept-Language header with Locale format. For example: en-US' tags: - AppResellerOpportunities operationId: readItems x-appdirect-required-scopes: ROLE_RESELLER: - Allows access as a Reseller to the opportunity ROLE_SALES_SUPPORT: - Allows access as a Sales Support to the opportunity ROLE_CHANNEL_ADMIN: - Allows access as a Marketplace Manager to the opportunity ROLE_RESELLER_MANAGER: - Allows access as a Reseller Manager to the opportunity ROLE_PARTNER: - Allows access as a Partner to the opportunity ROLE_PARTNER_READ: - Allows read access as a Partner to the opportunity parameters: - in: path name: opportunityId description: Opportunity ID required: true schema: type: string responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/OpportunityItemDetail' examples: response: value: - id: 37f56046-2cec-4bf4-a4e2-5a733dc849a9 product: id: cc0c7c28-ea65-4bab-8a4a-5e84d90ab291 name: Appsome Webapp type: WEB_APP logo: https://logs.acme.com/400x400/ddd/000.png&text=Appsome+App pricingPlan: id: 031d9ed2-3df1-44f5-876a-6b4318ba7bdb name: Recurring Edition with Unlimited Included Users units: - quantity: '8' unit: USER pricing: - costId: cd3c7c22-sd64-4bag-8a4v-5e84d90ab291 costTypeCategory: RECURRING costType: RECURRING_FLAT pricingStrategy: FREE priceRanges: [] description: RECURRING_FLAT quantity: '1.0000000000' salePrice: '0.0000000000' wholesalePrice: '0.0000000000' totalSalePrice: '0.0000000000' - costId: kl3c7c24-sd33-4bui-8a4v-8u84d98ab333 costTypeCategory: RECURRING costType: INCLUDED pricingStrategy: UNLIMITED priceRanges: [] description: INCLUDED unit: USER salePrice: '0.0000000000' wholesalePrice: '0.0000000000' totalSalePrice: '0.0000000000' subscriptionCustomAttributes: intended_os: - other - ios - macos sales_agent_id: - R353113R vendorRequiredFields: name: - John lastname: - Doe email: - john.doe@acme.com contractConfiguration: minimumServiceLength: 3 minimumServiceLengthUnit: MONTHLY terminationFee: feeType: FIXED amount: 2 renewalConfiguration: MONTH_TO_MONTH terminationFeeGracePeriod: 7 terminationFeeGracePeriodUnit: DAY contractCancellationPeriodLimit: null contractCancellationPeriodUnit: NONE endOfContractGracePeriod: null endOfContractGracePeriodUnit: INFINITY unitTerms: USER: blockContractIncrease: false blockOriginalContractDecrease: false blockContractDecrease: true blockContractUpgrades: false blockContractDowngrades: true blockSwitchToShorterContract: true keepContractDateOnPlanChange: false provisioningConfiguration: date: '1546300800000' strategy: CUSTOM billingConfiguration: date: '1546300800000' strategy: CUSTOM '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 401 code: UNAUTHORIZED message: HTTP 401 Unauthorized '403': description: The user does not have access to the opportunity content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 403 code: FORBIDDEN message: Forbidden '404': description: Invalid opportunity ID content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 404 code: NOT_FOUND message: Invalid opportunity ID x-codeSamples: - lang: Shell + Curl source: "curl --request GET \\\n --url https://marketplace.appdirect.com/api/assistedSales/v1/opportunities/%7BopportunityId%7D/items" - lang: Node + Request source: "const request = require('request');\n\nconst options = {\n method: 'GET',\n url: 'https://marketplace.appdirect.com/api/assistedSales/v1/opportunities/%7BopportunityId%7D/items'\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/assistedSales/v1/opportunities/%7BopportunityId%7D/items\")\n .get()\n .build();\n\nResponse response = client.newCall(request).execute();" /assistedSales/v1/opportunities/{opportunityId}/items/{itemId}: delete: x-appdirect-api-stage: Early Access summary: Remove item description: 'Removes an item from the opportunity Required: Accept-Language header with Locale format. For example: en-US' tags: - AppResellerOpportunities operationId: deleteOpportunityItem x-appdirect-required-scopes: ROLE_RESELLER: - Allows access as a Reseller to the opportunity ROLE_SALES_SUPPORT: - Allows access as a Sales Support to the opportunity ROLE_CHANNEL_ADMIN: - Allows access as a Marketplace Manager to the opportunity ROLE_RESELLER_MANAGER: - Allows access as a Reseller Manager to the opportunity ROLE_PARTNER: - Allows access as a Partner to the opportunity parameters: - in: path name: opportunityId description: Opportunity ID required: true schema: type: string - in: path name: itemId description: Item ID required: true schema: type: string responses: '204': description: No Content '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 401 code: UNAUTHORIZED message: HTTP 401 Unauthorized '403': description: The user does not have access to the opportunity or the opportunity status does not allow the action content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 403 code: FORBIDDEN message: Forbidden '404': description: Invalid opportunity ID content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 404 code: NOT_FOUND message: Invalid opportunity ID x-codeSamples: - lang: Shell + Curl source: "curl --request DELETE \\\n --url https://marketplace.appdirect.com/api/assistedSales/v1/opportunities/%7BopportunityId%7D/items/%7BitemId%7D" - lang: Node + Request source: "const request = require('request');\n\nconst options = {\n method: 'DELETE',\n url: 'https://marketplace.appdirect.com/api/assistedSales/v1/opportunities/%7BopportunityId%7D/items/%7BitemId%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/assistedSales/v1/opportunities/%7BopportunityId%7D/items/%7BitemId%7D\")\n .delete(null)\n .build();\n\nResponse response = client.newCall(request).execute();" put: x-appdirect-api-stage: Early Access summary: Edit item description: 'Edit an item on the opportunity. Required: Accept-Language header with Locale format. For example: en-US' tags: - AppResellerOpportunities operationId: editItem x-appdirect-required-scopes: ROLE_RESELLER: - Allow access as a Reseller to the opportunity. Role permissions are required to update, for example, custom prices, custom contracts, provisioning configuration, and billing configuration. ROLE_SALES_SUPPORT: - Allows access as a Sales Support Representative to the opportunity. Role permissions are required to update, for example, custom prices, custom contracts, provisioning configuration, and billing configuration. ROLE_CHANNEL_ADMIN: - Allows access as a Marketplace Manager to the opportunity ROLE_RESELLER_MANAGER: - Allows access as a Reseller Manager to the opportunity. Role permissions are required to update, for example, custom prices. ROLE_PARTNER: - Allows access as a Partner to the opportunity parameters: - in: path name: opportunityId description: Opportunity ID required: true schema: type: string - in: path name: itemId description: Item ID required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/OpportunityItemUpdateRequest' description: Information about the item being edited required: true responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/OpportunityItemDetail' examples: response: value: id: 37f56046-2cec-4bf4-a4e2-5a733dc849a9 product: id: cc0c7c28-ea65-4bab-8a4a-5e84d90ab291 name: Appsome Webapp type: WEB_APP logo: https://logs.acme.com/400x400/ddd/000.png&text=Appsome+App pricingPlan: id: 031d9ed2-3df1-44f5-876a-6b4318ba7bdb name: Recurring Edition with Unlimited Included Users units: - quantity: '8' unit: USER pricing: - costId: cd3c7c22-sd64-4bag-8a4v-5e84d90ab291 costTypeCategory: RECURRING costType: RECURRING_FLAT pricingStrategy: FREE priceRanges: [] description: RECURRING_FLAT quantity: '1.0000000000' salePrice: '0.0000000000' wholesalePrice: '0.0000000000' totalSalePrice: '0.0000000000' - costId: kl3c7c24-sd33-4bui-8a4v-8u84d98ab333 costTypeCategory: RECURRING costType: INCLUDED pricingStrategy: UNLIMITED priceRanges: [] description: INCLUDED unit: USER salePrice: '0.0000000000' wholesalePrice: '0.0000000000' totalSalePrice: '0.0000000000' subscriptionCustomAttributes: intended_os: - other - ios - macos sales_agent_id: - R353113R vendorRequiredFields: name: - John lastname: - Doe email: - john.doe@acme.com contractConfiguration: minimumServiceLength: '3' minimumServiceLengthUnit: MONTHLY terminationFee: feeType: FIXED amount: '2' renewalConfiguration: MONTH_TO_MONTH terminationFeeGracePeriod: '7' terminationFeeGracePeriodUnit: DAY contractCancellationPeriodLimit: null contractCancellationPeriodUnit: NONE endOfContractGracePeriod: null endOfContractGracePeriodUnit: INFINITY unitTerms: USER: blockContractIncrease: false blockOriginalContractDecrease: false blockContractDecrease: true blockContractUpgrades: false blockContractDowngrades: true blockSwitchToShorterContract: true keepContractDateOnPlanChange: false provisioningConfiguration: date: '1546300800000' strategy: CUSTOM billingConfiguration: date: '1546300800000' strategy: CUSTOM '400': description: Missing or invalid required parameter content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 400 code: BAD_REQUEST message: Missing or invalid required parameter '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 401 code: UNAUTHORIZED message: HTTP 401 Unauthorized '403': description: The user does not have access to the opportunity, or does not have permission to update part or the whole item information, or the opportunity status does not allow the action content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 403 code: FORBIDDEN message: Forbidden '404': description: Invalid opportunity ID content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 404 code: NOT_FOUND message: Invalid opportunity ID x-codeSamples: - lang: Shell + Curl source: "curl --request PUT \\\n --url https://marketplace.appdirect.com/api/assistedSales/v1/opportunities/%7BopportunityId%7D/items/%7BitemId%7D \\\n --header 'content-type: application/json' \\\n --data '{\"id\":\"37f56046-2cec-4bf4-a4e2-5a733dc849a9\",\"pricingPlanId\":\"a22c03e9-9e27-4e85-8433-78f246345685\",\"units\":[{\"quantity\":\"8\",\"unit\":\"USER\"}],\"customPrices\":[{\"costId\":\"e5f403a3-7ba0-45d4-8117-8dd8cbceb6c6\",\"price\":100},{\"costId\":\"9742e09a-e1b4-4b9e-b1a7-66df3e41cebe\",\"price\":20}],\"contractConfiguration\":{\"minimumServiceLength\":\"3\",\"minimumServiceLengthUnit\":\"MONTHLY\",\"terminationFee\":{\"feeType\":\"FIXED\",\"amount\":\"2\"},\"renewalConfiguration\":\"MONTH_TO_MONTH\",\"terminationFeeGracePeriod\":\"7\",\"terminationFeeGracePeriodUnit\":\"DAY\",\"contractCancellationPeriodLimit\":null,\"contractCancellationPeriodUnit\":\"NONE\",\"endOfContractGracePeriod\":null,\"endOfContractGracePeriodUnit\":\"INFINITY\",\"unitTerms\":{\"USER\":{\"blockContractIncrease\":false,\"blockOriginalContractDecrease\":false,\"blockContractDecrease\":true}},\"blockContractUpgrades\":false,\"blockContractDowngrades\":true,\"blockSwitchToShorterContract\":true,\"keepContractDateOnPlanChange\":false},\"provisioningConfiguration\":{\"date\":\"1546300800000\",\"strategy\":\"CUSTOM\"},\"billingConfiguration\":{\"date\":\"1546300800000\",\"strategy\":\"CUSTOM\"},\"subscriptionCustomAttributes\":{\"intended_os\":[\"other\",\"ios\",\"macos\"],\"sales_agent_id\":[\"R353113R\"]},\"vendorRequiredFields\":{\"name\":[\"John\"],\"lastname\":[\"Doe\"],\"email\":[\"john.doe@acme.com\"]}}'" - lang: Node + Request source: "const request = require('request');\n\nconst options = {\n method: 'PUT',\n url: 'https://marketplace.appdirect.com/api/assistedSales/v1/opportunities/%7BopportunityId%7D/items/%7BitemId%7D',\n headers: {'content-type': 'application/json'},\n body: {\n id: '37f56046-2cec-4bf4-a4e2-5a733dc849a9',\n pricingPlanId: 'a22c03e9-9e27-4e85-8433-78f246345685',\n units: [{quantity: '8', unit: 'USER'}],\n customPrices: [\n {costId: 'e5f403a3-7ba0-45d4-8117-8dd8cbceb6c6', price: 100},\n {costId: '9742e09a-e1b4-4b9e-b1a7-66df3e41cebe', price: 20}\n ],\n contractConfiguration: {\n minimumServiceLength: '3',\n minimumServiceLengthUnit: 'MONTHLY',\n terminationFee: {feeType: 'FIXED', amount: '2'},\n renewalConfiguration: 'MONTH_TO_MONTH',\n terminationFeeGracePeriod: '7',\n terminationFeeGracePeriodUnit: 'DAY',\n contractCancellationPeriodLimit: null,\n contractCancellationPeriodUnit: 'NONE',\n endOfContractGracePeriod: null,\n endOfContractGracePeriodUnit: 'INFINITY',\n unitTerms: {\n USER: {\n blockContractIncrease: false,\n blockOriginalContractDecrease: false,\n blockContractDecrease: true\n }\n },\n blockContractUpgrades: false,\n blockContractDowngrades: true,\n blockSwitchToShorterContract: true,\n keepContractDateOnPlanChange: false\n },\n provisioningConfiguration: {date: '1546300800000', strategy: 'CUSTOM'},\n billingConfiguration: {date: '1546300800000', strategy: 'CUSTOM'},\n subscriptionCustomAttributes: {intended_os: ['other', 'ios', 'macos'], sales_agent_id: ['R353113R']},\n vendorRequiredFields: {name: ['John'], lastname: ['Doe'], email: ['john.doe@acme.com']}\n },\n json: true\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\nMediaType mediaType = MediaType.parse(\"application/json\");\nRequestBody body = RequestBody.create(mediaType, \"{\\\"id\\\":\\\"37f56046-2cec-4bf4-a4e2-5a733dc849a9\\\",\\\"pricingPlanId\\\":\\\"a22c03e9-9e27-4e85-8433-78f246345685\\\",\\\"units\\\":[{\\\"quantity\\\":\\\"8\\\",\\\"unit\\\":\\\"USER\\\"}],\\\"customPrices\\\":[{\\\"costId\\\":\\\"e5f403a3-7ba0-45d4-8117-8dd8cbceb6c6\\\",\\\"price\\\":100},{\\\"costId\\\":\\\"9742e09a-e1b4-4b9e-b1a7-66df3e41cebe\\\",\\\"price\\\":20}],\\\"contractConfiguration\\\":{\\\"minimumServiceLength\\\":\\\"3\\\",\\\"minimumServiceLengthUnit\\\":\\\"MONTHLY\\\",\\\"terminationFee\\\":{\\\"feeType\\\":\\\"FIXED\\\",\\\"amount\\\":\\\"2\\\"},\\\"renewalConfiguration\\\":\\\"MONTH_TO_MONTH\\\",\\\"terminationFeeGracePeriod\\\":\\\"7\\\",\\\"terminationFeeGracePeriodUnit\\\":\\\"DAY\\\",\\\"contractCancellationPeriodLimit\\\":null,\\\"contractCancellationPeriodUnit\\\":\\\"NONE\\\",\\\"endOfContractGracePeriod\\\":null,\\\"endOfContractGracePeriodUnit\\\":\\\"INFINITY\\\",\\\"unitTerms\\\":{\\\"USER\\\":{\\\"blockContractIncrease\\\":false,\\\"blockOriginalContractDecrease\\\":false,\\\"blockContractDecrease\\\":true}},\\\"blockContractUpgrades\\\":false,\\\"blockContractDowngrades\\\":true,\\\"blockSwitchToShorterContract\\\":true,\\\"keepContractDateOnPlanChange\\\":false},\\\"provisioningConfiguration\\\":{\\\"date\\\":\\\"1546300800000\\\",\\\"strategy\\\":\\\"CUSTOM\\\"},\\\"billingConfiguration\\\":{\\\"date\\\":\\\"1546300800000\\\",\\\"strategy\\\":\\\"CUSTOM\\\"},\\\"subscriptionCustomAttributes\\\":{\\\"intended_os\\\":[\\\"other\\\",\\\"ios\\\",\\\"macos\\\"],\\\"sales_agent_id\\\":[\\\"R353113R\\\"]},\\\"vendorRequiredFields\\\":{\\\"name\\\":[\\\"John\\\"],\\\"lastname\\\":[\\\"Doe\\\"],\\\"email\\\":[\\\"john.doe@acme.com\\\"]}}\");\nRequest request = new Request.Builder()\n .url(\"https://marketplace.appdirect.com/api/assistedSales/v1/opportunities/%7BopportunityId%7D/items/%7BitemId%7D\")\n .put(body)\n .addHeader(\"content-type\", \"application/json\")\n .build();\n\nResponse response = client.newCall(request).execute();" /assistedSales/v2/opportunities/{opportunityId}/finalize: post: x-appdirect-api-stage: Early Access summary: Finalize opportunity description: 'Finalize an opportunity Required: Accept-Language header with Locale format. For example: en-US' tags: - AppResellerOpportunities operationId: finalizeOpportunity x-appdirect-required-scopes: ROLE_RESELLER: - Allows access as a Reseller to the opportunity. Role permissions are required to execute this action. ROLE_SALES_SUPPORT: - Allows access as a Sales Support to the opportunity. Role permissions are required to execute this action. ROLE_CHANNEL_ADMIN: - Allows access as a Marketplace Manager to the opportunity ROLE_RESELLER_MANAGER: - Allows access as a Reseller Manager to the opportunity. Role permissions are required to execute this action. ROLE_PARTNER: - Allows access as a Partner to the opportunity parameters: - in: path name: opportunityId description: Opportunity ID required: true schema: type: string responses: '202': description: Accepted content: application/json: schema: $ref: '#/components/schemas/Opportunity' examples: response: value: id: ef6c414f-39da-401f-a4b8-81adc6190fda ownerUser: id: d781ac09-b4fe-4d57-8ba2-4640fc5b7c49 email: john.doe@acme.com firstName: John lastName: Doe company: id: '1' name: Acme Corp. customerUser: id: 498c62ea-ad14-48e6-96ce-5400c617444c email: jane.smith@company.com firstName: Jane lastName: Smith company: id: '100' name: Customer Company createdOn: '1546300800000' currency: USD name: Prospect N1 status: PROCESSING items: - id: 4ccf689b-4339-4fc9-a8b3-b05c5a87c1be pricingPlanId: 4bc864b5-f63f-4933-be19-3700aa9a8cc4 units: - quantity: '20' unit: USER subscriptionCustomAttributes: intended_os: - other - ios - macos sales_agent_id: - R353113R vendorRequiredFields: name: - John lastname: - Doe email: - john.doe@acme.com - id: dece524d-0466-4185-b3bb-1f8a300c37cd pricingPlanId: 80b85538-ffc1-4c4b-acb1-1bf87c8c2fc4 units: [] availableActions: [] purchaseId: 62e0f81b-a016-403a-8b9b-a01b515837ca purchaseNumber: '006204' createdByUser: id: 8f6b3d29-4169-4fb0-91ff-bad9b7a3d0d4 email: peter.parker@marvel.com firstName: Peter lastName: Parker company: id: '99' name: Marvel Corp. '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 401 code: UNAUTHORIZED message: HTTP 401 Unauthorized '403': description: The user does not have access to the opportunity, or the user does not have permission to execute the action, or the opportunity status does not allow the action, or restrictions apply such as customer account being inactive. content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 403 code: FORBIDDEN message: Forbidden '404': description: Invalid opportunity ID content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 404 code: NOT_FOUND message: Invalid opportunity ID x-codeSamples: - lang: Shell + Curl source: "curl --request POST \\\n --url https://marketplace.appdirect.com/api/assistedSales/v2/opportunities/%7BopportunityId%7D/finalize" - lang: Node + Request source: "const request = require('request');\n\nconst options = {\n method: 'POST',\n url: 'https://marketplace.appdirect.com/api/assistedSales/v2/opportunities/%7BopportunityId%7D/finalize'\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/assistedSales/v2/opportunities/%7BopportunityId%7D/finalize\")\n .post(null)\n .build();\n\nResponse response = client.newCall(request).execute();" /assistedSales/v1/opportunities/{opportunityId}/requestReview: post: x-appdirect-api-stage: Early Access tags: - AppResellerOpportunities summary: Request opportunity review description: 'Submit the opportunity to the manager for review. After it is submitted, the sales agent cannot modify the opportunity. Managers can still modify and finalize it. Required: Accept-Language header with Locale format. For example: en-US' operationId: requestOpportunityReview x-appdirect-required-scopes: ROLE_RESELLER: - Allows access as a Reseller to the opportunity ROLE_SALES_SUPPORT: - Allows access as a Sales Support to the opportunity ROLE_RESELLER_MANAGER: - Allows access as a Reseller Manager to the opportunity. Role permmission required to execute this action. parameters: - in: path name: opportunityId required: true description: Opportunity ID schema: type: string responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/Opportunity' examples: response: value: id: ef6c414f-39da-401f-a4b8-81adc6190fda ownerUser: id: d781ac09-b4fe-4d57-8ba2-4640fc5b7c49 email: john.doe@acme.com firstName: John lastName: Doe company: id: '1' name: Acme Corp. customerUser: id: 498c62ea-ad14-48e6-96ce-5400c617444c email: jane.smith@company.com firstName: Jane lastName: Smith company: id: '100' name: Customer Company createdOn: '1546300800000' currency: USD purchaseEffectiveDate: '1577750400000' name: Prospect N1 status: PENDING_REVIEW items: - id: 4ccf689b-4339-4fc9-a8b3-b05c5a87c1be pricingPlanId: 4bc864b5-f63f-4933-be19-3700aa9a8cc4 units: - quantity: '20' unit: USER subscriptionCustomAttributes: intended_os: - other - ios - macos sales_agent_id: - R353113R vendorRequiredFields: name: - John lastname: - Doe email: - john.doe@acme.com - id: dece524d-0466-4185-b3bb-1f8a300c37cd pricingPlanId: 80b85538-ffc1-4c4b-acb1-1bf87c8c2fc4 units: [] availableActions: [] createdByUser: id: 8f6b3d29-4169-4fb0-91ff-bad9b7a3d0d4 email: peter.parker@marvel.com firstName: Peter lastName: Parker company: id: '99' name: Marvel Corp. '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 401 code: UNAUTHORIZED message: HTTP 401 Unauthorized '403': description: The user does not have access to the opportunity, or the user does not have permissions to execute the action, or the opportunity status does not allow the action, or restrictions apply such as customer account being inactive. content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 403 code: FORBIDDEN message: Forbidden '404': description: Invalid opportunity ID content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 404 code: NOT_FOUND message: Invalid opportunity ID x-codeSamples: - lang: Shell + Curl source: "curl --request POST \\\n --url https://marketplace.appdirect.com/api/assistedSales/v1/opportunities/%7BopportunityId%7D/requestReview" - lang: Node + Request source: "const request = require('request');\n\nconst options = {\n method: 'POST',\n url: 'https://marketplace.appdirect.com/api/assistedSales/v1/opportunities/%7BopportunityId%7D/requestReview'\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/assistedSales/v1/opportunities/%7BopportunityId%7D/requestReview\")\n .post(null)\n .build();\n\nResponse response = client.newCall(request).execute();" /assistedSales/v1/opportunities/{opportunityId}/summary: get: x-appdirect-api-stage: Early Access summary: Get opportunity summary description: 'Read the pricing summary of an opportunity Required: Accept-Language header with Locale format. For example: en-US' tags: - AppResellerOpportunities operationId: readOpportunitySummary x-appdirect-required-scopes: ROLE_RESELLER: - Allows access as a Reseller to the opportunity ROLE_SALES_SUPPORT: - Allows access as a Sales Support to the opportunity ROLE_CHANNEL_ADMIN: - Allows access as a Marketplace Manager to the opportunity ROLE_RESELLER_MANAGER: - Allows access as a Reseller Manager to the opportunity ROLE_PARTNER: - Allows access as a Partner to the opportunity ROLE_PARTNER_READ: - Allows read access as a Partner to the opportunity parameters: - in: path name: opportunityId description: Opportunity ID required: true schema: type: string responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/OpportunitySummary' examples: response: value: amountDueBeforeTax: '11.0000000000' taxSummary: - description: Flat Tax taxAmount: '2.0000000000' amountDueAfterTax: '13.0000000000' items: - id: c57331b7-0820-44ac-ad75-ee4ab2783b7c product: id: fa776d2e-cda5-4256-9a27-125a0fe3f448 name: Supported Product for Opportunity MVP type: WEB_APP_STACKED isAddon: false hasAddons: false pricingPlan: id: 7e1fd1fa-de0e-49e9-9e6a-9c474c57f22d name: Tiered monthly+yearly flat with included YEARLY editionCode: Tiered monthly+yearly flat with included pricing: - costType: RECURRING_FLAT description: Tiered monthly+yearly flat with included quantity: '1.0000000000' totalSalePrice: '240.0000000000' - costType: INCLUDED description: INCLUDED quantity: '1.0000000000' totalSalePrice: '0.0000000000' contractConfiguration: minimumServiceLength: 1 minimumServiceLengthUnit: YEARLY unitTerms: {} blockContractUpgrades: true blockContractDowngrades: true blockSwitchToShorterContract: true keepContractDateOnPlanChange: true unitDefinitions: - unit: USER minimum: '1.0000000000' meteredUsage: false allowDecimals: false readOnly: true pricePerIncrement: false recurringTotals: - billingCycle: period: YEARLY dayOfMonth: 17 totalSalePrice: '240.0000000000' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 401 code: UNAUTHORIZED message: HTTP 401 Unauthorized '403': description: The user does not have access to the opportunity content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 403 code: FORBIDDEN message: Forbidden '404': description: Invalid opportunity ID content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 404 code: NOT_FOUND message: Invalid opportunity ID x-codeSamples: - lang: Shell + Curl source: "curl --request GET \\\n --url https://marketplace.appdirect.com/api/assistedSales/v1/opportunities/%7BopportunityId%7D/summary" - lang: Node + Request source: "const request = require('request');\n\nconst options = {\n method: 'GET',\n url: 'https://marketplace.appdirect.com/api/assistedSales/v1/opportunities/%7BopportunityId%7D/summary'\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/assistedSales/v1/opportunities/%7BopportunityId%7D/summary\")\n .get()\n .build();\n\nResponse response = client.newCall(request).execute();" /assistedSales/v1/opportunities/{opportunityId}/pricingPlanCosts: get: x-appdirect-api-stage: Early Access summary: Get opportunity pricing plan costs description: 'Read initial costs for a pricing plan of an opportunity item. ''Required: Accept-Language'' header with Locale format. For example: en-US' tags: - AppResellerOpportunities operationId: readPricingPlanCosts x-appdirect-required-scopes: ROLE_RESELLER: - Allows access as a Reseller to the opportunity ROLE_SALES_SUPPORT: - Allows access as a Sales Support to the opportunity ROLE_CHANNEL_ADMIN: - Allows access as a Marketplace Manager to the opportunity ROLE_RESELLER_MANAGER: - Allows access as a Reseller Manager to the opportunity ROLE_PARTNER: - Allows access as a Partner to the opportunity ROLE_PARTNER_READ: - Allows read access as a Partner to the opportunity parameters: - in: path name: opportunityId description: Opportunity ID required: true schema: type: string - in: query name: pricingPlanId description: Pricing plan ID required: true schema: type: string - in: query name: currency description: Opportunity currency, using the ISO-4217 currency code required: true schema: type: string responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/PricingPlanCosts' examples: response: value: pricingPlanId: a01c46d4-8925-4719-a891-2c036e2216a1 pricing: - costId: 0121502b-0bac-4927-825c-d1f6c19e79c7 costTypeCategory: ONE_TIME frequency: ONE_TIME costType: CONTRACT_FEE pricingStrategy: FLAT priceRanges: [] description: Contract charge unit: CONTRACT_FEE quantity: '1.0000000000' salePrice: '300.0000000000' wholesalePrice: '300.0000000000' totalSalePrice: '300.0000000000' - costId: 78092def-eeb6-42dc-917e-182e38b53d16 costTypeCategory: RECURRING frequency: MONTHLY costType: RECURRING_FLAT pricingStrategy: FLAT priceRanges: [] description: Recurring monthly flat+ppu+ot with contract+ot+tf with included quantity: '1.0000000000' salePrice: '10.0000000000' wholesalePrice: '10.0000000000' totalSalePrice: '10.0000000000' - costId: ea5b596d-950f-427b-87d0-7c82340b468b costTypeCategory: ONE_TIME frequency: ONE_TIME costType: SETUP_FEE pricingStrategy: FLAT priceRanges: [] description: Recurring monthly flat+ppu+ot with contract+ot+tf with included quantity: '1.0000000000' salePrice: '100.0000000000' wholesalePrice: '100.0000000000' totalSalePrice: '100.0000000000' - costId: 6160b953-88f7-49ec-a90d-aef0f9ae5d17 costTypeCategory: RECURRING frequency: MONTHLY costType: RECURRING_PER_UNIT pricingStrategy: UNIT priceRanges: - min: '0.0000000000' description: Per User Fee unit: USER quantity: '0.0000000000' salePrice: '8.5000000000' wholesalePrice: '8.5000000000' totalSalePrice: '0.0000000000' - costTypeCategory: RECURRING frequency: MONTHLY costType: INCLUDED pricingStrategy: UNIT priceRanges: - min: '1.0000000000' max: '1.0000000000' description: INCLUDED unit: USER quantity: '1.0000000000' salePrice: '0.0000000000' wholesalePrice: '0.0000000000' totalSalePrice: '0.0000000000' contractConfiguration: minimumServiceLength: 12 minimumServiceLengthUnit: MONTHLY renewalConfiguration: AUTO_RENEW terminationFee: feeType: FIXED amount: 400 description: Termination fee! terminationFeeGracePeriodUnit: NONE endOfContractGracePeriodUnit: INFINITY contractCancellationPeriodUnit: NONE unitTerms: {} blockContractUpgrades: false blockContractDowngrades: false blockSwitchToShorterContract: false keepContractDateOnPlanChange: false isDefault: true unitDefinitions: - unit: USER minimum: '1.0000000000' meteredUsage: false allowDecimals: false readOnly: false quantity: '1.0000000000' increment: 1 pricePerIncrement: false '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 401 code: UNAUTHORIZED message: HTTP 401 Unauthorized '403': description: The user does not have access to the opportunity content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 403 code: FORBIDDEN message: Forbidden '404': description: Invalid opportunity ID content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 404 code: NOT_FOUND message: Invalid opportunity ID x-codeSamples: - lang: Shell + Curl source: "curl --request GET \\\n --url 'https://marketplace.appdirect.com/api/assistedSales/v1/opportunities/%7BopportunityId%7D/pricingPlanCosts?pricingPlanId=SOME_STRING_VALUE¤cy=SOME_STRING_VALUE'" - lang: Node + Request source: "const request = require('request');\n\nconst options = {\n method: 'GET',\n url: 'https://marketplace.appdirect.com/api/assistedSales/v1/opportunities/%7BopportunityId%7D/pricingPlanCosts',\n qs: {pricingPlanId: 'SOME_STRING_VALUE', currency: 'SOME_STRING_VALUE'}\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/assistedSales/v1/opportunities/%7BopportunityId%7D/pricingPlanCosts?pricingPlanId=SOME_STRING_VALUE¤cy=SOME_STRING_VALUE\")\n .get()\n .build();\n\nResponse response = client.newCall(request).execute();" /assistedSales/v1/opportunities/pricingPlanCosts: get: x-appdirect-api-stage: Early Access summary: Get opportunity pricing plan costs without specifying an opportunity description: 'Read initial costs for a pricing plan of an opportunity item without specifying an opportunity. ''Required: Accept-Language'' header with Locale format. For example: en-US' tags: - AppResellerOpportunities operationId: readPricingPlanCostsWithoutOpportunity x-appdirect-required-scopes: ROLE_RESELLER: - Allows access as Reseller to the opportunity ROLE_SALES_SUPPORT: - Allows access as Sales Support to the opportunity ROLE_CHANNEL_ADMIN: - Allows access as Marketplace Manager to the opportunity ROLE_RESELLER_MANAGER: - Allows access as Reseller Manager to the opportunity ROLE_PARTNER: - Allows access as Partner to the opportunity ROLE_PARTNER_READ: - Allows read access as Partner to the opportunity parameters: - in: header name: Accept-Language description: 'Locale. Format: ''en-US''' required: true schema: type: string - in: query name: pricingPlanId description: Pricing plan ID required: true schema: type: string - in: query name: ownerId description: Sales agent's user ID required: true schema: type: string - in: query name: ownerCompanyId description: Sales agent's company ID required: true schema: type: string - in: query name: currency description: Opportunity currency, using the ISO-4217 currency code required: true schema: type: string responses: '200': description: Success content: application/json: schema: $ref: '#/components/schemas/PricingPlanCosts' examples: response: value: pricingPlanId: a01c46d4-8925-4719-a891-2c036e2216a1 pricing: - costId: 0121502b-0bac-4927-825c-d1f6c19e79c7 costTypeCategory: ONE_TIME frequency: ONE_TIME costType: CONTRACT_FEE pricingStrategy: FLAT priceRanges: [] description: Contract charge unit: CONTRACT_FEE quantity: '1.0000000000' salePrice: '300.0000000000' wholesalePrice: '300.0000000000' totalSalePrice: '300.0000000000' - costId: 78092def-eeb6-42dc-917e-182e38b53d16 costTypeCategory: RECURRING frequency: MONTHLY costType: RECURRING_FLAT pricingStrategy: FLAT priceRanges: [] description: Recurring monthly flat+ppu+ot with contract+ot+tf with included quantity: '1.0000000000' salePrice: '10.0000000000' wholesalePrice: '10.0000000000' totalSalePrice: '10.0000000000' - costId: ea5b596d-950f-427b-87d0-7c82340b468b costTypeCategory: ONE_TIME frequency: ONE_TIME costType: SETUP_FEE pricingStrategy: FLAT priceRanges: [] description: Recurring monthly flat+ppu+ot with contract+ot+tf with included quantity: '1.0000000000' salePrice: '100.0000000000' wholesalePrice: '100.0000000000' totalSalePrice: '100.0000000000' - costId: 6160b953-88f7-49ec-a90d-aef0f9ae5d17 costTypeCategory: RECURRING frequency: MONTHLY costType: RECURRING_PER_UNIT pricingStrategy: UNIT priceRanges: - min: '0.0000000000' description: Per User Fee unit: USER quantity: '0.0000000000' salePrice: '8.5000000000' wholesalePrice: '8.5000000000' totalSalePrice: '0.0000000000' - costTypeCategory: RECURRING frequency: MONTHLY costType: INCLUDED pricingStrategy: UNIT priceRanges: - min: '1.0000000000' max: '1.0000000000' description: INCLUDED unit: USER quantity: '1.0000000000' salePrice: '0.0000000000' wholesalePrice: '0.0000000000' totalSalePrice: '0.0000000000' contractConfiguration: minimumServiceLength: 12 minimumServiceLengthUnit: MONTHLY renewalConfiguration: AUTO_RENEW terminationFee: feeType: FIXED amount: 400 description: Termination fee! terminationFeeGracePeriodUnit: NONE endOfContractGracePeriodUnit: INFINITY contractCancellationPeriodUnit: NONE unitTerms: {} blockContractUpgrades: false blockContractDowngrades: false blockSwitchToShorterContract: false keepContractDateOnPlanChange: false isDefault: true unitDefinitions: - unit: USER minimum: '1.0000000000' meteredUsage: false allowDecimals: false readOnly: false quantity: '1.0000000000' increment: 1 pricePerIncrement: false '400': description: Missing or invalid required parameter content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 400 code: BAD_REQUEST message: Missing or invalid required parameter '403': description: The user does not have permission to execute the action. content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 403 code: FORBIDDEN message: Forbidden x-codeSamples: - lang: Shell + Curl source: "curl --request GET \\\n --url 'https://marketplace.appdirect.com/api/assistedSales/v1/opportunities/pricingPlanCosts?pricingPlanId=SOME_STRING_VALUE&ownerId=SOME_STRING_VALUE&ownerCompanyId=SOME_STRING_VALUE¤cy=SOME_STRING_VALUE' \\\n --header 'Accept-Language: SOME_STRING_VALUE'" - lang: Node + Request source: "const request = require('request');\n\nconst options = {\n method: 'GET',\n url: 'https://marketplace.appdirect.com/api/assistedSales/v1/opportunities/pricingPlanCosts',\n qs: {\n pricingPlanId: 'SOME_STRING_VALUE',\n ownerId: 'SOME_STRING_VALUE',\n ownerCompanyId: 'SOME_STRING_VALUE',\n currency: 'SOME_STRING_VALUE'\n },\n headers: {'Accept-Language': 'SOME_STRING_VALUE'}\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/assistedSales/v1/opportunities/pricingPlanCosts?pricingPlanId=SOME_STRING_VALUE&ownerId=SOME_STRING_VALUE&ownerCompanyId=SOME_STRING_VALUE¤cy=SOME_STRING_VALUE\")\n .get()\n .addHeader(\"Accept-Language\", \"SOME_STRING_VALUE\")\n .build();\n\nResponse response = client.newCall(request).execute();" /assistedSales/v1/opportunities/{opportunityId}/owner: patch: x-appdirect-api-stage: Early Access summary: Change opportunity owner description: 'Changes the owner of an opportunity. When the owner changes, all products are removed from the opportunity. Required: Accept-Language header with Locale format. For example: en-US' tags: - AppResellerOpportunities operationId: changeOwner x-appdirect-required-scopes: ROLE_CHANNEL_ADMIN: - Allows access as a Marketplace Manager to the opportunity ROLE_RESELLER_MANAGER: - Allows access as a Reseller Manager to the opportunity ROLE_PARTNER: - Allows access as a Partner to the opportunity parameters: - in: path name: opportunityId description: Opportunity ID required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/OpportunityUpdateOwnerRequest' description: Information about the new owner of the opportunity required: true responses: '200': description: The updated opportunity with the new owner and empty of products content: application/json: schema: $ref: '#/components/schemas/Opportunity' examples: response: value: id: ef6c414f-39da-401f-a4b8-81adc6190fda ownerUser: id: d781ac09-b4fe-4d57-8ba2-4640fc5b7c49 email: john.doe@acme.com firstName: John lastName: Doe company: id: 6a62244e-aa2f-461b-8c7a-3a0e091be9d3 name: Acme Corp. customerUser: id: 498c62ea-ad14-48e6-96ce-5400c617444c email: jane.smith@company.com firstName: Jane lastName: Smith company: id: '100' name: Customer Company createdOn: '1546300800000' status: OPEN availableActions: - ADD_PRODUCT actionRestrictions: {} createdByUser: id: 8f6b3d29-4169-4fb0-91ff-bad9b7a3d0d4 email: peter.parker@marvel.com firstName: Peter lastName: Parker company: id: '99' name: Marvel Corp. '400': description: Missing or invalid required parameter, or the new owner's company membership is invalid, or the Reseller is not linked to the opportunity customer content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 400 code: BAD_REQUEST message: Owner is RESELLER but is not linked to Customer '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 401 code: UNAUTHORIZED message: HTTP 401 Unauthorized '403': description: The user does not have access to the opportunity, or the user does not have permission to execute the action, or the opportunity status does not allow the action content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 403 code: FORBIDDEN message: Forbidden '404': description: Invalid opportunity ID content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 404 code: NOT_FOUND message: Invalid opportunity ID x-codeSamples: - lang: Shell + Curl source: "curl --request PATCH \\\n --url https://marketplace.appdirect.com/api/assistedSales/v1/opportunities/%7BopportunityId%7D/owner \\\n --header 'content-type: application/json' \\\n --data '{\"ownerId\":\"d781ac09-b4fe-4d57-8ba2-4640fc5b7c49\",\"ownerCompanyId\":\"6a62244e-aa2f-461b-8c7a-3a0e091be9d3\"}'" - lang: Node + Request source: "const request = require('request');\n\nconst options = {\n method: 'PATCH',\n url: 'https://marketplace.appdirect.com/api/assistedSales/v1/opportunities/%7BopportunityId%7D/owner',\n headers: {'content-type': 'application/json'},\n body: {\n ownerId: 'd781ac09-b4fe-4d57-8ba2-4640fc5b7c49',\n ownerCompanyId: '6a62244e-aa2f-461b-8c7a-3a0e091be9d3'\n },\n json: true\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\nMediaType mediaType = MediaType.parse(\"application/json\");\nRequestBody body = RequestBody.create(mediaType, \"{\\\"ownerId\\\":\\\"d781ac09-b4fe-4d57-8ba2-4640fc5b7c49\\\",\\\"ownerCompanyId\\\":\\\"6a62244e-aa2f-461b-8c7a-3a0e091be9d3\\\"}\");\nRequest request = new Request.Builder()\n .url(\"https://marketplace.appdirect.com/api/assistedSales/v1/opportunities/%7BopportunityId%7D/owner\")\n .patch(body)\n .addHeader(\"content-type\", \"application/json\")\n .build();\n\nResponse response = client.newCall(request).execute();" /assistedSales/v1/opportunities/{opportunityId}/validation: get: x-appdirect-api-stage: Early Access summary: Retrieve validation results description: 'Retrieve the latest validation results for an opportunity Required: Accept-Language header with Locale format. For example: en-US' tags: - AppResellerOpportunities operationId: getOpportunityValidationResults x-appdirect-required-scopes: ROLE_RESELLER: - Allows access as a Reseller to the opportunity ROLE_SALES_SUPPORT: - Allows access as a Sales Support to the opportunity ROLE_CHANNEL_ADMIN: - Allows access as a Marketplace Manager to the opportunity ROLE_RESELLER_MANAGER: - Allows access as a Reseller Manager to the opportunity ROLE_PARTNER: - Allows access as a Partner to the opportunity ROLE_PARTNER_READ: - Allows read access as a Partner to the opportunity parameters: - name: opportunityId in: path description: Opportunity ID required: true schema: type: string - name: enforce in: query description: Indicates that a new validation must be executed and returned required: false schema: type: boolean responses: '200': description: Validation results were retrieved successfully content: application/json: schema: $ref: '#/components/schemas/OpportunityValidation' examples: response: value: blockingErrors: - itemId: f9b31739-ee52-42dd-bd3c-44d40d4875f9 code: ASSOCIATION_VALIDATION_API_ERROR message: Invalid parent product messageParameters: [] - itemId: eb690c8d-1c57-497c-82bf-a4194362d954 code: REQUIRED_FIELD_VALIDATION_ERROR message: There are validation errors messageParameters: - key: REQUIRED_FIELD_KEY value: DOMAIN - key: REQUIRED_FIELD_ERROR_MESSAGE value: The domain is not valid - itemId: eb690c8d-1c57-497c-82bf-a4194362d954 code: REQUIRED_FIELD_VALIDATION_ERROR message: There are validation errors messageParameters: - key: REQUIRED_FIELD_KEY value: USERNAME - key: REQUIRED_FIELD_ERROR_MESSAGE value: The username is not valid pendingValidations: - SUBSCRIPTION_VALIDATIONS '400': description: Missing required parameter content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 400 code: BAD_REQUEST message: Missing required parameters '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 401 code: UNAUTHORIZED message: HTTP 401 Unauthorized '403': description: The user does not have access to the opportunity, or the user does not have permission to execute the action. content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 403 code: FORBIDDEN message: Forbidden '404': description: Invalid opportunity ID content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 404 code: NOT_FOUND message: Invalid opportunity ID '503': description: Unable to retrieve validation results because the service is unavailable content: application/json: schema: $ref: '#/components/schemas/OpportunityError' x-codeSamples: - lang: Shell + Curl source: "curl --request GET \\\n --url 'https://marketplace.appdirect.com/api/assistedSales/v1/opportunities/%7BopportunityId%7D/validation?enforce=SOME_BOOLEAN_VALUE'" - lang: Node + Request source: "const request = require('request');\n\nconst options = {\n method: 'GET',\n url: 'https://marketplace.appdirect.com/api/assistedSales/v1/opportunities/%7BopportunityId%7D/validation',\n qs: {enforce: 'SOME_BOOLEAN_VALUE'}\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/assistedSales/v1/opportunities/%7BopportunityId%7D/validation?enforce=SOME_BOOLEAN_VALUE\")\n .get()\n .build();\n\nResponse response = client.newCall(request).execute();" /assistedSales/v1/opportunities/items/requiredFields/definitions: post: x-appdirect-api-stage: Early Access summary: Required field definitions description: 'For a customer/sales agent combination, returns the vendor-required fields for one or more products, and a description of the fields. Request can be made before or after an opportunity is created. It returns the fields that will be required, and any values previously saved on the AppDirect platform that can be prepopulated when an opportunity is created. It does not return required field values edited, added, or saved with an opportunity. Some vendors (for example, Microsoft) have business rules that exclude required fields from the response when the vendor already has the information stored on their platform for the customer/sales agent/product combination. Required: Accept-Language header with Locale format. For example: en-US' tags: - AppResellerOpportunities operationId: getRequiredFieldsDefinitions x-appdirect-required-scopes: ROLE_RESELLER: - Allows access as a Reseller to the opportunity ROLE_SALES_SUPPORT: - Allows access as a Sales Support Representative to the opportunity ROLE_CHANNEL_ADMIN: - Allows access as a Marketplace Manager to the opportunity ROLE_RESELLER_MANAGER: - Allows access as a Reseller Manager to the opportunity ROLE_PARTNER: - Allows access as a Partner to the opportunity ROLE_PARTNER_READ: - Allows read access as a Partner to the opportunity parameters: - name: Accept-Language in: header required: true description: 'Locale. Format: ''en-US''' schema: type: string - name: userId in: query description: Customer's unique identifier required: true schema: type: string - name: companyId in: query description: Customer's company's unique identifier required: true schema: type: string - name: salesAgentUserId in: query description: Sales agent's unique user identifier required: true schema: type: string - name: salesAgentCompanyId in: query description: Sales agent's company's unique identifier required: true schema: type: string requestBody: content: application/json: schema: type: array items: $ref: '#/components/schemas/ProductIds' example: - productId: dfc9cefb-610b-4e49-ade8-6ae51a4d35c9 editionId: EDITION_CODE description: 'List of product IDs for which to retrieve required field details. Required: editionID and productID.' required: true responses: '200': description: Required field definitions retrieved successfully content: application/json: schema: type: array items: $ref: '#/components/schemas/RequiredFields' examples: response: value: productId: dfc9cefb-610b-4e49-ade8-6ae51a4d35c9 editionId: EDITION_CODE forms: - isvIdentifier: ISV context: CART_LEVEL title: Additional Information subTitle: Additional Information Subtitle fields: - inputCode: FirstName inputTitle: First name subTitle: '' tooltip: '' value: John fieldType: TEXT validations: required: true readonly: false minLength: '2' maxLength: '255' expression: ^[A-Za-z]+(((\'|\-|\.(\s)?|\,(\s)?|\s)?([A-Za-z])+))*$ options: suffix: text: '' inputCode: '' - inputCode: Address/ISO3Country inputTitle: Country subTitle: '' tooltip: '' value: USA fieldType: COUNTRY validations: required: true readonly: false minLength: '2' maxLength: '3' expression: ^[A-Za-z]{2}$ options: suffix: text: '' placeholder: '' - inputCode: SubDomain inputTitle: Your primary domain name subTitle: '' tooltip: 'Your subdomain and domain names. For example: When subdomain=movies, and domain=entertainment.com, the subdomain value is: movies.entertainment.com' value: '' fieldType: TEXT validations: required: true readonly: false minLength: '1' maxLength: '255' expression: ^([^\W|http(s?)://][a-zA-Z]+)(\.[a-zA-Z]+)* options: suffix: text: .thedomain.com inputCode: '' placeholder: movies.entertainment.com '400': description: Missing or invalid required parameter content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 400 code: BAD_REQUEST message: Missing or invalid required parameter '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 401 code: UNAUTHORIZED message: HTTP 401 Unauthorized '404': description: Product ID not found content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 404 code: NOT_FOUND message: Product ID not found x-codeSamples: - lang: Shell + Curl source: "curl --request POST \\\n --url 'https://marketplace.appdirect.com/api/assistedSales/v1/opportunities/items/requiredFields/definitions?userId=SOME_STRING_VALUE&companyId=SOME_STRING_VALUE&salesAgentUserId=SOME_STRING_VALUE&salesAgentCompanyId=SOME_STRING_VALUE' \\\n --header 'Accept-Language: SOME_STRING_VALUE' \\\n --header 'content-type: application/json' \\\n --data '[{\"productId\":\"dfc9cefb-610b-4e49-ade8-6ae51a4d35c9\",\"editionId\":\"EDITION_CODE\"}]'" - lang: Node + Request source: "const request = require('request');\n\nconst options = {\n method: 'POST',\n url: 'https://marketplace.appdirect.com/api/assistedSales/v1/opportunities/items/requiredFields/definitions',\n qs: {\n userId: 'SOME_STRING_VALUE',\n companyId: 'SOME_STRING_VALUE',\n salesAgentUserId: 'SOME_STRING_VALUE',\n salesAgentCompanyId: 'SOME_STRING_VALUE'\n },\n headers: {'content-type': 'application/json', 'Accept-Language': 'SOME_STRING_VALUE'},\n body: [{productId: 'dfc9cefb-610b-4e49-ade8-6ae51a4d35c9', editionId: 'EDITION_CODE'}],\n json: true\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\nMediaType mediaType = MediaType.parse(\"application/json\");\nRequestBody body = RequestBody.create(mediaType, \"[{\\\"productId\\\":\\\"dfc9cefb-610b-4e49-ade8-6ae51a4d35c9\\\",\\\"editionId\\\":\\\"EDITION_CODE\\\"}]\");\nRequest request = new Request.Builder()\n .url(\"https://marketplace.appdirect.com/api/assistedSales/v1/opportunities/items/requiredFields/definitions?userId=SOME_STRING_VALUE&companyId=SOME_STRING_VALUE&salesAgentUserId=SOME_STRING_VALUE&salesAgentCompanyId=SOME_STRING_VALUE\")\n .post(body)\n .addHeader(\"content-type\", \"application/json\")\n .addHeader(\"Accept-Language\", \"SOME_STRING_VALUE\")\n .build();\n\nResponse response = client.newCall(request).execute();" /assistedSales/v2/opportunities/{opportunityId}/applyDiscount: post: x-appdirect-api-stage: Early Access summary: Apply discount description: 'Apply a discount to an opportunity. More than one discount (one per call) can be applied to an opportunity. The response is an updated opportunity summary. The discount is applied to all eligible products. However, redemption limits apply. When the redemption limits exceed the contents of the opportunity, the discount is not applied. Required: Accept-Language header with Locale format. For example: en-US' tags: - AppResellerOpportunities operationId: applyDiscount x-appdirect-required-scopes: ROLE_RESELLER: - Allows access as a Reseller to the opportunity ROLE_SALES_SUPPORT: - Allows access as Sales Support to the opportunity ROLE_CHANNEL_ADMIN: - Allows access as a Marketplace Manager to the opportunity ROLE_RESELLER_MANAGER: - Allows access as a Reseller Manager to the opportunity ROLE_PARTNER: - Allows access as a Partner to the opportunity parameters: - name: opportunityId in: path description: Opportunity ID required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/DiscountRequest' description: The discount to be applied required: true responses: '200': description: The discount was applied and the request returned an updated opportunity summary content: application/json: schema: $ref: '#/components/schemas/OpportunitySummary' examples: response: value: amountDueBeforeTax: '-8.0000000000' taxSummary: [] amountDueAfterTax: '-8.0000000000' items: - id: ea1e0548-888b-402a-8cbc-1e3c6754a2bd discount: description: 10% off, applicable to all products code: DISCOUNT_ABC product: id: fa776d2e-cda5-4256-9a27-125a0fe3f448 name: Supported Product for Opportunity MVP type: WEB_APP_STACKED isAddon: false hasAddons: false pricingPlan: id: 19c06143-b21c-43c4-b236-eeca61512753 name: Gold plan editionCode: '1' pricing: - costType: RECURRING_FLAT description: Gold plan quantity: '1.0000000000' totalSalePrice: '12.0000000000' - costType: INCLUDED description: INCLUDED quantity: '1.0000000000' totalSalePrice: '0.0000000000' - costType: DISCOUNT_FLAT description: 10% off, applicable to all products quantity: '1.0000000000' totalSalePrice: '-20.0000000000' unitDefinitions: - unit: USER minimum: '1.0000000000' meteredUsage: false allowDecimals: false readOnly: true pricePerIncrement: false recurringTotals: - billingCycle: period: MONTHLY dayOfMonth: 10 totalSalePrice: '-8.0000000000' '400': description: Either the discount code is invalid or one of the required parameters is missing or invalid content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 400 code: INVALID_PAYLOAD_ERROR message: Either the discount code is invalid or one of the required parameters is missing or invalid '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 401 code: UNAUTHORIZED message: HTTP 401 Unauthorized '403': description: The user does not have access to the opportunity or have the permission to execute the action, or the opportunity status does not allow the action content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 403 code: FORBIDDEN message: Forbidden '404': description: Invalid opportunity ID content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 404 code: NOT_FOUND message: Invalid opportunity ID '409': description: The discount could not be applied because the redemption limits have exceeded content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 409 code: REDEMPTION_LIMIT_REACHED message: Discount not applied because redemption limit exceeded '410': description: The discount has expired content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 410 code: DISCOUNT_CODE_EXPIRED message: Discount is expired x-codeSamples: - lang: Shell + Curl source: "curl --request POST \\\n --url https://marketplace.appdirect.com/api/assistedSales/v2/opportunities/%7BopportunityId%7D/applyDiscount \\\n --header 'content-type: application/json' \\\n --data '{\"discountCode\":\"10%OFF\",\"itemIds\":[\"166e0ce6-4309-4a16-ac9b-61bea7ce1cbc\",\"fa776d2e-cda5-4256-9a27-125a0fe3f448\"]}'" - lang: Node + Request source: "const request = require('request');\n\nconst options = {\n method: 'POST',\n url: 'https://marketplace.appdirect.com/api/assistedSales/v2/opportunities/%7BopportunityId%7D/applyDiscount',\n headers: {'content-type': 'application/json'},\n body: {\n discountCode: '10%OFF',\n itemIds: ['166e0ce6-4309-4a16-ac9b-61bea7ce1cbc', 'fa776d2e-cda5-4256-9a27-125a0fe3f448']\n },\n json: true\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\nMediaType mediaType = MediaType.parse(\"application/json\");\nRequestBody body = RequestBody.create(mediaType, \"{\\\"discountCode\\\":\\\"10%OFF\\\",\\\"itemIds\\\":[\\\"166e0ce6-4309-4a16-ac9b-61bea7ce1cbc\\\",\\\"fa776d2e-cda5-4256-9a27-125a0fe3f448\\\"]}\");\nRequest request = new Request.Builder()\n .url(\"https://marketplace.appdirect.com/api/assistedSales/v2/opportunities/%7BopportunityId%7D/applyDiscount\")\n .post(body)\n .addHeader(\"content-type\", \"application/json\")\n .build();\n\nResponse response = client.newCall(request).execute();" /assistedSales/v2/opportunities/{opportunityId}/deleteDiscount: post: x-appdirect-api-stage: Early Access summary: Remove discount description: 'Remove a discount from an opportunity. The response is an updated opportunity summary. Required: Accept-Language header with Locale format. For example: en-US' tags: - AppResellerOpportunities operationId: removeDiscount x-appdirect-required-scopes: ROLE_RESELLER: - Allows access as a Reseller to the opportunity ROLE_SALES_SUPPORT: - Allow access as Sales Support to the opportunity ROLE_CHANNEL_ADMIN: - Allows access as a Marketplace Manager to the opportunity ROLE_RESELLER_MANAGER: - Allows access as a Reseller Manager to the opportunity ROLE_PARTNER: - Allows access as a Partner to the opportunity parameters: - name: opportunityId in: path description: Opportunity ID required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/DiscountRequest' description: The discount to be removed required: true responses: '200': description: The discount was removed and the request returned an updated opportunity summary content: application/json: schema: $ref: '#/components/schemas/OpportunitySummary' examples: response: value: amountDueBeforeTax: '11.0000000000' taxSummary: - description: Flat Tax taxAmount: '2.0000000000' amountDueAfterTax: '13.0000000000' items: - id: c57331b7-0820-44ac-ad75-ee4ab2783b7c product: id: fa776d2e-cda5-4256-9a27-125a0fe3f448 name: Supported Product for Opportunity MVP type: WEB_APP_STACKED isAddon: false hasAddons: false pricingPlan: id: 7e1fd1fa-de0e-49e9-9e6a-9c474c57f22d name: Tiered monthly+yearly flat with included YEARLY editionCode: Tiered monthly+yearly flat with included pricing: - costType: RECURRING_FLAT description: Tiered monthly+yearly flat with included quantity: '1.0000000000' totalSalePrice: '240.0000000000' - costType: INCLUDED description: INCLUDED quantity: '1.0000000000' totalSalePrice: '0.0000000000' contractConfiguration: minimumServiceLength: 1 minimumServiceLengthUnit: YEARLY unitTerms: {} blockContractUpgrades: true blockContractDowngrades: true blockSwitchToShorterContract: true keepContractDateOnPlanChange: true unitDefinitions: - unit: USER minimum: '1.0000000000' meteredUsage: false allowDecimals: false readOnly: true pricePerIncrement: false recurringTotals: - billingCycle: period: YEARLY dayOfMonth: 17 totalSalePrice: '240.0000000000' '400': description: Either the discount code is invalid or one of the required parameters is missing or invalid content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 400 code: INVALID_PAYLOAD_ERROR message: Either the discount code is invalid or one of the required parameters is missing or invalid '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 401 code: UNAUTHORIZED message: HTTP 401 Unauthorized '403': description: The user does not have access to the opportunity or have the permission to execute the action, or the opportunity status does not allow the action content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 403 code: FORBIDDEN message: Forbidden '404': description: Invalid opportunity ID content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 404 code: NOT_FOUND message: Invalid opportunity ID x-codeSamples: - lang: Shell + Curl source: "curl --request POST \\\n --url https://marketplace.appdirect.com/api/assistedSales/v2/opportunities/%7BopportunityId%7D/deleteDiscount \\\n --header 'content-type: application/json' \\\n --data '{\"discountCode\":\"10%OFF\",\"itemIds\":[\"166e0ce6-4309-4a16-ac9b-61bea7ce1cbc\",\"fa776d2e-cda5-4256-9a27-125a0fe3f448\"]}'" - lang: Node + Request source: "const request = require('request');\n\nconst options = {\n method: 'POST',\n url: 'https://marketplace.appdirect.com/api/assistedSales/v2/opportunities/%7BopportunityId%7D/deleteDiscount',\n headers: {'content-type': 'application/json'},\n body: {\n discountCode: '10%OFF',\n itemIds: ['166e0ce6-4309-4a16-ac9b-61bea7ce1cbc', 'fa776d2e-cda5-4256-9a27-125a0fe3f448']\n },\n json: true\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\nMediaType mediaType = MediaType.parse(\"application/json\");\nRequestBody body = RequestBody.create(mediaType, \"{\\\"discountCode\\\":\\\"10%OFF\\\",\\\"itemIds\\\":[\\\"166e0ce6-4309-4a16-ac9b-61bea7ce1cbc\\\",\\\"fa776d2e-cda5-4256-9a27-125a0fe3f448\\\"]}\");\nRequest request = new Request.Builder()\n .url(\"https://marketplace.appdirect.com/api/assistedSales/v2/opportunities/%7BopportunityId%7D/deleteDiscount\")\n .post(body)\n .addHeader(\"content-type\", \"application/json\")\n .build();\n\nResponse response = client.newCall(request).execute();" /assistedSales/v1/opportunities/{opportunityId}/items/requiredFields: put: x-appdirect-api-stage: Early Access summary: Update required fields description: 'Update required fields for all products from the same vendor on an opportunity, with identical required field values. When a vendor requires the same required fields for all products (also known as vendor ''cart level'' required fields), the required field values must be identical for all the vendor''s products on an opportunity. To ensure all values remain identical, always include the itemIds for all the vendor''s products on the opportunity in the array, even if required field values are already saved for some items. Warning: Previously saved required field values for the items in the array will be removed. Required: Accept-Language header with Locale format. For example: en-US' tags: - AppResellerOpportunities operationId: updateRequiredFieldsOnItems x-appdirect-required-scopes: ROLE_RESELLER: - Allows access as a Reseller to the opportunity ROLE_SALES_SUPPORT: - Allows access as a Sales Support to the opportunity ROLE_CHANNEL_ADMIN: - Allows access as a Marketplace Manager to the opportunity ROLE_RESELLER_MANAGER: - Allows access as a Reseller Manager to the opportunity ROLE_PARTNER: - Allows access as a Partner to the opportunity parameters: - name: opportunityId in: path description: Opportunity ID required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/RequiredFieldsUpdate' description: Required fields update request with the item IDs to be updated and required field values. Required. required: true responses: '200': description: Required fields updated successfully content: application/json: schema: type: array items: $ref: '#/components/schemas/OpportunityItem' examples: response: value: - id: a11b60a8-a16a-4aaf-8696-dadb738496fa pricingPlanId: a22c03e9-9e27-4e85-8433-78f246345685 units: - quantity: '8' unit: USER vendorRequiredFields: SubDomain: - acme.entertainment.com UserPrincipleName: - john.smith AlternateEmail: - secondary@acme.com FirstName: - John LastName: - Smith BusinessName: - Acme Corp Address/ISO3Country: - USA Address/Line1: - Main Street 465 Address/Line2: - '' Address/City: - Greenbow Address/State: - AL Address/PostalCode: - '50505' Address/PhoneNumber: - '5417543010' ConsentUser/FirstName: - John ConsentUser/LastName: - Smith ConsentUser/Email: - john.smith@acme.com ConsentUser/PhoneNumber: - '5417543010' DateConsentConfirmed: - '2021-06-02T00:00:00Z' - id: eb690c8d-1c57-497c-82bf-a4194362d954 pricingPlanId: 4bc864b5-f63f-4933-be19-3700aa9a8cc4 units: - quantity: '8' unit: USER vendorRequiredFields: SubDomain: - acme.entertainment.com UserPrincipleName: - john.smith AlternateEmail: - secondary@acme.com FirstName: - John LastName: - Smith BusinessName: - Acme Corp Address/ISO3Country: - USA Address/Line1: - Main Street 465 Address/Line2: - '' Address/City: - Greenbow Address/State: - AL Address/PostalCode: - '50505' Address/PhoneNumber: - '5417543010' ConsentUser/FirstName: - John ConsentUser/LastName: - Smith ConsentUser/Email: - john.smith@acme.com ConsentUser/PhoneNumber: - '5417543010' DateConsentConfirmed: - '2021-06-02T00:00:00Z' '400': description: Missing or invalid data, or one or more items not found content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 400 code: BAD_REQUEST message: Missing or invalid data, or one or more items not found '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 401 code: UNAUTHORIZED message: HTTP 401 Unauthorized '403': description: The user does not have access to the opportunity, or the user does not have permission to execute the action, or the opportunity status does not allow the action content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 403 code: FORBIDDEN message: Forbidden '404': description: Invalid opportunity ID content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 404 code: NOT_FOUND message: Invalid opportunity ID x-codeSamples: - lang: Shell + Curl source: "curl --request PUT \\\n --url https://marketplace.appdirect.com/api/assistedSales/v1/opportunities/%7BopportunityId%7D/items/requiredFields \\\n --header 'content-type: application/json' \\\n --data '{\"itemIds\":[\"a11b60a8-a16a-4aaf-8696-dadb738496fa\",\"eb690c8d-1c57-497c-82bf-a4194362d954\"],\"requiredFields\":{\"SubDomain\":[\"acme.entertainment.com\"],\"UserPrincipleName\":[\"john.smith\"],\"AlternateEmail\":[\"secondary@acme.com\"],\"FirstName\":[\"John\"],\"LastName\":[\"Smith\"],\"BusinessName\":[\"Acme Corp\"],\"Address/ISO3Country\":[\"USA\"],\"Address/Line1\":[\"Main Street 465\"],\"Address/Line2\":[\"\"],\"Address/City\":[\"Greenbow\"],\"Address/State\":[\"AL\"],\"Address/PostalCode\":[\"50505\"],\"Address/PhoneNumber\":[\"5417543010\"],\"ConsentUser/FirstName\":[\"John\"],\"ConsentUser/LastName\":[\"Smith\"],\"ConsentUser/Email\":[\"john.smith@acme.com\"],\"ConsentUser/PhoneNumber\":[\"5417543010\"],\"DateConsentConfirmed\":[\"2021-06-02T00:00:00Z\"]}}'" - lang: Node + Request source: "const request = require('request');\n\nconst options = {\n method: 'PUT',\n url: 'https://marketplace.appdirect.com/api/assistedSales/v1/opportunities/%7BopportunityId%7D/items/requiredFields',\n headers: {'content-type': 'application/json'},\n body: {\n itemIds: ['a11b60a8-a16a-4aaf-8696-dadb738496fa', 'eb690c8d-1c57-497c-82bf-a4194362d954'],\n requiredFields: {\n SubDomain: ['acme.entertainment.com'],\n UserPrincipleName: ['john.smith'],\n AlternateEmail: ['secondary@acme.com'],\n FirstName: ['John'],\n LastName: ['Smith'],\n BusinessName: ['Acme Corp'],\n 'Address/ISO3Country': ['USA'],\n 'Address/Line1': ['Main Street 465'],\n 'Address/Line2': [''],\n 'Address/City': ['Greenbow'],\n 'Address/State': ['AL'],\n 'Address/PostalCode': ['50505'],\n 'Address/PhoneNumber': ['5417543010'],\n 'ConsentUser/FirstName': ['John'],\n 'ConsentUser/LastName': ['Smith'],\n 'ConsentUser/Email': ['john.smith@acme.com'],\n 'ConsentUser/PhoneNumber': ['5417543010'],\n DateConsentConfirmed: ['2021-06-02T00:00:00Z']\n }\n },\n json: true\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\nMediaType mediaType = MediaType.parse(\"application/json\");\nRequestBody body = RequestBody.create(mediaType, \"{\\\"itemIds\\\":[\\\"a11b60a8-a16a-4aaf-8696-dadb738496fa\\\",\\\"eb690c8d-1c57-497c-82bf-a4194362d954\\\"],\\\"requiredFields\\\":{\\\"SubDomain\\\":[\\\"acme.entertainment.com\\\"],\\\"UserPrincipleName\\\":[\\\"john.smith\\\"],\\\"AlternateEmail\\\":[\\\"secondary@acme.com\\\"],\\\"FirstName\\\":[\\\"John\\\"],\\\"LastName\\\":[\\\"Smith\\\"],\\\"BusinessName\\\":[\\\"Acme Corp\\\"],\\\"Address/ISO3Country\\\":[\\\"USA\\\"],\\\"Address/Line1\\\":[\\\"Main Street 465\\\"],\\\"Address/Line2\\\":[\\\"\\\"],\\\"Address/City\\\":[\\\"Greenbow\\\"],\\\"Address/State\\\":[\\\"AL\\\"],\\\"Address/PostalCode\\\":[\\\"50505\\\"],\\\"Address/PhoneNumber\\\":[\\\"5417543010\\\"],\\\"ConsentUser/FirstName\\\":[\\\"John\\\"],\\\"ConsentUser/LastName\\\":[\\\"Smith\\\"],\\\"ConsentUser/Email\\\":[\\\"john.smith@acme.com\\\"],\\\"ConsentUser/PhoneNumber\\\":[\\\"5417543010\\\"],\\\"DateConsentConfirmed\\\":[\\\"2021-06-02T00:00:00Z\\\"]}}\");\nRequest request = new Request.Builder()\n .url(\"https://marketplace.appdirect.com/api/assistedSales/v1/opportunities/%7BopportunityId%7D/items/requiredFields\")\n .put(body)\n .addHeader(\"content-type\", \"application/json\")\n .build();\n\nResponse response = client.newCall(request).execute();" /assistedSales/v1/opportunities/{opportunityId}/shipping: get: x-appdirect-api-stage: Early Access summary: Get shipping address description: 'Retrieve the shipping address for the opportunity Required: Accept-Language header with Locale format. For example: en-US' tags: - AppResellerOpportunities operationId: getShippingAddress x-appdirect-required-scopes: ROLE_RESELLER: - Allows access as a Reseller to the opportunity ROLE_SALES_SUPPORT: - Allows access as a Sales Support to the opportunity ROLE_CHANNEL_ADMIN: - Allows access as a Marketplace Manager to the opportunity ROLE_RESELLER_MANAGER: - Allows access as a Reseller Manager to the opportunity ROLE_PARTNER: - Allows access as a Partner to the opportunity ROLE_PARTNER_READ: - Allows read access as a Partner to the opportunity parameters: - name: opportunityId in: path description: Opportunity ID required: true schema: type: string responses: '200': description: Shipping address retrieved successfully content: application/json: schema: $ref: '#/components/schemas/OpportunityShipping' examples: response: value: sameAsBillingAddress: false deliveryAddress: name: John Smith city: Greenbow addressLine1: Main Street 446 countryCode: US subdivisionCode: AL postalCode: '50505' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 401 code: UNAUTHORIZED message: HTTP 401 Unauthorized '403': description: The user does not have access to the opportunity, or the user does not have permission to execute the action, or the opportunity status does not allow the action content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 403 code: FORBIDDEN message: Forbidden '404': description: Invalid opportunity ID content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 404 code: NOT_FOUND message: No opportunity found with the given ID x-codeSamples: - lang: Shell + Curl source: "curl --request GET \\\n --url https://marketplace.appdirect.com/api/assistedSales/v1/opportunities/%7BopportunityId%7D/shipping" - lang: Node + Request source: "const request = require('request');\n\nconst options = {\n method: 'GET',\n url: 'https://marketplace.appdirect.com/api/assistedSales/v1/opportunities/%7BopportunityId%7D/shipping'\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/assistedSales/v1/opportunities/%7BopportunityId%7D/shipping\")\n .get()\n .build();\n\nResponse response = client.newCall(request).execute();" post: x-appdirect-api-stage: Early Access summary: Create or replace shipping address description: 'Create or replace a shipping address for physical goods that require one on an opportunity. There is one shipping address per opportunity. Required: Accept-Language header with Locale format. For example: en-US' tags: - AppResellerOpportunities operationId: createOrUpdateShippingAddress x-appdirect-required-scopes: ROLE_RESELLER: - Allows access as a Reseller to the opportunity ROLE_SALES_SUPPORT: - Allows access as a Sales Support to the opportunity ROLE_CHANNEL_ADMIN: - Allows access as a Marketplace Manager to the opportunity ROLE_RESELLER_MANAGER: - Allows access as a Reseller Manager to the opportunity ROLE_PARTNER: - Allows access as a Partner to the opportunity parameters: - name: opportunityId in: path description: Opportunity ID required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/OpportunityShipping' description: The shipping address information required: true responses: '200': description: Shipping address created or replaced successfully content: application/json: schema: $ref: '#/components/schemas/OpportunityShipping' examples: response: value: sameAsBillingAddress: false deliveryAddress: name: John Smith city: Greenbow addressLine1: Main Street 446 countryCode: US subdivisionCode: AL postalCode: '50505' '400': description: Missing or invalid required parameter, or the vendor does not ship to the provided address content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 400 code: BAD_REQUEST message: The vendor does not ship to the provided address '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 401 code: UNAUTHORIZED message: HTTP 401 Unauthorized '404': description: No opportunity found with the given ID content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 404 code: NOT_FOUND message: No opportunity found with the given ID '409': description: Conflict content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 409 code: CONFLICT message: HTTP 409 Conflict x-codeSamples: - lang: Shell + Curl source: "curl --request POST \\\n --url https://marketplace.appdirect.com/api/assistedSales/v1/opportunities/%7BopportunityId%7D/shipping \\\n --header 'content-type: application/json' \\\n --data '{\"sameAsBillingAddress\":false,\"deliveryAddress\":{\"name\":\"John Smith\",\"city\":\"Greenbow\",\"addressLine1\":\"Main Street 446\",\"countryCode\":\"US\",\"subdivisionCode\":\"AL\",\"postalCode\":\"50505\"}}'" - lang: Node + Request source: "const request = require('request');\n\nconst options = {\n method: 'POST',\n url: 'https://marketplace.appdirect.com/api/assistedSales/v1/opportunities/%7BopportunityId%7D/shipping',\n headers: {'content-type': 'application/json'},\n body: {\n sameAsBillingAddress: false,\n deliveryAddress: {\n name: 'John Smith',\n city: 'Greenbow',\n addressLine1: 'Main Street 446',\n countryCode: 'US',\n subdivisionCode: 'AL',\n postalCode: '50505'\n }\n },\n json: true\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\nMediaType mediaType = MediaType.parse(\"application/json\");\nRequestBody body = RequestBody.create(mediaType, \"{\\\"sameAsBillingAddress\\\":false,\\\"deliveryAddress\\\":{\\\"name\\\":\\\"John Smith\\\",\\\"city\\\":\\\"Greenbow\\\",\\\"addressLine1\\\":\\\"Main Street 446\\\",\\\"countryCode\\\":\\\"US\\\",\\\"subdivisionCode\\\":\\\"AL\\\",\\\"postalCode\\\":\\\"50505\\\"}}\");\nRequest request = new Request.Builder()\n .url(\"https://marketplace.appdirect.com/api/assistedSales/v1/opportunities/%7BopportunityId%7D/shipping\")\n .post(body)\n .addHeader(\"content-type\", \"application/json\")\n .build();\n\nResponse response = client.newCall(request).execute();" /assistedSales/v1/opportunities/{opportunityId}/clone: post: x-appdirect-api-stage: Early Access summary: Clone opportunity description: 'Clone an existing opportunity Required: Accept-Language header with Locale format. For example: en-US' tags: - AppResellerOpportunities operationId: cloneOpportunity x-appdirect-required-scopes: ROLE_RESELLER: - Allows access as a Reseller to the opportunity ROLE_SALES_SUPPORT: - Allows access as a Sales Support to the opportunity ROLE_CHANNEL_ADMIN: - Allows access as a Marketplace Manager to the opportunity ROLE_RESELLER_MANAGER: - Allows access as a Reseller Manager to the opportunity ROLE_PARTNER: - Allows access as a Partner to the opportunity parameters: - in: path name: opportunityId description: Opportunity ID required: true schema: type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/OpportunityCloneRequest' description: Parameters to be used when cloning the opportunity required: true responses: '202': description: 'The response includes the new opportunity ID in the Location header in the following path: /api/assistedSales/v1/opportunities/{opportunityId}. The path contained in the location header is used by the client to fetch the opportunity.' content: application/json: schema: $ref: '#/components/schemas/OpportunityClone' examples: response: value: opportunityId: 498c62ea-ad14-48e6-96ce-5400c617444c '400': description: Missing or invalid required parameter content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 400 code: BAD_REQUEST message: Missing or invalid required parameter '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 401 code: UNAUTHORIZED message: HTTP 401 Unauthorized '403': description: The user does not have access to the opportunity, or the user does not have permission to execute the action content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 403 code: FORBIDDEN message: Forbidden '404': description: Either the opportunity ID is invalid, or the customer or owner cannot be found. content: application/json: schema: $ref: '#/components/schemas/OpportunityError' examples: response: value: status: 404 code: NOT_FOUND message: Invalid opportunity ID, or owner or customer not found x-codeSamples: - lang: Shell + Curl source: "curl --request POST \\\n --url https://marketplace.appdirect.com/api/assistedSales/v1/opportunities/%7BopportunityId%7D/clone \\\n --header 'content-type: application/json' \\\n --data '{\"name\":\"Opportunity name - COPY\",\"customerCompanyId\":\"498c62ea-ad14-48e6-96ce-5400c617444c\",\"customerId\":\"505f0a0c-57a7-4d9e-9fac-66bbf557ac4d\",\"ownerCompanyId\":\"6a62244e-aa2f-461b-8c7a-3a0e091be9d3\",\"ownerId\":\"d781ac09-b4fe-4d57-8ba2-4640fc5b7c49\",\"createdByCompanyId\":\"b7e0c48b-6d0d-45fc-9c8a-3fa3fd84d9f1\",\"createdById\":\"8f6b3d29-4169-4fb0-91ff-bad9b7a3d0d4\"}'" - lang: Node + Request source: "const request = require('request');\n\nconst options = {\n method: 'POST',\n url: 'https://marketplace.appdirect.com/api/assistedSales/v1/opportunities/%7BopportunityId%7D/clone',\n headers: {'content-type': 'application/json'},\n body: {\n name: 'Opportunity name - COPY',\n customerCompanyId: '498c62ea-ad14-48e6-96ce-5400c617444c',\n customerId: '505f0a0c-57a7-4d9e-9fac-66bbf557ac4d',\n ownerCompanyId: '6a62244e-aa2f-461b-8c7a-3a0e091be9d3',\n ownerId: 'd781ac09-b4fe-4d57-8ba2-4640fc5b7c49',\n createdByCompanyId: 'b7e0c48b-6d0d-45fc-9c8a-3fa3fd84d9f1',\n createdById: '8f6b3d29-4169-4fb0-91ff-bad9b7a3d0d4'\n },\n json: true\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\nMediaType mediaType = MediaType.parse(\"application/json\");\nRequestBody body = RequestBody.create(mediaType, \"{\\\"name\\\":\\\"Opportunity name - COPY\\\",\\\"customerCompanyId\\\":\\\"498c62ea-ad14-48e6-96ce-5400c617444c\\\",\\\"customerId\\\":\\\"505f0a0c-57a7-4d9e-9fac-66bbf557ac4d\\\",\\\"ownerCompanyId\\\":\\\"6a62244e-aa2f-461b-8c7a-3a0e091be9d3\\\",\\\"ownerId\\\":\\\"d781ac09-b4fe-4d57-8ba2-4640fc5b7c49\\\",\\\"createdByCompanyId\\\":\\\"b7e0c48b-6d0d-45fc-9c8a-3fa3fd84d9f1\\\",\\\"createdById\\\":\\\"8f6b3d29-4169-4fb0-91ff-bad9b7a3d0d4\\\"}\");\nRequest request = new Request.Builder()\n .url(\"https://marketplace.appdirect.com/api/assistedSales/v1/opportunities/%7BopportunityId%7D/clone\")\n .post(body)\n .addHeader(\"content-type\", \"application/json\")\n .build();\n\nResponse response = client.newCall(request).execute();" components: schemas: RequiredFieldsUpdate: type: object title: RequiredFieldsUpdate description: One or more items from the same vendor on an opportunity; and, the required fields and identical required field values to apply to all the items in the array. required: - itemIds - requiredFields properties: itemIds: type: array description: IDs of the items to be updated items: type: string requiredFields: allOf: - $ref: '#/components/schemas/CustomAttribute' - description: The required fields and required field values, listed as custom attribute key-value pairs. Values must be a string array. example: itemIds: - a11b60a8-a16a-4aaf-8696-dadb738496fa - eb690c8d-1c57-497c-82bf-a4194362d954 requiredFields: SubDomain: - acme.entertainment.com UserPrincipleName: - john.smith AlternateEmail: - secondary@acme.com FirstName: - John LastName: - Smith BusinessName: - Acme Corp Address/ISO3Country: - USA Address/Line1: - Main Street 465 Address/Line2: - '' Address/City: - Greenbow Address/State: - AL Address/PostalCode: - '50505' Address/PhoneNumber: - '5417543010' ConsentUser/FirstName: - John ConsentUser/LastName: - Smith ConsentUser/Email: - john.smith@acme.com ConsentUser/PhoneNumber: - '5417543010' DateConsentConfirmed: - '2021-06-02T00:00:00Z' ContractConfiguration: type: object title: ContractConfiguration description: 'Contract configuration options for subscriptions that customers purchase. For example: contract length and cancellation penalities.' properties: minimumServiceLength: type: integer description: Contract length. The number of minimumServiceLengthUnits that defines contract duration. minimumServiceLengthUnit: $ref: '#/components/schemas/MinimumServiceLengthUnit' renewalConfiguration: $ref: '#/components/schemas/RenewalConfiguration' terminationFee: $ref: '#/components/schemas/TerminationFeeAS' terminationFeeGracePeriod: type: integer description: Termination fee grace period duration. Number of terminationFeeGracePeriodUnits that define the risk-free period after the contract starts, during which no termination fee is charged if the customer cancels the contract. terminationFeeGracePeriodUnit: $ref: '#/components/schemas/TerminationFeeGracePeriodUnit' endOfContractGracePeriod: type: integer description: End of contract grace period duration. Number of endofContractGracePeriodUnits that define the period after the contract ends, during which customers can resubscribe before their account and data might be deleted. endOfContractGracePeriodUnit: $ref: '#/components/schemas/GracePeriodUnit' contractCancellationPeriodLimit: type: integer description: Contract cancellation period limit duration. Number of contractCancellationPeriodUnits that define the period before the contract ends, during which customers can no longer cancel the contract and it is renewed. contractCancellationPeriodUnit: $ref: '#/components/schemas/CancellationPeriodUnit' unitTerms: description: Maps a unit type (for example, user) to UnitContractTerms (see object definition). Enabled terms restrict mid-contract quantity changes for the unit type on subscriptions. See example. type: object properties: default: type: string additionalProperties: $ref: '#/components/schemas/UnitContractTerms' blockContractUpgrades: description: Whether subscriptions can be upgraded mid-contract term type: boolean default: false blockContractDowngrades: description: Whether subscriptions can be downgraded mid-contract term type: boolean default: false blockSwitchToShorterContract: description: Whether subscriptions can be changed to plans with shorter or no contracts. type: boolean default: false keepContractDateOnPlanChange: description: Whether the remaining contract duration changes when a user changes a subscription pricing plan type: boolean default: false isDefault: description: Whether it is a default or custom contract type: boolean default: false example: minimumServiceLength: '24' minimumServiceLengthUnit: MONTHLY terminationFee: feeType: FIXED amount: '2' renewalConfiguration: MONTH_TO_MONTH terminationFeeGracePeriod: '7' terminationFeeGracePeriodUnit: DAY contractCancellationPeriodLimit: null contractCancellationPeriodUnit: NONE endOfContractGracePeriod: null endOfContractGracePeriodUnit: INFINITY unitTerms: USER: blockContractIncrease: false blockOriginalContractDecrease: false blockContractDecrease: true blockContractUpgrades: false blockContractDowngrades: true blockSwitchToShorterContract: true keepContractDateOnPlanChange: false Company: type: object title: Company properties: id: type: string description: Company ID name: type: string description: Company name isReseller: type: boolean description: Indicate if the company is reseller example: id: '1' name: Acme Corp. isReseller: false OpportunityLight: type: object title: OpportunityLight properties: id: type: string description: Opportunity ID name: description: Opportunity name type: string ownerUser: $ref: '#/components/schemas/User' customerUser: $ref: '#/components/schemas/User' createdOn: description: Opportunity creation date, in UNIX Epoch milliseconds type: number purchaseEffectiveDate: description: Opportunity purchase effective date, in UNIX Epoch milliseconds type: number status: $ref: '#/components/schemas/OpportunityStatus' ownerType: $ref: '#/components/schemas/OpportunityOwnerType' example: id: ef6c414f-39da-401f-a4b8-81adc6190fda name: Jarvis Iniative ownerUser: id: d781ac09-b4fe-4d57-8ba2-4640fc5b7c49 email: john.doe@acme.com firstName: John lastName: Doe company: id: '1' name: Acme Corp. isReseller: true customerUser: id: 498c62ea-ad14-48e6-96ce-5400c617444c email: ubrownfield@stark.com firstName: Ulysses lastName: Brownfield company: id: '100' name: Customer Company isReseller: false createdOn: 1557861989000 purchaseEffectiveDate: 1577750400000 status: CLOSED ownerType: PLATFORM_OWNER BillingCycle: type: object title: BillingCycle description: The billing cycle properties: period: $ref: '#/components/schemas/PricingPeriod' dayOfMonth: type: integer description: Day of the month on which invoicing should be triggered example: period: YEARLY dayOfMonth: 17 Unit: type: object description: Purchase item unit title: Unit properties: quantity: type: number description: Quantity unit: type: string description: Unit example: quantity: '8' unit: USER ValidationDetail: type: object title: ValidationDetail description: Failed validation error codes and messages properties: itemId: type: string description: Related Item ID, when the validation error is related to an item code: type: string description: The error code, in screaming snake case. For example, PAYLOAD_VALIDATION_ERROR pattern: ^[A-Z]+(_[A-Z]+)*$ message: type: string description: Validation detail message messageParameters: type: array description: Validation detail parameters items: $ref: '#/components/schemas/ValidationDetailParameter' example: itemId: eb690c8d-1c57-497c-82bf-a4194362d954 code: REQUIRED_FIELD_VALIDATION_ERROR message: There are validation errors messageParameters: - key: REQUIRED_FIELD_KEY value: USERNAME - key: REQUIRED_FIELD_ERROR_MESSAGE value: The username is not valid Form: type: object title: Form description: A group of required fields. Forms are used to organize required fields into meaningful groups.Required field definitions properties: isvIdentifier: type: string description: The vendor's (ISV's) unique identifier context: type: string description: 'Response organization. ITEM_LEVEL: Required fields listed for each product. CART_LEVEL: Products grouped by vendor (ISV) with one list of required fields that apply to all the vendor''s products.' title: type: string description: The form title subTitle: type: string description: Descriptive subtitle for the form fields: type: array description: All relevant information related to fields in the form items: $ref: '#/components/schemas/Field' example: isvIdentifier: ISV context: CART_LEVEL title: Additional Information subTitle: Additional Information Subtitle fields: - inputCode: FirstName inputTitle: First name subTitle: '' tooltip: '' value: John fieldType: TEXT validations: required: true readonly: false minLength: '2' maxLength: '255' expression: ^[A-Za-z]+(((\'|\-|\.(\s)?|\,(\s)?|\s)?([A-Za-z])+))*$ options: suffix: text: '' inputCode: '' - inputCode: Address/ISO3Country inputTitle: Country subTitle: '' tooltip: '' value: USA fieldType: COUNTRY validations: required: true readonly: false minLength: '2' maxLength: '3' expression: ^[A-Za-z]{2}$ options: suffix: text: '' placeholder: '' - inputCode: SubDomain inputTitle: Your primary domain name subTitle: '' tooltip: 'Your subdomain and domain names. For example: When subdomain=movies, and domain=entertainment.com, the subdomain value is: movies.entertainment.com' value: '' fieldType: TEXT validations: required: true readonly: false minLength: '1' maxLength: '255' expression: ^([^\W|http(s?)://][a-zA-Z]+)(\.[a-zA-Z]+)* options: suffix: text: .thedomain.com inputCode: '' placeholder: movies.entertainment.com CostTypeCategory: type: string title: CostTypeCategory description: Category of cost enum: - RECURRING - ONE_TIME example: ONE_TIME UnitDefinition: type: object title: UnitDefinition description: Configuration details for a unit type that is part of a pricing plan properties: unit: type: string description: Unit type name minimum: type: string description: The minimum number of units that users can buy maximum: type: string description: The maximum number of units that users can buy quantity: type: string description: Purchase quantity meteredUsage: type: boolean description: If true, this unit must be configured for metered usage allowDecimals: type: boolean description: If true, this unit can be purchased in decimal (fractional) quantities readOnly: type: boolean description: If true, the user cannot set a quantity for this unit at the time of purchase pricePerIncrement: type: boolean description: If true, the price per increment is displayed. For example, if the unit has a unit price is $1 and users must purchase in increments of 5, the price appears as $5 for 5 units. increment: type: number description: Restrict users to purchasing the unit in this number of increments. For example, require users to purchase the unit type in increments of 5. example: - unit: USER minimum: '1.0000000000' meteredUsage: false allowDecimals: false readOnly: false quantity: '1.0000000000' increment: 1 pricePerIncrement: false ProvisioningConfiguration: type: object title: ProvisioningConfiguration description: Determines when to send the service activation request to the vendor, either immediately after the opportunity is finalized (set the provisioning strategy to IMMEDIATELY) or at a future date (set the provisioning strategy to CUSTOM and set the desired date). properties: date: type: number description: Custom service activation date in UNIX Epoch milliseconds. This date is required when the provisioning strategy is CUSTOM. Do not set the date when the strategy is IMMEDIATELY. strategy: $ref: '#/components/schemas/ProvisioningStrategy' example: date: '1546300800000' strategy: CUSTOM TerminationFeeGracePeriodUnit: type: string title: TerminationFeeGracePeriodUnit description: Termination fee grace period unit. Time unit by which the terminationFeeGracePeriod is measured. enum: - NONE - DAY - MONTH example: NONE GracePeriodUnit: type: string title: GracePeriodUnit description: End-of-contract grace period unit. Time unit by which the endOfContractGracePeriod is measured. enum: - NONE - INFINITY - DAY - MONTH example: INFINITY Restriction: type: string title: Restriction description: Opportunity action restrictions enum: - CANNOT_FINALIZE_WITH_INACTIVE_CUSTOMER - CANNOT_SUBMIT_WITH_INACTIVE_CUSTOMER example: CANNOT_SUBMIT_WITH_INACTIVE_CUSTOMER BillingConfiguration: type: object title: BillingConfiguration description: Determines when the billing cycle starts. Set UPON_SERVICE_ACTIVATION to start the billing cycle according to the specified provisioning strategy (either immediately after the opportunity is finalized or on a custom provisioning date). Set NEXT_BILLING_CYCLE to start the billing cycle according to the marketplace billing configuration (for example, first of the month). Set CUSTOM to start the billing cycle on a specified date in the future. properties: date: type: number description: Custom billing activation date in UNIX Epoch milliseconds. This date is required when the billing strategy is CUSTOM. Do not set the date when the strategy is UPON_SERVICE_ACTIVATION or NEXT_BILLING_CYCLE. strategy: $ref: '#/components/schemas/BillingStrategy' example: date: '1546300800000' strategy: CUSTOM OpportunityErrorDetails: type: object title: OpportunityErrorDetails description: Additional error details returned after opportunity API call failure required: - field - code - message properties: field: type: string description: Field related to the error code: $ref: '#/components/schemas/OpportunityErrorCode' message: type: string description: Error description ValidationDetailParameter: type: object title: ValidationDetailParameter description: Key value pairs for elements with failed validations and related error messages. For example, the name of a required field and the error message related to it properties: key: type: string description: Validation detail parameter key value: type: string description: Validation detail parameter value example: key: REQUIRED_FIELD_KEY value: USERNAME PageMetadata: type: object title: PageMetadata required: - number - size - totalElements - totalPages properties: number: description: Page number type: number size: description: Size of the page to be returned type: number totalElements: description: Total number of elements type: number totalPages: description: Total number of pages type: number example: number: 12345 size: 12345 totalElements: 12345 totalPages: 12345 OpportunityPricingStrategy: type: string title: OpportunityPricingStrategy description: Pricing strategy enum: - FREE - FLAT - UNIT - VOLUME - TIERED - UNLIMITED - CUSTOM example: FREE OpportunityClone: type: object title: OpportunityClone description: The response text containing the cloned opportunity ID. properties: opportunityId: type: string description: The ID of the cloned opportunity example: opportunityId: 498c62ea-ad14-48e6-96ce-5400c617444c OpportunityItem: type: object title: OpportunityItem properties: id: type: string description: Item ID parentItemId: type: string description: The parent product's Product ID. Only relevant to and required for add-on products. pricingPlanId: type: string description: Pricing plan ID units: type: array description: List of units (quantity and type) associated with the item items: $ref: '#/components/schemas/BillingConfiguration' productId: type: string description: Product ID subscriptionCustomAttributes: allOf: - $ref: '#/components/schemas/CustomAttribute' - description: Custom attributes related to the subscription vendorRequiredFields: allOf: - $ref: '#/components/schemas/CustomAttribute' - description: Custom attributes related to vendor required fields for the subscription provisioningConfiguration: allOf: - $ref: '#/components/schemas/ProvisioningConfiguration' - description: Custom service activation dates billingConfiguration: allOf: - $ref: '#/components/schemas/BillingConfiguration' - description: Custom billing dates example: id: 37f56046-2cec-4bf4-a4e2-5a733dc849a9 pricingPlanId: a22c03e9-9e27-4e85-8433-78f246345685 units: - quantity: '8' unit: USER subscriptionCustomAttributes: intended_os: - other - ios - macos sales_agent_id: - R353113R vendorRequiredFields: name: - john lastname: - doe email: - john.doe@acme.com provisioningConfiguration: date: '1546300800000' strategy: CUSTOM billingConfiguration: date: '1546300800000' strategy: CUSTOM UnitContractTerms: type: object title: UnitContractTerms description: Contract terms that restrict mid-contract quantity changes on subscriptions. unitTerms maps UnitContractTerms to a unit type (for example, user); enabled terms prevent actions for the unit type. properties: blockContractIncrease: type: boolean default: false blockContractDecrease: type: boolean default: false blockOriginalContractDecrease: type: boolean default: false example: blockContractIncrease: false blockOriginalContractDecrease: false blockContractDecrease: true PriceRangeItem: type: object title: PriceRangeItem properties: min: type: string description: Minimum number of units for the price range max: type: string description: Maximum number of units for the price range example: min: '1' max: '100' OpportunityErrorCode: type: string title: OpportunityErrorCode description: The error code associated with the response enum: - SERVICE_UNAVAILABLE - UNAUTHORIZED - FORBIDDEN - NOT_FOUND - CONFLICT - REQUIRED_VALIDATION - INVALID_PAYLOAD_ERROR - INTERNAL_SERVER_ERROR - INTERNAL_TIMEOUT - MALFORMED_PAYLOAD - INVALID_PARAM - BAD_REQUEST - DUPLICATED_ITEMS - PRODUCT_NOT_STACKABLE_ALREADY_OWNED - OPPORTUNITY_ALREADY_CLOSED - ROLE_NOT_FOUND - REDEMPTION_LIMIT_REACHED - DISCOUNT_APPLICABLE_COUNT - DISCOUNT_APPLICABLE_ITEM - OVERRIDING_EXISTING_DISCOUNT - DISCOUNT_OVERRIDEN - DISCOUNT_CODE_EXPIRED - METHOD_NOT_ALLOWED - ALREADY_PURCHASED - INVALID_ITEM_ASSOCIATION - EXTERNAL_SERVICE_CONFLICT - DUPLICATE_ADDON_ON_PARENT - MINIMUM_UNIT_VALUE - PRICING_PLANS_NOT_FOUND - NO_ITEMS_FOUND - REQUIRED_FIELD_VALIDATION_ERROR - PURCHASE_SPEND_LIMIT - INVALID_MEMBERSHIP - VALID_PAYMENT_METHOD_REQUIRED - BILLING_ADDRESS_REQUIRED_FOR_OFFPLATFORM_PAYMENTS - MICROSOFT_CONFLICT_EXCEPTION - UNKNOWN example: BAD_REQUEST OpportunityOwnerType: type: string title: OpportunityOwnerType description: Opportunity owner type code enum: - PARTNER - PLATFORM_OWNER example: PARTNER PricingPeriod: type: string title: PricingPeriod description: The pricing period. The billing frequency for the pricing plan. enum: - ONE_TIME - DAILY - MONTHLY - QUARTERLY - SIX_MONTHS - YEARLY - TWO_YEARS - THREE_YEARS example: ONE_TIME BillingStrategy: type: string title: BillingStrategy enum: - CUSTOM - NEXT_BILLING_CYCLE - UPON_SERVICE_ACTIVATION default: UPON_SERVICE_ACTIVATION example: CUSTOM CustomAttribute: type: object title: CustomAttribute description: Custom attributes as key-value pairs. Values must be a string array additionalProperties: type: array description: Custom attribute key items: type: string description: Custom attribute values example: customAttributes: multivalue_key: - key_value_1 - key_value_2 single_key: - key_value RenewalConfiguration: type: string title: RenewalConfiguration description: Contract renewal configuration. Whether the contract is renewed and, if so, with what terms. enum: - MONTH_TO_MONTH - AUTO_RENEW - CANCEL_SUBSCRIPTION example: MONTH_TO_MONTH Opportunity: type: object title: Opportunity properties: id: type: string description: Opportunity ID ownerUser: $ref: '#/components/schemas/User' customerUser: $ref: '#/components/schemas/User' createdOn: type: number description: Opportunity creation date, in UNIX Epoch milliseconds currency: $ref: '#/components/schemas/OpportunityCurrency' purchaseEffectiveDate: type: number description: Opportunity purchase effective date, in UNIX Epoch milliseconds name: type: string description: Opportunity name status: $ref: '#/components/schemas/OpportunityStatus' items: type: array description: List of items in the opportunity items: $ref: '#/components/schemas/OpportunityItem' purchaseId: type: string description: Purchase ID purchaseNumber: type: string description: Purchase number availableActions: type: array description: Available actions on the opportunity items: $ref: '#/components/schemas/AvailableAction' actionRestrictions: allOf: - $ref: '#/components/schemas/ActionRestriction' - description: Action restrictions on the opportunity purchaseCustomAttributes: allOf: - $ref: '#/components/schemas/CustomAttribute' - description: Custom attributes related to the purchase example: id: ef6c414f-39da-401f-a4b8-81adc6190fda ownerUser: id: d781ac09-b4fe-4d57-8ba2-4640fc5b7c49 email: john.doe@acme.com firstName: John lastName: Doe company: id: '1' name: Acme Corp. isReseller: true customerUser: id: 498c62ea-ad14-48e6-96ce-5400c617444c email: ubrownfield@stark.com firstName: Ulysses lastName: Brownfield company: id: '100' name: Customer Company isReseller: false createdOn: '1546300800000' currency: USD purchaseEffectiveDate: '1577750400000' name: Jarvis Iniative status: OPEN items: - id: 4ccf689b-4339-4fc9-a8b3-b05c5a87c1be pricingPlanId: 4bc864b5-f63f-4933-be19-3700aa9a8cc4 units: - quantity: '20' unit: USER subscriptionCustomAttributes: intended_os: - other - ios - macos sales_agent_id: - R353113R vendorRequiredFields: name: - jonh lastname: - doe email: - john.doe@acme.com - id: dece524d-0466-4185-b3bb-1f8a300c37cd pricingPlanId: 80b85538-ffc1-4c4b-acb1-1bf87c8c2fc4 units: [] availableActions: - EDIT - FINALIZE - SUBMIT_FOR_REVIEW - ADD_PRODUCT - SET_CUSTOM_PRICE - SET_CUSTOM_CONTRACT - SET_PROVISIONING_DATE - SET_BILLING_DATE - SET_COMMISSION_RATE - CHANGE_OPPORTUNITY_OWNER actionRestrictions: {} OpportunityCreationRequest: type: object title: OpportunityCreationRequest required: - customerCompanyId - customerId - ownerCompanyId - ownerId - items properties: customerCompanyId: type: string description: Customer company ID customerId: type: string description: Customer user ID ownerCompanyId: type: string description: Sales agent company ID ownerId: type: string description: Sales agent user ID currency: $ref: '#/components/schemas/OpportunityCurrency' items: type: array description: List of items in the opportunity items: $ref: '#/components/schemas/OpportunityItem' purchaseEffectiveDate: type: number description: Opportunity purchase effective date, in UNIX Epoch milliseconds name: type: string description: Opportunity name createdByCompanyId: type: string description: Created by company ID createdById: type: string description: Created by user ID purchaseCustomAttributes: allOf: - $ref: '#/components/schemas/CustomAttribute' - description: Custom attributes related to the purchase example: customerCompanyId: 498c62ea-ad14-48e6-96ce-5400c617444c customerId: 505f0a0c-57a7-4d9e-9fac-66bbf557ac4d ownerCompanyId: 6a62244e-aa2f-461b-8c7a-3a0e091be9d3 ownerId: d781ac09-b4fe-4d57-8ba2-4640fc5b7c49 items: - pricingPlanId: 85d30404-c56b-4dff-9f3b-06636477fe55 units: - quantity: 10 unit: USER - pricingPlanId: d12931cf-eac6-45fa-8965-d33b1c5698b0 units: [] currency: USD createdByCompanyId: b7e0c48b-6d0d-45fc-9c8a-3fa3fd84d9f1 createdById: 8f6b3d29-4169-4fb0-91ff-bad9b7a3d0d4 purchaseCustomAttributes: paid_off_platform_contact: - janet.doe@accounting.acme.com ActionRestriction: type: object title: ActionRestriction description: 'Only appear in opportunity call responses. Action restrictions occur when an opportunity does not meet a requirement for an available action to occur. After the requirement is met, the restriction is removed, the action appears in the Available actions list, and the action can occur. For example: An API client has permission to finalize opportunities when customers are active. When customers are inactive, an action restriction prevents them from finalizing the opportunity. After the customer becomes active, the restriction is removed, it appears in the Available actions list, and the API client can finalize the opportunity.' properties: entry: type: array description: Opportunity action restrictions items: $ref: '#/components/schemas/Restriction' example: actionRestrictions: FINALIZE: - CANNOT_FINALIZE_WITH_INACTIVE_CUSTOMER SUBMIT_FOR_REVIEW: - CANNOT_SUBMIT_WITH_INACTIVE_CUSTOMER OpportunityCloneRequest: type: object title: OpportunityCloneRequest description: The parameters to be used when cloning the opportunity required: - name - customerCompanyId - customerId - ownerCompanyId - ownerId properties: name: type: string description: The name of the opportunity customerCompanyId: type: string description: The company ID of the customer customerId: type: string description: The user ID of the customer ownerCompanyId: type: string description: The company ID of the sales agent ownerId: type: string description: The user ID of the sales agent createdByCompanyId: type: string description: The user's company ID that's creating the opportunity createdById: type: string description: The user's ID that's creating the opportunity example: name: Opportunity name - COPY customerCompanyId: 498c62ea-ad14-48e6-96ce-5400c617444c customerId: 505f0a0c-57a7-4d9e-9fac-66bbf557ac4d ownerCompanyId: 6a62244e-aa2f-461b-8c7a-3a0e091be9d3 ownerId: d781ac09-b4fe-4d57-8ba2-4640fc5b7c49 createdByCompanyId: b7e0c48b-6d0d-45fc-9c8a-3fa3fd84d9f1 createdById: 8f6b3d29-4169-4fb0-91ff-bad9b7a3d0d4 PriceRange: type: object title: PriceRange description: Price definition for an explicit unit range. required: - min - price properties: min: type: number max: type: number price: type: number salePrice: type: string format: amount description: Regular sale price wholesalePrice: type: string format: amount description: Wholesale sale price example: min: 1 max: 5 salePrice: '4.0000000000' wholeSalePrice: null RequiredFields: type: object title: RequiredFields description: Required field definitions for a specific product and edition properties: productId: type: string description: The product ID editionId: type: string description: The edition code forms: type: array description: Groups of required fields. Forms are used to organize required fields into meaningful groups. items: $ref: '#/components/schemas/Form' example: productId: dfc9cefb-610b-4e49-ade8-6ae51a4d35c9 editionId: EDITION_CODE forms: - isvIdentifier: ISV context: CART_LEVEL title: Additional Information subTitle: Additional Information Subtitle fields: - inputCode: FirstName inputTitle: First name subTitle: '' tooltip: '' value: John fieldType: TEXT validations: required: true readonly: false minLength: '2' maxLength: '255' expression: ^[A-Za-z]+(((\'|\-|\.(\s)?|\,(\s)?|\s)?([A-Za-z])+))*$ options: suffix: text: '' inputCode: '' - inputCode: Address/ISO3Country inputTitle: Country subTitle: '' tooltip: '' value: USA fieldType: COUNTRY validations: required: true readonly: false minLength: '2' maxLength: '3' expression: ^[A-Za-z]{2}$ options: suffix: text: '' placeholder: '' - inputCode: SubDomain inputTitle: Your primary domain name subTitle: '' tooltip: 'Your subdomain and domain names. For example: When subdomain=movies, and domain=.entertainment.com, the subdomain value is: movies.entertainment.com' value: '' fieldType: TEXT validations: required: true readonly: false minLength: '1' maxLength: '255' expression: ^([^\W|http(s?)://][a-zA-Z]+)(\.[a-zA-Z]+)* options: suffix: text: .thedomain.com inputCode: '' placeholder: movies.entertainment.com Suffix: type: object title: Suffix description: The suffix label that appears to the right of the form field. For example, for a domain field, the suffix might be .com. Optional. The suffix can be populated by text OR the value in another form field referenced by an input code. properties: text: type: string description: The suffix value inputCode: type: string description: Unique identifier for the field. Possible values are DOMAIN, USERNAME, COUNTRY, STATE, etc. example: text: domainsuffix.com inputCode: DOMAIN Definition: type: object title: Definition description: Definition for flat/unit range prices. properties: price: description: Flat price. type: number priceRanges: description: Unit range prices. type: array items: $ref: '#/components/schemas/PriceRange' PricingStrategy: description: Pricing strategy type: string title: PricingStrategy enum: - FREE - FLAT - UNIT - TIERED - VOLUME - VARIABLE_PRICE_STRATEGIES - UNLIMITED - CUSTOM TaxDetail: type: object title: TaxDetail description: Opportunity tax detail properties: description: type: string description: Description of the tax taxAmount: type: string description: The tax amount example: description: Flat Tax taxAmount: '2.0000000000' CustomPrice: type: object title: CustomPrice description: Custom price definition. required: - costId - price properties: costId: description: ID of the cost/pricing item for which to override prices. type: string priceType: $ref: '#/components/schemas/CustomPriceType' pricingStrategy: $ref: '#/components/schemas/PricingStrategy' definition: $ref: '#/components/schemas/Definition' example: costId: 9742e09a-e1b4-4b9e-b1a7-66df3e41cebe price: 20 OpportunityValidation: type: object title: OpportunityValidation description: Failed and in-progress (pending) opportunity validations properties: blockingErrors: type: array description: Failed validation errors and the associated items, when applicable items: $ref: '#/components/schemas/ValidationDetail' pendingValidations: type: array description: List of validations which are still being processed and whose result should be retrieved later items: type: string example: blockingErrors: - itemId: eb690c8d-1c57-497c-82bf-a4194362d954 code: REQUIRED_FIELD_VALIDATION_ERROR message: There are validation errors messageParameters: - key: REQUIRED_FIELD_KEY value: USERNAME - key: REQUIRED_FIELD_ERROR_MESSAGE value: The username is not valid pendingValidations: - SUBSCRIPTION_VALIDATIONS RequiredFieldValidationDefinitions: type: object title: RequiredFieldValidationDefinitions description: Required field definitions. Used to validate field values. properties: required: type: boolean description: Indicates whether field is mandatory default: true readonly: type: boolean description: Indicates whether field is writable default: false minLength: type: string description: Minimum number of characters for the field default: '2' maxLength: type: string description: Maximum number of characters for the field default: '255' expression: type: string description: Describes the regular expression used to validate the field value example: required: true readonly: false minLength: '2' maxLength: '255' expression: string DeliveryAddress: type: object title: DeliveryAddress description: The shipping address properties: name: type: string description: The recipient's name city: type: string description: The city addressLine1: type: string description: The address countryCode: type: string description: Country code, in ISO-3166 format. subdivisionCode: type: string description: 'Subdivision code. For example: state code or province code.' postalCode: type: string description: The postal code example: name: John Smith city: Greenbow addressLine1: Main Street 446 countryCode: US subdivisionCode: AL postalCode: '50505' OpportunityPricing: type: object title: OpportunityPricing description: Pricing structure for an item required: - costTypeCategory - costType - pricingStrategy - salePrice - wholesalePrice - totalSalePrice properties: costId: type: string description: The cost ID costTypeCategory: $ref: '#/components/schemas/CostTypeCategory' costType: $ref: '#/components/schemas/CostType' frequency: $ref: '#/components/schemas/PricingPeriod' pricingStrategy: $ref: '#/components/schemas/OpportunityPricingStrategy' priceRanges: type: array description: Range of units for which the price is valid items: $ref: '#/components/schemas/PriceRangeItem' description: type: string description: Description of each pricing line unit: type: string description: Unit quantity: type: string description: Quantity salePrice: type: string description: Sale price wholesalePrice: type: string description: Wholesale price totalSalePrice: type: string description: Total sale price example: costTypeCategory: RECURRING costType: RECURRING_FLAT frequency: MONTHLY pricingStrategy: FLAT priceRanges: - max: '100' min: '1' description: RECURRING_FLAT quantity: '1.0000000000' salePrice: '14.9500000000' wholesalePrice: '12.0000000000' totalSalePrice: '14.9500000000' User: type: object title: User properties: id: type: string description: User ID email: type: string description: User email address firstName: type: string description: User first name lastName: type: string description: User last name company: allOf: - $ref: '#/components/schemas/Company' - description: User company example: id: d781ac09-b4fe-4d57-8ba2-4640fc5b7c49 email: john.doe@acme.com firstName: John lastName: Doe company: id: '1' name: Acme Corp. isReseller: true AvailableAction: type: string title: AvailableAction description: Only appears in responses. Actions that the API client has permission to complete for this opportunity. If an expected action does not appear in this list, check for it in the list of actionRestrictions. enum: - EDIT - FINALIZE - SUBMIT_FOR_REVIEW - ADD_PRODUCT - SET_CUSTOM_PRICE - SET_CUSTOM_CONTRACT - SET_PROVISIONING_DATE - SET_BILLING_DATE - CHANGE_OPPORTUNITY_OWNER example: EDIT OpportunityProduct: type: object title: OpportunityProduct properties: id: type: string description: Product ID name: type: string description: Product name type: type: string description: Product type logo: type: string description: Product logo URL example: id: cc0c7c28-ea65-4bab-8a4a-5e84d90ab291 name: Appsome Webapp type: WEB_APP logo: https://logs.acme.com/400x400/ddd/000.png&text=Appsome+App OpportunityUpdateOwnerRequest: type: object title: OpportunityUpdateOwnerRequest required: - ownerId - ownerCompanyId properties: ownerId: type: string description: The unique user ID of the owner ownerCompanyId: type: string description: The unique company ID of the owner example: ownerId: d781ac09-b4fe-4d57-8ba2-4640fc5b7c49 ownerCompanyId: 6a62244e-aa2f-461b-8c7a-3a0e091be9d3 CustomPriceType: title: CustomPriceType type: string enum: - RESELLER_PURCHASE_PRICE - MARKETPLACE_RESELLER_PURCHASE_PRICE OpportunityStatus: type: string title: OpportunityStatus description: Opportunity status enum: - OPEN - CLOSED - PENDING_REVIEW example: OPEN OpportunitySummary: type: object title: OpportunitySummary description: Opportunity taxes, subtotals, totals and recurring totals properties: amountDueBeforeTax: type: string description: Amount due before taxes taxSummary: type: array description: Details of a specific type of tax applied to a charged cost items: $ref: '#/components/schemas/TaxDetail' amountDueAfterTax: type: string description: Amount due after taxes items: type: array description: List of item details items: $ref: '#/components/schemas/OpportunityItemDetail' recurringTotals: type: array description: Recurring charge totals items: $ref: '#/components/schemas/TotalRecurring' example: amountDueBeforeTax: '0.0000000000' taxSummary: [] amountDueAfterTax: '0.0000000000' items: - id: c57331b7-0820-44ac-ad75-ee4ab2783b7c product: id: fa776d2e-cda5-4256-9a27-125a0fe3f448 name: Supported Product for Opportunity MVP type: WEB_APP_STACKED isAddon: false hasAddons: false pricingPlan: id: 7e1fd1fa-de0e-49e9-9e6a-9c474c57f22d name: Tiered monthly+yearly flat with included YEARLY editionCode: Tiered monthly+yearly flat with included pricing: - costType: RECURRING_FLAT description: Tiered monthly+yearly flat with included quantity: '1.0000000000' totalSalePrice: '240.0000000000' - costType: INCLUDED description: INCLUDED quantity: '1.0000000000' totalSalePrice: '0.0000000000' contractConfiguration: minimumServiceLength: 1 minimumServiceLengthUnit: YEARLY unitTerms: {} blockContractUpgrades: true blockContractDowngrades: true blockSwitchToShorterContract: true keepContractDateOnPlanChange: true unitDefinitions: - unit: USER minimum: '1.0000000000' meteredUsage: false allowDecimals: false readOnly: true pricePerIncrement: false recurringTotals: - billingCycle: period: YEARLY dayOfMonth: 17 totalSalePrice: '240.0000000000' CostType: type: string title: CostType description: Type of cost enum: - RECURRING_FLAT - ONE_TIME_FLAT - INCLUDED - SETUP_PER_UNIT - RECURRING_PER_UNIT - ONE_TIME_PER_UNIT - SETUP_FEE - CONTRACT_FEE - DISCOUNT_PER_UNIT - DISCOUNT_FLAT - METERED_USAGE example: RECURRING_PER_UNIT ProvisioningStrategy: type: string title: ProvisioningStrategy enum: - CUSTOM - IMMEDIATELY default: IMMEDIATELY example: CUSTOM Field: type: object title: Field description: '' properties: inputCode: type: string description: 'An identifier for the field. For example: domain, username, country, state. Can be used to reference this field and the value in it (for example, see Suffix option).' inputTitle: type: string description: Descriptive title for the field subTitle: type: string description: Descriptive subtitle for the field tooltip: type: string description: Descriptive tooltip for the field value: type: string description: The field value fieldType: type: string description: 'The type of input field associated with the form field. For example: DOMAIN (has ''http''), STRING, EMAIL (has ''@'').' validations: $ref: '#/components/schemas/RequiredFieldValidationDefinitions' options: $ref: '#/components/schemas/Options' example: inputCode: SubDomain inputTitle: Your primary domain name subTitle: '' tooltip: 'Your subdomain and domain names. For example: When subdomain=movies, and domain=.entertainment.com, the subdomain value is: movies.entertainment.com' value: '' fieldType: TEXT validations: required: true readonly: false minLength: '1' maxLength: '255' expression: ^([^\W|http(s?)://][a-zA-Z]+)(\.[a-zA-Z]+)* options: suffix: text: .thedomain.com inputCode: '' placeholder: movies.entertainment.com TerminationFeeAS: type: object title: TerminationFee description: Termination fee properties: feeType: $ref: '#/components/schemas/FeeType' amount: type: number description: type: string example: feeType: FIXED amount: '2' PricingPlanCosts: type: object title: PricingPlanCosts description: Cost details of a pricing plan properties: pricingPlanId: type: string description: Pricing plan ID pricing: type: array description: Cost of each quantifiable unit and flat rates items: $ref: '#/components/schemas/OpportunityPricing' contractConfiguration: allOf: - $ref: '#/components/schemas/ContractConfiguration' - description: Contract configuration unitDefinitions: type: array description: Definition of all units for an item pricing plan items: $ref: '#/components/schemas/UnitDefinition' example: pricingPlanId: a01c46d4-8925-4719-a891-2c036e2216a1 pricing: - costId: 0121502b-0bac-4927-825c-d1f6c19e79c7 costTypeCategory: ONE_TIME frequency: ONE_TIME costType: CONTRACT_FEE pricingStrategy: FLAT priceRanges: [] description: Contract charge unit: CONTRACT_FEE quantity: '1.0000000000' salePrice: '300.0000000000' wholesalePrice: '300.0000000000' totalSalePrice: '300.0000000000' - costId: 78092def-eeb6-42dc-917e-182e38b53d16 costTypeCategory: RECURRING frequency: MONTHLY costType: RECURRING_FLAT pricingStrategy: FLAT priceRanges: [] description: Recurring monthly flat+ppu+ot with contract+ot+tf with included quantity: '1.0000000000' salePrice: '10.0000000000' wholesalePrice: '10.0000000000' totalSalePrice: '10.0000000000' - costId: ea5b596d-950f-427b-87d0-7c82340b468b costTypeCategory: ONE_TIME frequency: ONE_TIME costType: SETUP_FEE pricingStrategy: FLAT priceRanges: [] description: Recurring monthly flat+ppu+ot with contract+ot+tf with included quantity: '1.0000000000' salePrice: '100.0000000000' wholesalePrice: '100.0000000000' totalSalePrice: '100.0000000000' - costId: 6160b953-88f7-49ec-a90d-aef0f9ae5d17 costTypeCategory: RECURRING frequency: MONTHLY costType: RECURRING_PER_UNIT pricingStrategy: UNIT priceRanges: - min: '0.0000000000' description: Per User Fee unit: USER quantity: '0.0000000000' salePrice: '8.5000000000' wholesalePrice: '8.5000000000' totalSalePrice: '0.0000000000' - costTypeCategory: RECURRING frequency: MONTHLY costType: INCLUDED pricingStrategy: UNIT priceRanges: - min: '1.0000000000' max: '1.0000000000' description: INCLUDED unit: USER quantity: '1.0000000000' salePrice: '0.0000000000' wholesalePrice: '0.0000000000' totalSalePrice: '0.0000000000' contractConfiguration: minimumServiceLength: 12 minimumServiceLengthUnit: MONTHLY renewalConfiguration: AUTO_RENEW terminationFee: feeType: FIXED amount: 400 description: Termination fee! terminationFeeGracePeriodUnit: NONE endOfContractGracePeriodUnit: INFINITY contractCancellationPeriodUnit: NONE unitTerms: {} blockContractUpgrades: false blockContractDowngrades: false blockSwitchToShorterContract: false keepContractDateOnPlanChange: false isDefault: true unitDefinitions: - unit: USER minimum: '1.0000000000' meteredUsage: false allowDecimals: false readOnly: false quantity: '1.0000000000' increment: 1 pricePerIncrement: false OpportunityUpdateRequest: type: object title: OpportunityUpdateRequest properties: name: type: string description: Opportunity name purchaseEffectiveDate: type: number description: Opportunity purchase effective date, in UNIX Epoch milliseconds purchaseCustomAttributes: allOf: - $ref: '#/components/schemas/CustomAttribute' - description: Custom attributes related to the purchase example: name: New opportunity purchaseEffectiveDate: 1577750400000 purchaseCustomAttributes: paid_off_platform_contact: - janet.doe@accounting.acme.com OpportunityShipping: type: object title: OpportunityShipping description: Shipping information that applies to all physical goods on the opportunity properties: sameAsBillingAddress: type: boolean description: 'Whether customer requests to use billing address as shipping address. WARNING: Does not manage addresses; does not change shipping address to billing address, nor update shipping address if billing address changes.' deliveryAddress: $ref: '#/components/schemas/DeliveryAddress' example: sameAsBillingAddress: false deliveryAddress: name: John Smith city: Greenbow addressLine1: Main Street 446 countryCode: US subdivisionCode: AL postalCode: '50505' PricingPlan: type: object title: PricingPlan properties: id: type: string description: Pricing plan ID name: type: string description: Pricing plan name example: id: 031d9ed2-3df1-44f5-876a-6b4318ba7bdb name: Recurring Edition with Unlimited Included Users Options: type: object title: Options description: Field options properties: suffix: $ref: '#/components/schemas/Suffix' placeholder: type: string description: 'Tip that appears in an unpopulated text field. For example: Enter your domain here. Optional.' example: suffix: text: domainsuffix.com inputCode: DOMAIN placeholder: Enter your domain here OpportunityItemDetail: type: object title: OpportunityItemDetail properties: id: type: string description: Item ID product: allOf: - $ref: '#/components/schemas/OpportunityProduct' - description: Product information pricingPlan: allOf: - $ref: '#/components/schemas/PricingPlan' - description: Pricing plan information units: type: array description: List of units (quantity and type) associated with the item items: $ref: '#/components/schemas/Unit' pricing: type: array description: Cost of each quantifiable unit and flat rates items: $ref: '#/components/schemas/OpportunityPricing' contractConfiguration: allOf: - $ref: '#/components/schemas/ContractConfiguration' - description: Contract configuration provisioningConfiguration: allOf: - $ref: '#/components/schemas/ProvisioningConfiguration' - description: Custom service activation dates billingConfiguration: allOf: - $ref: '#/components/schemas/BillingConfiguration' - description: Custom billing dates subscriptionCustomAttributes: allOf: - $ref: '#/components/schemas/CustomAttribute' - description: Custom attributes related to the subscription vendorRequiredFields: allOf: - $ref: '#/components/schemas/CustomAttribute' - description: Custom attributes related to vendor required fields for the subscription example: id: 37f56046-2cec-4bf4-a4e2-5a733dc849a9 product: id: cc0c7c28-ea65-4bab-8a4a-5e84d90ab291 name: Appsome Webapp type: WEB_APP logo: https://logs.acme.com/400x400/ddd/000.png&text=Appsome+App pricingPlan: id: 031d9ed2-3df1-44f5-876a-6b4318ba7bdb name: Recurring Edition with Unlimited Included Users units: - quantity: '8' unit: USER pricing: - costTypeCategory: RECURRING costType: RECURRING_FLAT pricingStrategy: FREE priceRanges: [] description: RECURRING_FLAT quantity: '1.0000000000' salePrice: '14.9500000000' wholesalePrice: '12.0000000000' totalSalePrice: '14.9500000000' - costTypeCategory: RECURRING costType: INCLUDED pricingStrategy: UNLIMITED priceRanges: [] description: INCLUDED unit: USER salePrice: '0.0000000000' wholesalePrice: '0.0000000000' totalSalePrice: '0.0000000000' subscriptionCustomAttributes: intended_os: - other - ios - macos sales_agent_id: - R353113R vendorRequiredFields: name: - jonh lastname: - doe email: - john.doe@acme.com contractConfiguration: minimumServiceLength: '3' minimumServiceLengthUnit: MONTHLY terminationFee: feeType: FIXED amount: '2' renewalConfiguration: MONTH_TO_MONTH terminationFeeGracePeriod: '7' terminationFeeGracePeriodUnit: DAY contractCancellationPeriodLimit: null contractCancellationPeriodUnit: NONE endOfContractGracePeriod: null endOfContractGracePeriodUnit: INFINITY unitTerms: USER: blockContractIncrease: false blockOriginalContractDecrease: false blockContractDecrease: true blockContractUpgrades: false blockContractDowngrades: true blockSwitchToShorterContract: true keepContractDateOnPlanChange: false billingConfiguration: date: '1546300800000' strategy: CUSTOM provisioningConfiguration: date: '1546300800000' strategy: CUSTOM OpportunityItemUpdateRequest: type: object title: OpportunityItemUpdateRequest required: - itemId - pricingPlanId properties: id: type: string description: Item ID pricingPlanId: type: string description: Pricing plan ID units: type: array description: List of units (quantity and type) associated with the item items: $ref: '#/components/schemas/Unit' customPrices: type: array description: List of custom prices per cost items: $ref: '#/components/schemas/CustomPrice' contractConfiguration: $ref: '#/components/schemas/ContractConfiguration' provisioningConfiguration: $ref: '#/components/schemas/ProvisioningConfiguration' billingConfiguration: $ref: '#/components/schemas/BillingConfiguration' subscriptionCustomAttributes: $ref: '#/components/schemas/CustomAttribute' vendorRequiredFields: $ref: '#/components/schemas/CustomAttribute' example: id: 37f56046-2cec-4bf4-a4e2-5a733dc849a9 pricingPlanId: a22c03e9-9e27-4e85-8433-78f246345685 units: - quantity: '8' unit: USER customPrices: - costId: e5f403a3-7ba0-45d4-8117-8dd8cbceb6c6 price: 100 - costId: 9742e09a-e1b4-4b9e-b1a7-66df3e41cebe price: 20 contractConfiguration: minimumServiceLength: '3' minimumServiceLengthUnit: MONTHLY terminationFee: feeType: FIXED amount: '2' renewalConfiguration: MONTH_TO_MONTH terminationFeeGracePeriod: '7' terminationFeeGracePeriodUnit: DAY contractCancellationPeriodLimit: null contractCancellationPeriodUnit: NONE endOfContractGracePeriod: null endOfContractGracePeriodUnit: INFINITY unitTerms: USER: blockContractIncrease: false blockOriginalContractDecrease: false blockContractDecrease: true blockContractUpgrades: false blockContractDowngrades: true blockSwitchToShorterContract: true keepContractDateOnPlanChange: false provisioningConfiguration: date: '1546300800000' strategy: CUSTOM billingConfiguration: date: '1546300800000' strategy: CUSTOM subscriptionCustomAttributes: intended_os: - other - ios - macos sales_agent_id: - R353113R vendorRequiredFields: name: - John lastname: - Doe email: - john.doe@acme.com OpportunityPage: type: object title: OpportunityPage properties: page: $ref: '#/components/schemas/PageMetadata' content: description: List of opportunities type: array items: $ref: '#/components/schemas/OpportunityLight' DiscountRequest: type: object title: DiscountRequest description: Details about the discount to be applied to the product properties: discountCode: type: string description: The discount code can be a combination of letters, numbers, and special characters itemIds: type: array description: The opportunity's item IDs to which the discount is applied or removed items: type: string example: discountCode: 10%OFF itemIds: - 166e0ce6-4309-4a16-ac9b-61bea7ce1cbc - fa776d2e-cda5-4256-9a27-125a0fe3f448 OpportunityError: type: object title: OpportunityError description: Opportunities API error description required: - status - code - message properties: status: type: integer description: HTTP status code code: $ref: '#/components/schemas/OpportunityErrorCode' message: type: string description: Descriptive error message for debugging details: type: array description: Additional error details items: $ref: '#/components/schemas/OpportunityErrorDetails' example: status: 503 code: SERVICE_UNAVAILABLE message: Unable to reach the service, please contact support@appdirect.com OpportunityCurrency: type: string title: OpportunityCurrency description: The currency using the ISO-4217 currency code pattern: ^[A-Z]{3}$ enum: - USD - CAD - EUR - JPY - GBP - KRW - CHF - SEK - SGD - MYR - AUD - MXN - INR - BRL - DKK - NZD - NOK - ZAR - PHP - CNY - SAR - GTQ - IDR - ARS - COP - PEN default: USD example: USD ProductIds: type: object title: ProductIds description: A product ID and edition code required: - productId - editionId properties: productId: type: string description: The product ID editionId: type: string description: The edition code example: productId: dfc9cefb-610b-4e49-ade8-6ae51a4d35c9 editionId: EDITION_CODE CancellationPeriodUnit: type: string title: CancellationPeriodUnit description: Cancellation period unit. Time unit by which the contractCancellationPeriodLimit is measured. enum: - NONE - DAY example: NONE FeeType: type: string title: FeeType description: Contract termination fee type enum: - NONE - PERCENTAGE - FIXED example: FIXED MinimumServiceLengthUnit: type: string title: MinimumServiceLengthUnit description: Time unit for contract length. This property must have the same value as the contract length unit configured for the pricing plan. enum: - DAILY - MONTHLY - QUARTERLY - SIX_MONTHS - YEARLY - TWO_YEARS - THREE_YEARS example: MONTHLY TotalRecurring: type: object title: TotalRecurring description: Represent recurring fee of a specfic billing cycle properties: totalSalePrice: type: string description: The total sale price totalWholeSalePrice: type: string description: The total wholesale price nextInvoiceDate: type: string description: Date for the next invoice billingCycle: $ref: '#/components/schemas/BillingCycle' example: billingCycle: period: YEARLY dayOfMonth: 17 totalSalePrice: '240.0000000000' parameters: OpportunityStatus: in: query name: status description: Opportunity status required: false schema: type: string enum: - OPEN - CLOSED - PENDING_REVIEW