naftiko: 1.0.0-alpha2 info: label: OpenAQ — Hours description: 'OpenAQ — Hours. 7 operations. Lead operation: OpenAQ Get measurements aggregated to hour by sensor ID. Self-contained Naftiko capability covering one Openaq business surface.' tags: - Openaq - Hours created: '2026-05-19' modified: '2026-05-19' binds: - namespace: env keys: OPENAQ_API_KEY: OPENAQ_API_KEY capability: consumes: - type: http namespace: openaq-hours baseUri: '' description: OpenAQ — Hours business capability. Self-contained, no shared references. resources: - name: v3-sensors-sensors_id-hours path: /v3/sensors/{sensors_id}/hours operations: - name: sensorhourlymeasurementsgetv3sensorssensorsidhoursget method: GET description: OpenAQ Get measurements aggregated to hour by sensor ID outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: sensors_id in: path type: integer description: Limit the results to a specific sensors id required: true - name: datetime_to in: query type: string description: To when? - name: datetime_from in: query type: string description: From when? - name: limit in: query type: integer description: Change the number of results returned. - name: page in: query type: integer description: Paginate through results. e.g. page=1 will return first page of results - name: v3-sensors-sensors_id-hours-daily path: /v3/sensors/{sensors_id}/hours/daily operations: - name: sensorhourlymeasurementsaggregatetodaygetv3sensorssensorsidhoursdailyget method: GET description: OpenAQ Get measurements aggregated from hour to day by sensor ID outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: sensors_id in: path type: integer description: Limit the results to a specific sensors id required: true - name: datetime_to in: query type: string description: To when? - name: datetime_from in: query type: string description: From when? - name: limit in: query type: integer description: Change the number of results returned. - name: page in: query type: integer description: Paginate through results. e.g. page=1 will return first page of results - name: v3-sensors-sensors_id-hours-dayofweek path: /v3/sensors/{sensors_id}/hours/dayofweek operations: - name: sensorhourlymeasurementsaggregatetodowgetv3sensorssensorsidhoursdayofweekget method: GET description: OpenAQ Get measurements aggregated from hour to day of week by sensor ID outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: sensors_id in: path type: integer description: Limit the results to a specific sensors id required: true - name: datetime_to in: query type: string description: To when? - name: datetime_from in: query type: string description: From when? - name: v3-sensors-sensors_id-hours-hourofday path: /v3/sensors/{sensors_id}/hours/hourofday operations: - name: sensorhourlymeasurementsaggregatetohodgetv3sensorssensorsidhourshourofdayget method: GET description: OpenAQ Get measurements aggregated from hour to day of week by sensor ID outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: sensors_id in: path type: integer description: Limit the results to a specific sensors id required: true - name: datetime_to in: query type: string description: To when? - name: datetime_from in: query type: string description: From when? - name: v3-sensors-sensors_id-hours-monthly path: /v3/sensors/{sensors_id}/hours/monthly operations: - name: sensorhourlymeasurementsaggregatetomonthgetv3sensorssensorsidhoursmonthlyget method: GET description: OpenAQ Get measurements aggregated from hour to month by sensor ID outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: sensors_id in: path type: integer description: Limit the results to a specific sensors id required: true - name: datetime_to in: query type: string description: To when? - name: datetime_from in: query type: string description: From when? - name: limit in: query type: integer description: Change the number of results returned. - name: page in: query type: integer description: Paginate through results. e.g. page=1 will return first page of results - name: v3-sensors-sensors_id-hours-monthofyear path: /v3/sensors/{sensors_id}/hours/monthofyear operations: - name: sensorhourlymeasurementsaggregatetomoygetv3sensorssensorsidhoursmonthofyearget method: GET description: OpenAQ Get measurements aggregated from hour to day of week by sensor ID outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: sensors_id in: path type: integer description: Limit the results to a specific sensors id required: true - name: datetime_to in: query type: string description: To when? - name: datetime_from in: query type: string description: From when? - name: v3-sensors-sensors_id-hours-yearly path: /v3/sensors/{sensors_id}/hours/yearly operations: - name: sensorhourlymeasurementsaggregatetoyeargetv3sensorssensorsidhoursyearlyget method: GET description: OpenAQ Get measurements aggregated from hour to year by sensor ID outputRawFormat: json outputParameters: - name: result type: object value: $. inputParameters: - name: sensors_id in: path type: integer description: Limit the results to a specific sensors id required: true - name: datetime_to in: query type: string description: To when? - name: datetime_from in: query type: string description: From when? - name: limit in: query type: integer description: Change the number of results returned. - name: page in: query type: integer description: Paginate through results. e.g. page=1 will return first page of results authentication: type: apikey key: X-API-Key value: '{{env.OPENAQ_API_KEY}}' placement: header exposes: - type: rest namespace: openaq-hours-rest port: 8080 description: REST adapter for OpenAQ — Hours. One Spectral-compliant resource per consumed operation, prefixed with /v1. resources: - path: /v1/v3/sensors/{sensors-id}/hours name: v3-sensors-sensors-id-hours description: REST surface for v3-sensors-sensors_id-hours. operations: - method: GET name: sensorhourlymeasurementsgetv3sensorssensorsidhoursget description: OpenAQ Get measurements aggregated to hour by sensor ID call: openaq-hours.sensorhourlymeasurementsgetv3sensorssensorsidhoursget with: sensors_id: rest.sensors_id datetime_to: rest.datetime_to datetime_from: rest.datetime_from limit: rest.limit page: rest.page outputParameters: - type: object mapping: $. - path: /v1/v3/sensors/{sensors-id}/hours/daily name: v3-sensors-sensors-id-hours-daily description: REST surface for v3-sensors-sensors_id-hours-daily. operations: - method: GET name: sensorhourlymeasurementsaggregatetodaygetv3sensorssensorsidhoursdailyget description: OpenAQ Get measurements aggregated from hour to day by sensor ID call: openaq-hours.sensorhourlymeasurementsaggregatetodaygetv3sensorssensorsidhoursdailyget with: sensors_id: rest.sensors_id datetime_to: rest.datetime_to datetime_from: rest.datetime_from limit: rest.limit page: rest.page outputParameters: - type: object mapping: $. - path: /v1/v3/sensors/{sensors-id}/hours/dayofweek name: v3-sensors-sensors-id-hours-dayofweek description: REST surface for v3-sensors-sensors_id-hours-dayofweek. operations: - method: GET name: sensorhourlymeasurementsaggregatetodowgetv3sensorssensorsidhoursdayofweekget description: OpenAQ Get measurements aggregated from hour to day of week by sensor ID call: openaq-hours.sensorhourlymeasurementsaggregatetodowgetv3sensorssensorsidhoursdayofweekget with: sensors_id: rest.sensors_id datetime_to: rest.datetime_to datetime_from: rest.datetime_from outputParameters: - type: object mapping: $. - path: /v1/v3/sensors/{sensors-id}/hours/hourofday name: v3-sensors-sensors-id-hours-hourofday description: REST surface for v3-sensors-sensors_id-hours-hourofday. operations: - method: GET name: sensorhourlymeasurementsaggregatetohodgetv3sensorssensorsidhourshourofdayget description: OpenAQ Get measurements aggregated from hour to day of week by sensor ID call: openaq-hours.sensorhourlymeasurementsaggregatetohodgetv3sensorssensorsidhourshourofdayget with: sensors_id: rest.sensors_id datetime_to: rest.datetime_to datetime_from: rest.datetime_from outputParameters: - type: object mapping: $. - path: /v1/v3/sensors/{sensors-id}/hours/monthly name: v3-sensors-sensors-id-hours-monthly description: REST surface for v3-sensors-sensors_id-hours-monthly. operations: - method: GET name: sensorhourlymeasurementsaggregatetomonthgetv3sensorssensorsidhoursmonthlyget description: OpenAQ Get measurements aggregated from hour to month by sensor ID call: openaq-hours.sensorhourlymeasurementsaggregatetomonthgetv3sensorssensorsidhoursmonthlyget with: sensors_id: rest.sensors_id datetime_to: rest.datetime_to datetime_from: rest.datetime_from limit: rest.limit page: rest.page outputParameters: - type: object mapping: $. - path: /v1/v3/sensors/{sensors-id}/hours/monthofyear name: v3-sensors-sensors-id-hours-monthofyear description: REST surface for v3-sensors-sensors_id-hours-monthofyear. operations: - method: GET name: sensorhourlymeasurementsaggregatetomoygetv3sensorssensorsidhoursmonthofyearget description: OpenAQ Get measurements aggregated from hour to day of week by sensor ID call: openaq-hours.sensorhourlymeasurementsaggregatetomoygetv3sensorssensorsidhoursmonthofyearget with: sensors_id: rest.sensors_id datetime_to: rest.datetime_to datetime_from: rest.datetime_from outputParameters: - type: object mapping: $. - path: /v1/v3/sensors/{sensors-id}/hours/yearly name: v3-sensors-sensors-id-hours-yearly description: REST surface for v3-sensors-sensors_id-hours-yearly. operations: - method: GET name: sensorhourlymeasurementsaggregatetoyeargetv3sensorssensorsidhoursyearlyget description: OpenAQ Get measurements aggregated from hour to year by sensor ID call: openaq-hours.sensorhourlymeasurementsaggregatetoyeargetv3sensorssensorsidhoursyearlyget with: sensors_id: rest.sensors_id datetime_to: rest.datetime_to datetime_from: rest.datetime_from limit: rest.limit page: rest.page outputParameters: - type: object mapping: $. - type: mcp namespace: openaq-hours-mcp port: 9090 transport: http description: MCP adapter for OpenAQ — Hours. One tool per consumed operation, routed inline through this capability's consumes block. tools: - name: openaq-get-measurements-aggregated-hour description: OpenAQ Get measurements aggregated to hour by sensor ID hints: readOnly: true destructive: false idempotent: true call: openaq-hours.sensorhourlymeasurementsgetv3sensorssensorsidhoursget with: sensors_id: tools.sensors_id datetime_to: tools.datetime_to datetime_from: tools.datetime_from limit: tools.limit page: tools.page outputParameters: - type: object mapping: $. - name: openaq-get-measurements-aggregated-hour-2 description: OpenAQ Get measurements aggregated from hour to day by sensor ID hints: readOnly: true destructive: false idempotent: true call: openaq-hours.sensorhourlymeasurementsaggregatetodaygetv3sensorssensorsidhoursdailyget with: sensors_id: tools.sensors_id datetime_to: tools.datetime_to datetime_from: tools.datetime_from limit: tools.limit page: tools.page outputParameters: - type: object mapping: $. - name: openaq-get-measurements-aggregated-hour-3 description: OpenAQ Get measurements aggregated from hour to day of week by sensor ID hints: readOnly: true destructive: false idempotent: true call: openaq-hours.sensorhourlymeasurementsaggregatetodowgetv3sensorssensorsidhoursdayofweekget with: sensors_id: tools.sensors_id datetime_to: tools.datetime_to datetime_from: tools.datetime_from outputParameters: - type: object mapping: $. - name: openaq-get-measurements-aggregated-hour-4 description: OpenAQ Get measurements aggregated from hour to day of week by sensor ID hints: readOnly: true destructive: false idempotent: true call: openaq-hours.sensorhourlymeasurementsaggregatetohodgetv3sensorssensorsidhourshourofdayget with: sensors_id: tools.sensors_id datetime_to: tools.datetime_to datetime_from: tools.datetime_from outputParameters: - type: object mapping: $. - name: openaq-get-measurements-aggregated-hour-5 description: OpenAQ Get measurements aggregated from hour to month by sensor ID hints: readOnly: true destructive: false idempotent: true call: openaq-hours.sensorhourlymeasurementsaggregatetomonthgetv3sensorssensorsidhoursmonthlyget with: sensors_id: tools.sensors_id datetime_to: tools.datetime_to datetime_from: tools.datetime_from limit: tools.limit page: tools.page outputParameters: - type: object mapping: $. - name: openaq-get-measurements-aggregated-hour-6 description: OpenAQ Get measurements aggregated from hour to day of week by sensor ID hints: readOnly: true destructive: false idempotent: true call: openaq-hours.sensorhourlymeasurementsaggregatetomoygetv3sensorssensorsidhoursmonthofyearget with: sensors_id: tools.sensors_id datetime_to: tools.datetime_to datetime_from: tools.datetime_from outputParameters: - type: object mapping: $. - name: openaq-get-measurements-aggregated-hour-7 description: OpenAQ Get measurements aggregated from hour to year by sensor ID hints: readOnly: true destructive: false idempotent: true call: openaq-hours.sensorhourlymeasurementsaggregatetoyeargetv3sensorssensorsidhoursyearlyget with: sensors_id: tools.sensors_id datetime_to: tools.datetime_to datetime_from: tools.datetime_from limit: tools.limit page: tools.page outputParameters: - type: object mapping: $.