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-2024 by Vernon Keenan" securityDefinitions: ApiKeyAuth: type: "apiKey" in: "header" name: "X-API-Key" kvSessionCookie: type: "apiKey" in: "header" name: "Cookie" description: "Members session cookie. Credential values are never accepted in request bodies or logs." 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 companyServiceIdQuery: description: CompanyService record ID in: query name: companyServiceId required: false type: string companyProductRequest: description: An array of new CompanyProduct records in: body name: companyProductRequest required: true schema: $ref: "#/definitions/CompanyProductRequest" companyProductProposalRequest: description: A human-attributed draft proposal for an existing CompanyProduct in: body name: companyProductProposalRequest required: true schema: $ref: "#/definitions/CompanyProductProposalRequest" companyProductProposalIdPath: description: CompanyProduct proposal record ID in: path name: companyProductProposalId required: true type: string format: uuid companyProductProposalViewQuery: description: Actor-owned proposals or the tenant review queue in: query name: view required: true type: string enum: [mine, review] companyProductProposalSubmitRequest: description: Optimistic draft submission request in: body name: companyProductProposalSubmitRequest required: true schema: $ref: "#/definitions/CompanyProductProposalSubmitRequest" companyProductProposalReviewRequest: description: Complete field-level review request in: body name: companyProductProposalReviewRequest required: true schema: $ref: "#/definitions/CompanyProductProposalReviewRequest" companyServiceRequest: description: An array of new CompanyService records in: body name: companyServiceRequest required: true schema: $ref: "#/definitions/CompanyServiceRequest" 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 factorIdQuery: description: Factor record ID in: query name: factorId required: false type: string financialStatementIdQuery: description: Financial Statement record ID in: query name: financialStatementId required: false type: string factorRequest: description: An array of new Factor records in: body name: factorRequest required: true schema: $ref: "#/definitions/FactorRequest" financialStatementRequest: description: An array of new FinancialStatement records in: body name: financialStatementRequest required: true schema: $ref: "#/definitions/FinancialStatementRequest" industryCompanyIdQuery: description: IndustryCompany record ID in: query name: industryCompanyId required: false type: string companyIdQuery: description: Company record ID in: query name: companyId required: false type: string industryCompanyRequest: description: An array of new IndustryCompany records in: body name: industryCompanyRequest required: true schema: $ref: "#/definitions/IndustryCompanyRequest" industryIdQuery: description: Industry record ID in: query name: industryId required: false type: string productCategoryQuery: description: Is this industry a product category? in: query name: productCategory required: false type: boolean serviceCategoryQuery: description: Is this industry a service category? in: query name: serviceCategory required: false type: boolean industryProductIdQuery: description: IndustryProduct record ID in: query name: industryProductId required: false type: string industryProductRequest: description: An array of new IndustryProduct records in: body name: industryProductRequest required: true schema: $ref: "#/definitions/IndustryProductRequest" industryServiceIdQuery: description: IndustryService record ID in: query name: industryServiceId required: false type: string industryServiceRequest: description: An array of new IndustryService records in: body name: industryServiceRequest required: true schema: $ref: "#/definitions/IndustryServiceRequest" industryRequest: description: An array of new Industry records in: body name: industryRequest required: true schema: $ref: "#/definitions/IndustryRequest" leadIdQuery: description: Lead record ID in: query name: leadId required: false type: string 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 slugQuery: description: The Slug of this Object in: query name: slug required: false type: string observationIdQuery: description: Observation record ID in: query name: observationId required: false type: string observationRequest: description: An array of new Observation records in: body name: observationRequest required: true schema: $ref: "#/definitions/ObservationRequest" offsetQuery: description: How many objects to skip? format: int64 in: query name: offset required: false type: integer topicIdQuery: description: Topic record ID in: query name: topicId required: false type: string topicRequest: description: An array of new Topic records in: body name: topicRequest required: true schema: $ref: "#/definitions/TopicRequest" 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" CompanyProductResponse: description: Response with CompanyProduct objects schema: $ref: "#/definitions/CompanyProductResponse" CompanyServiceResponse: description: Response with CompanyService objects schema: $ref: "#/definitions/CompanyServiceResponse" 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" FactorResponse: description: Response with Factor objects schema: $ref: "#/definitions/FactorResponse" FinancialStatementResponse: description: Response with FinancialStatement objects schema: $ref: "#/definitions/FinancialStatementResponse" IndustryCompanyResponse: description: Response with IndustryCompany objects schema: $ref: "#/definitions/IndustryCompanyResponse" IndustryProductResponse: description: Response with IndustryProduct objects schema: $ref: "#/definitions/IndustryProductResponse" IndustryServiceResponse: description: Response with IndustryService objects schema: $ref: "#/definitions/IndustryServiceResponse" IndustryResponse: description: Response with Industry objects schema: $ref: "#/definitions/IndustryResponse" InvalidDataError: description: Invalid data was sent headers: Access-Control-Allow-Origin: type: string schema: $ref: "#/definitions/InvalidError" NotFound: description: Resource was not found headers: Access-Control-Allow-Origin: type: string schema: $ref: "#/definitions/Error" ObservationResponse: description: Response with Observation objects schema: $ref: "#/definitions/ObservationResponse" ServerError: description: Server Internal Error headers: Access-Control-Allow-Origin: type: string schema: $ref: "#/definitions/Error" TopicResponse: description: Response with Topic objects schema: $ref: "#/definitions/TopicResponse" 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" CompanyCategoryResponse: description: The SalesforceDevops.net CompanyCategory Object schema: $ref: "#/definitions/CompanyCategoryResponse" paths: /companycategories: get: description: Return all or a single company category fully hydrated object operationId: getCompanyCategories responses: "200": $ref: "#/responses/CompanyCategoryResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Get a list of company categories tags: - CompanyCategories /companyservices: delete: description: Delete CompanyService record operationId: deleteCompanyService parameters: - $ref: "#/parameters/companyServiceIdQuery" responses: "200": $ref: "#/responses/DeleteResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Delete a CompanyService tags: - CompanyServices get: description: Return a list of all available CompanyServices operationId: getCompanyServices parameters: - $ref: "#/parameters/limitQuery" - $ref: "#/parameters/offsetQuery" - $ref: "#/parameters/slugQuery" - $ref: "#/parameters/accountIdQuery" - $ref: "#/parameters/companyServiceIdQuery" responses: "200": $ref: "#/responses/CompanyServiceResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Get a list of company services tags: - CompanyServices post: description: Create a new CompanyService record operationId: postCompanyServices parameters: - $ref: "#/parameters/companyServiceRequest" responses: "200": $ref: "#/responses/CompanyServiceResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "409": $ref: "#/responses/Conflict" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Create a new CompanyService tags: - CompanyServices /companyproducts: delete: description: Delete CompanyProduct record operationId: deleteCompanyProduct parameters: - $ref: "#/parameters/companyProductIdQuery" responses: "200": $ref: "#/responses/DeleteResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Delete a CompanyProduct tags: - CompanyProducts get: description: Return a list of all available CompanyProducts operationId: getCompanyProducts parameters: - $ref: "#/parameters/limitQuery" - $ref: "#/parameters/slugQuery" - $ref: "#/parameters/offsetQuery" - $ref: "#/parameters/activeQuery" - $ref: "#/parameters/accountIdQuery" - $ref: "#/parameters/companyProductIdQuery" responses: "200": $ref: "#/responses/CompanyProductResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Get a list of companyproducts tags: - CompanyProducts post: description: CompanyProduct record to be added operationId: postCompanyProducts parameters: - $ref: "#/parameters/companyProductRequest" responses: "200": $ref: "#/responses/CompanyProductResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Add a new companyproduct to SalesforceDevops.net tags: - CompanyProducts put: description: Update companyproduct records operationId: putCompanyProduct parameters: - $ref: "#/parameters/companyProductRequest" responses: "200": $ref: "#/responses/CompanyProductResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Update a single companyproduct tags: - CompanyProducts /companyproductproposals: get: description: Return actor-owned proposals or the submitted tenant review queue operationId: getCompanyProductProposals parameters: - $ref: "#/parameters/companyProductProposalViewQuery" - $ref: "#/parameters/companyProductIdQuery" - $ref: "#/parameters/limitQuery" - $ref: "#/parameters/offsetQuery" responses: "200": description: Governed proposal collection schema: $ref: "#/definitions/CompanyProductProposalResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] kvSessionCookie: [] summary: List CompanyProduct proposals tags: - CompanyProductProposals post: description: Create a draft proposal without changing the authoritative CompanyProduct operationId: postCompanyProductProposal parameters: - $ref: "#/parameters/companyProductProposalRequest" responses: "201": description: Draft proposal created schema: $ref: "#/definitions/CompanyProductProposal" "400": $ref: "#/responses/UnprocessableEntity" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "409": description: Product version or idempotency conflict schema: $ref: "#/definitions/Error" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] kvSessionCookie: [] summary: Create a CompanyProduct draft proposal tags: - CompanyProductProposals /companyproductproposals/{companyProductProposalId}: get: description: Return one visible CompanyProduct proposal operationId: getCompanyProductProposal parameters: - $ref: "#/parameters/companyProductProposalIdPath" responses: "200": description: Governed proposal detail schema: $ref: "#/definitions/CompanyProductProposal" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] kvSessionCookie: [] summary: Get a CompanyProduct proposal tags: - CompanyProductProposals /companyproductproposals/{companyProductProposalId}/submit: post: description: Submit an actor-owned draft without changing the authoritative CompanyProduct operationId: submitCompanyProductProposal parameters: - $ref: "#/parameters/companyProductProposalIdPath" - $ref: "#/parameters/companyProductProposalSubmitRequest" responses: "200": description: Proposal submitted for review schema: $ref: "#/definitions/CompanyProductProposal" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "409": description: Proposal state or optimistic version conflict schema: $ref: "#/definitions/Error" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] kvSessionCookie: [] summary: Submit a CompanyProduct proposal tags: - CompanyProductProposals /companyproductproposals/{companyProductProposalId}/review: post: description: Decide every field on a submitted proposal without changing the authoritative CompanyProduct operationId: reviewCompanyProductProposal parameters: - $ref: "#/parameters/companyProductProposalIdPath" - $ref: "#/parameters/companyProductProposalReviewRequest" responses: "200": description: Proposal review completed schema: $ref: "#/definitions/CompanyProductProposal" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "409": description: Proposal state or optimistic version conflict schema: $ref: "#/definitions/Error" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] kvSessionCookie: [] summary: Review a CompanyProduct proposal tags: - CompanyProductProposals /factors: delete: description: Delete Factor record operationId: deleteFactor parameters: - $ref: "#/parameters/factorIdQuery" responses: "200": $ref: "#/responses/DeleteResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Delete An Factor tags: - Factors get: description: Return a list of all available Factors operationId: getFactors parameters: - $ref: "#/parameters/limitQuery" - $ref: "#/parameters/nameQuery" - $ref: "#/parameters/offsetQuery" - $ref: "#/parameters/activeQuery" - $ref: "#/parameters/factorIdQuery" responses: "200": $ref: "#/responses/FactorResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Get a list of factors tags: - Factors post: description: Factor records to be added operationId: postFactors parameters: - $ref: "#/parameters/factorRequest" responses: "200": $ref: "#/responses/FactorResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] kvSessionCookie: [] summary: Add a new factor tags: - Factors put: description: Update factor records operationId: putFactor parameters: - $ref: "#/parameters/factorRequest" responses: "200": $ref: "#/responses/FactorResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "409": description: Optimistic version conflict schema: $ref: "#/definitions/Error" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] kvSessionCookie: [] summary: Update factor records tags: - Factors /financialstatements: delete: description: Delete FinancialStatement record operationId: deleteFinancialStatement parameters: - $ref: "#/parameters/financialStatementIdQuery" responses: "200": $ref: "#/responses/DeleteResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Delete An FinancialStatement tags: - FinancialStatements get: description: Return a list of all available FinancialStatements operationId: getFinancialStatements parameters: - $ref: "#/parameters/limitQuery" - $ref: "#/parameters/offsetQuery" - $ref: "#/parameters/activeQuery" - $ref: "#/parameters/accountIdQuery" - $ref: "#/parameters/financialStatementIdQuery" responses: "200": $ref: "#/responses/FinancialStatementResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Get a list of financialStatements tags: - FinancialStatements post: description: FinancialStatement records to be added operationId: postFinancialStatements parameters: - $ref: "#/parameters/financialStatementRequest" responses: "200": $ref: "#/responses/FinancialStatementResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] kvSessionCookie: [] summary: Add a new financial statement tags: - FinancialStatements put: description: Update financialStatement records operationId: putFinancialStatement parameters: - $ref: "#/parameters/financialStatementRequest" responses: "200": $ref: "#/responses/FinancialStatementResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "409": description: Optimistic version conflict schema: $ref: "#/definitions/Error" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] kvSessionCookie: [] summary: Update financialStatement records tags: - FinancialStatements /industries: get: description: Retrieve the shared global Industry taxonomy. Requires research:industry:read on a tenant-bound service principal; the tenant authorizes the caller but does not own taxonomy rows. operationId: getIndustries parameters: - $ref: "#/parameters/limitQuery" - $ref: "#/parameters/slugQuery" - $ref: "#/parameters/offsetQuery" - $ref: "#/parameters/industryIdQuery" - $ref: "#/parameters/productCategoryQuery" - $ref: "#/parameters/serviceCategoryQuery" 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 post: description: Add exactly one shared global Industry with server-owned ID and audit fields. Requires research:industry:create plus an active Owner or Manager session in the machine tenant. 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: [] kvSessionCookie: [] summary: Add a shared Industry taxonomy record tags: - Industry put: description: Optimistically replace the editable fields of exactly one shared global Industry. ID and LastModifiedDate form the compare-and-swap contract; audit fields are server-owned. Requires research:industry:update plus an active Owner or Manager session in the machine tenant. operationId: putIndustries parameters: - $ref: "#/parameters/industryRequest" responses: "200": $ref: "#/responses/IndustryResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "409": $ref: "#/responses/Conflict" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] kvSessionCookie: [] summary: Update a shared Industry taxonomy record tags: - Industry /industrycompanies: delete: description: Reserved compatibility operation. Runtime removal remains disabled until a recoverable relationship-event or tombstone contract exists. operationId: deleteIndustryCompany parameters: - $ref: "#/parameters/industryCompanyIdQuery" responses: "200": $ref: "#/responses/DeleteResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Delete An IndustryCompany tags: - IndustryCompanies get: description: Return IndustryCompany links attributed to the caller tenant through crm.account. Requires research:industry-company:read. operationId: getIndustryCompanies parameters: - $ref: "#/parameters/limitQuery" - $ref: "#/parameters/nameQuery" - $ref: "#/parameters/offsetQuery" - $ref: "#/parameters/activeQuery" - $ref: "#/parameters/industryCompanyIdQuery" - $ref: "#/parameters/companyIdQuery" responses: "200": $ref: "#/responses/IndustryCompanyResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Get a list of industrycompanies tags: - IndustryCompanies post: description: Idempotently add exactly one IndustryCompany link attributed through the referenced CRM Account tenant. ID and audit fields are server-owned. Requires research:industry-company:create plus an active Owner or Manager session. operationId: postIndustryCompanies parameters: - $ref: "#/parameters/industryCompanyRequest" responses: "200": $ref: "#/responses/IndustryCompanyResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] kvSessionCookie: [] summary: Add a tenant-attributed IndustryCompany link tags: - IndustryCompanies /industryservices: delete: description: Reserved compatibility operation. Runtime removal remains disabled until a recoverable relationship-event or tombstone contract exists. operationId: deleteIndustryService parameters: - $ref: "#/parameters/limitQuery" - $ref: "#/parameters/offsetQuery" - $ref: "#/parameters/industryServiceIdQuery" responses: "200": $ref: "#/responses/DeleteResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Delete An IndustryService tags: - IndustryServices get: description: Return IndustryService links attributed to the caller tenant through CompanyService and crm.account. Requires research:industry-service:read. operationId: getIndustryServices parameters: - $ref: "#/parameters/limitQuery" - $ref: "#/parameters/offsetQuery" - $ref: "#/parameters/industryServiceIdQuery" responses: "200": $ref: "#/responses/IndustryServiceResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Get a list of industryservices tags: - IndustryServices post: description: Idempotently add exactly one tenant-attributed IndustryService link. ID and audit fields are server-owned. Requires research:industry-service:create plus an active Owner or Manager session. operationId: postIndustryServices parameters: - $ref: "#/parameters/industryServiceRequest" responses: "200": $ref: "#/responses/IndustryServiceResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] kvSessionCookie: [] summary: Add a tenant-attributed IndustryService link tags: - IndustryServices /industryproducts: delete: description: Reserved compatibility operation. Runtime removal remains disabled until a recoverable relationship-event or tombstone contract exists. operationId: deleteIndustryProduct parameters: - $ref: "#/parameters/limitQuery" - $ref: "#/parameters/offsetQuery" - $ref: "#/parameters/industryProductIdQuery" responses: "200": $ref: "#/responses/DeleteResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Delete An IndustryProduct tags: - IndustryProducts get: description: Return IndustryProduct links attributed to the caller tenant through CompanyProduct and crm.account. Requires research:industry-product:read. operationId: getIndustryProducts parameters: - $ref: "#/parameters/limitQuery" - $ref: "#/parameters/nameQuery" - $ref: "#/parameters/offsetQuery" - $ref: "#/parameters/activeQuery" - $ref: "#/parameters/industryProductIdQuery" responses: "200": $ref: "#/responses/IndustryProductResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Get a list of industryProducts tags: - IndustryProducts post: description: Idempotently add exactly one tenant-attributed IndustryProduct link. ID and audit fields are server-owned. Requires research:industry-product:create plus an active Owner or Manager session. operationId: postIndustryProducts parameters: - $ref: "#/parameters/industryProductRequest" responses: "200": $ref: "#/responses/IndustryProductResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] kvSessionCookie: [] summary: Add a tenant-attributed IndustryProduct link tags: - IndustryProducts /observations: delete: description: Delete Observation record operationId: deleteObservation parameters: - $ref: "#/parameters/observationIdQuery" responses: "200": $ref: "#/responses/DeleteResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Delete An Observation tags: - Observations get: description: Return a list of all available Observations operationId: getObservations parameters: - $ref: "#/parameters/limitQuery" - $ref: "#/parameters/offsetQuery" - $ref: "#/parameters/activeQuery" - $ref: "#/parameters/observationIdQuery" responses: "200": $ref: "#/responses/ObservationResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] summary: Get a list of observations tags: - Observations post: description: Observation record to be added operationId: postObservations parameters: - $ref: "#/parameters/observationRequest" - $ref: "#/parameters/limitQuery" - $ref: "#/parameters/offsetQuery" responses: "200": $ref: "#/responses/ObservationResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] kvSessionCookie: [] summary: Add a new observation tags: - Observations put: description: Update a single observation specified by observationId operationId: putObservation parameters: - $ref: "#/parameters/observationRequest" responses: "200": $ref: "#/responses/ObservationResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "409": description: Optimistic version conflict schema: $ref: "#/definitions/Error" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] kvSessionCookie: [] summary: Update a single observation tags: - Observations /topics: get: description: Retrieve Topic records from the microservice operationId: getTopics parameters: - $ref: "#/parameters/limitQuery" - $ref: "#/parameters/offsetQuery" - $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: - Topics post: description: Add new topics 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: [] kvSessionCookie: [] summary: Add new topics tags: - Topics put: description: Update one Topic record using optimistic concurrency operationId: putTopic parameters: - $ref: "#/parameters/topicRequest" responses: "200": $ref: "#/responses/TopicResponse" "401": $ref: "#/responses/Unauthorized" "403": $ref: "#/responses/AccessForbidden" "404": $ref: "#/responses/NotFound" "409": description: Optimistic version conflict schema: $ref: "#/definitions/Error" "422": $ref: "#/responses/UnprocessableEntity" "500": $ref: "#/responses/ServerError" security: - ApiKeyAuth: [] kvSessionCookie: [] summary: Update one Topic record tags: - Topics definitions: Address: $ref: "../../lib/swagger/defs/address.yaml#/Address" CompanyCategory: properties: CloudType: description: The Type of Cloud Company type: string Count: description: The number of companies type: number type: object CompanyCategoryResponse: description: An array of CompanyCategory objects produced in response to a request properties: Data: items: $ref: "#/definitions/CompanyCategory" type: array Meta: $ref: "#/definitions/ResponseMeta" type: object CompanyProductRequest: description: An array of CompanyProduct objects submitted for processing properties: Data: items: $ref: "../../lib/swagger/defs/company-product.yaml#/CompanyProduct" type: array type: object CompanyProductProposalField: description: One governed CompanyProduct field change required: - FieldName - ProposedValue properties: FieldName: type: string enum: - description - enrichmentstatus - fulldescription - imagealttext - imageurl - logo - name - slug - tagline - url ProposedValue: description: Proposed JSON value. The server captures the current value. type: string maxLength: 20000 CurrentValue: description: Current authoritative value captured when the proposal was created type: string x-nullable: true Decision: type: string enum: [pending, accepted, rejected] DecidedByID: type: string format: uuid x-nullable: true DecidedAt: type: string format: date-time x-nullable: true DecisionReason: type: string maxLength: 1000 x-nullable: true type: object CompanyProductProposalRequest: description: Update-only first slice; tenant, actor, client, status, and audit fields are server-owned required: - CompanyProductID - BaseVersion - IdempotencyKey - Fields properties: CompanyProductID: type: string format: uuid BaseVersion: type: string format: date-time IdempotencyKey: type: string minLength: 8 maxLength: 120 pattern: "^[A-Za-z0-9._:-]+$" Fields: type: array minItems: 1 maxItems: 10 uniqueItems: true items: $ref: "#/definitions/CompanyProductProposalField" additionalProperties: false type: object CompanyProductProposal: description: Server-owned draft proposal; it does not imply approval or authoritative publication required: - ID - TenantID - CompanyProductID - Operation - Status - BaseVersion - ProposedByID - ClientPrincipalKey - CreatedDate - LastModifiedDate - Fields properties: ID: type: string format: uuid TenantID: type: string format: uuid CompanyProductID: type: string format: uuid CompanyProductName: type: string x-nullable: true Operation: type: string enum: [update] Status: type: string enum: [draft, submitted, approved, rejected] BaseVersion: type: string format: date-time ProposedByID: type: string format: uuid ClientPrincipalKey: type: string CreatedDate: type: string format: date-time LastModifiedDate: type: string format: date-time SubmittedAt: type: string format: date-time x-nullable: true ReviewedByID: type: string format: uuid x-nullable: true ReviewedAt: type: string format: date-time x-nullable: true ReviewReason: type: string maxLength: 1000 x-nullable: true Fields: type: array items: $ref: "#/definitions/CompanyProductProposalField" type: object CompanyProductProposalResponse: description: A bounded collection of visible CompanyProduct proposals required: - Data properties: Data: type: array items: $ref: "#/definitions/CompanyProductProposal" type: object CompanyProductProposalSubmitRequest: description: Optimistic submission input; lifecycle and attribution remain server-owned required: - ExpectedLastModifiedDate properties: ExpectedLastModifiedDate: type: string format: date-time additionalProperties: false type: object CompanyProductProposalFieldDecision: description: One complete reviewer decision for a proposed field required: - FieldName - Decision properties: FieldName: type: string enum: - description - enrichmentstatus - fulldescription - imagealttext - imageurl - logo - name - slug - tagline - url Decision: type: string enum: [accepted, rejected] DecisionReason: type: string maxLength: 1000 additionalProperties: false type: object CompanyProductProposalReviewRequest: description: Complete atomic field review; rejected fields require a decision reason required: - ExpectedLastModifiedDate - ReviewReason - Fields properties: ExpectedLastModifiedDate: type: string format: date-time ReviewReason: type: string minLength: 1 maxLength: 1000 Fields: type: array minItems: 1 maxItems: 10 uniqueItems: true items: $ref: "#/definitions/CompanyProductProposalFieldDecision" additionalProperties: false type: object CompanyProductResponse: description: An array of CompanyProduct objects produced in response to a request properties: Data: items: $ref: "../../lib/swagger/defs/company-product.yaml#/CompanyProduct" type: array Meta: $ref: "#/definitions/ResponseMeta" type: object CompanyServiceRequest: description: An array of CompanyService objects submitted for processing properties: Data: items: $ref: "../../lib/swagger/defs/company-service.yaml#/CompanyService" type: array type: object CompanyServiceResponse: description: An array of CompanyService objects produced in response to a request properties: Data: items: $ref: "../../lib/swagger/defs/company-service.yaml#/CompanyService" type: array Meta: $ref: "#/definitions/ResponseMeta" type: object DeleteResponse: properties: Data: items: $ref: "#/definitions/Message" type: array Meta: $ref: "#/definitions/ResponseMeta" type: object Error: $ref: ../../lib/swagger/defs/error.yaml#/Error FactorRequest: description: An array of Factor objects submitted for processing properties: Data: items: $ref: "../../lib/swagger/defs/factor.yaml#/Factor" type: array type: object FactorResponse: description: An array of Factor objects produced in response to a request properties: Data: items: $ref: "../../lib/swagger/defs/factor.yaml#/Factor" type: array Meta: $ref: "#/definitions/ResponseMeta" type: object FinancialStatementRequest: description: An array of FinancialStatement objects submitted for processing properties: Data: items: $ref: "../../lib/swagger/defs/financial-statement.yaml#/FinancialStatement" type: array type: object FinancialStatementResponse: description: An array of FinancialStatement objects produced in response to a request properties: Data: items: $ref: "../../lib/swagger/defs/financial-statement.yaml#/FinancialStatement" type: array Meta: $ref: "#/definitions/ResponseMeta" type: object IndustryCompanyRequest: description: An array of IndustryCompany objects submitted for processing properties: Data: items: $ref: "../../lib/swagger/defs/industry-company.yaml#/IndustryCompany" type: array type: object IndustryCompanyResponse: description: An array of IndustryCompany objects produced in response to a request properties: Data: items: $ref: "../../lib/swagger/defs/industry-company.yaml#/IndustryCompany" type: array Meta: $ref: "#/definitions/ResponseMeta" type: object IndustryProductRequest: description: An array of IndustryProduct objects submitted for processing properties: Data: items: $ref: "../../lib/swagger/defs/industry-product.yaml#/IndustryProduct" type: array type: object IndustryProductResponse: description: An array of IndustryProduct objects produced in response to a request properties: Data: items: $ref: "../../lib/swagger/defs/industry-product.yaml#/IndustryProduct" type: array Meta: $ref: "#/definitions/ResponseMeta" type: object IndustryServiceRequest: description: An array of IndustryService objects submitted for processing properties: Data: items: $ref: "../../lib/swagger/defs/industry-service.yaml#/IndustryService" type: array type: object IndustryServiceResponse: description: An array of IndustryService objects produced in response to a request properties: Data: items: $ref: "../../lib/swagger/defs/industry-service.yaml#/IndustryService" type: array Meta: $ref: "#/definitions/ResponseMeta" type: object IndustryRequest: description: An array of Industry objects submitted for processing properties: Data: items: $ref: "../../lib/swagger/defs/industry.yaml#/Industry" type: array type: object IndustryResponse: description: An array of Industry objects produced in response to a request properties: Data: items: $ref: "../../lib/swagger/defs/industry.yaml#/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 ObservationRequest: description: An array of Observation objects submitted for processing properties: Data: items: $ref: "../../lib/swagger/defs/observation.yaml#/Observation" type: array type: object ObservationResponse: description: An array of Observation objects produced in response to a request properties: Data: items: $ref: "../../lib/swagger/defs/observation.yaml#/Observation" type: array Meta: $ref: "#/definitions/ResponseMeta" 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: ExternalAccount: description: Account Number of the Reseller or OEM type: string required: - ExternalAccount 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 ExternalAccount: description: Account Number used for recording transactions type: string type: object TopicRequest: description: An array of Topic objects submitted for processing properties: Data: items: $ref: "../../lib/swagger/defs/topic.yaml#/Topic" type: array type: object TopicResponse: description: An array of Topic objects produced in response to a request properties: Data: items: $ref: "../../lib/swagger/defs/topic.yaml#/Topic" type: array Meta: $ref: "#/definitions/ResponseMeta" type: object