swagger: "2.0" info: version: 0.3.0 title: "research" description: "Customer Information Microservice" termsOfService: "https://salesforcedevops.net/terms/" contact: email: "vern@vernonkeenan.com" license: name: "Proprietary - Copyright (c) 2018-2023 by Vernon Keenan" securityDefinitions: ApiKeyAuth: type: "apiKey" in: "header" name: "X-API-Key" schemes: - "http" basePath: "/v1" host: "research.vernonkeenan.com:8080" consumes: - "application/json" produces: - "application/json" parameters: accountIdQuery: description: Record Id of an Account in: query name: accountId required: false type: string activeQuery: description: Only retrieve active records? in: query name: active required: false type: boolean companyProductIdQuery: description: CompanyProduct record ID in: query name: companyProductId required: false type: string industryIdQuery: description: Industry record ID in: query name: industryId required: false type: string topicIdQuery: description: Topic record ID in: query name: topicId required: false type: string leadIdQuery: description: Lead record ID in: query name: leadId required: false type: string contactIdQuery: description: Contact record ID in: query name: contactId required: false type: string emailQuery: description: Email address used for identity lookup in: query name: email required: false type: string industryRequest: description: An array of new Industry records in: body name: industryRequest required: true schema: $ref: "#/definitions/IndustryRequest" topicRequest: description: An array of new Topic records in: body name: topicRequest required: true schema: $ref: "#/definitions/TopicRequest" limitQuery: description: "How many objects to return at one time" format: int64 in: query name: limit required: false type: integer nameQuery: description: The Name of this Object in: query name: name required: false type: string offsetQuery: description: How many objects to skip? format: int64 in: query name: offset required: false type: integer typeQuery: description: The Type of this Object in: query name: type required: false type: string responses: AccessForbidden: description: "Access forbidden, account lacks access" headers: Access-Control-Allow-Origin: type: string schema: $ref: "#/definitions/Error" TopicResponse: headers: Access-Control-Allow-Origin: type: string Cache-Control: type: string description: Response with Topic objects schema: $ref: "#/definitions/TopicResponse" IndustryResponse: headers: Access-Control-Allow-Origin: type: string Cache-Control: type: string description: Response with Industry objects schema: $ref: "#/definitions/IndustryResponse" TopicObservableResponse: description: Response with an array of Topic objects headers: Access-Control-Allow-Origin: type: string Cache-Control: type: string schema: items: $ref: "#/definitions/Topic" type: array IndustryObservableResponse: description: Response with an array of Industry objects headers: Access-Control-Allow-Origin: type: string Cache-Control: type: string schema: items: $ref: "#/definitions/Industry" type: array Conflict: description: Conflict headers: Access-Control-Allow-Origin: type: string schema: $ref: "#/definitions/Error" DeleteResponse: description: Response with Message Objects with Delete Status headers: Access-Control-Allow-Origin: type: string schema: $ref: "#/definitions/DeleteResponse" InvalidDataError: headers: Access-Control-Allow-Origin: type: string description: Invalid data was sent schema: $ref: "#/definitions/InvalidError" NotFound: description: Resource was not found headers: Access-Control-Allow-Origin: type: string schema: $ref: "#/definitions/Error" ServerError: description: Server Internal Error headers: Access-Control-Allow-Origin: type: string schema: $ref: "#/definitions/Error" Unauthorized: description: "Access unauthorized, invalid API-KEY was used" headers: Access-Control-Allow-Origin: type: string schema: $ref: "#/definitions/Error" UnprocessableEntity: description: "Unprocessable Entity, likely a bad parameter" headers: Access-Control-Allow-Origin: type: string schema: $ref: "#/definitions/Error" CORSResponse: description: CORS OPTIONS response headers: Access-Control-Allow-Origin: type: string Access-Control-Allow-Headers: type: string Access-Control-Allow-Methods: type: string Access-Control-Expose-Headers: type: string Access-Control-Max-Age: type: string Access-Control-Allow-Credentials: type: string Cache-Control: type: string paths: /topics: get: description: Retrieve Topic records from the datastore operationId: getTopics parameters: - $ref: "#/parameters/topicIdQuery" responses: "200": $ref: "#/responses/TopicResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Get Topic records tags: - Topic options: description: CORS support operationId: topicOptions responses: "200": $ref: "#/responses/CORSResponse" tags: - cors post: description: Add new companies operationId: postTopics parameters: - $ref: "#/parameters/topicRequest" responses: "200": $ref: "#/responses/TopicResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Add new companies tags: - Topic /topics/observable: get: description: A list of companies in a simple JSON array operationId: getTopicsObservable parameters: - $ref: "#/parameters/topicIdQuery" responses: "200": $ref: "#/responses/TopicObservableResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Get Taxnexus Companies in an observable array tags: - Topic options: description: CORS support operationId: topicObservableOptions responses: "200": $ref: "#/responses/CORSResponse" tags: - cors /industries: get: description: Retrieve Industry records from the datastore operationId: getIndustries parameters: - $ref: "#/parameters/industryIdQuery" responses: "200": $ref: "#/responses/IndustryResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Get Industry records tags: - Industry options: description: CORS support operationId: industryOptions responses: "200": $ref: "#/responses/CORSResponse" tags: - cors post: description: Add new companies operationId: postIndustries parameters: - $ref: "#/parameters/industryRequest" responses: "200": $ref: "#/responses/IndustryResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Add new companies tags: - Industry /industries/observable: get: description: A list of companies in a simple JSON array operationId: getIndustriesObservable parameters: - $ref: "#/parameters/industryIdQuery" responses: "200": $ref: "#/responses/IndustryObservableResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Get Taxnexus Companies in an observable array tags: - Industry options: description: CORS support operationId: industryObservableOptions responses: "200": $ref: "#/responses/CORSResponse" tags: - cors definitions: Address: properties: City: description: City type: string Country: description: Country full name type: string CountryCode: description: Country Code type: string PostalCode: description: Postal Code type: string State: description: State full name type: string StateCode: description: State Code type: string Street: description: Street number and name type: string type: object CompanyProduct: description: A software product or service vended by a Company properties: ID: description: Record Id type: string AccountID: description: ID of the Company that owns this Product type: string CreatedByID: description: Created By User ID type: string CreatedDate: description: Created Date type: string Description: description: Description of product type: string FullDescription: description: Full Description of product type: string Imagealttext: description: Image Alt Text type: string ImageURL: description: Image URL type: string LastModifiedByID: description: Last Modified By User ID type: string LastModifiedDate: description: Last Modified Date type: string Logo: description: Logo type: string Name: description: Product Name type: string Published: description: Published type: boolean SalesforceSpecific: description: Salesforce Specific type: boolean SiteURL: description: Site URL type: string TagLine: description: TagLine type: string URL: description: Website type: string type: object DeleteResponse: properties: Data: items: $ref: "#/definitions/Message" type: array Meta: $ref: "#/definitions/ResponseMeta" type: object Error: properties: Code: format: int64 type: integer Fields: type: string Message: type: string type: object Factor: description: A Factor of analysis within a research topic properties: ID: description: Record Id type: string CreatedByID: description: Created By User ID type: string CreatedDate: description: Created Date type: string Description: description: Topic Description type: string LastModifiedByID: description: Last Modified By User ID type: string LastModifiedDate: description: Last Modified Date type: string Name: description: Factor Name type: string Observations: description: The list of Observations used to analyze this industry items: $ref: "#/definitions/Observation" type: array SiteURL: description: The URL of the corresponding page on the CMS type: string Slug: description: The slug of the corresponding page on the CMS type: string TopicID: description: The ID of the Topic that owns this Factor type: string type: object IndustryProduct: description: Junction object between Industry and CompanyProduct type: object properties: ID: description: Record Id type: string CreatedByID: description: Created By User ID type: string CreatedDate: description: Created Date type: string LastModifiedByID: description: Last Modified By User ID type: string LastModifiedDate: description: Last Modified Date type: string IndustryID: type: string HTML: type: string CompanyProductID: type: string Industry: description: An industry that is being researched properties: ID: description: Record Id type: string Companies: description: The AccountIDs of the Companies in this Industry items: type: string type: array CompanyProducts: description: The list of Products in this industry items: $ref: "#/definitions/CompanyProduct" type: array CreatedByID: description: Created By User ID type: string CreatedDate: description: Created Date type: string Description: description: Industry Description type: string Imagealttext: description: Image Alt Text type: string ImageURL: description: Image URL type: string LastModifiedByID: description: Last Modified By User ID type: string LastModifiedDate: description: Last Modified Date type: string Level: description: The hierarchical level of this Industry type: string Logo: description: Logo type: string Name: description: Industry Name type: string ParentIndustryID: description: The ID of the Parent Industry type: string Path: description: The full path of this industry, including Parent type: string SiteURL: description: The URL of the corresponding page on the CMS type: string Slug: description: The CMS Slug for this Industry type: string TagLine: description: TagLine type: string type: object IndustryRequest: description: An array of Industry objects submitted for processing properties: Data: items: $ref: "#/definitions/Industry" type: array type: object IndustryResponse: description: An array of Industry objects produced in response to a request properties: Data: items: $ref: "#/definitions/Industry" type: array Meta: $ref: "#/definitions/ResponseMeta" type: object InvalidError: allOf: - $ref: "#/definitions/Error" - properties: details: items: type: string type: array type: object Message: properties: message: type: string ref: type: string status: format: int64 type: number type: object Observation: description: A data point collected while analyzing a Factor properties: ID: description: Record Id type: string AccountID: description: The ID of the Company being analyzed type: string CompanyProductID: description: The ID of the Product being analyzed type: string CreatedByID: description: Created By User ID type: string CreatedDate: description: Created Date type: string Description: description: Notes concerning data collection type: string FactorID: description: The ID of the Factor that owns this Observation type: string LastModifiedByID: description: Last Modified By User ID type: string LastModifiedDate: description: Last Modified Date type: string SubjectType: description: Is the subject a Company or a Product? Value: description: The data point collected type: string type: object Pagination: properties: limit: format: int64 type: number pagesize: format: int64 type: number poffset: format: int64 type: integer setsize: format: int64 type: number type: object RequestMeta: properties: TaxnexusAccount: description: Account Number of the Reseller or OEM type: string required: - TaxnexusAccount type: object ResponseMeta: properties: Contact: description: Microservice Contact Info type: string Copyright: description: Copyright Info type: string License: description: License Information and Restrictions type: string OperationID: description: Operation ID type: string Pagination: $ref: "#/definitions/Pagination" RequestIP: description: Request IP Address type: string RequestType: description: Request Type type: string RequestURL: description: Request URL type: string ServerInfo: description: Data Server Info type: string ServerResponseTime: description: Data Server Response Time (ms) type: string ServerTimestamp: description: Backend Server Timestamp type: string TaxnexusAccount: description: Account Number used for recording transactions type: string type: object Topic: description: A research topic that collects data properties: ID: description: Record Id type: string CreatedByID: description: Created By User ID type: string CreatedDate: description: Created Date type: string Description: description: Topic Description type: string Factors: description: The list of Factors used to analyze this industry items: $ref: "#/definitions/Factor" type: array LastModifiedByID: description: Last Modified By User ID type: string LastModifiedDate: description: Last Modified Date type: string Name: description: Topic Name type: string ParentTopicID: description: The ID of the Parent Topic type: string SiteURL: description: The URL of the corresponding page on the CMS type: string Slug: description: The CMS Slug for this Topic type: string type: object TopicRequest: description: An array of Topic objects submitted for processing properties: Data: items: $ref: "#/definitions/Topic" type: array type: object TopicResponse: description: An array of Topic objects produced in response to a request properties: Data: items: $ref: "#/definitions/Topic" type: array Meta: $ref: "#/definitions/ResponseMeta" type: object