{"openapi":"3.0.0","servers":[{"url":"http://otoroshi-api.oto.tools/"},{"url":"http://maif.local"}],"info":{"contact":{"email":"oss@maif.fr","name":"Otoroshi Team"},"description":"Admin API of the Otoroshi reverse proxy","license":{"name":"Apache 2.0","url":"http://www.apache.org/licenses/LICENSE-2.0.html"},"title":"Otoroshi Admin API","version":"1.5.0-dev","x-apisguru-categories":["developer_tools"],"x-logo":{"backgroundColor":"#FFFFFF","url":"https://maif.github.io/otoroshi/assets/images/svg/otoroshi_logo.svg"},"x-origin":[{"format":"openapi","url":"https://raw.githubusercontent.com/MAIF/otoroshi/master/docs/manual/code/swagger.json","version":"3.0"}],"x-providerName":"maif.local","x-serviceName":"otoroshi"},"externalDocs":{"description":"Find out more about Otoroshi","url":"https://maif.github.io/otoroshi/"},"tags":[{"description":"Everything about Otoroshi global configuration","name":"configuration"},{"description":"Everything about Otoroshi import/export","name":"import"},{"description":"Everything about Otoroshi entities templates","name":"templates"},{"description":"Everything about Otoroshi Environments","name":"environments"},{"description":"Everything about Otoroshi service groups","name":"groups"},{"description":"Everything about Otoroshi api keys","name":"apikeys"},{"description":"Everything about Otoroshi service descriptors","name":"services"},{"description":"Everything about Otoroshi stats","name":"stats"},{"description":"Everything about Otoroshi Snow Monkey","name":"snowmonkey"},{"description":"Everything about Otoroshi health status","name":"health"},{"description":"Everything about Otoroshi global JWT token verifiers","name":"jwt-verifiers"},{"description":"Everything about Otoroshi global auth. module config","name":"auth-config"},{"description":"Everything about Otoroshi request transformer scripts","name":"scripts"},{"description":"Everything about Otoroshi SSL/TLS certificates","name":"certificates"},{"description":"Everything about Otoroshi validation authorities","name":"validation-authorities"},{"description":"Everything about Otoroshi data exporters","name":"data-exporter-configs"}],"paths":{"/api/apikeys":{"get":{"deprecated":false,"description":"Get all api keys","operationId":"allApiKeys","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ApiKey"},"type":"array"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Get all api keys","tags":["apikeys"]}},"/api/auths":{"get":{"deprecated":false,"description":"Get all global auth. module configs","operationId":"findAllGlobalAuthModules","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"oneOf":[{"$ref":"#/components/schemas/LdapAuthModuleConfig"},{"$ref":"#/components/schemas/InMemoryAuthModuleConfig"},{"$ref":"#/components/schemas/GenericOauth2ModuleConfig"}]},"type":"array"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Get all global auth. module configs","tags":["auth-config"]},"post":{"deprecated":false,"description":"Create one global auth. module config","operationId":"createGlobalAuthModule","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/LdapAuthModuleConfig"},{"$ref":"#/components/schemas/InMemoryAuthModuleConfig"},{"$ref":"#/components/schemas/GenericOauth2ModuleConfig"}]}}}},"responses":{"200":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/LdapAuthModuleConfig"},{"$ref":"#/components/schemas/InMemoryAuthModuleConfig"},{"$ref":"#/components/schemas/GenericOauth2ModuleConfig"}]}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Create one global auth. module config","tags":["auth-config"]}},"/api/auths/{id}":{"delete":{"deprecated":false,"description":"Delete one global auth. module config","operationId":"deleteGlobalAuthModule","parameters":[{"description":"The auth. config id id","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deleted"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Delete one global auth. module config","tags":["auth-config"]},"get":{"deprecated":false,"description":"Get one global auth. module configs","operationId":"findGlobalAuthModuleById","parameters":[{"description":"The auth. config id","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/LdapAuthModuleConfig"},{"$ref":"#/components/schemas/InMemoryAuthModuleConfig"},{"$ref":"#/components/schemas/GenericOauth2ModuleConfig"}]}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Get one global auth. module configs","tags":["auth-config"]},"patch":{"deprecated":false,"description":"Update one global auth. module config","operationId":"patchGlobalAuthModule","parameters":[{"description":"The auth. config id","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Patch"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/LdapAuthModuleConfig"},{"$ref":"#/components/schemas/InMemoryAuthModuleConfig"},{"$ref":"#/components/schemas/GenericOauth2ModuleConfig"}]}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Update one global auth. module config","tags":["auth-config"]},"put":{"deprecated":false,"description":"Update one global auth. module config","operationId":"updateGlobalAuthModule","parameters":[{"description":"The auth. config id","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/LdapAuthModuleConfig"},{"$ref":"#/components/schemas/InMemoryAuthModuleConfig"},{"$ref":"#/components/schemas/GenericOauth2ModuleConfig"}]}}}},"responses":{"200":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/LdapAuthModuleConfig"},{"$ref":"#/components/schemas/InMemoryAuthModuleConfig"},{"$ref":"#/components/schemas/GenericOauth2ModuleConfig"}]}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Update one global auth. module config","tags":["auth-config"]}},"/api/certificates":{"get":{"deprecated":false,"description":"Get all certificates","operationId":"allCerts","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/Certificate"},"type":"array"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Get all certificates","tags":["certificates"]},"post":{"deprecated":false,"description":"Create one certificate","operationId":"createCert","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Certificate"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Certificate"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Create one certificate","tags":["certificates"]}},"/api/certificates/{id}":{"delete":{"deprecated":false,"description":"Delete one certificate by id","operationId":"deleteCert","parameters":[{"description":"The certificate id","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deleted"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Delete one certificate by id","tags":["certificates"]},"get":{"deprecated":false,"description":"Get one certificate by id","operationId":"oneCert","parameters":[{"description":"The auth. config id","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Certificate"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Get one certificate by id","tags":["certificates"]},"patch":{"deprecated":false,"description":"Update one certificate by id","operationId":"patchCert","parameters":[{"description":"The certificate id","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Patch"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Certificate"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Update one certificate by id","tags":["certificates"]},"put":{"deprecated":false,"description":"Update one certificate by id","operationId":"putCert","parameters":[{"description":"The certificate id","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Certificate"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Certificate"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Update one certificate by id","tags":["certificates"]}},"/api/client-validators":{"get":{"deprecated":false,"description":"Get all validation authoritiess","operationId":"findAllClientValidators","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ValidationAuthority"},"type":"array"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Get all validation authoritiess","tags":["validation-authorities"]},"post":{"deprecated":false,"description":"Create one validation authorities","operationId":"createClientValidator","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationAuthority"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationAuthority"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Create one validation authorities","tags":["validation-authorities"]}},"/api/client-validators/{id}":{"delete":{"deprecated":false,"description":"Delete one validation authorities by id","operationId":"deleteClientValidator","parameters":[{"description":"The validation authorities id","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deleted"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Delete one validation authorities by id","tags":["validation-authorities"]},"get":{"deprecated":false,"description":"Get one validation authorities by id","operationId":"findClientValidatorById","parameters":[{"description":"The auth. config id","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationAuthority"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Get one validation authorities by id","tags":["validation-authorities"]},"patch":{"deprecated":false,"description":"Update one validation authorities by id","operationId":"patchClientValidator","parameters":[{"description":"The validation authorities id","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Patch"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationAuthority"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Update one validation authorities by id","tags":["validation-authorities"]},"put":{"deprecated":false,"description":"Update one validation authorities by id","operationId":"updateClientValidator","parameters":[{"description":"The validation authorities id","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationAuthority"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidationAuthority"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Update one validation authorities by id","tags":["validation-authorities"]}},"/api/data-exporter-configs":{"get":{"deprecated":false,"description":"Get all data exporter configs","operationId":"findAllDataExporters","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/DataExporterConfig"},"type":"array"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Get all data exporter configs","tags":["data-exporter-configs"]},"post":{"deprecated":false,"description":"Create a new data exporter config","operationId":"createDataExporterConfig","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataExporterConfig"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataExporterConfig"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Create a new data exporter config","tags":["data-exporter-configs"]}},"/api/data-exporter-configs/_bulk":{"delete":{"deprecated":false,"description":"Delete a data exporter config","operationId":"deletebulkDataExporterConfig","parameters":[],"requestBody":{"content":{"application/ndjson":{"schema":{"$ref":"#/components/schemas/Patch"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"items":{"description":"The bulk response","properties":{"deleted":{"description":"Whether the action was carried out correctly or not","example":true,"type":"boolean"},"id":{"description":"Data exporter id","example":true,"type":"boolean"},"status":{"description":"Status","enum":["200"],"type":"string"}},"type":"object"},"type":"array"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Delete a data exporter config","tags":["data-exporter-configs"]},"patch":{"deprecated":false,"description":"Update a data exporter configs with a diff","operationId":"patchBulkDataExporterConfig","parameters":[],"requestBody":{"content":{"application/ndjson":{"schema":{"$ref":"#/components/schemas/Patch"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"items":{"description":"The bulk response","properties":{"id":{"description":"Data exporter id","example":true,"type":"boolean"},"status":{"description":"Status","enum":["200"],"type":"string"},"updated":{"description":"Whether the action was carried out correctly or not","example":true,"type":"boolean"}},"type":"object"},"type":"array"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Update a data exporter configs with a diff","tags":["data-exporter-configs"]},"post":{"deprecated":false,"description":"Create a new data exporter configs","operationId":"createBulkDataExporterConfigs","parameters":[],"requestBody":{"content":{"application/ndjson":{"schema":{"$ref":"#/components/schemas/DataExporterConfig"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"items":{"description":"The bulk response","properties":{"created":{"description":"Whether the action was carried out correctly or not","example":true,"type":"boolean"},"id":{"description":"Data exporter id","example":true,"type":"boolean"},"status":{"description":"Status","enum":["201"],"type":"string"}},"type":"object"},"type":"array"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Create a new data exporter configs","tags":["data-exporter-configs"]},"put":{"deprecated":false,"description":"Update a data exporter configs","operationId":"updateBulkDataExporterConfig","parameters":[],"requestBody":{"content":{"application/ndjson":{"schema":{"$ref":"#/components/schemas/DataExporterConfig"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"items":{"description":"The bulk response","properties":{"id":{"description":"Data exporter id","example":true,"type":"boolean"},"status":{"description":"Status","enum":["200"],"type":"string"},"updated":{"description":"Whether the action was carried out correctly or not","example":true,"type":"boolean"}},"type":"object"},"type":"array"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Update a data exporter configs","tags":["data-exporter-configs"]}},"/api/data-exporter-configs/_template":{"get":{"deprecated":false,"description":"Get all data exporter configs","operationId":"DataExporterTemplate","parameters":[{"description":"The data exporter config type","in":"query","name":"type","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataExporterConfig"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Get all data exporter configs","tags":["data-exporter-configs"]}},"/api/data-exporter-configs/{dataExporterConfigId}":{"delete":{"deprecated":false,"description":"Delete a data exporter config","operationId":"deleteDataExporterConfig","parameters":[{"description":"The data exporter config id","in":"path","name":"dataExporterConfigId","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deleted"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Delete a data exporter config","tags":["data-exporter-configs"]},"get":{"deprecated":false,"description":"Get a data exporter config","operationId":"findDataExporterConfigById","parameters":[{"description":"The data exporter config id","in":"path","name":"dataExporterConfigId","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataExporterConfig"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Get a data exporter config","tags":["data-exporter-configs"]},"patch":{"deprecated":false,"description":"Update a data exporter config with a diff","operationId":"patchDataExporterConfig","parameters":[{"description":"The data exporter config id","in":"path","name":"dataExporterConfigId","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Patch"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataExporterConfig"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Update a data exporter config with a diff","tags":["data-exporter-configs"]},"put":{"deprecated":false,"description":"Update a data exporter config","operationId":"updateDataExporterConfig","parameters":[{"description":"The data exporter config id","in":"path","name":"dataExporterConfigId","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataExporterConfig"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataExporterConfig"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Update a data exporter config","tags":["data-exporter-configs"]}},"/api/globalconfig":{"get":{"deprecated":false,"description":"Get the full configuration of Otoroshi","operationId":"globalConfig","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GlobalConfig"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Get the full configuration of Otoroshi","tags":["configuration"]},"patch":{"deprecated":false,"description":"Update the global configuration with a diff","operationId":"patchGlobalConfig","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Patch"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GlobalConfig"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Update the global configuration with a diff","tags":["configuration"]},"put":{"deprecated":false,"description":"Update the global configuration","operationId":"putGlobalConfig","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GlobalConfig"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GlobalConfig"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Update the global configuration","tags":["configuration"]}},"/api/groups":{"get":{"deprecated":false,"description":"Get all service groups","operationId":"allServiceGroups","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/Group"},"type":"array"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Get all service groups","tags":["groups"]},"post":{"deprecated":false,"description":"Create a new service group","operationId":"createGroup","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Group"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Group"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Create a new service group","tags":["groups"]}},"/api/groups/{groupId}/apikeys":{"get":{"deprecated":false,"description":"Get all api keys for the group of a service","operationId":"apiKeysFromGroup","parameters":[{"description":"The api key group id","in":"path","name":"groupId","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ApiKey"},"type":"array"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Get all api keys for the group of a service","tags":["apikeys"]},"post":{"deprecated":false,"description":"Create a new api key for a group","operationId":"createApiKeyFromGroup","parameters":[{"description":"The api key group id","in":"path","name":"groupId","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKey"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKey"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Create a new api key for a group","tags":["apikeys"]}},"/api/groups/{groupId}/apikeys/{clientId}":{"delete":{"deprecated":false,"description":"Delete an api key for a specified service group","operationId":"deleteApiKeyFromGroup","parameters":[{"description":"The api key group id","in":"path","name":"groupId","required":true,"schema":{"type":"string"}},{"description":"the api key id","in":"path","name":"clientId","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deleted"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Delete an api key","tags":["apikeys"]},"get":{"deprecated":false,"description":"Get an api key for a specified service group","operationId":"apiKeyFromGroup","parameters":[{"description":"The api key group id","in":"path","name":"groupId","required":true,"schema":{"type":"string"}},{"description":"the api key id","in":"path","name":"clientId","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKey"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Get an api key","tags":["apikeys"]},"patch":{"deprecated":false,"description":"Update an api key for a specified service descriptor with a diff","operationId":"patchApiKeyFromGroup","parameters":[{"description":"The api key group id","in":"path","name":"groupId","required":true,"schema":{"type":"string"}},{"description":"the api key id","in":"path","name":"clientId","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Patch"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKey"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Update an api key with a diff","tags":["apikeys"]},"put":{"deprecated":false,"description":"Update an api key for a specified service group","operationId":"updateApiKeyFromGroup","parameters":[{"description":"The api key group id","in":"path","name":"groupId","required":true,"schema":{"type":"string"}},{"description":"the api key id","in":"path","name":"clientId","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKey"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKey"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Update an api key","tags":["apikeys"]}},"/api/groups/{groupId}/apikeys/{clientId}/quotas":{"delete":{"deprecated":false,"description":"Reset the quota state of an api key","operationId":"resetApiKeyFromGroupQuotas","parameters":[{"description":"The api key group id","in":"path","name":"groupId","required":true,"schema":{"type":"string"}},{"description":"the api key id","in":"path","name":"clientId","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Quotas"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Reset the quota state of an api key","tags":["apikeys"]},"get":{"deprecated":false,"description":"Get the quota state of an api key","operationId":"apiKeyFromGroupQuotas","parameters":[{"description":"The api key group id","in":"path","name":"groupId","required":true,"schema":{"type":"string"}},{"description":"the api key id","in":"path","name":"clientId","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Quotas"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Get the quota state of an api key","tags":["apikeys"]}},"/api/groups/{serviceGroupId}":{"delete":{"deprecated":false,"description":"Delete a service group","operationId":"deleteGroup","parameters":[{"description":"The service group id","in":"path","name":"serviceGroupId","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deleted"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Delete a service group","tags":["groups"]},"get":{"deprecated":false,"description":"Get a service group","operationId":"serviceGroup","parameters":[{"description":"The service group id","in":"path","name":"serviceGroupId","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Group"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Get a service group","tags":["groups"]},"patch":{"deprecated":false,"description":"Update a service group with a diff","operationId":"patchGroup","parameters":[{"description":"The service group id","in":"path","name":"serviceGroupId","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Patch"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Group"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Update a service group with a diff","tags":["groups"]},"put":{"deprecated":false,"description":"Update a service group","operationId":"updateGroup","parameters":[{"description":"The service group id","in":"path","name":"serviceGroupId","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Group"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Group"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Update a service group","tags":["groups"]}},"/api/groups/{serviceGroupId}/services":{"get":{"deprecated":false,"description":"Get all services descriptor for a group","operationId":"serviceGroupServices","parameters":[{"description":"The service group id","in":"path","name":"serviceGroupId","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ApiKey"},"type":"array"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Get all services descriptor for a group","tags":["services"]}},"/api/import":{"post":{"deprecated":false,"description":"Import the full state of Otoroshi as a file","operationId":"fullImportFromFile","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportExport"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Done"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Import the full state of Otoroshi as a file","tags":["import"]}},"/api/live":{"get":{"deprecated":false,"description":"Get global otoroshi stats","operationId":"globalLiveStats","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Stats"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Get global otoroshi stats","tags":["stats"]}},"/api/live/{id}":{"get":{"deprecated":false,"description":"Get live feed of global otoroshi stats (global) or for a service {id}","operationId":"serviceLiveStats","parameters":[{"description":"The service id or global for otoroshi stats","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Stats"}},"text/event-stream":{"schema":{"$ref":"#/components/schemas/Stats"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Get live feed of otoroshi stats","tags":["stats"]}},"/api/otoroshi.json":{"get":{"deprecated":false,"description":"Export the full state of Otoroshi","operationId":"fullExport","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportExport"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Export the full state of Otoroshi","tags":["import"]},"post":{"deprecated":false,"description":"Import the full state of Otoroshi","operationId":"fullImport","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImportExport"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Done"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Import the full state of Otoroshi","tags":["import"]}},"/api/scripts":{"get":{"deprecated":false,"description":"Get all scripts","operationId":"findAllScripts","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/Script"},"type":"array"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Get all scripts","tags":["scripts"]},"post":{"deprecated":false,"description":"Create a new script","operationId":"createScript","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Script"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Script"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Create a new script","tags":["scripts"]}},"/api/scripts/_compile":{"post":{"deprecated":false,"description":"Compile a script","operationId":"compileScript","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Script"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScriptCompilationResult"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Compile a script","tags":["scripts"]}},"/api/scripts/{scriptId}":{"delete":{"deprecated":false,"description":"Delete a script","operationId":"deleteScript","parameters":[{"description":"The script id","in":"path","name":"scriptId","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deleted"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Delete a script","tags":["scripts"]},"get":{"deprecated":false,"description":"Get a script","operationId":"findScriptById","parameters":[{"description":"The script id","in":"path","name":"scriptId","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Script"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Get a script","tags":["scripts"]},"patch":{"deprecated":false,"description":"Update a script with a diff","operationId":"patchScript","parameters":[{"description":"The script id","in":"path","name":"scriptId","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Patch"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Script"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Update a script with a diff","tags":["scripts"]},"put":{"deprecated":false,"description":"Update a script","operationId":"updateScript","parameters":[{"description":"The script id","in":"path","name":"scriptId","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Script"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Script"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Update a script","tags":["scripts"]}},"/api/services":{"get":{"deprecated":false,"description":"Get all services","operationId":"allServices","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/Service"},"type":"array"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Get all services","tags":["services"]},"post":{"deprecated":false,"description":"Create a new service descriptor","operationId":"createService","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Service"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Service"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Create a new service descriptor","tags":["services"]}},"/api/services/{serviceId}":{"delete":{"deprecated":false,"description":"Delete a service descriptor","operationId":"deleteService","parameters":[{"description":"The service id","in":"path","name":"serviceId","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deleted"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Delete a service descriptor","tags":["services"]},"get":{"deprecated":false,"description":"Get a service descriptor","operationId":"service","parameters":[{"description":"The service id","in":"path","name":"serviceId","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Service"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Get a service descriptor","tags":["services"]},"patch":{"deprecated":false,"description":"Update a service descriptor with a diff","operationId":"patchService","parameters":[{"description":"The service id","in":"path","name":"serviceId","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Patch"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Service"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Update a service descriptor with a diff","tags":["services"]},"put":{"deprecated":false,"description":"Update a service descriptor","operationId":"updateService","parameters":[{"description":"The service id","in":"path","name":"serviceId","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Service"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Service"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Update a service descriptor","tags":["services"]}},"/api/services/{serviceId}/apikeys":{"get":{"deprecated":false,"description":"Get all api keys for the group of a service","operationId":"apiKeys","parameters":[{"description":"The api key service id","in":"path","name":"serviceId","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ApiKey"},"type":"array"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Get all api keys for the group of a service","tags":["apikeys"]},"post":{"deprecated":false,"description":"","operationId":"createApiKey","parameters":[{"description":"The api key service id","in":"path","name":"serviceId","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKey"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKey"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Create a new api key for a service","tags":["apikeys"]}},"/api/services/{serviceId}/apikeys/{clientId}":{"delete":{"deprecated":false,"description":"Delete an api key for a specified service descriptor","operationId":"deleteApiKey","parameters":[{"description":"The api key service id","in":"path","name":"serviceId","required":true,"schema":{"type":"string"}},{"description":"the api key id","in":"path","name":"clientId","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deleted"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Delete an api key","tags":["apikeys"]},"get":{"deprecated":false,"description":"Get an api key for a specified service descriptor","operationId":"apiKey","parameters":[{"description":"The api key service id","in":"path","name":"serviceId","required":true,"schema":{"type":"string"}},{"description":"the api key id","in":"path","name":"clientId","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKey"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Get an api key","tags":["apikeys"]},"patch":{"deprecated":false,"description":"Update an api key for a specified service descriptor with a diff","operationId":"patchApiKey","parameters":[{"description":"The api key service id","in":"path","name":"serviceId","required":true,"schema":{"type":"string"}},{"description":"the api key id","in":"path","name":"clientId","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Patch"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKey"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Update an api key with a diff","tags":["apikeys"]},"put":{"deprecated":false,"description":"Update an api key for a specified service descriptor","operationId":"updateApiKey","parameters":[{"description":"The api key service id","in":"path","name":"serviceId","required":true,"schema":{"type":"string"}},{"description":"the api key id","in":"path","name":"clientId","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKey"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKey"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Update an api key","tags":["apikeys"]}},"/api/services/{serviceId}/apikeys/{clientId}/group":{"get":{"deprecated":false,"description":"Get the group of an api key","operationId":"apiKeyGroup","parameters":[{"description":"The api key service id","in":"path","name":"serviceId","required":true,"schema":{"type":"string"}},{"description":"the api key id","in":"path","name":"clientId","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Group"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Get the group of an api key","tags":["apikeys"]}},"/api/services/{serviceId}/apikeys/{clientId}/quotas":{"delete":{"deprecated":false,"description":"Reset the quota state of an api key","operationId":"resetApiKeyQuotas","parameters":[{"description":"The api key service id","in":"path","name":"serviceId","required":true,"schema":{"type":"string"}},{"description":"the api key id","in":"path","name":"clientId","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Quotas"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Reset the quota state of an api key","tags":["apikeys"]},"get":{"deprecated":false,"description":"Get the quota state of an api key","operationId":"apiKeyQuotas","parameters":[{"description":"The api key service id","in":"path","name":"serviceId","required":true,"schema":{"type":"string"}},{"description":"the api key id","in":"path","name":"clientId","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Quotas"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Get the quota state of an api key","tags":["apikeys"]}},"/api/services/{serviceId}/targets":{"delete":{"deprecated":false,"description":"Delete a service descriptor target","operationId":"serviceDeleteTarget","parameters":[{"description":"The service id","in":"path","name":"serviceId","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/Target"},"type":"array"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Delete a service descriptor target","tags":["services"]},"get":{"deprecated":false,"description":"Get a service descriptor targets","operationId":"serviceTargets","parameters":[{"description":"The service id","in":"path","name":"serviceId","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/Target"},"type":"array"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Get a service descriptor targets","tags":["services"]},"patch":{"deprecated":false,"description":"Update a service descriptor targets","operationId":"updateServiceTargets","parameters":[{"description":"The service id","in":"path","name":"serviceId","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Patch"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/Target"},"type":"array"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Update a service descriptor targets","tags":["services"]},"post":{"deprecated":false,"description":"Add a target to a service descriptor","operationId":"serviceAddTarget","parameters":[{"description":"The service id","in":"path","name":"serviceId","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Target"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/Target"},"type":"array"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Add a target to a service descriptor","tags":["services"]}},"/api/services/{serviceId}/template":{"delete":{"deprecated":false,"description":"Delete a service descriptor error template","operationId":"deleteServiceTemplate","parameters":[{"description":"The service id","in":"path","name":"serviceId","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deleted"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Delete a service descriptor error template","tags":["services"]},"get":{"deprecated":false,"description":"Get a service descriptor error template","operationId":"serviceTemplate","parameters":[{"description":"The service id","in":"path","name":"serviceId","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorTemplate"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Get a service descriptor error template","tags":["services"]},"post":{"deprecated":false,"description":"Update a service descriptor targets","operationId":"createServiceTemplate","parameters":[{"description":"The service id","in":"path","name":"serviceId","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorTemplate"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorTemplate"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Create a service descriptor error template","tags":["services"]},"put":{"deprecated":false,"description":"Update an error template to a service descriptor","operationId":"updateServiceTemplate","parameters":[{"description":"The service id","in":"path","name":"serviceId","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorTemplate"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorTemplate"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Update an error template to a service descriptor","tags":["services"]}},"/api/snowmonkey/_start":{"post":{"deprecated":false,"description":"Start the Snow Monkey","operationId":"startSnowMonkey","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Done"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Start the Snow Monkey","tags":["snowmonkey"]}},"/api/snowmonkey/_stop":{"post":{"deprecated":false,"description":"Stop the Snow Monkey","operationId":"stopSnowMonkey","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Done"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Stop the Snow Monkey","tags":["snowmonkey"]}},"/api/snowmonkey/config":{"get":{"deprecated":false,"description":"Get current Snow Monkey config","operationId":"getSnowMonkeyConfig","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SnowMonkeyConfig"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Get current Snow Monkey config","tags":["snowmonkey"]},"patch":{"deprecated":false,"description":"Update current Snow Monkey config","operationId":"patchSnowMonkey","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Group"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SnowMonkeyConfig"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Update current Snow Monkey config","tags":["snowmonkey"]},"put":{"deprecated":false,"description":"Update current Snow Monkey config","operationId":"updateSnowMonkey","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Group"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SnowMonkeyConfig"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Update current Snow Monkey config","tags":["snowmonkey"]}},"/api/snowmonkey/outages":{"delete":{"deprecated":false,"description":"Reset Snow Monkey Outages for the day","operationId":"resetSnowMonkey","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Done"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Reset Snow Monkey Outages for the day","tags":["snowmonkey"]},"get":{"deprecated":false,"description":"Get all current Snow Monkey ourages","operationId":"getSnowMonkeyOutages","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/Outage"},"type":"array"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Get all current Snow Monkey ourages","tags":["snowmonkey"]}},"/api/verifiers":{"get":{"deprecated":false,"description":"Get all global JWT verifiers","operationId":"findAllGlobalJwtVerifiers","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/GlobalJwtVerifier"},"type":"array"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Get all global JWT verifiers","tags":["jwt-verifiers"]},"post":{"deprecated":false,"description":"Create one global JWT verifiers","operationId":"createGlobalJwtVerifier","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GlobalJwtVerifier"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GlobalJwtVerifier"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Create one global JWT verifiers","tags":["jwt-verifiers"]}},"/api/verifiers/{verifierId}":{"delete":{"deprecated":false,"description":"Delete one global JWT verifiers","operationId":"deleteGlobalJwtVerifier","parameters":[{"description":"The jwt verifier id","in":"path","name":"verifierId","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Deleted"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Delete one global JWT verifiers","tags":["jwt-verifiers"]},"get":{"deprecated":false,"description":"Get one global JWT verifiers","operationId":"findGlobalJwtVerifiersById","parameters":[{"description":"The jwt verifier id","in":"path","name":"verifierId","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GlobalJwtVerifier"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Get one global JWT verifiers","tags":["jwt-verifiers"]},"patch":{"deprecated":false,"description":"Update one global JWT verifiers","operationId":"patchGlobalJwtVerifier","parameters":[{"description":"The jwt verifier id","in":"path","name":"verifierId","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Patch"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GlobalJwtVerifier"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Update one global JWT verifiers","tags":["jwt-verifiers"]},"put":{"deprecated":false,"description":"Update one global JWT verifiers","operationId":"updateGlobalJwtVerifier","parameters":[{"description":"The jwt verifier id","in":"path","name":"verifierId","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GlobalJwtVerifier"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GlobalJwtVerifier"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Update one global JWT verifiers","tags":["jwt-verifiers"]}},"/health":{"get":{"deprecated":false,"description":"Import the full state of Otoroshi as a file","operationId":"health","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OtoroshiHealth"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"404":{"description":"Resource not found or does not exist"}},"summary":"Return current Otoroshi health","tags":["health"]}},"/lines":{"get":{"deprecated":false,"description":"Get all environments provided by the current Otoroshi instance","operationId":"allLines","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Environment"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Get all environments","tags":["environments"]}},"/lines/{line}/services":{"get":{"deprecated":false,"description":"Get all services for an environment provided by the current Otoroshi instance","operationId":"servicesForALine","parameters":[{"description":"The environment where to find services","in":"path","name":"line","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/Service"},"type":"array"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Get all services for an environment","tags":["environments"]}},"/new/apikey":{"get":{"deprecated":false,"description":"Get a template of an Otoroshi Api Key. The generated entity is not persisted","operationId":"initiateApiKey","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKey"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Get a template of an Otoroshi Api Key","tags":["templates"]}},"/new/group":{"get":{"deprecated":false,"description":"Get a template of an Otoroshi service group. The generated entity is not persisted","operationId":"initiateServiceGroup","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Group"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Get a template of an Otoroshi service group","tags":["templates"]}},"/new/service":{"get":{"deprecated":false,"description":"Get a template of an Otoroshi service descriptor. The generated entity is not persisted","operationId":"initiateService","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Service"}}},"description":"Successful operation"},"400":{"description":"Bad resource format. Take another look to the swagger, or open an issue :)"},"401":{"description":"You have to provide an Api Key. Api Key can be passed with 'Otoroshi-Client-Id' and 'Otoroshi-Client-Secret' headers, or use basic http authentication"},"404":{"description":"Resource not found or does not exist"}},"security":[{"otoroshi_auth":[]}],"summary":"Get a template of an Otoroshi service descriptor","tags":["templates"]}}},"components":{"schemas":{"ApiKey":{"description":"An Otoroshi Api Key. An Api Key is defined for a group of services to allow usage of the same Api Key for multiple services.","properties":{"authorizedEntities":{"description":"The group/service ids (prefixed by group_ or service_ on which the key is authorized","example":["a string value"],"items":{"example":"a string value","type":"string"},"type":"array"},"clientId":{"description":"The unique id of the Api Key. Usually 16 random alpha numerical characters, but can be anything","example":"a string value","type":"string"},"clientName":{"description":"The name of the api key, for humans ;-)","example":"a string value","type":"string"},"clientSecret":{"description":"The secret of the Api Key. Usually 64 random alpha numerical characters, but can be anything","example":"a string value","type":"string"},"dailyQuota":{"description":"Authorized number of calls per day","example":123,"format":"int64","type":"integer"},"enabled":{"description":"Whether or not the key is enabled. If disabled, resources won't be available to calls using this key","example":true,"type":"boolean"},"metadata":{"additionalProperties":{"type":"string"},"description":"Bunch of metadata for the key","example":{"key":"value"},"type":"object"},"monthlyQuota":{"description":"Authorized number of calls per month","example":123,"format":"int64","type":"integer"},"throttlingQuota":{"description":"Authorized number of calls per second, measured on 10 seconds","example":123,"format":"int64","type":"integer"}},"required":["clientId","clientSecret","clientName","authorizedEntities","enabled"],"type":"object"},"Auth0Config":{"description":"Configuration for Auth0 domain","properties":{"callbackUrl":{"description":"Auth0 callback URL","example":"a string value","type":"string"},"clientId":{"description":"Auth0 client id","example":"a string value","type":"string"},"clientSecret":{"description":"Auth0 client secret","example":"a string value","type":"string"},"domain":{"description":"Auth0 domain","example":"a string value","type":"string"}},"required":["clientId","clientSecret","domain","callbackUrl"],"type":"object"},"BadResponse":{"description":"An HTTP response that is not supposed to be returned by a service","properties":{"body":{"description":"The body of the HTTP response","example":"a string value","type":"string"},"headers":{"additionalProperties":{"type":"string"},"description":"The HTTP headers of the response","example":{"key":"value"},"type":"object"},"status":{"description":"The HTTP status for the response","example":123123,"format":"int32","type":"integer"}},"required":["status","body","headers"],"type":"object"},"BadResponsesFaultConfig":{"description":"Config for bad requests injection fault","properties":{"ratio":{"description":"The percentage of requests affected by this fault. Value should be between 0.0 and 1.0","example":42.2,"format":"double","type":"number"},"responses":{"description":"The possibles responses","items":{"$ref":"#/components/schemas/BadResponse"},"type":"array"}},"required":["ratio","responses"],"type":"object"},"Canary":{"description":"The configuration of the canary mode for a service descriptor","properties":{"enabled":{"description":"Use canary mode for this service","example":true,"type":"boolean"},"root":{"description":"Otoroshi will append this root to any target choosen. If the specified root is '/api/foo', then a request to https://yyyyyyy/bar will actually hit https://xxxxxxxxx/api/foo/bar","example":"a string value","type":"string"},"targets":{"description":"The list of target that Otoroshi will proxy and expose through the subdomain defined before. Otoroshi will do round-robin load balancing between all those targets with circuit breaker mecanism to avoid cascading failures","items":{"$ref":"#/components/schemas/Target"},"type":"array"},"traffic":{"description":"Ratio of traffic that will be sent to canary targets.","example":123123,"format":"int32","type":"integer"}},"required":["enabled","traffic","targets","root"],"type":"object"},"Certificate":{"description":"A SSL/TLS X509 certificate","properties":{"autoRenew":{"description":"Allow Otoroshi to renew the certificate (if self signed)","example":"a string value","type":"string"},"ca":{"description":"Certificate is a CA (read only)","example":"a string value","type":"string"},"caRef":{"description":"Reference for a CA certificate in otoroshi","example":"a string value","type":"string"},"chain":{"description":"Certificate chain of trust in PEM format","example":"a string value","type":"string"},"domain":{"description":"Domain of the certificate (read only)","example":"a string value","type":"string"},"from":{"description":"Start date of validity","example":"a string value","type":"string"},"id":{"description":"Id of the certificate","example":"a string value","type":"string"},"privateKey":{"description":"PKCS8 private key in PEM format","example":"a string value","type":"string"},"selfSigned":{"description":"Certificate is self signed  read only)","example":"a string value","type":"string"},"subject":{"description":"Subject of the certificate (read only)","example":"a string value","type":"string"},"to":{"description":"End date of validity","example":"a string value","type":"string"},"valid":{"description":"Certificate is valid (read only)","example":"a string value","type":"string"}},"required":["id","chain","privateKey","caRef","domain","selfSigned","ca","valid","autoRenew","subject","from","to"],"type":"object"},"ChaosConfig":{"description":"Configuration for the faults that can be injected in requests","properties":{"badResponsesFaultConfig":{"$ref":"#/components/schemas/BadResponsesFaultConfig"},"enabled":{"description":"Whether or not this config is enabled","example":true,"type":"boolean"},"largeRequestFaultConfig":{"$ref":"#/components/schemas/LargeRequestFaultConfig"},"largeResponseFaultConfig":{"$ref":"#/components/schemas/LargeResponseFaultConfig"},"latencyInjectionFaultConfig":{"$ref":"#/components/schemas/LatencyInjectionFaultConfig"}},"required":["enabled"],"type":"object"},"CleverSettings":{"description":"Configuration for CleverCloud client","properties":{"consumerKey":{"description":"CleverCloud consumer key","example":"a string value","type":"string"},"consumerSecret":{"description":"CleverCloud consumer token","example":"a string value","type":"string"},"orgaId":{"description":"CleverCloud organization id","example":"a string value","type":"string"},"secret":{"description":"CleverCloud oauth secret","example":"a string value","type":"string"},"token":{"description":"CleverCloud oauth token","example":"a string value","type":"string"}},"required":["consumerKey","consumerSecret","token","secret","orgaId"],"type":"object"},"ClientConfig":{"description":"The configuration of the circuit breaker for a service descriptor","properties":{"backoffFactor":{"description":"Specify the factor to multiply the delay for each retry","example":123123,"format":"int32","type":"integer"},"callTimeout":{"description":"Specify how long each call should last at most in milliseconds","example":123123,"format":"int32","type":"integer"},"globalTimeout":{"description":"Specify how long the global call (with retries) should last at most in milliseconds","example":123123,"format":"int32","type":"integer"},"maxErrors":{"description":"Specify how many errors can pass before opening the circuit breaker","example":123123,"format":"int32","type":"integer"},"retries":{"description":"Specify how many times the client will try to fetch the result of the request after an error before giving up.","example":123123,"format":"int32","type":"integer"},"retryInitialDelay":{"description":"Specify the delay between two retries. Each retry, the delay is multiplied by the backoff factor","example":123123,"format":"int32","type":"integer"},"sampleInterval":{"description":"Specify the sliding window time for the circuit breaker in milliseconds, after this time, error count will be reseted","example":123123,"format":"int32","type":"integer"},"useCircuitBreaker":{"description":"Use a circuit breaker to avoid cascading failure when calling chains of services. Highly recommended !","example":true,"type":"boolean"}},"required":["useCircuitBreaker","retries","maxErrors","retryInitialDelay","backoffFactor","callTimeout","globalTimeout","sampleInterval"],"type":"object"},"ConsoleDataExporterConfig":{"properties":{},"type":"object"},"CorsSettings":{"description":"The configuration for cors support","properties":{"allowCredentials":{"description":"Allow to pass credentials","example":true,"type":"boolean"},"allowHeaders":{"description":"The cors allowed headers","items":{"example":"a string value","type":"string"},"type":"array"},"allowMethods":{"description":"The cors allowed methods","items":{"example":"a string value","type":"string"},"type":"array"},"allowOrigin":{"description":"The cors allowed origin","example":"a string value","type":"string"},"enabled":{"description":"Whether or not cors is enabled","example":true,"type":"boolean"},"excludedPatterns":{"description":"The cors excluded patterns","items":{"example":"a string value","type":"string"},"type":"array"},"exposeHeaders":{"description":"The cors exposed header","items":{"example":"a string value","type":"string"},"type":"array"},"maxAge":{"description":"Cors max age","example":123123,"format":"int32","type":"integer"}},"required":["enabled","allowOrigin","exposeHeaders","allowHeaders","allowMethods","excludedPatterns","maxAge","allowCredentials"],"type":"object"},"CustomDataExporterConfig":{"properties":{"config":{"additionalProperties":{"type":"string"},"description":"Custom data exporter config","example":{"key":"value"},"type":"object"},"ref":{"description":"Script Ref","example":"a string value","type":"string"}},"required":["ref","config"],"type":"object"},"DataExporterConfig":{"description":"Settings to export Otorshi events","properties":{"bufferSize":{"description":"buffer size","example":123123,"format":"int32","type":"integer"},"config":{"description":"Data Exporter config","oneOf":[{"$ref":"#/components/schemas/ElasticConfig"},{"$ref":"#/components/schemas/KafkaConfig"},{"$ref":"#/components/schemas/PulsarDataExporterConfig"},{"$ref":"#/components/schemas/FileDataExporterConfig"},{"$ref":"#/components/schemas/MailerGenericExporterConfig"},{"$ref":"#/components/schemas/MailerConsoleExporterConfig"},{"$ref":"#/components/schemas/MailerMailgunExporterConfig"},{"$ref":"#/components/schemas/MailerMailjetExporterConfig"},{"$ref":"#/components/schemas/MailerSendgridExporterConfig"},{"$ref":"#/components/schemas/ConsoleDataExporterConfig"},{"$ref":"#/components/schemas/CustomDataExporterConfig"}]},"desc":{"description":"Description","example":"a string value","type":"string"},"enabled":{"description":"Boolean","example":"a string value","type":"string"},"filtering":{"$ref":"#/components/schemas/Filtering","description":"filtering"},"groupDuration":{"description":"duration","example":123,"format":"int64","type":"integer"},"groupSize":{"description":"Group size","example":123123,"format":"int32","type":"integer"},"id":{"description":"Id","example":"a string value","type":"string"},"jsonWorkers":{"description":"nb workers","example":123123,"format":"int32","type":"integer"},"location":{"$ref":"#/components/schemas/Location","description":"location"},"metadata":{"additionalProperties":{"type":"string"},"description":"Metadata","example":{"key":"value"},"type":"object"},"name":{"description":"Name","example":"a string value","type":"string"},"projection":{"additionalProperties":{"type":"string"},"description":"projection","example":{"key":"value"},"type":"object"},"sendWorkers":{"description":"send workers","example":123123,"format":"int32","type":"integer"},"typ":{"description":"Type of data exporter","enum":["kafka","pulsar","file","mailer","elastic","console","custom"],"type":"string"}},"type":"object"},"Deleted":{"properties":{"deleted":{"example":true,"type":"boolean"}},"required":["deleted"],"type":"object"},"Done":{"properties":{"done":{"example":true,"type":"boolean"}},"required":["done"],"type":"object"},"ESAlgoSettings":{"description":"Settings for an EC + SHA signing algorithm","properties":{"privateKey":{"description":"The private key for the RSA function","example":"a string value","type":"string"},"publicKey":{"description":"The public key for the RSA function","example":"a string value","type":"string"},"size":{"description":"Size for SHA function. can be 256, 384 or 512","example":123123,"format":"int32","type":"integer"},"type":{"description":"String with value ESAlgoSettings","example":"a string value","type":"string"}},"required":["type","size","publicKey"],"type":"object"},"ElasticConfig":{"description":"The configuration for elastic access","properties":{"clusterUri":{"description":"URL of the elastic cluster","example":"a string value","type":"string"},"headers":{"additionalProperties":{"type":"string"},"description":"Additionnal http headers","example":{"key":"value"},"type":"object"},"index":{"description":"Index for events. Default is otoroshi-events","example":"a string value","type":"string"},"password":{"description":"Optional password","example":"a string value","type":"string"},"type":{"description":"Type of events. Default is event","example":"a string value","type":"string"},"user":{"description":"Optional user","example":"a string value","type":"string"}},"required":["clusterUri","index","type","user","password","headers"],"type":"object"},"Environment":{"description":"The name of the environment for service descriptors","example":"prod","type":"string"},"ErrorTemplate":{"description":"Error templates for a service descriptor","properties":{"messages":{"additionalProperties":{"type":"string"},"description":"Map for custom messages","example":{"key":"value"},"type":"object"},"serviceId":{"description":"The Id of the service for which the error template is enabled","example":"a string value","type":"string"},"template40x":{"description":"The html template for 40x errors","example":"a string value","type":"string"},"template50x":{"description":"The html template for 50x errors","example":"a string value","type":"string"},"templateBuild":{"description":"The html template for build page","example":"a string value","type":"string"},"templateMaintenance":{"description":"The html template for maintenance page","example":"a string value","type":"string"}},"required":["serviceId","template40x","template50x","templateBuild","templateMaintenance","messages"],"type":"object"},"ExposedApi":{"description":"The Open API configuration for your service (if one)","properties":{"exposeApi":{"description":"Whether or not the current service expose an API with an Open API descriptor","example":true,"type":"boolean"},"openApiDescriptorUrl":{"description":"The URL of the Open API descriptor","example":"http://www.google.com","format":"uri","type":"string"}},"required":["exposeApi"],"type":"object"},"FileDataExporterConfig":{"properties":{"path":{"description":"Path to file","example":"a string value","type":"string"}},"required":["path"],"type":"object"},"Filtering":{"properties":{"exclude":{"description":"Excluding pattern","items":{"additionalProperties":{"type":"string"},"example":{"key":"value"},"type":"object"},"type":"array"},"include":{"description":"Including pattern","items":{"additionalProperties":{"type":"string"},"example":{"key":"value"},"type":"object"},"type":"array"}},"required":["include, exclude"],"type":"object"},"GenericOauth2ModuleConfig":{"description":"Settings to authenticate users using a generic OAuth2 provider","properties":{"accessTokenField":{"description":"Field name to get access token","example":"a string value","type":"string"},"authorizeUrl":{"description":"OAuth authorize URL","example":"a string value","type":"string"},"callbackUrl":{"description":"Otoroshi callback URL","example":"a string value","type":"string"},"claims":{"description":"The claims of the token","example":"a string value","type":"string"},"clientId":{"description":"OAuth Client id","example":"a string value","type":"string"},"clientSecret":{"description":"OAuth Client secret","example":"a string value","type":"string"},"desc":{"description":"Description of the config","example":"a string value","type":"string"},"emailField":{"description":"Field name to get email from user profile","example":"a string value","type":"string"},"id":{"description":"Unique id of the config","example":"a string value","type":"string"},"jwtVerifier":{"description":"Algo. settings to verify JWT token","oneOf":[{"$ref":"#/components/schemas/HSAlgoSettings"},{"$ref":"#/components/schemas/RSAlgoSettings"},{"$ref":"#/components/schemas/ESAlgoSettings"},{"$ref":"#/components/schemas/JWKSAlgoSettings"}]},"loginUrl":{"description":"OAuth login URL","example":"a string value","type":"string"},"logoutUrl":{"description":"OAuth logout URL","example":"a string value","type":"string"},"name":{"description":"Name of the config","example":"a string value","type":"string"},"nameField":{"description":"Field name to get name from user profile","example":"a string value","type":"string"},"oidConfig":{"description":"URL of the OIDC config. file","example":"a string value","type":"string"},"otoroshiDataField":{"description":"Field name to get otoroshi metadata from. You can specify sub fields using | as separator","example":"a string value","type":"string"},"readProfileFromToken":{"description":"The user profile will be read from the JWT token in id_token","example":true,"type":"boolean"},"scope":{"description":"The scope of the token","example":"a string value","type":"string"},"sessionMaxAge":{"description":"Max age of the session","example":123123,"format":"int32","type":"integer"},"tokenUrl":{"description":"OAuth token URL","example":"a string value","type":"string"},"type":{"description":"Type of settings. value is oauth2","example":"a string value","type":"string"},"useCookies":{"description":"Use for redirection to actual service","example":true,"type":"boolean"},"useJson":{"description":"Use JSON or URL Form Encoded as payload with the OAuth provider","example":true,"type":"boolean"},"userInfoUrl":{"description":"OAuth userinfo to get user profile","example":"a string value","type":"string"}},"required":["type","id","name","desc","sessionMaxAge","clientId","clientSecret","authorizeUrl","tokenUrl","userInfoUrl","loginUrl","logoutUrl","callbackUrl","accessTokenField","nameField","emailField","otoroshiDataField"],"type":"object"},"GlobalConfig":{"description":"The global config object of Otoroshi, used to customize settings of the current Otoroshi instance","properties":{"alertsEmails":{"description":"Email addresses that will receive all Otoroshi alert events","items":{"example":"admin@otoroshi.io","format":"email","type":"string"},"type":"array"},"alertsWebhooks":{"description":"Webhook that will receive all Otoroshi alert events","items":{"$ref":"#/components/schemas/Webhook"},"type":"array"},"analyticsWebhooks":{"description":"Webhook that will receive all internal Otoroshi events","items":{"$ref":"#/components/schemas/Webhook"},"type":"array"},"apiReadOnly":{"description":"If enabled, Admin API won't be able to write/update/delete entities","example":true,"type":"boolean"},"autoLinkToDefaultGroup":{"description":"If not defined, every new service descriptor will be added to the default group","example":true,"type":"boolean"},"backofficeAuth0Config":{"$ref":"#/components/schemas/Auth0Config","description":"Optional configuration for the backoffice Auth0 domain"},"cleverSettings":{"$ref":"#/components/schemas/CleverSettings","description":"Optional CleverCloud configuration"},"elasticReadsConfig":{"$ref":"#/components/schemas/ElasticConfig","description":"Config. for elastic reads"},"elasticWritesConfigs":{"description":"Configs. for Elastic writes","items":{"$ref":"#/components/schemas/ElasticConfig"},"type":"array"},"endlessIpAddresses":{"description":"IP addresses for which any request to Otoroshi will respond with 128 Gb of zeros","items":{"example":"192.192.192.192","format":"ipv4","type":"string"},"type":"array"},"ipFiltering":{"$ref":"#/components/schemas/IpFiltering"},"limitConcurrentRequests":{"description":"If enabled, Otoroshi will reject new request if too much at the same time","example":true,"type":"boolean"},"lines":{"description":"Possibles lines for Otoroshi","items":{"example":"a string value","type":"string"},"type":"array"},"mailerSettings":{"$ref":"#/components/schemas/MailerSettings","description":"Optional mailer configuration"},"maxConcurrentRequests":{"description":"The number of authorized request processed at the same time","example":123,"format":"int64","type":"integer"},"maxHttp10ResponseSize":{"description":"The max size in bytes of an HTTP 1.0 response","example":123,"format":"int64","type":"integer"},"maxLogsSize":{"description":"Number of events kept locally","example":123123,"format":"int32","type":"integer"},"middleFingers":{"description":"Use middle finger emoji as a response character for endless HTTP responses","example":true,"type":"boolean"},"perIpThrottlingQuota":{"description":"Authorized number of calls per second globally per IP address, measured on 10 seconds","example":123,"format":"int64","type":"integer"},"privateAppsAuth0Config":{"$ref":"#/components/schemas/Auth0Config","description":"Optional configuration for the private apps Auth0 domain"},"streamEntityOnly":{"description":"HTTP will be streamed only. Doesn't work with old browsers","example":true,"type":"boolean"},"throttlingQuota":{"description":"Authorized number of calls per second globally, measured on 10 seconds","example":123,"format":"int64","type":"integer"},"u2fLoginOnly":{"description":"If enabled, login to backoffice through Auth0 will be disabled","example":true,"type":"boolean"},"useCircuitBreakers":{"description":"If enabled, services will be authorized to use circuit breakers","example":true,"type":"boolean"}},"required":["streamEntityOnly","autoLinkToDefaultGroup","limitConcurrentRequests","maxConcurrentRequests","useCircuitBreakers","apiReadOnly","u2fLoginOnly","ipFiltering","throttlingQuota","perIpThrottlingQuota","analyticsWebhooks","alertsWebhooks","alertsEmails","endlessIpAddresses"],"type":"object"},"GlobalJwtVerifier":{"description":"A JWT verifier used by multiple service descriptor","properties":{"algoSettings":{"oneOf":[{"$ref":"#/components/schemas/HSAlgoSettings"},{"$ref":"#/components/schemas/RSAlgoSettings"},{"$ref":"#/components/schemas/ESAlgoSettings"},{"$ref":"#/components/schemas/JWKSAlgoSettings"}]},"desc":{"description":"Verifier description","example":"a string value","type":"string"},"enabled":{"description":"Is it enabled","example":true,"type":"boolean"},"id":{"description":"Verifier id","example":"a string value","type":"string"},"name":{"description":"Verifier name","example":"a string value","type":"string"},"source":{"oneOf":[{"$ref":"#/components/schemas/InQueryParam"},{"$ref":"#/components/schemas/InHeader"},{"$ref":"#/components/schemas/InCookie"}]},"strategy":{"oneOf":[{"$ref":"#/components/schemas/PassThrough"},{"$ref":"#/components/schemas/Sign"},{"$ref":"#/components/schemas/Transform"}]},"strict":{"description":"Does it fail if JWT not found","example":true,"type":"boolean"}},"required":["type","id","name","desc","enabled","strict","source","algoSettings","strategy"],"type":"object"},"Group":{"description":"An Otoroshi service group is just a group of service descriptor. It is useful to be able to define Api Keys for the whole group","properties":{"description":{"description":"The descriptoin of the group","example":"a string value","type":"string"},"id":{"description":"The unique id of the group. Usually 64 random alpha numerical characters, but can be anything","example":"a string value","type":"string"},"name":{"description":"The name of the group","example":"a string value","type":"string"}},"required":["id","name"],"type":"object"},"Gzip":{"description":"Configuration for gzip of service responses","properties":{"blackList":{"description":"Blacklisted mime types. Wildcard supported","items":{"example":"a string value","type":"string"},"type":"array"},"bufferSize":{"description":"Size of the GZip buffer","example":123,"format":"int64","type":"integer"},"chunkedThreshold":{"description":"Threshold for chunking data","example":123,"format":"int64","type":"integer"},"compressionLevel":{"description":"Compression level. From 0 to 9","example":123123,"format":"int32","type":"integer"},"enabled":{"description":"Whether gzip compression is enabled or not","example":true,"type":"boolean"},"excludedPatterns":{"description":"Patterns that are excluded from gzipping","items":{"example":"a string value","type":"string"},"type":"array"},"whiteList":{"description":"Whitelisted mime types. Wildcard supported","items":{"example":"a string value","type":"string"},"type":"array"}},"required":["enabled","excludedPatterns","whiteList","blackList","bufferSize","chunkedThreshold","compressionLevel"],"type":"object"},"HSAlgoSettings":{"description":"Settings for an HMAC + SHA signing algorithm","properties":{"secret":{"description":"The secret value for the HMAC function","example":"a string value","type":"string"},"size":{"description":"Size for SHA function. can be 256, 384 or 512","example":123123,"format":"int32","type":"integer"},"type":{"description":"String with value HSAlgoSettings","example":"a string value","type":"string"}},"required":["type","size","secret"],"type":"object"},"HealthCheck":{"description":"The configuration for checking health of a service. Otoroshi will perform GET call on the URL to check if the service is still alive","properties":{"enabled":{"description":"Whether or not healthcheck is enabled on the current service descriptor","example":true,"type":"boolean"},"url":{"description":"The URL to check","example":"http://www.google.com","format":"uri","type":"string"}},"required":["enabled"],"type":"object"},"ImportExport":{"description":"The structure that can be imported to or exported from Otoroshi. It represent the memory state of Otoroshi","properties":{"admins":{"description":"Current U2F admin at the time of export","items":{"description":"Administrator using FIDO U2F device to access Otoroshi","properties":{"createdAt":{"description":"The creation date of the user","example":123,"format":"int64","type":"integer"},"label":{"description":"The label for the user","example":"a string value","type":"string"},"password":{"description":"The hashed password of the user","example":"a string value","type":"string"},"registration":{"additionalProperties":{"type":"string"},"description":"The U2F registration slug","example":{"key":"value"},"type":"object"},"username":{"description":"The email address of the user","example":"a string value","type":"string"}},"required":["username","label","password","createdAt","registration"],"type":"object"},"type":"array"},"apiKeys":{"description":"Current apik keys at the time of export","items":{"description":"An Otoroshi Api Key. An Api Key is defined for a group of services to allow usage of the same Api Key for multiple services.","properties":{"authorizedEntities":{"description":"The group/service ids (prefixed by group_ or service_ on which the key is authorized","example":["a string value"],"items":{"example":"a string value","type":"string"},"type":"array"},"clientId":{"description":"The unique id of the Api Key. Usually 16 random alpha numerical characters, but can be anything","example":"a string value","type":"string"},"clientName":{"description":"The name of the api key, for humans ;-)","example":"a string value","type":"string"},"clientSecret":{"description":"The secret of the Api Key. Usually 64 random alpha numerical characters, but can be anything","example":"a string value","type":"string"},"dailyQuota":{"description":"Authorized number of calls per day","example":123,"format":"int64","type":"integer"},"enabled":{"description":"Whether or not the key is enabled. If disabled, resources won't be available to calls using this key","example":true,"type":"boolean"},"metadata":{"additionalProperties":{"type":"string"},"description":"Bunch of metadata for the key","example":{"key":"value"},"type":"object"},"monthlyQuota":{"description":"Authorized number of calls per month","example":123,"format":"int64","type":"integer"},"throttlingQuota":{"description":"Authorized number of calls per second, measured on 10 seconds","example":123,"format":"int64","type":"integer"}},"required":["clientId","clientSecret","clientName","authorizedEntities","enabled"],"type":"object"},"type":"array"},"appConfig":{"additionalProperties":{"type":"string"},"description":"Current env variables at the time of export","example":{"key":"value"},"type":"object"},"config":{"$ref":"#/components/schemas/GlobalConfig","description":"Current global config at the time of export"},"date":{"example":"2025-08-15T13:51:36.232Z","format":"date-time","type":"string"},"dateRaw":{"example":123,"format":"int64","type":"integer"},"errorTemplates":{"description":"Current error templates at the time of export","items":{"description":"Error templates for a service descriptor","properties":{"messages":{"additionalProperties":{"type":"string"},"description":"Map for custom messages","example":{"key":"value"},"type":"object"},"serviceId":{"description":"The Id of the service for which the error template is enabled","example":"a string value","type":"string"},"template40x":{"description":"The html template for 40x errors","example":"a string value","type":"string"},"template50x":{"description":"The html template for 50x errors","example":"a string value","type":"string"},"templateBuild":{"description":"The html template for build page","example":"a string value","type":"string"},"templateMaintenance":{"description":"The html template for maintenance page","example":"a string value","type":"string"}},"required":["serviceId","template40x","template50x","templateBuild","templateMaintenance","messages"],"type":"object"},"type":"array"},"label":{"example":"a string value","type":"string"},"serviceDescriptors":{"description":"Current service descriptors at the time of export","items":{"description":"An otoroshi service descriptor. Represent a forward HTTP call on a domain to another location with some optional api management mecanism","properties":{"Canary":{"$ref":"#/components/schemas/Canary"},"additionalHeaders":{"additionalProperties":{"type":"string"},"description":"Specify headers that will be added to each client request. Useful to add authentication","example":{"key":"value"},"type":"object"},"api":{"$ref":"#/components/schemas/ExposedApi"},"authConfigRef":{"description":"A reference to a global auth module config","example":"a string value","type":"string"},"buildMode":{"description":"Display a construction page when a user try to use the service","example":true,"type":"boolean"},"chaosConfig":{"$ref":"#/components/schemas/ChaosConfig"},"clientConfig":{"$ref":"#/components/schemas/ClientConfig"},"clientValidatorRef":{"description":"A reference to validation authority","example":"a string value","type":"string"},"cors":{"$ref":"#/components/schemas/CorsSettings"},"domain":{"description":"The domain on which the service is available.","example":"a string value","type":"string"},"enabled":{"description":"Activate or deactivate your service. Once disabled, users will get an error page saying the service does not exist","example":true,"type":"boolean"},"enforceSecureCommunication":{"description":"When enabled, Otoroshi will try to exchange headers with downstream service to ensure no one else can use the service from outside","example":true,"type":"boolean"},"env":{"description":"The line on which the service is available. Based on that value, the name of the line will be appended to the subdomain. For line prod, nothing will be appended. For example, if the subdomain is 'foo' and line is 'preprod', then the exposed service will be available at 'foo.preprod.mydomain'","example":"a string value","type":"string"},"forceHttps":{"description":"Will force redirection to https:// if not present","example":true,"type":"boolean"},"groups":{"description":"Each service descriptor is attached to groups. A group can have one or more services. Each API key is linked to a group and allow access to every service in the group","example":["a string value"],"items":{"example":"a string value","type":"string"},"type":"array"},"gzip":{"$ref":"#/components/schemas/Gzip"},"headersVerification":{"additionalProperties":{"type":"string"},"description":"Specify headers that will be verified after routing.","example":{"key":"value"},"type":"object"},"healthCheck":{"$ref":"#/components/schemas/HealthCheck"},"id":{"description":"A unique random string to identify your service","example":"110e8400-e29b-11d4-a716-446655440000","format":"uuid","type":"string"},"ipFiltering":{"$ref":"#/components/schemas/IpFiltering"},"jwtVerifier":{"oneOf":[{"$ref":"#/components/schemas/LocalJwtVerifier"},{"$ref":"#/components/schemas/RefJwtVerifier"}]},"localHost":{"description":"The host used localy, mainly localhost:xxxx","example":"a string value","type":"string"},"localScheme":{"description":"The scheme used localy, mainly http","example":"a string value","type":"string"},"maintenanceMode":{"description":"Display a maintainance page when a user try to use the service","example":true,"type":"boolean"},"matchingHeaders":{"additionalProperties":{"type":"string"},"description":"Specify headers that MUST be present on client request to route it. Useful to implement versioning","example":{"key":"value"},"type":"object"},"matchingRoot":{"description":"The root path on which the service is available","example":"a string value","type":"string"},"metadata":{"additionalProperties":{"type":"string"},"description":"Just a bunch of random properties","example":{"key":"value"},"type":"object"},"name":{"description":"The name of your service. Only for debug and human readability purposes","example":"a string value","type":"string"},"overrideHost":{"description":"Host header will be overriden with Host of the target","example":true,"type":"boolean"},"privateApp":{"description":"When enabled, user will be allowed to use the service (UI) only if they are registered users of the private apps domain","example":true,"type":"boolean"},"privatePatterns":{"description":"If you define a public pattern that is a little bit too much, you can make some of public URL private again","items":{"example":"a string value","type":"string"},"type":"array"},"publicPatterns":{"description":"By default, every services are private only and you'll need an API key to access it. However, if you want to expose a public UI, you can define one or more public patterns (regex) to allow access to anybody. For example if you want to allow anybody on any URL, just use '/.*'","items":{"example":"a string value","type":"string"},"type":"array"},"redirectToLocal":{"description":"If you work locally with Otoroshi, you may want to use that feature to redirect one particuliar service to a local host. For example, you can relocate https://foo.preprod.bar.com to http://localhost:8080 to make some tests","example":true,"type":"boolean"},"redirection":{"$ref":"#/components/schemas/RedirectionSettings"},"root":{"description":"Otoroshi will append this root to any target choosen. If the specified root is '/api/foo', then a request to https://yyyyyyy/bar will actually hit https://xxxxxxxxx/api/foo/bar","example":"a string value","type":"string"},"secComExcludedPatterns":{"description":"URI patterns excluded from secured communications","items":{"example":"a string value","type":"string"},"type":"array"},"secComSettings":{"oneOf":[{"$ref":"#/components/schemas/HSAlgoSettings"},{"$ref":"#/components/schemas/RSAlgoSettings"},{"$ref":"#/components/schemas/ESAlgoSettings"},{"$ref":"#/components/schemas/JWKSAlgoSettings"}]},"sendOtoroshiHeadersBack":{"description":"When enabled, Otoroshi will send headers to consumer like request id, client latency, overhead, etc ...","example":true,"type":"boolean"},"statsdConfig":{"$ref":"#/components/schemas/StatsdConfig"},"subdomain":{"description":"The subdomain on which the service is available","example":"a string value","type":"string"},"targets":{"description":"The list of target that Otoroshi will proxy and expose through the subdomain defined before. Otoroshi will do round-robin load balancing between all those targets with circuit breaker mecanism to avoid cascading failures","items":{"$ref":"#/components/schemas/Target"},"type":"array"},"transformerRef":{"description":"A reference to a request transformer","example":"a string value","type":"string"},"userFacing":{"description":"The fact that this service will be seen by users and cannot be impacted by the Snow Monkey","example":true,"type":"boolean"},"xForwardedHeaders":{"description":"Send X-Forwarded-* headers","example":true,"type":"boolean"}},"required":["id","groups","name","env","domain","subdomain","targets","root","enabled","privateApp","forceHttps","maintenanceMode","buildMode","enforceSecureCommunication"],"type":"object"},"type":"array"},"serviceGroups":{"description":"Current service groups at the time of export","items":{"description":"An Otoroshi service group is just a group of service descriptor. It is useful to be able to define Api Keys for the whole group","properties":{"description":{"description":"The descriptoin of the group","example":"a string value","type":"string"},"id":{"description":"The unique id of the group. Usually 64 random alpha numerical characters, but can be anything","example":"a string value","type":"string"},"name":{"description":"The name of the group","example":"a string value","type":"string"}},"required":["id","name"],"type":"object"},"type":"array"},"simpleAdmins":{"description":"Current simple admins at the time of export","items":{"description":"Administrator using just login/password tuple to access Otoroshi","properties":{"createdAt":{"description":"The creation date of the user","example":123,"format":"int64","type":"integer"},"label":{"description":"The label for the user","example":"a string value","type":"string"},"password":{"description":"The hashed password of the user","example":"a string value","type":"string"},"username":{"description":"The email address of the user","example":"a string value","type":"string"}},"required":["username","label","password","createdAt"],"type":"object"},"type":"array"},"stats":{"$ref":"#/components/schemas/ImportExportStats","description":"Current global stats at the time of export"}},"required":["label","dateRaw","date","stats","config","admins","simpleAdmins","serviceGroups","apiKeys","serviceDescriptors","errorTemplates"],"type":"object"},"ImportExportStats":{"description":"Global stats for the current Otoroshi instances","properties":{"calls":{"description":"Number of calls to Otoroshi globally","example":123,"format":"int64","type":"integer"},"dataIn":{"description":"The amount of data sent to Otoroshi globally","example":123,"format":"int64","type":"integer"},"dataOut":{"description":"The amount of data sent from Otoroshi globally","example":123,"format":"int64","type":"integer"}},"required":["calls","dataIn","dataOut"],"type":"object"},"InCookie":{"description":"JWT location in a cookie","properties":{"name":{"description":"Name of the cookie","example":"a string value","type":"string"},"type":{"description":"String with value InCookie","example":"a string value","type":"string"}},"required":["type","name"],"type":"object"},"InHeader":{"description":"JWT location in a header","properties":{"name":{"description":"Name of the header","example":"a string value","type":"string"},"remove":{"description":"Remove regex inside the value, like 'Bearer '","example":"a string value","type":"string"},"type":{"description":"String with value InHeader","example":"a string value","type":"string"}},"required":["type","name","remove"],"type":"object"},"InMemoryAuthModuleConfig":{"description":"Settings to authenticate users using the in memory user store","properties":{"desc":{"description":"Description of the config","example":"a string value","type":"string"},"id":{"description":"Unique id of the config","example":"a string value","type":"string"},"name":{"description":"Name of the config","example":"a string value","type":"string"},"sessionMaxAge":{"description":"Max age of the session","example":"a string value","type":"string"},"type":{"description":"Type of settings. value is basic","example":"a string value","type":"string"},"users":{"description":"List of users","items":{"$ref":"#/components/schemas/InMemoryUser"},"type":"array"}},"required":["type","id","name","desc","users","sessionMaxAge"],"type":"object"},"InMemoryUser":{"description":"A user","properties":{"email":{"description":"Email of the user","example":"a string value","type":"string"},"metadata":{"additionalProperties":{"type":"string"},"description":"Metadata of the user","example":{"key":"value"},"type":"object"},"name":{"description":"Name of the user","example":"a string value","type":"string"},"password":{"description":"Password of the user (BCrypt hash)","example":"a string value","type":"string"}},"required":["name","password","email","metadata"],"type":"object"},"InQueryParam":{"description":"JWT location in a query param","properties":{"name":{"description":"Name of the query param","example":"a string value","type":"string"},"type":{"description":"String with value InQueryParam","example":"a string value","type":"string"}},"required":["type","name"],"type":"object"},"IpFiltering":{"description":"The filtering configuration block for a service of globally.","properties":{"blacklist":{"description":"Blacklisted IP addresses","items":{"example":"192.192.192.192","format":"ipv4","type":"string"},"type":"array"},"whitelist":{"description":"Whitelisted IP addresses","items":{"example":"192.192.192.192","format":"ipv4","type":"string"},"type":"array"}},"required":["whitelist","blacklist"],"type":"object"},"JWKSAlgoSettings":{"description":"Settings for a JWK set","properties":{"headers":{"additionalProperties":{"type":"string"},"description":"The headers for the http call","example":{"key":"value"},"type":"object"},"kty":{"description":"The type of key: RSA or EC","example":"a string value","type":"string"},"timeout":{"description":"The timeout of the http call","example":123,"format":"int64","type":"integer"},"ttl":{"description":"The ttl of the keyset","example":123,"format":"int64","type":"integer"},"type":{"description":"String with value JWKSAlgoSettings","example":"a string value","type":"string"},"url":{"description":"The url for the http call","example":"a string value","type":"string"}},"required":["type","size","publicKey"],"type":"object"},"KafkaConfig":{"description":"The configuration for kafka access","properties":{"keyPass":{"description":"Optional keypass","example":"a string value","type":"string"},"keyStore":{"description":"Optional path to keystore","example":"a string value","type":"string"},"servers":{"description":"URLs of the kafka servers","items":{"example":"a string value","type":"string"},"type":"array"},"topic":{"description":"Optional kafka topic (otoroshi-events by default)","example":"a string value","type":"string"},"trustore":{"description":"Optional path to trustore","example":"a string value","type":"string"}},"required":["servers"],"type":"object"},"LargeRequestFaultConfig":{"description":"Config for large request injection fault","properties":{"additionalRequestSize":{"description":"The size added to the request body in bytes. Added payload will be spaces only.","example":123123,"format":"int32","type":"integer"},"ratio":{"description":"The percentage of requests affected by this fault. Value should be between 0.0 and 1.0","example":42.2,"format":"double","type":"number"}},"required":["ratio","additionalRequestSize"],"type":"object"},"LargeResponseFaultConfig":{"description":"Config for large response injection fault","properties":{"additionalRequestSize":{"description":"The size added to the response body in bytes. Added payload will be spaces only.","example":123123,"format":"int32","type":"integer"},"ratio":{"description":"The percentage of requests affected by this fault. Value should be between 0.0 and 1.0","example":42.2,"format":"double","type":"number"}},"required":["ratio","additionalResponseSize"],"type":"object"},"LatencyInjectionFaultConfig":{"description":"Config for large latency injection fault","properties":{"from":{"description":"The start range of latency added to the request","example":123123,"format":"int32","type":"integer"},"ratio":{"description":"The percentage of requests affected by this fault. Value should be between 0.0 and 1.0","example":42.2,"format":"double","type":"number"},"to":{"description":"The end range of latency added to the request","example":123123,"format":"int32","type":"integer"}},"required":["ratio","from","to"],"type":"object"},"LdapAuthModuleConfig":{"description":"Settings to authenticate users using a generic OAuth2 provider","properties":{"adminPassword":{"description":"The admin password","example":"a string value","type":"string"},"adminUsername":{"description":"The admin username","example":"a string value","type":"string"},"desc":{"description":"Description of the config","example":"a string value","type":"string"},"emailField":{"description":"Field name to get email from user profile","example":"a string value","type":"string"},"groupFilter":{"description":"Filter for groups","example":"a string value","type":"string"},"id":{"description":"Unique id of the config","example":"a string value","type":"string"},"name":{"description":"Name of the config","example":"a string value","type":"string"},"nameField":{"description":"Field name to get name from user profile","example":"a string value","type":"string"},"otoroshiDataField":{"description":"Field name to get otoroshi metadata from. You can specify sub fields using | as separator","example":"a string value","type":"string"},"searchBase":{"description":"LDAP search base","example":"a string value","type":"string"},"searchFilter":{"description":"Filter for users","example":"a string value","type":"string"},"serverUrl":{"description":"URL of the ldap server","example":"a string value","type":"string"},"sessionMaxAge":{"description":"Max age of the session","example":123123,"format":"int32","type":"integer"},"type":{"description":"Type of settings. value is ldap","example":"a string value","type":"string"},"userBase":{"description":"LDAP user base DN","example":"a string value","type":"string"}},"required":["type","id","name","desc","sessionMaxAge","serverUrl","searchBase","userBase","groupFilter","searchFilter","adminUsername","adminPassword","nameField","emailField","metadataField"],"type":"object"},"LdapUser":{"description":"A user","properties":{"email":{"description":"Email of the user","example":"a string value","type":"string"},"metadata":{"additionalProperties":{"type":"string"},"description":"Metadata of the user","example":{"key":"value"},"type":"object"},"name":{"description":"Name of the user","example":"a string value","type":"string"}},"required":["name","email","metadata"],"type":"object"},"LocalJwtVerifier":{"description":"A JWT verifier used only for the current service descriptor","properties":{"algoSettings":{"oneOf":[{"$ref":"#/components/schemas/HSAlgoSettings"},{"$ref":"#/components/schemas/RSAlgoSettings"},{"$ref":"#/components/schemas/ESAlgoSettings"},{"$ref":"#/components/schemas/JWKSAlgoSettings"}]},"enabled":{"description":"Is it enabled","example":true,"type":"boolean"},"source":{"oneOf":[{"$ref":"#/components/schemas/InQueryParam"},{"$ref":"#/components/schemas/InHeader"},{"$ref":"#/components/schemas/InCookie"}]},"strategy":{"oneOf":[{"$ref":"#/components/schemas/PassThrough"},{"$ref":"#/components/schemas/Sign"},{"$ref":"#/components/schemas/Transform"}]},"strict":{"description":"Does it fail if JWT not found","example":true,"type":"boolean"},"type":{"description":"A string with value 'local'","example":"a string value","type":"string"}},"required":["type","enabled","strict","source","algoSettings","strategy"],"type":"object"},"Location":{"properties":{"teams":{"description":"Team ids","items":{"additionalProperties":{"type":"string"},"example":{"key":"value"},"type":"object"},"type":"array"},"tenant":{"description":"Tenant id","example":"a string value","type":"string"}},"required":["tenant","teams"],"type":"object"},"MailerConsoleExporterConfig":{"properties":{"type":{"description":"Type of mailer","enum":["generic"],"type":"string"}},"type":"object"},"MailerGenericExporterConfig":{"properties":{"headers":{"additionalProperties":{"type":"string"},"description":"Optional headers","example":{"key":"value"},"type":"object"},"to":{"description":"Email adresses of recipents","items":{"example":"a string value","type":"string"},"type":"array"},"type":{"description":"Type of mailer","enum":["generic"],"type":"string"},"url":{"description":"Url of mailer","example":"a string value","type":"string"}},"required":["type"],"type":"object"},"MailerMailgunExporterConfig":{"properties":{"apiKey":{"description":"Mailgun apiKey","example":"a string value","type":"string"},"domain":{"description":"Mailgun domain","example":"a string value","type":"string"},"eu":{"description":"Whether the mailgun server is european","example":true,"type":"boolean"},"to":{"description":"Email adresses of recipents","items":{"example":"admin@otoroshi.io","format":"email","type":"string"},"type":"array"},"type":{"description":"Type of mailer","enum":["mailgun"],"type":"string"}},"required":["type"],"type":"object"},"MailerMailjetExporterConfig":{"properties":{"apiKeyPrivate":{"description":"Mailjet private apiKey","example":"a string value","type":"string"},"apiKeyPublic":{"description":"Mailjet public apiKey","example":"a string value","type":"string"},"to":{"description":"Email adresses of recipents","items":{"example":"admin@otoroshi.io","format":"email","type":"string"},"type":"array"},"type":{"description":"Type of mailer","enum":["mailjet"],"type":"string"}},"required":["type"],"type":"object"},"MailerSendgridExporterConfig":{"properties":{"apiKeyPublic":{"description":"Sendgrid apiKey","example":"a string value","type":"string"},"to":{"description":"Email adresses of recipents","items":{"example":"admin@otoroshi.io","format":"email","type":"string"},"type":"array"},"type":{"description":"Type of mailer","enum":["sendgrid"],"type":"string"}},"required":["type"],"type":"object"},"MailerSettings":{"description":"Configuration for mailgun api client","properties":{"apiKey":{"description":"Mailgun mailer api key","example":"a string value","type":"string"},"apiKeyPrivate":{"description":"Mailjet mailer private api key","example":"a string value","type":"string"},"apiKeyPublic":{"description":"Mailjet mailer public api key","example":"a string value","type":"string"},"domain":{"description":"Mailgun mailer domain","example":"a string value","type":"string"},"eu":{"description":"Mailgun mailer, use EU tenant api","example":true,"type":"boolean"},"header":{"additionalProperties":{"type":"string"},"description":"Generic mailer headers","example":{"key":"value"},"type":"object"},"type":{"description":"Type of the mailer: console, generic, mailgun, mailjet","example":"a string value","type":"string"},"url":{"description":"Generic mailer url","example":"a string value","type":"string"}},"required":["apiKey","domain"],"type":"object"},"MappingSettings":{"description":"Settings to change fields of a JWT token","properties":{"map":{"additionalProperties":{"type":"string"},"description":"Fields to rename","example":{"key":"value"},"type":"object"},"remove":{"description":"Fields to remove","items":{"example":"a string value","type":"string"},"type":"array"},"values":{"additionalProperties":{"type":"string"},"description":"Fields to set","example":{"key":"value"},"type":"object"}},"required":["map","values","remove"],"type":"object"},"OtoroshiHealth":{"description":"The structure that represent current Otoroshi health","properties":{"datastore":{"enum":["healthy","unhealthy","unreachable"],"type":"string"},"otoroshi":{"enum":["healthy","unhealthy","down"],"type":"string"}},"required":["label","otoroshi","datastore"],"type":"object"},"Outage":{"description":"An outage by the Snow Monkey on a service","properties":{"descriptorId":{"description":"The service impacted by outage","example":"a string value","type":"string"},"descriptorName":{"description":"The name of service impacted by outage","example":"a string value","type":"string"},"duration":{"description":"The duration of the outage","example":123123,"format":"int32","type":"integer"},"until":{"description":"The end of the outage","example":63148,"format":"time","type":"string"}},"required":["descriptorId","descriptorName","until","duration"],"type":"object"},"OutageStrategy":{"enum":["OneServicePerGroup","AllServicesPerGroup"],"type":"string"},"PassThrough":{"description":"Strategy where only signature and field values are verified","properties":{"type":{"description":"String with value PassThrough","example":"a string value","type":"string"},"verificationSettings":{"$ref":"#/components/schemas/VerificationSettings"}},"required":["type","verificationSettings"],"type":"object"},"Patch":{"description":"A set of changes described in JSON Patch format: http://jsonpatch.com/ (RFC 6902)","items":{"properties":{"op":{"enum":["add","replace","remove","copy","test"],"type":"string"},"path":{"example":"a string value","type":"string"},"value":{}},"required":["op","path"],"type":"object"},"type":"array"},"PulsarDataExporterConfig":{"description":"The configuration for kafka access","properties":{"namespace":{"description":"Namespace","example":"a string value","type":"string"},"tenant":{"description":"Tenant","example":"a string value","type":"string"},"topic":{"description":"Topic","example":"a string value","type":"string"},"uri":{"description":"URI of the pulsar server","items":{"example":"a string value","type":"string"},"type":"array"}},"required":["uri","tenant","namespace","topic"],"type":"object"},"Quotas":{"description":"Quotas state for an api key on a service group","properties":{"authorizedCallsPerDay":{"description":"The number of authorized calls per day","example":123,"format":"int64","type":"integer"},"authorizedCallsPerMonth":{"description":"The number of authorized calls per month","example":123,"format":"int64","type":"integer"},"authorizedCallsPerSec":{"description":"The number of authorized calls per second","example":123,"format":"int64","type":"integer"},"currentCallsPerDay":{"description":"The current number of calls per day","example":123,"format":"int64","type":"integer"},"currentCallsPerMonth":{"description":"The current number of calls per month","example":123,"format":"int64","type":"integer"},"currentCallsPerSec":{"description":"The current number of calls per second","example":123,"format":"int64","type":"integer"},"remainingCallsPerDay":{"description":"The remaining number of calls per day","example":123,"format":"int64","type":"integer"},"remainingCallsPerMonth":{"description":"The number of authorized calls per month","example":123,"format":"int64","type":"integer"},"remainingCallsPerSec":{"description":"The remaining number of calls per second","example":123,"format":"int64","type":"integer"}},"required":["authorizedCallsPerSec","currentCallsPerSec","remainingCallsPerSec","authorizedCallsPerDay","currentCallsPerDay","remainingCallsPerDay","authorizedCallsPerMonth","currentCallsPerMonth","remainingCallsPerMonth"],"type":"object"},"RSAlgoSettings":{"description":"Settings for an HMAC + SHA signing algorithm","properties":{"privateKey":{"description":"The private key for the RSA function","example":"a string value","type":"string"},"publicKey":{"description":"The public key for the RSA function","example":"a string value","type":"string"},"size":{"description":"Size for SHA function. can be 256, 384 or 512","example":123123,"format":"int32","type":"integer"},"type":{"description":"String with value RSAlgoSettings","example":"a string value","type":"string"}},"required":["type","size","publicKey"],"type":"object"},"RedirectionSettings":{"description":"The configuration for redirection per service","properties":{"code":{"description":"The http redirect code","example":123123,"format":"int32","type":"integer"},"enabled":{"description":"Whether or not redirection is enabled","example":true,"type":"boolean"},"to":{"description":"The location for redirection","example":"a string value","type":"string"}},"required":["enabled","to","code"],"type":"object"},"RefJwtVerifier":{"description":"Reference to a global JWT verifier","properties":{"enabled":{"description":"Is it enabled","example":true,"type":"boolean"},"id":{"description":"The id of the GlobalJWTVerifier","example":"a string value","type":"string"},"type":{"description":"A string with value 'ref'","example":"a string value","type":"string"}},"required":["type","id","enabled"],"type":"object"},"Script":{"description":"A script to transformer otoroshi requests ","properties":{"code":{"additionalProperties":{"type":"string"},"description":"The code of the script","example":{"key":"value"},"type":"object"},"desc":{"additionalProperties":{"type":"string"},"description":"The description of the script","example":{"key":"value"},"type":"object"},"id":{"description":"The id of the script","example":"a string value","type":"string"},"name":{"description":"The name of the script","example":"a string value","type":"string"}},"required":["id","name","desc","code"],"type":"object"},"ScriptCompilationError":{"description":"The error of the compilation of a Script","properties":{"column":{"description":"The column of the error","example":"a string value","type":"string"},"file":{"additionalProperties":{"type":"string"},"description":"The file where the error is located","example":{"key":"value"},"type":"object"},"line":{"description":"The line of the error","example":"a string value","type":"string"},"message":{"additionalProperties":{"type":"string"},"description":"The message to display for the error","example":{"key":"value"},"type":"object"},"rawMessage":{"additionalProperties":{"type":"string"},"description":"The raw message from the compiler","example":{"key":"value"},"type":"object"}},"required":["line","column","file","rawMessage","message"],"type":"object"},"ScriptCompilationResult":{"description":"The result of the compilation of a Script","properties":{"done":{"description":"Is the task done or not","example":true,"type":"boolean"},"error":{"$ref":"#/components/schemas/ScriptCompilationError"}},"required":["done"],"type":"object"},"Service":{"description":"An otoroshi service descriptor. Represent a forward HTTP call on a domain to another location with some optional api management mecanism","properties":{"Canary":{"$ref":"#/components/schemas/Canary"},"additionalHeaders":{"additionalProperties":{"type":"string"},"description":"Specify headers that will be added to each client request. Useful to add authentication","example":{"key":"value"},"type":"object"},"api":{"$ref":"#/components/schemas/ExposedApi"},"authConfigRef":{"description":"A reference to a global auth module config","example":"a string value","type":"string"},"buildMode":{"description":"Display a construction page when a user try to use the service","example":true,"type":"boolean"},"chaosConfig":{"$ref":"#/components/schemas/ChaosConfig"},"clientConfig":{"$ref":"#/components/schemas/ClientConfig"},"clientValidatorRef":{"description":"A reference to validation authority","example":"a string value","type":"string"},"cors":{"$ref":"#/components/schemas/CorsSettings"},"domain":{"description":"The domain on which the service is available.","example":"a string value","type":"string"},"enabled":{"description":"Activate or deactivate your service. Once disabled, users will get an error page saying the service does not exist","example":true,"type":"boolean"},"enforceSecureCommunication":{"description":"When enabled, Otoroshi will try to exchange headers with downstream service to ensure no one else can use the service from outside","example":true,"type":"boolean"},"env":{"description":"The line on which the service is available. Based on that value, the name of the line will be appended to the subdomain. For line prod, nothing will be appended. For example, if the subdomain is 'foo' and line is 'preprod', then the exposed service will be available at 'foo.preprod.mydomain'","example":"a string value","type":"string"},"forceHttps":{"description":"Will force redirection to https:// if not present","example":true,"type":"boolean"},"groups":{"description":"Each service descriptor is attached to groups. A group can have one or more services. Each API key is linked to a group and allow access to every service in the group","example":["a string value"],"items":{"example":"a string value","type":"string"},"type":"array"},"gzip":{"$ref":"#/components/schemas/Gzip"},"headersVerification":{"additionalProperties":{"type":"string"},"description":"Specify headers that will be verified after routing.","example":{"key":"value"},"type":"object"},"healthCheck":{"$ref":"#/components/schemas/HealthCheck"},"id":{"description":"A unique random string to identify your service","example":"110e8400-e29b-11d4-a716-446655440000","format":"uuid","type":"string"},"ipFiltering":{"$ref":"#/components/schemas/IpFiltering"},"jwtVerifier":{"oneOf":[{"$ref":"#/components/schemas/LocalJwtVerifier"},{"$ref":"#/components/schemas/RefJwtVerifier"}]},"localHost":{"description":"The host used localy, mainly localhost:xxxx","example":"a string value","type":"string"},"localScheme":{"description":"The scheme used localy, mainly http","example":"a string value","type":"string"},"maintenanceMode":{"description":"Display a maintainance page when a user try to use the service","example":true,"type":"boolean"},"matchingHeaders":{"additionalProperties":{"type":"string"},"description":"Specify headers that MUST be present on client request to route it. Useful to implement versioning","example":{"key":"value"},"type":"object"},"matchingRoot":{"description":"The root path on which the service is available","example":"a string value","type":"string"},"metadata":{"additionalProperties":{"type":"string"},"description":"Just a bunch of random properties","example":{"key":"value"},"type":"object"},"name":{"description":"The name of your service. Only for debug and human readability purposes","example":"a string value","type":"string"},"overrideHost":{"description":"Host header will be overriden with Host of the target","example":true,"type":"boolean"},"privateApp":{"description":"When enabled, user will be allowed to use the service (UI) only if they are registered users of the private apps domain","example":true,"type":"boolean"},"privatePatterns":{"description":"If you define a public pattern that is a little bit too much, you can make some of public URL private again","items":{"example":"a string value","type":"string"},"type":"array"},"publicPatterns":{"description":"By default, every services are private only and you'll need an API key to access it. However, if you want to expose a public UI, you can define one or more public patterns (regex) to allow access to anybody. For example if you want to allow anybody on any URL, just use '/.*'","items":{"example":"a string value","type":"string"},"type":"array"},"redirectToLocal":{"description":"If you work locally with Otoroshi, you may want to use that feature to redirect one particuliar service to a local host. For example, you can relocate https://foo.preprod.bar.com to http://localhost:8080 to make some tests","example":true,"type":"boolean"},"redirection":{"$ref":"#/components/schemas/RedirectionSettings"},"root":{"description":"Otoroshi will append this root to any target choosen. If the specified root is '/api/foo', then a request to https://yyyyyyy/bar will actually hit https://xxxxxxxxx/api/foo/bar","example":"a string value","type":"string"},"secComExcludedPatterns":{"description":"URI patterns excluded from secured communications","items":{"example":"a string value","type":"string"},"type":"array"},"secComSettings":{"oneOf":[{"$ref":"#/components/schemas/HSAlgoSettings"},{"$ref":"#/components/schemas/RSAlgoSettings"},{"$ref":"#/components/schemas/ESAlgoSettings"},{"$ref":"#/components/schemas/JWKSAlgoSettings"}]},"sendOtoroshiHeadersBack":{"description":"When enabled, Otoroshi will send headers to consumer like request id, client latency, overhead, etc ...","example":true,"type":"boolean"},"statsdConfig":{"$ref":"#/components/schemas/StatsdConfig"},"subdomain":{"description":"The subdomain on which the service is available","example":"a string value","type":"string"},"targets":{"description":"The list of target that Otoroshi will proxy and expose through the subdomain defined before. Otoroshi will do round-robin load balancing between all those targets with circuit breaker mecanism to avoid cascading failures","items":{"$ref":"#/components/schemas/Target"},"type":"array"},"transformerRef":{"description":"A reference to a request transformer","example":"a string value","type":"string"},"userFacing":{"description":"The fact that this service will be seen by users and cannot be impacted by the Snow Monkey","example":true,"type":"boolean"},"xForwardedHeaders":{"description":"Send X-Forwarded-* headers","example":true,"type":"boolean"}},"required":["id","groups","name","env","domain","subdomain","targets","root","enabled","privateApp","forceHttps","maintenanceMode","buildMode","enforceSecureCommunication"],"type":"object"},"Sign":{"description":"Strategy where signature and field values are verified, and then token si re-signed","properties":{"algoSettings":{"oneOf":[{"$ref":"#/components/schemas/HSAlgoSettings"},{"$ref":"#/components/schemas/RSAlgoSettings"},{"$ref":"#/components/schemas/ESAlgoSettings"},{"$ref":"#/components/schemas/JWKSAlgoSettings"}]},"type":{"description":"String with value Sign","example":"a string value","type":"string"},"verificationSettings":{"$ref":"#/components/schemas/VerificationSettings"}},"required":["type","verificationSettings","algoSettings"],"type":"object"},"SimpleAdmin":{"description":"Administrator using just login/password tuple to access Otoroshi","properties":{"createdAt":{"description":"The creation date of the user","example":123,"format":"int64","type":"integer"},"label":{"description":"The label for the user","example":"a string value","type":"string"},"password":{"description":"The hashed password of the user","example":"a string value","type":"string"},"username":{"description":"The email address of the user","example":"a string value","type":"string"}},"required":["username","label","password","createdAt"],"type":"object"},"SnowMonkeyConfig":{"description":"Configuration for the faults that can be injected in requests. The name Snow Monkey is an hommage to Netflix's Chaos Monkey 😉","properties":{"chaosConfig":{"$ref":"#/components/schemas/ChaosConfig"},"dryRun":{"description":"Whether or not outages will actualy impact requests","example":true,"type":"boolean"},"enabled":{"description":"Whether or not this config is enabled","example":true,"type":"boolean"},"includeUserFacingDescriptors":{"description":"Whether or not user facing apps. will be impacted by Snow Monkey","example":true,"type":"boolean"},"outageDurationFrom":{"description":"Start of outage duration range","example":123123,"format":"int32","type":"integer"},"outageDurationTo":{"description":"End of outage duration range","example":123123,"format":"int32","type":"integer"},"outageStrategy":{"$ref":"#/components/schemas/OutageStrategy","description":""},"startTime":{"description":"Start time of Snow Monkey each day","example":63148,"format":"time","type":"string"},"stopTime":{"description":"Stop time of Snow Monkey each day","example":63148,"format":"time","type":"string"},"targetGroups":{"description":"Groups impacted by Snow Monkey. If empty, all groups will be impacted","items":{"example":"a string value","type":"string"},"type":"array"},"timesPerDay":{"description":"Number of time per day each service will be outage","example":123123,"format":"int32","type":"integer"}},"required":["enabled","outageStrategy","includeUserFacingDescriptors","dryRun","timesPerDay","startTime","stopTime","outageDurationFrom","outageDurationTo","targetGroups","chaosConfig"],"type":"object"},"Stats":{"description":"Live stats for a service or globally","properties":{"calls":{"description":"Number of calls on the specified service or globally","example":123,"format":"int64","type":"integer"},"concurrentHandledRequests":{"description":"The number of concurrent request currently","example":123,"format":"int64","type":"integer"},"dataIn":{"description":"The amount of data sent to the specified service or Otoroshi globally","example":123,"format":"int64","type":"integer"},"dataInRate":{"description":"The rate of data sent to the specified service or Otoroshi globally","example":42.2,"format":"double","type":"number"},"dataOut":{"description":"The amount of data sent from the specified service or Otoroshi globally","example":123,"format":"int64","type":"integer"},"dataOutRate":{"description":"The rate of data sent from the specified service or Otoroshi globally","example":42.2,"format":"double","type":"number"},"duration":{"description":"The average duration for a call","example":42.2,"format":"double","type":"number"},"overhead":{"description":"The average overhead time induced by Otoroshi for each call","example":42.2,"format":"double","type":"number"},"rate":{"description":"The rate of data sent from and to the specified service or Otoroshi globally","example":42.2,"format":"double","type":"number"}},"required":["calls","dataIn","dataOut","rate","duration","overhead","dataInRate","dataOutRate","concurrentHandledRequests"],"type":"object"},"StatsdConfig":{"description":"The configuration for statsd metrics push","properties":{"datadog":{"description":"Datadog agent","example":true,"type":"boolean"},"host":{"description":"The host of the StatsD agent","example":"a string value","type":"string"},"port":{"description":"The port of the StatsD agent","example":123123,"format":"int32","type":"integer"}},"required":["host","port","datadog"],"type":"object"},"Target":{"description":"A Target is where an HTTP call will be forwarded in the end from a service domain","properties":{"host":{"description":"The host on which the HTTP call will be forwarded. Can be a domain name, or an IP address. Can also have a port","example":"www.google.com","format":"hostname","type":"string"},"scheme":{"description":"The protocol used for communication. Can be http or https","example":"a string value","type":"string"}},"required":["host","scheme"],"type":"object"},"Transform":{"description":"Strategy where signature and field values are verified, trasnformed and then token si re-signed","properties":{"algoSettings":{"oneOf":[{"$ref":"#/components/schemas/HSAlgoSettings"},{"$ref":"#/components/schemas/RSAlgoSettings"},{"$ref":"#/components/schemas/ESAlgoSettings"},{"$ref":"#/components/schemas/JWKSAlgoSettings"}]},"transformSettings":{"$ref":"#/components/schemas/TransformSettings"},"type":{"description":"String with value Transform","example":"a string value","type":"string"},"verificationSettings":{"$ref":"#/components/schemas/VerificationSettings"}},"required":["type","verificationSettings","algoSettings"],"type":"object"},"TransformSettings":{"description":"Settings to transform a JWT token and its location","properties":{"location":{"oneOf":[{"$ref":"#/components/schemas/InQueryParam"},{"$ref":"#/components/schemas/InHeader"},{"$ref":"#/components/schemas/InCookie"}]},"mappingSettings":{"$ref":"#/components/schemas/MappingSettings"}},"required":["location","mappingSettings"],"type":"object"},"U2FAdmin":{"description":"Administrator using FIDO U2F device to access Otoroshi","properties":{"createdAt":{"description":"The creation date of the user","example":123,"format":"int64","type":"integer"},"label":{"description":"The label for the user","example":"a string value","type":"string"},"password":{"description":"The hashed password of the user","example":"a string value","type":"string"},"registration":{"additionalProperties":{"type":"string"},"description":"The U2F registration slug","example":{"key":"value"},"type":"object"},"username":{"description":"The email address of the user","example":"a string value","type":"string"}},"required":["username","label","password","createdAt","registration"],"type":"object"},"ValidationAuthority":{"description":"Settings to access a validation authority server","properties":{"alwaysValid":{"description":"Bypass http calls, every certificates are valids","example":true,"type":"boolean"},"badTtl":{"description":"The TTL for invalid access response caching","example":123,"format":"int64","type":"integer"},"description":{"description":"The description of the settings","example":"a string value","type":"string"},"goodTtl":{"description":"The TTL for valid access response caching","example":123,"format":"int64","type":"integer"},"headers":{"additionalProperties":{"type":"string"},"description":"HTTP call headers","example":{"key":"value"},"type":"object"},"host":{"description":"The host of the server","example":"a string value","type":"string"},"id":{"description":"The id of the settings","example":"a string value","type":"string"},"method":{"description":"The HTTP method","example":"a string value","type":"string"},"name":{"description":"The name of the settings","example":"a string value","type":"string"},"noCache":{"description":"Avoid caching responses","example":true,"type":"boolean"},"path":{"description":"The URL path","example":"a string value","type":"string"},"timeout":{"description":"The call timeout","example":123,"format":"int64","type":"integer"},"url":{"description":"The URL of the server","example":"a string value","type":"string"}},"required":["id","name","description","url","host","goodTtl","badTtl","method","path","timeout","noCache","alwaysValid","headers"],"type":"object"},"VerificationSettings":{"description":"Settings to verify the value of JWT token fields","properties":{"fields":{"additionalProperties":{"type":"string"},"description":"Fields to verify with their values","example":{"key":"value"},"type":"object"},"mappingSettings":{"$ref":"#/components/schemas/MappingSettings"}},"required":["fields"],"type":"object"},"Webhook":{"description":"A callback URL where events are posted","properties":{"headers":{"additionalProperties":{"type":"string"},"description":"Headers to authorize the call or whatever","example":{"key":"value"},"type":"object"},"url":{"description":"The URL where events are posted","example":"http://www.google.com","format":"uri","type":"string"}},"required":["url","headers"],"type":"object"},"whebhookConfig":{"description":"The configuration for webhook","properties":{"headers":{"additionalProperties":{"type":"string"},"description":"Optional headers","example":{"key":"value"},"type":"object"},"url":{"description":"URLs of the webhook","items":{"example":"a string value","type":"string"},"type":"array"}},"required":["servers"],"type":"object"}},"securitySchemes":{"otoroshi_auth":{"scheme":"basic","type":"http"}}}}