openapi: 3.2.0 info: title: Operations Hub Misc API version: 0.1.1 description: '' servers: [] tags: - name: Misc paths: /api/services/line-items: get: operationId: core_endpoints_services_get_service_line_items summary: Get Service Line Items parameters: - in: query name: category schema: anyOf: - type: string - type: 'null' description: Filter by service category name. title: Category required: false description: Filter by service category name. - in: query name: group schema: anyOf: - type: string - type: 'null' description: Filter by service group name. title: Group required: false description: Filter by service group name. - in: query name: service schema: anyOf: - type: boolean - type: 'null' description: Filter by whether item is reported as service. title: Service required: false description: Filter by whether item is reported as service. - in: query name: rat schema: anyOf: - type: boolean - type: 'null' description: Filter by whether item is provided by RAT. title: Rat required: false description: Filter by whether item is provided by RAT. responses: '200': description: OK content: application/json: schema: items: $ref: '#/components/schemas/ServiceLineItem' title: Response type: array '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Error' description: Return all service line items in unified format. tags: - Misc security: - APIKeyAuth: [] - CookieAuth: [] /api/services/line-items/{code}: get: operationId: core_endpoints_services_get_service_line_item summary: Get Service Line Item parameters: - in: path name: code schema: title: Code type: string required: true responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/ServiceLineItemFull' '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Error' description: Return a single service line item by code. tags: - Misc security: - APIKeyAuth: [] - CookieAuth: [] /api/countries: get: operationId: countries_api_get_supported_countries summary: Get Supported Countries parameters: [] responses: '200': description: OK content: application/json: schema: items: $ref: '#/components/schemas/Country' title: Response type: array '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Error' description: 'Return list of supported countries with their alpha-2 codes. DEPRECATED: This endpoint is deprecated. Use /core/v1/countries instead. Returns only enabled countries from the core.Country table.' tags: - Misc deprecated: true security: - APIKeyAuth: [] - CookieAuth: [] /api/customers: get: operationId: customers_api_get_customers summary: Get Customers parameters: [] responses: '200': description: OK content: application/json: schema: items: $ref: '#/components/schemas/Customer' title: Response type: array '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Error' description: 'Return local customers linked to NetSuite. DEPRECATED: Use /core/v1/customers instead.' tags: - Misc deprecated: true security: - APIKeyAuth: [] - CookieAuth: [] post: operationId: customers_api_create_customer summary: Create Customer parameters: [] responses: '200': description: OK description: 'REMOVED: use POST /core/v1/customers instead. It created a NetSuite customer with no local row — a guaranteed unlinked duplicate. 410-gated; the read endpoints above remain.' tags: - Misc deprecated: true security: - APIKeyAuth: [] - CookieAuth: [] /api/customers/subsidiaries/: get: operationId: customers_api_get_subsidiaries summary: Get Subsidiaries parameters: [] responses: '200': description: OK content: application/json: schema: items: $ref: '#/components/schemas/Subsidiary' title: Response type: array '400': description: Bad Request content: application/json: schema: $ref: '#/components/schemas/Error' description: 'Get subsidiaries from NetSuite. DEPRECATED: Use /core/v1/customers instead.' tags: - Misc deprecated: true security: - APIKeyAuth: [] - CookieAuth: [] /api/integrations/vestas-cir/v1/{service_order_line_id}/validate: get: operationId: core_endpoints_vestas_cir_validate_vestas_cir summary: Validate SOL data before CIR submission parameters: - in: path name: service_order_line_id schema: title: Service Order Line Id type: integer required: true responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/CIRValidationResultSchema' tags: - Misc security: - APIKeyAuth: [] - CookieAuth: [] /api/integrations/vestas-cir/v1/{service_order_line_id}/status: get: operationId: core_endpoints_vestas_cir_get_cir_submission_status summary: Get latest CIR submission status for a SOL parameters: - in: path name: service_order_line_id schema: title: Service Order Line Id type: integer required: true responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/CIRSubmissionStatusSchema' tags: - Misc security: - APIKeyAuth: [] - CookieAuth: [] /api/integrations/vestas-cir/v1/{service_order_line_id}: post: operationId: core_endpoints_vestas_cir_submit_vestas_cir summary: Submit service order line to Vestas CIR parameters: - in: path name: service_order_line_id schema: title: Service Order Line Id type: integer required: true responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/CIRSubmitResponseSchema' tags: - Misc security: - APIKeyAuth: [] - CookieAuth: [] /api/integrations/vestas-cir/v1/{service_order_line_id}/data: get: operationId: core_endpoints_vestas_cir_get_sol_data summary: Fetch all files associated with a given service order line ID parameters: - in: path name: service_order_line_id schema: title: Service Order Line Id type: integer required: true responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/VestasCIRDataSchema' tags: - Misc security: - APIKeyAuth: [] - CookieAuth: [] /api/integrations/nordex-cir/v1/reports/{incident_number}/data: get: operationId: core_endpoints_nordex_cir_get_nordex_cir_report_data summary: Fetch the raw inspection data behind one Nordex report parameters: - in: path name: incident_number schema: title: Incident Number type: string required: true responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/NordexCIRDataSchema' description: '404 when no active, non-cancelled Nordex service order line carries the incident number. 422 when a line belongs to a non-Nordex customer, is not an IIN service, or the lines span more than one customer or turbine.' tags: - Misc security: - APIKeyAuth: [] - CookieAuth: [] components: schemas: NordexActivitySchema: additionalProperties: false properties: id: title: Id type: integer workorder_id: anyOf: - type: integer - type: 'null' title: Workorder Id activity_description: anyOf: - type: string - type: 'null' description: Free text, e.g. 'WTG off' or 'WTG off (for LER)'. title: Activity Description start_datetime: anyOf: - format: date-time type: string - type: 'null' description: Timezone-aware UTC instant. Localise it with 'turbine.location.timezone'. title: Start Datetime end_datetime: anyOf: - format: date-time type: string - type: 'null' title: End Datetime status: anyOf: - type: string - type: 'null' description: COMPLETED or IN_PROGRESS. Planned, cancelled and failed activities are not returned. title: Status required: - id - workorder_id - activity_description - start_datetime - end_datetime - status title: NordexActivitySchema type: object Country: additionalProperties: false description: Schema for Country. properties: code: description: Country code in alpha-2. title: Code type: string name: description: Human readable country name. title: Name type: string region: anyOf: - type: string - type: 'null' description: Custom region name a country belongs to. title: Region required: - code - name title: Country type: object Customer: additionalProperties: false description: Schema for customer. properties: id: description: NetSuite ID for customer title: Id type: integer alt_id: anyOf: - type: string - type: 'null' description: Alterative (more human-friendly) NetSuite, e.g. `CUST0008` title: Alt Id name: anyOf: - type: string - type: 'null' description: Name title: Name currency: anyOf: - type: string - type: 'null' description: Currency title: Currency business_id: anyOf: - type: string - type: 'null' description: Business ID title: Business Id address_text: anyOf: - type: string - type: 'null' description: Full address in single text/string title: Address Text required: - id title: Customer type: object ServiceLineItemFull: additionalProperties: false description: Full schema including all available fields for unified service line item. properties: code: description: Service item code. title: Code type: string line_item: description: Service item description. title: Line Item type: string category: description: Service category name. title: Category type: string service_group: description: Service group name. title: Service Group type: string rat_team: description: Whether service is provided by RAT. title: Rat Team type: boolean reported_as_service: description: Whether the item is a service. title: Reported As Service type: boolean unit_types: description: List of pricing unit names compatible with this service item. items: type: string title: Unit Types type: array required: - code - line_item - category - service_group - rat_team - reported_as_service - unit_types title: ServiceLineItemFull type: object NordexServiceOrderLineSchema: additionalProperties: false properties: number: anyOf: - type: string - type: 'null' title: Number service_code: anyOf: - type: string - type: 'null' description: Always an IIN code, e.g. IIN-ONS; other services are refused. title: Service Code status: anyOf: - type: string - type: 'null' description: NOT_STARTED, IN_PROGRESS, FIELD_COMPLETED or COMPLETED. Cancelled lines are not returned. title: Status turbine_component_id: anyOf: - type: integer - type: 'null' description: The blade this line covers, or null for a whole-turbine line. title: Turbine Component Id custom_values: description: The line's customer-defined fields, including the incident number and the purchase order id. items: $ref: '#/components/schemas/NordexCustomValueSchema' title: Custom Values type: array purchase_order_number: anyOf: - type: string - type: 'null' description: Current order number of the purchase order the line's 'Nordex Purchase Order' value points at, when that order is linked to the line's project; otherwise null. title: Purchase Order Number workorders: items: $ref: '#/components/schemas/NordexWorkorderSchema' title: Workorders type: array activities: items: $ref: '#/components/schemas/NordexActivitySchema' title: Activities type: array activity_resources: items: $ref: '#/components/schemas/NordexActivityResourceSchema' title: Activity Resources type: array anomalies: description: Every anomaly recorded on the turbine's blades by this line, damage and blade-ID photos alike. AI detections are flagged, not filtered. items: $ref: '#/components/schemas/NordexAnomalySchema' title: Anomalies type: array required: - number - service_code - status - turbine_component_id - custom_values - purchase_order_number - workorders - activities - activity_resources - anomalies title: NordexServiceOrderLineSchema type: object ServiceLineItem: additionalProperties: false description: Schema for unified service line item. properties: code: description: Service item code. title: Code type: string line_item: description: Service item description. title: Line Item type: string category: description: Service category name. title: Category type: string service_group: description: Service group name. title: Service Group type: string rat_team: description: Whether service is provided by RAT. title: Rat Team type: boolean reported_as_service: description: Whether the item is a service. title: Reported As Service type: boolean required: - code - line_item - category - service_group - rat_team - reported_as_service title: ServiceLineItem type: object ErrorCode: description: Error codes for API errors. enum: - validation - server - auth - unknown - external - generic title: ErrorCode type: string NordexComponentModelSchema: additionalProperties: false properties: name: anyOf: - type: string - type: 'null' description: Blade model as stored, e.g. 'NR 74.5' or 'TPI 81.5'. title: Name blade_type: anyOf: - type: string - type: 'null' description: Shear-web configuration of the model. title: Blade Type required: - name - blade_type title: NordexComponentModelSchema type: object NordexTurbineSchema: additionalProperties: false properties: name: anyOf: - type: string - type: 'null' title: Name manufacturer_number: anyOf: - type: string - type: 'null' description: The Nordex turbine ID as stored. Never derived from 'name', which is the operator's label. title: Manufacturer Number location: $ref: '#/components/schemas/NordexLocationSchema' required: - name - manufacturer_number - location title: NordexTurbineSchema type: object AnomalySchema: additionalProperties: false properties: id: title: Id type: integer blade_id: title: Blade Id type: integer severity: enum: - 0 - 1 - 2 - 3 - 4 - 5 title: Severity type: integer width: anyOf: - type: integer - type: 'null' title: Width max_distance: anyOf: - type: integer - type: 'null' title: Max Distance placement: enum: - INTERNAL - EXTERNAL title: Placement type: string side: anyOf: - type: string - type: 'null' title: Side rib: anyOf: - type: string - type: 'null' title: Rib distance_to_root: title: Distance To Root type: number files: anyOf: - items: $ref: '#/components/schemas/AnomalyFileSchema' type: array - type: 'null' description: List of files associated with the anomaly title: Files coordinates: anyOf: - items: items: type: integer type: array type: array - type: 'null' description: 'List of coordinates representing the anomaly''s location on the blade. Format: [[x1, y1], [x2, y2], ...]' title: Coordinates anomaly_major_component_id: anyOf: - type: integer - type: 'null' title: Anomaly Major Component Id anomaly_major_component_name: anyOf: - type: string - type: 'null' title: Anomaly Major Component Name anomaly_component_id: anyOf: - type: integer - type: 'null' title: Anomaly Component Id anomaly_component_name: anyOf: - type: string - type: 'null' title: Anomaly Component Name anomaly_sub_component_id: anyOf: - type: integer - type: 'null' title: Anomaly Sub Component Id anomaly_sub_component_name: anyOf: - type: string - type: 'null' title: Anomaly Sub Component Name anomaly_type_id: anyOf: - type: integer - type: 'null' title: Anomaly Type Id anomaly_type_name: anyOf: - type: string - type: 'null' title: Anomaly Type Name anomaly_sub_type_id: anyOf: - type: integer - type: 'null' title: Anomaly Sub Type Id anomaly_sub_type_name: anyOf: - type: string - type: 'null' title: Anomaly Sub Type Name anomaly_material_id: anyOf: - type: integer - type: 'null' title: Anomaly Material Id anomaly_material_name: anyOf: - type: string - type: 'null' title: Anomaly Material Name cim_case_number: title: Cim Case Number type: integer registered_by: $ref: '#/components/schemas/AnomalyRegisteredByType' description: 'Who registered the anomaly: AERONES (operator), AI or CUSTOMER' ai_status: anyOf: - $ref: '#/components/schemas/AnomalyAIStatus' - type: 'null' description: Reviewer state of the linked AI detection; null when the anomaly has no AI record required: - id - blade_id - severity - width - max_distance - placement - side - rib - distance_to_root - anomaly_major_component_id - anomaly_major_component_name - anomaly_component_id - anomaly_component_name - anomaly_sub_component_id - anomaly_sub_component_name - anomaly_type_id - anomaly_type_name - anomaly_sub_type_id - anomaly_sub_type_name - anomaly_material_id - anomaly_material_name - cim_case_number - registered_by title: AnomalySchema type: object AnomalyAIStatus: description: AI status for anomalies. enum: - NEW - QUALIFIED - UNQUALIFIED - CONFIRMED - REJECTED - DUPLICATE title: AnomalyAIStatus type: string NordexAnomalyFileSchema: additionalProperties: false properties: id: title: Id type: integer url: anyOf: - type: string - type: 'null' title: Url type: anyOf: - type: string - type: 'null' title: Type original_name: anyOf: - type: string - type: 'null' description: Server-rendered cross-section diagrams are named 'cross_section_image*' and are not inspection photos. title: Original Name required: - id - url - type - original_name title: NordexAnomalyFileSchema type: object NordexCustomValueSchema: additionalProperties: false properties: id: title: Id type: integer custom_field_id: title: Custom Field Id type: integer custom_field_type: description: TEXT, NUMBER, DATE, BOOLEAN or SELECT. title: Custom Field Type type: string custom_field_name: description: The field's name as the customer defined it, e.g. 'Profile depth from (%)' on an anomaly or 'Nordex Incident Number' on a line. title: Custom Field Name type: string value: anyOf: - type: string - type: 'null' description: Always a string, whatever the field's type. title: Value required: - id - custom_field_id - custom_field_type - custom_field_name - value title: NordexCustomValueSchema type: object BladeSchema: additionalProperties: false properties: id: title: Id type: integer position: description: Position of the blade on the turbine enum: - A - B - C title: Position type: string serial_number: description: Serial number of the blade title: Serial Number type: string manufacturer: anyOf: - type: string - type: 'null' description: Manufacturer of the blade title: Manufacturer item_number: anyOf: - type: string - type: 'null' description: Item number of the blade title: Item Number blade_id_image_url: anyOf: - type: string - type: 'null' description: URL of the blade identification image title: Blade Id Image Url root_chamber_photos: description: Hand-taken root chamber photos (CIR photo set 1), no offset applied — not anomaly-linked, sourced from VIS's ROOT_PHOTOS section. items: $ref: '#/components/schemas/BladePhotoSchema' title: Root Chamber Photos type: array ch2_photos: description: 'Hand-taken chamber 2 photos (CIR photo set 2), no offset applied — not anomaly-linked. The inspection crawler cannot physically enter Chamber 2, so the app never generates a dedicated section for it: technicians upload CH2 photos by hand together with root chamber photos into VIS''s ROOT_PHOTOS section, so this field mirrors root_chamber_photos exactly.' items: $ref: '#/components/schemas/BladePhotoSchema' title: Ch2 Photos type: array required: - id - position - serial_number - manufacturer - item_number - blade_id_image_url title: BladeSchema type: object CIRSubmissionStatusSchema: additionalProperties: false properties: has_been_submitted: title: Has Been Submitted type: boolean last_submission_id: anyOf: - type: integer - type: 'null' title: Last Submission Id last_submission_status: anyOf: - type: string - type: 'null' title: Last Submission Status last_submitted_at: anyOf: - type: string - type: 'null' title: Last Submitted At last_submitted_by_name: anyOf: - type: string - type: 'null' title: Last Submitted By Name error_message: anyOf: - type: string - type: 'null' title: Error Message last_successful_sync_at: anyOf: - type: string - type: 'null' title: Last Successful Sync At required: - has_been_submitted title: CIRSubmissionStatusSchema type: object NordexWorkorderSchema: additionalProperties: false properties: id: description: Join key for 'activities[].workorder_id'. title: Id type: integer type: anyOf: - type: string - type: 'null' description: ADMIN, FIELD_WORK, FIELD_OTHER, FIELD_SITE, OFFICE, DATA_UPLOAD or DATA_TRACKING. Cancelled workorders are not returned. title: Type required: - id - type title: NordexWorkorderSchema type: object NordexCIRDataSchema: additionalProperties: false properties: turbine: $ref: '#/components/schemas/NordexTurbineSchema' turbine_components: description: The turbine's blades, ordered A, B, C. items: $ref: '#/components/schemas/NordexTurbineComponentSchema' title: Turbine Components type: array service_order_lines: description: The IIN lines carrying this incident number, oldest first. items: $ref: '#/components/schemas/NordexServiceOrderLineSchema' title: Service Order Lines type: array required: - turbine - turbine_components - service_order_lines title: NordexCIRDataSchema type: object CIRValidationResultSchema: additionalProperties: false properties: is_valid: title: Is Valid type: boolean issues: items: $ref: '#/components/schemas/CIRValidationIssueSchema' title: Issues type: array required: - is_valid - issues title: CIRValidationResultSchema type: object NordexTurbineComponentSchema: additionalProperties: false properties: id: description: Join key for 'turbine_component_id' on service order lines and anomalies. title: Id type: integer position: anyOf: - type: string - type: 'null' title: Position manufacturer_serial_number: anyOf: - type: string - type: 'null' description: The OEM's serial as stamped on the blade, e.g. 'N2-742-0048-0013'; its fourth group is the blade set number. OpsHub's own 'serial_number' is the operator's label and is not sent. title: Manufacturer Serial Number manufacturer: anyOf: - type: string - type: 'null' title: Manufacturer manufacturer_component_model: anyOf: - $ref: '#/components/schemas/NordexComponentModelSchema' - type: 'null' required: - id - position - manufacturer_serial_number - manufacturer - manufacturer_component_model title: NordexTurbineComponentSchema type: object CIRSubmitResponseSchema: additionalProperties: false properties: submission_id: title: Submission Id type: integer status: title: Status type: string required: - submission_id - status title: CIRSubmitResponseSchema type: object TurbineSchema: additionalProperties: false properties: id: title: Id type: integer latitude: title: Latitude type: number longitude: title: Longitude type: number blades: items: $ref: '#/components/schemas/BladeSchema' title: Blades type: array serial_number: anyOf: - type: string - type: 'null' description: Serial number of the turbine title: Serial Number required: - id - latitude - longitude - blades - serial_number title: TurbineSchema type: object Error: additionalProperties: false description: Error response schema. properties: code: $ref: '#/components/schemas/ErrorCode' message: title: Message type: string required: - code - message title: Error type: object NordexIdNameSchema: additionalProperties: false properties: id: title: Id type: integer name: anyOf: - type: string - type: 'null' title: Name required: - id - name title: NordexIdNameSchema type: object NordexAnomalySchema: additionalProperties: false properties: id: title: Id type: integer turbine_component_id: anyOf: - type: integer - type: 'null' title: Turbine Component Id parent_type: anyOf: - $ref: '#/components/schemas/NordexIdNameSchema' - type: 'null' anomaly_type: anyOf: - $ref: '#/components/schemas/NordexIdNameSchema' - type: 'null' anomaly_sub_type: anyOf: - $ref: '#/components/schemas/NordexIdNameSchema' - type: 'null' anomaly_major_component: anyOf: - $ref: '#/components/schemas/NordexIdNameSchema' - type: 'null' anomaly_component: anyOf: - $ref: '#/components/schemas/NordexIdNameSchema' - type: 'null' anomaly_sub_component: anyOf: - $ref: '#/components/schemas/NordexIdNameSchema' - type: 'null' anomaly_material: anyOf: - $ref: '#/components/schemas/NordexIdNameSchema' - type: 'null' side: anyOf: - type: string - type: 'null' title: Side internal_external: anyOf: - type: string - type: 'null' title: Internal External rib: anyOf: - type: string - type: 'null' title: Rib distance_to_root: anyOf: - type: number - type: 'null' title: Distance To Root max_distance: anyOf: - type: number - type: 'null' title: Max Distance width: anyOf: - type: number - type: 'null' title: Width cross_section_distance: anyOf: - type: number - type: 'null' title: Cross Section Distance cross_section_chamber_distance: anyOf: - type: number - type: 'null' title: Cross Section Chamber Distance cross_section_side: anyOf: - type: string - type: 'null' title: Cross Section Side cross_section_type: anyOf: - type: string - type: 'null' title: Cross Section Type stage: anyOf: - type: string - type: 'null' title: Stage registered_by: anyOf: - type: string - type: 'null' description: AERONES, AI or CUSTOMER. title: Registered By ai_status: anyOf: - type: string - type: 'null' description: Null on an operator's entry. NEW means an unreviewed AI detection; take CONFIRMED only. title: Ai Status description: anyOf: - type: string - type: 'null' title: Description custom_values: items: $ref: '#/components/schemas/NordexCustomValueSchema' title: Custom Values type: array files: items: $ref: '#/components/schemas/NordexAnomalyFileSchema' title: Files type: array required: - id - turbine_component_id - parent_type - anomaly_type - anomaly_sub_type - anomaly_major_component - anomaly_component - anomaly_sub_component - anomaly_material - side - internal_external - rib - distance_to_root - max_distance - width - cross_section_distance - cross_section_chamber_distance - cross_section_side - cross_section_type - stage - registered_by - ai_status - description - custom_values - files title: NordexAnomalySchema type: object AnomalyRegisteredByType: description: Registered by classification for anomalies. enum: - AERONES - AI - CUSTOMER title: AnomalyRegisteredByType type: string BladePhotoSchema: additionalProperties: false properties: id: title: Id type: integer name: title: Name type: string cdn_base_url: anyOf: - type: string - type: 'null' description: 'Base CDN URL of the directory holding this photo — same convention as the VIS inspection payload: build the final URL as f''{cdn_base_url}/{percent_encoded(name)}''.' title: Cdn Base Url required: - id - name - cdn_base_url title: BladePhotoSchema type: object NordexActivityResourceSchema: additionalProperties: false properties: activity_id: description: Join key for 'activities[].id'. title: Activity Id type: integer full_name: anyOf: - type: string - type: 'null' title: Full Name resource_type: anyOf: - type: string - type: 'null' description: TECHNICIAN or ROBOT. title: Resource Type is_lead: title: Is Lead type: boolean required: - activity_id - full_name - resource_type - is_lead title: NordexActivityResourceSchema type: object CIRValidationIssueSchema: additionalProperties: false properties: anomaly_id: title: Anomaly Id type: integer blade_position: anyOf: - type: string - type: 'null' title: Blade Position blade_id: title: Blade Id type: integer missing_fields: items: type: string title: Missing Fields type: array required: - anomaly_id - blade_position - blade_id - missing_fields title: CIRValidationIssueSchema type: object NordexLocationSchema: additionalProperties: false properties: timezone: description: IANA name of the wind park's timezone, e.g. 'America/Chicago'. Localise every activity datetime with it. The request is refused when the park has none. title: Timezone type: string required: - timezone title: NordexLocationSchema type: object VestasCIRDataSchema: additionalProperties: false properties: service_order_line_id: title: Service Order Line Id type: integer turbine: $ref: '#/components/schemas/TurbineSchema' anomalies: items: $ref: '#/components/schemas/AnomalySchema' title: Anomalies type: array inspection_date: anyOf: - format: date-time type: string - type: 'null' title: Inspection Date is_annual_inspection: anyOf: - type: boolean - type: 'null' title: Is Annual Inspection work_order_number: anyOf: - type: string - type: 'null' title: Work Order Number required: - service_order_line_id - turbine - anomalies - inspection_date - is_annual_inspection - work_order_number title: VestasCIRDataSchema type: object Subsidiary: additionalProperties: false description: Subsidiary properties: id: description: NetSuite ID of the subsidiary title: Id type: integer name: description: Name of the subsidiary title: Name type: string country: description: Country of the subsidiary title: Country type: string iselimination: description: Is elimination title: Iselimination type: boolean currency: description: Currency of the subsidiary title: Currency type: string parent: anyOf: - type: integer - type: 'null' description: Parent subsidiary of this subsidiary title: Parent required: - id - name - country - iselimination - currency title: Subsidiary type: object AnomalyFileSchema: additionalProperties: false properties: id: title: Id type: integer url: anyOf: - type: string - type: 'null' title: Url required: - id - url title: AnomalyFileSchema type: object securitySchemes: APIKeyAuth: type: http scheme: bearer CookieAuth: type: apiKey in: cookie name: opshub_prod_sessionid AuthBearer: type: http scheme: bearer