{"files":{"SKILL.md":"---\nname: otoroshi-admin-api\ndescription: \"Otoroshi Admin API skill. Use when working with Otoroshi Admin for new, lines, api. Covers 102 endpoints.\"\nversion: 1.0.0\ngenerator: lapsh\n---\n\n# Otoroshi Admin API\nAPI version: 1.5.0-dev\n\n## Auth\nBearer basic\n\n## Base URL\nhttp://otoroshi-api.oto.tools/\n\n## Setup\n1. Set Authorization header with your Bearer token\n2. GET /new/apikey -- verify access\n3. POST /api/services/{serviceId}/apikeys -- create first apikeys\n\n## Endpoints\n\n102 endpoints across 4 groups. See references/api-spec.lap for full details.\n\n### new\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /new/apikey | Get a template of an Otoroshi Api Key |\n| GET | /new/service | Get a template of an Otoroshi service descriptor |\n| GET | /new/group | Get a template of an Otoroshi service group |\n\n### lines\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /lines | Get all environments |\n| GET | /lines/{line}/services | Get all services for an environment |\n\n### api\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /api/services/{serviceId}/apikeys/{clientId}/quotas | Get the quota state of an api key |\n| DELETE | /api/services/{serviceId}/apikeys/{clientId}/quotas | Reset the quota state of an api key |\n| GET | /api/services/{serviceId}/apikeys/{clientId}/group | Get the group of an api key |\n| GET | /api/services/{serviceId}/apikeys/{clientId} | Get an api key |\n| PUT | /api/services/{serviceId}/apikeys/{clientId} | Update an api key |\n| PATCH | /api/services/{serviceId}/apikeys/{clientId} | Update an api key with a diff |\n| DELETE | /api/services/{serviceId}/apikeys/{clientId} | Delete an api key |\n| GET | /api/services/{serviceId}/apikeys | Get all api keys for the group of a service |\n| POST | /api/services/{serviceId}/apikeys | Create a new api key for a service |\n| GET | /api/groups/{groupId}/apikeys/{clientId}/quotas | Get the quota state of an api key |\n| DELETE | /api/groups/{groupId}/apikeys/{clientId}/quotas | Reset the quota state of an api key |\n| GET | /api/groups/{groupId}/apikeys/{clientId} | Get an api key |\n| PUT | /api/groups/{groupId}/apikeys/{clientId} | Update an api key |\n| PATCH | /api/groups/{groupId}/apikeys/{clientId} | Update an api key with a diff |\n| DELETE | /api/groups/{groupId}/apikeys/{clientId} | Delete an api key |\n| GET | /api/groups/{groupId}/apikeys | Get all api keys for the group of a service |\n| POST | /api/groups/{groupId}/apikeys | Create a new api key for a group |\n| GET | /api/apikeys | Get all api keys |\n| GET | /api/services/{serviceId}/template | Get a service descriptor error template |\n| PUT | /api/services/{serviceId}/template | Update an error template to a service descriptor |\n| POST | /api/services/{serviceId}/template | Create a service descriptor error template |\n| DELETE | /api/services/{serviceId}/template | Delete a service descriptor error template |\n| GET | /api/services/{serviceId}/targets | Get a service descriptor targets |\n| POST | /api/services/{serviceId}/targets | Add a target to a service descriptor |\n| PATCH | /api/services/{serviceId}/targets | Update a service descriptor targets |\n| DELETE | /api/services/{serviceId}/targets | Delete a service descriptor target |\n| GET | /api/services/{serviceId} | Get a service descriptor |\n| PUT | /api/services/{serviceId} | Update a service descriptor |\n| PATCH | /api/services/{serviceId} | Update a service descriptor with a diff |\n| DELETE | /api/services/{serviceId} | Delete a service descriptor |\n| GET | /api/services | Get all services |\n| POST | /api/services | Create a new service descriptor |\n| GET | /api/groups/{serviceGroupId}/services | Get all services descriptor for a group |\n| GET | /api/groups/{serviceGroupId} | Get a service group |\n| PUT | /api/groups/{serviceGroupId} | Update a service group |\n| PATCH | /api/groups/{serviceGroupId} | Update a service group with a diff |\n| DELETE | /api/groups/{serviceGroupId} | Delete a service group |\n| GET | /api/groups | Get all service groups |\n| POST | /api/groups | Create a new service group |\n| GET | /api/verifiers | Get all global JWT verifiers |\n| POST | /api/verifiers | Create one global JWT verifiers |\n| GET | /api/verifiers/{verifierId} | Get one global JWT verifiers |\n| DELETE | /api/verifiers/{verifierId} | Delete one global JWT verifiers |\n| PUT | /api/verifiers/{verifierId} | Update one global JWT verifiers |\n| PATCH | /api/verifiers/{verifierId} | Update one global JWT verifiers |\n| GET | /api/auths | Get all global auth. module configs |\n| POST | /api/auths | Create one global auth. module config |\n| GET | /api/auths/{id} | Get one global auth. module configs |\n| DELETE | /api/auths/{id} | Delete one global auth. module config |\n| PUT | /api/auths/{id} | Update one global auth. module config |\n| PATCH | /api/auths/{id} | Update one global auth. module config |\n| POST | /api/scripts/_compile | Compile a script |\n| GET | /api/scripts/{scriptId} | Get a script |\n| PUT | /api/scripts/{scriptId} | Update a script |\n| PATCH | /api/scripts/{scriptId} | Update a script with a diff |\n| DELETE | /api/scripts/{scriptId} | Delete a script |\n| GET | /api/scripts | Get all scripts |\n| POST | /api/scripts | Create a new script |\n| GET | /api/data-exporter-configs/_template | Get all data exporter configs |\n| POST | /api/data-exporter-configs/_bulk | Create a new data exporter configs |\n| PUT | /api/data-exporter-configs/_bulk | Update a data exporter configs |\n| PATCH | /api/data-exporter-configs/_bulk | Update a data exporter configs with a diff |\n| DELETE | /api/data-exporter-configs/_bulk | Delete a data exporter config |\n| GET | /api/data-exporter-configs/{dataExporterConfigId} | Get a data exporter config |\n| PUT | /api/data-exporter-configs/{dataExporterConfigId} | Update a data exporter config |\n| PATCH | /api/data-exporter-configs/{dataExporterConfigId} | Update a data exporter config with a diff |\n| DELETE | /api/data-exporter-configs/{dataExporterConfigId} | Delete a data exporter config |\n| GET | /api/data-exporter-configs | Get all data exporter configs |\n| POST | /api/data-exporter-configs | Create a new data exporter config |\n| GET | /api/certificates | Get all certificates |\n| POST | /api/certificates | Create one certificate |\n| GET | /api/certificates/{id} | Get one certificate by id |\n| DELETE | /api/certificates/{id} | Delete one certificate by id |\n| PUT | /api/certificates/{id} | Update one certificate by id |\n| PATCH | /api/certificates/{id} | Update one certificate by id |\n| GET | /api/client-validators | Get all validation authoritiess |\n| POST | /api/client-validators | Create one validation authorities |\n| GET | /api/client-validators/{id} | Get one validation authorities by id |\n| DELETE | /api/client-validators/{id} | Delete one validation authorities by id |\n| PUT | /api/client-validators/{id} | Update one validation authorities by id |\n| PATCH | /api/client-validators/{id} | Update one validation authorities by id |\n| GET | /api/snowmonkey/config | Get current Snow Monkey config |\n| PUT | /api/snowmonkey/config | Update current Snow Monkey config |\n| PATCH | /api/snowmonkey/config | Update current Snow Monkey config |\n| GET | /api/snowmonkey/outages | Get all current Snow Monkey ourages |\n| DELETE | /api/snowmonkey/outages | Reset Snow Monkey Outages for the day |\n| POST | /api/snowmonkey/_start | Start the Snow Monkey |\n| POST | /api/snowmonkey/_stop | Stop the Snow Monkey |\n| GET | /api/live/{id} | Get live feed of otoroshi stats |\n| GET | /api/live | Get global otoroshi stats |\n| GET | /api/globalconfig | Get the full configuration of Otoroshi |\n| PUT | /api/globalconfig | Update the global configuration |\n| PATCH | /api/globalconfig | Update the global configuration with a diff |\n| GET | /api/otoroshi.json | Export the full state of Otoroshi |\n| POST | /api/otoroshi.json | Import the full state of Otoroshi |\n| POST | /api/import | Import the full state of Otoroshi as a file |\n\n### health\n| Method | Path | Description |\n|--------|------|-------------|\n| GET | /health | Return current Otoroshi health |\n\n## Common Questions\n\nMatch user requests to endpoints in references/api-spec.lap. Key patterns:\n- \"List all apikey?\" -> GET /new/apikey\n- \"List all service?\" -> GET /new/service\n- \"List all group?\" -> GET /new/group\n- \"List all lines?\" -> GET /lines\n- \"List all services?\" -> GET /lines/{line}/services\n- \"List all quotas?\" -> GET /api/services/{serviceId}/apikeys/{clientId}/quotas\n- \"List all group?\" -> GET /api/services/{serviceId}/apikeys/{clientId}/group\n- \"Get apikey details?\" -> GET /api/services/{serviceId}/apikeys/{clientId}\n- \"Update a apikey?\" -> PUT /api/services/{serviceId}/apikeys/{clientId}\n- \"Partially update a apikey?\" -> PATCH /api/services/{serviceId}/apikeys/{clientId}\n- \"Delete a apikey?\" -> DELETE /api/services/{serviceId}/apikeys/{clientId}\n- \"List all apikeys?\" -> GET /api/services/{serviceId}/apikeys\n- \"Create a apikey?\" -> POST /api/services/{serviceId}/apikeys\n- \"List all quotas?\" -> GET /api/groups/{groupId}/apikeys/{clientId}/quotas\n- \"Get apikey details?\" -> GET /api/groups/{groupId}/apikeys/{clientId}\n- \"Update a apikey?\" -> PUT /api/groups/{groupId}/apikeys/{clientId}\n- \"Partially update a apikey?\" -> PATCH /api/groups/{groupId}/apikeys/{clientId}\n- \"Delete a apikey?\" -> DELETE /api/groups/{groupId}/apikeys/{clientId}\n- \"List all apikeys?\" -> GET /api/groups/{groupId}/apikeys\n- \"Create a apikey?\" -> POST /api/groups/{groupId}/apikeys\n- \"List all apikeys?\" -> GET /api/apikeys\n- \"List all template?\" -> GET /api/services/{serviceId}/template\n- \"Create a template?\" -> POST /api/services/{serviceId}/template\n- \"List all targets?\" -> GET /api/services/{serviceId}/targets\n- \"Create a target?\" -> POST /api/services/{serviceId}/targets\n- \"Get service details?\" -> GET /api/services/{serviceId}\n- \"Update a service?\" -> PUT /api/services/{serviceId}\n- \"Partially update a service?\" -> PATCH /api/services/{serviceId}\n- \"Delete a service?\" -> DELETE /api/services/{serviceId}\n- \"List all services?\" -> GET /api/services\n- \"Create a service?\" -> POST /api/services\n- \"List all services?\" -> GET /api/groups/{serviceGroupId}/services\n- \"Get group details?\" -> GET /api/groups/{serviceGroupId}\n- \"Update a group?\" -> PUT /api/groups/{serviceGroupId}\n- \"Partially update a group?\" -> PATCH /api/groups/{serviceGroupId}\n- \"Delete a group?\" -> DELETE /api/groups/{serviceGroupId}\n- \"List all groups?\" -> GET /api/groups\n- \"Create a group?\" -> POST /api/groups\n- \"List all verifiers?\" -> GET /api/verifiers\n- \"Create a verifier?\" -> POST /api/verifiers\n- \"Get verifier details?\" -> GET /api/verifiers/{verifierId}\n- \"Delete a verifier?\" -> DELETE /api/verifiers/{verifierId}\n- \"Update a verifier?\" -> PUT /api/verifiers/{verifierId}\n- \"Partially update a verifier?\" -> PATCH /api/verifiers/{verifierId}\n- \"List all auths?\" -> GET /api/auths\n- \"Create a auth?\" -> POST /api/auths\n- \"Get auth details?\" -> GET /api/auths/{id}\n- \"Delete a auth?\" -> DELETE /api/auths/{id}\n- \"Update a auth?\" -> PUT /api/auths/{id}\n- \"Partially update a auth?\" -> PATCH /api/auths/{id}\n- \"Create a _compile?\" -> POST /api/scripts/_compile\n- \"Get script details?\" -> GET /api/scripts/{scriptId}\n- \"Update a script?\" -> PUT /api/scripts/{scriptId}\n- \"Partially update a script?\" -> PATCH /api/scripts/{scriptId}\n- \"Delete a script?\" -> DELETE /api/scripts/{scriptId}\n- \"List all scripts?\" -> GET /api/scripts\n- \"Create a script?\" -> POST /api/scripts\n- \"List all _template?\" -> GET /api/data-exporter-configs/_template\n- \"Create a _bulk?\" -> POST /api/data-exporter-configs/_bulk\n- \"Get data-exporter-config details?\" -> GET /api/data-exporter-configs/{dataExporterConfigId}\n- \"Update a data-exporter-config?\" -> PUT /api/data-exporter-configs/{dataExporterConfigId}\n- \"Partially update a data-exporter-config?\" -> PATCH /api/data-exporter-configs/{dataExporterConfigId}\n- \"Delete a data-exporter-config?\" -> DELETE /api/data-exporter-configs/{dataExporterConfigId}\n- \"List all data-exporter-configs?\" -> GET /api/data-exporter-configs\n- \"Create a data-exporter-config?\" -> POST /api/data-exporter-configs\n- \"List all certificates?\" -> GET /api/certificates\n- \"Create a certificate?\" -> POST /api/certificates\n- \"Get certificate details?\" -> GET /api/certificates/{id}\n- \"Delete a certificate?\" -> DELETE /api/certificates/{id}\n- \"Update a certificate?\" -> PUT /api/certificates/{id}\n- \"Partially update a certificate?\" -> PATCH /api/certificates/{id}\n- \"List all client-validators?\" -> GET /api/client-validators\n- \"Create a client-validator?\" -> POST /api/client-validators\n- \"Get client-validator details?\" -> GET /api/client-validators/{id}\n- \"Delete a client-validator?\" -> DELETE /api/client-validators/{id}\n- \"Update a client-validator?\" -> PUT /api/client-validators/{id}\n- \"Partially update a client-validator?\" -> PATCH /api/client-validators/{id}\n- \"List all config?\" -> GET /api/snowmonkey/config\n- \"List all outages?\" -> GET /api/snowmonkey/outages\n- \"Create a _start?\" -> POST /api/snowmonkey/_start\n- \"Create a _stop?\" -> POST /api/snowmonkey/_stop\n- \"Get live details?\" -> GET /api/live/{id}\n- \"List all live?\" -> GET /api/live\n- \"List all globalconfig?\" -> GET /api/globalconfig\n- \"List all otoroshi.json?\" -> GET /api/otoroshi.json\n- \"Create a otoroshi.json?\" -> POST /api/otoroshi.json\n- \"Create a import?\" -> POST /api/import\n- \"List all health?\" -> GET /health\n- \"How to authenticate?\" -> See Auth section\n\n## Response Tips\n- Check response schemas in references/api-spec.lap for field details\n- Create/update endpoints typically return the created/updated object\n\n## CLI\n\n```bash\n# Update this spec to the latest version\nnpx @lap-platform/lapsh get otoroshi-admin-api -o references/api-spec.lap\n\n# Search for related APIs\nnpx @lap-platform/lapsh search otoroshi-admin-api\n```\n\n## References\n- Full spec: See references/api-spec.lap for complete endpoint details, parameter tables, and response schemas\n\n> Generated from the official API spec by [LAP](https://lap.sh)\n","references/api-spec.lap":"@lap v0.3\n# Machine-readable API spec. Each @endpoint block is one API call.\n@api Otoroshi Admin API\n@base http://otoroshi-api.oto.tools/\n@version 1.5.0-dev\n@auth Bearer basic\n@endpoints 102\n@hint download_for_search\n@toc new(3), lines(2), api(96), health(1)\n\n@group new\n@endpoint GET /new/apikey\n@desc Get a template of an Otoroshi Api Key\n@returns(200) {clientId: str, clientSecret: str, clientName: str, authorizedEntities: [str], enabled: bool, throttlingQuota: int(int64), dailyQuota: int(int64), monthlyQuota: int(int64), metadata: map} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint GET /new/service\n@desc Get a template of an Otoroshi service descriptor\n@returns(200) {id: str(uuid), groups: [str], name: str, env: str, domain: str, subdomain: str, targets: [map], root: str, matchingRoot: str, localHost: str, localScheme: str, redirectToLocal: bool, enabled: bool, userFacing: bool, privateApp: bool, forceHttps: bool, maintenanceMode: bool, buildMode: bool, enforceSecureCommunication: bool, sendOtoroshiHeadersBack: bool, xForwardedHeaders: bool, overrideHost: bool, secComExcludedPatterns: [str], publicPatterns: [str], privatePatterns: [str], ipFiltering: map{whitelist: [str(ipv4)], blacklist: [str(ipv4)]}, api: map{exposeApi: bool, openApiDescriptorUrl: str(uri)}, healthCheck: map{enabled: bool, url: str(uri)}, clientConfig: map{useCircuitBreaker: bool, retries: int(int32), maxErrors: int(int32), retryInitialDelay: int(int32), backoffFactor: int(int32), callTimeout: int(int32), globalTimeout: int(int32), sampleInterval: int(int32)}, Canary: map{enabled: bool, traffic: int(int32), targets: [map], root: str}, statsdConfig: map{host: str, port: int(int32), datadog: bool}, chaosConfig: map{enabled: bool, largeRequestFaultConfig: map{ratio: int(double), additionalRequestSize: int(int32)}, largeResponseFaultConfig: map{ratio: int(double), additionalRequestSize: int(int32)}, latencyInjectionFaultConfig: map{ratio: int(double), from: int(int32), to: int(int32)}, badResponsesFaultConfig: map{ratio: int(double), responses: [map]}}, jwtVerifier: any, secComSettings: any, metadata: map, matchingHeaders: map, additionalHeaders: map, authConfigRef: str, transformerRef: str, clientValidatorRef: str, cors: map{enabled: bool, allowOrigin: str, exposeHeaders: [str], allowHeaders: [str], allowMethods: [str], excludedPatterns: [str], maxAge: int(int32), allowCredentials: bool}, redirection: map{enabled: bool, to: str, code: int(int32)}, gzip: map{enabled: bool, excludedPatterns: [str], whiteList: [str], blackList: [str], bufferSize: int(int64), chunkedThreshold: int(int64), compressionLevel: int(int32)}, headersVerification: map} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint GET /new/group\n@desc Get a template of an Otoroshi service group\n@returns(200) {id: str, name: str, description: str} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endgroup\n\n@group lines\n@endpoint GET /lines\n@desc Get all environments\n@returns(200) Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint GET /lines/{line}/services\n@desc Get all services for an environment\n@required {line: str # The environment where to find services}\n@returns(200) Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endgroup\n\n@group api\n@endpoint GET /api/services/{serviceId}/apikeys/{clientId}/quotas\n@desc Get the quota state of an api key\n@required {serviceId: str # The api key service id, clientId: str # the api key id}\n@returns(200) {authorizedCallsPerSec: int(int64), currentCallsPerSec: int(int64), remainingCallsPerSec: int(int64), authorizedCallsPerDay: int(int64), currentCallsPerDay: int(int64), remainingCallsPerDay: int(int64), authorizedCallsPerMonth: int(int64), currentCallsPerMonth: int(int64), remainingCallsPerMonth: int(int64)} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint DELETE /api/services/{serviceId}/apikeys/{clientId}/quotas\n@desc Reset the quota state of an api key\n@required {serviceId: str # The api key service id, clientId: str # the api key id}\n@returns(200) {authorizedCallsPerSec: int(int64), currentCallsPerSec: int(int64), remainingCallsPerSec: int(int64), authorizedCallsPerDay: int(int64), currentCallsPerDay: int(int64), remainingCallsPerDay: int(int64), authorizedCallsPerMonth: int(int64), currentCallsPerMonth: int(int64), remainingCallsPerMonth: int(int64)} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint GET /api/services/{serviceId}/apikeys/{clientId}/group\n@desc Get the group of an api key\n@required {serviceId: str # The api key service id, clientId: str # the api key id}\n@returns(200) {id: str, name: str, description: str} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint GET /api/services/{serviceId}/apikeys/{clientId}\n@desc Get an api key\n@required {serviceId: str # The api key service id, clientId: str # the api key id}\n@returns(200) {clientId: str, clientSecret: str, clientName: str, authorizedEntities: [str], enabled: bool, throttlingQuota: int(int64), dailyQuota: int(int64), monthlyQuota: int(int64), metadata: map} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint PUT /api/services/{serviceId}/apikeys/{clientId}\n@desc Update an api key\n@required {serviceId: str # The api key service id, clientId: str # the api key id, clientId: str # The unique id of the Api Key. Usually 16 random alpha numerical characters, but can be anything, clientSecret: str # The secret of the Api Key. Usually 64 random alpha numerical characters, but can be anything, clientName: str # The name of the api key, for humans ;-), authorizedEntities: [str] # The group/service ids (prefixed by group_ or service_ on which the key is authorized, enabled: bool # Whether or not the key is enabled. If disabled, resources won't be available to calls using this key}\n@optional {throttlingQuota: int(int64) # Authorized number of calls per second, measured on 10 seconds, dailyQuota: int(int64) # Authorized number of calls per day, monthlyQuota: int(int64) # Authorized number of calls per month, metadata: map # Bunch of metadata for the key}\n@returns(200) {clientId: str, clientSecret: str, clientName: str, authorizedEntities: [str], enabled: bool, throttlingQuota: int(int64), dailyQuota: int(int64), monthlyQuota: int(int64), metadata: map} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint PATCH /api/services/{serviceId}/apikeys/{clientId}\n@desc Update an api key with a diff\n@required {serviceId: str # The api key service id, clientId: str # the api key id}\n@returns(200) {clientId: str, clientSecret: str, clientName: str, authorizedEntities: [str], enabled: bool, throttlingQuota: int(int64), dailyQuota: int(int64), monthlyQuota: int(int64), metadata: map} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint DELETE /api/services/{serviceId}/apikeys/{clientId}\n@desc Delete an api key\n@required {serviceId: str # The api key service id, clientId: str # the api key id}\n@returns(200) {deleted: bool} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint GET /api/services/{serviceId}/apikeys\n@desc Get all api keys for the group of a service\n@required {serviceId: str # The api key service id}\n@returns(200) Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint POST /api/services/{serviceId}/apikeys\n@desc Create a new api key for a service\n@required {serviceId: str # The api key service id, clientId: str # The unique id of the Api Key. Usually 16 random alpha numerical characters, but can be anything, clientSecret: str # The secret of the Api Key. Usually 64 random alpha numerical characters, but can be anything, clientName: str # The name of the api key, for humans ;-), authorizedEntities: [str] # The group/service ids (prefixed by group_ or service_ on which the key is authorized, enabled: bool # Whether or not the key is enabled. If disabled, resources won't be available to calls using this key}\n@optional {throttlingQuota: int(int64) # Authorized number of calls per second, measured on 10 seconds, dailyQuota: int(int64) # Authorized number of calls per day, monthlyQuota: int(int64) # Authorized number of calls per month, metadata: map # Bunch of metadata for the key}\n@returns(200) {clientId: str, clientSecret: str, clientName: str, authorizedEntities: [str], enabled: bool, throttlingQuota: int(int64), dailyQuota: int(int64), monthlyQuota: int(int64), metadata: map} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint GET /api/groups/{groupId}/apikeys/{clientId}/quotas\n@desc Get the quota state of an api key\n@required {groupId: str # The api key group id, clientId: str # the api key id}\n@returns(200) {authorizedCallsPerSec: int(int64), currentCallsPerSec: int(int64), remainingCallsPerSec: int(int64), authorizedCallsPerDay: int(int64), currentCallsPerDay: int(int64), remainingCallsPerDay: int(int64), authorizedCallsPerMonth: int(int64), currentCallsPerMonth: int(int64), remainingCallsPerMonth: int(int64)} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint DELETE /api/groups/{groupId}/apikeys/{clientId}/quotas\n@desc Reset the quota state of an api key\n@required {groupId: str # The api key group id, clientId: str # the api key id}\n@returns(200) {authorizedCallsPerSec: int(int64), currentCallsPerSec: int(int64), remainingCallsPerSec: int(int64), authorizedCallsPerDay: int(int64), currentCallsPerDay: int(int64), remainingCallsPerDay: int(int64), authorizedCallsPerMonth: int(int64), currentCallsPerMonth: int(int64), remainingCallsPerMonth: int(int64)} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint GET /api/groups/{groupId}/apikeys/{clientId}\n@desc Get an api key\n@required {groupId: str # The api key group id, clientId: str # the api key id}\n@returns(200) {clientId: str, clientSecret: str, clientName: str, authorizedEntities: [str], enabled: bool, throttlingQuota: int(int64), dailyQuota: int(int64), monthlyQuota: int(int64), metadata: map} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint PUT /api/groups/{groupId}/apikeys/{clientId}\n@desc Update an api key\n@required {groupId: str # The api key group id, clientId: str # the api key id, clientId: str # The unique id of the Api Key. Usually 16 random alpha numerical characters, but can be anything, clientSecret: str # The secret of the Api Key. Usually 64 random alpha numerical characters, but can be anything, clientName: str # The name of the api key, for humans ;-), authorizedEntities: [str] # The group/service ids (prefixed by group_ or service_ on which the key is authorized, enabled: bool # Whether or not the key is enabled. If disabled, resources won't be available to calls using this key}\n@optional {throttlingQuota: int(int64) # Authorized number of calls per second, measured on 10 seconds, dailyQuota: int(int64) # Authorized number of calls per day, monthlyQuota: int(int64) # Authorized number of calls per month, metadata: map # Bunch of metadata for the key}\n@returns(200) {clientId: str, clientSecret: str, clientName: str, authorizedEntities: [str], enabled: bool, throttlingQuota: int(int64), dailyQuota: int(int64), monthlyQuota: int(int64), metadata: map} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint PATCH /api/groups/{groupId}/apikeys/{clientId}\n@desc Update an api key with a diff\n@required {groupId: str # The api key group id, clientId: str # the api key id}\n@returns(200) {clientId: str, clientSecret: str, clientName: str, authorizedEntities: [str], enabled: bool, throttlingQuota: int(int64), dailyQuota: int(int64), monthlyQuota: int(int64), metadata: map} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint DELETE /api/groups/{groupId}/apikeys/{clientId}\n@desc Delete an api key\n@required {groupId: str # The api key group id, clientId: str # the api key id}\n@returns(200) {deleted: bool} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint GET /api/groups/{groupId}/apikeys\n@desc Get all api keys for the group of a service\n@required {groupId: str # The api key group id}\n@returns(200) Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint POST /api/groups/{groupId}/apikeys\n@desc Create a new api key for a group\n@required {groupId: str # The api key group id, clientId: str # The unique id of the Api Key. Usually 16 random alpha numerical characters, but can be anything, clientSecret: str # The secret of the Api Key. Usually 64 random alpha numerical characters, but can be anything, clientName: str # The name of the api key, for humans ;-), authorizedEntities: [str] # The group/service ids (prefixed by group_ or service_ on which the key is authorized, enabled: bool # Whether or not the key is enabled. If disabled, resources won't be available to calls using this key}\n@optional {throttlingQuota: int(int64) # Authorized number of calls per second, measured on 10 seconds, dailyQuota: int(int64) # Authorized number of calls per day, monthlyQuota: int(int64) # Authorized number of calls per month, metadata: map # Bunch of metadata for the key}\n@returns(200) {clientId: str, clientSecret: str, clientName: str, authorizedEntities: [str], enabled: bool, throttlingQuota: int(int64), dailyQuota: int(int64), monthlyQuota: int(int64), metadata: map} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint GET /api/apikeys\n@desc Get all api keys\n@returns(200) Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint GET /api/services/{serviceId}/template\n@desc Get a service descriptor error template\n@required {serviceId: str # The service id}\n@returns(200) {serviceId: str, template40x: str, template50x: str, templateBuild: str, templateMaintenance: str, messages: map} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint PUT /api/services/{serviceId}/template\n@desc Update an error template to a service descriptor\n@required {serviceId: str # The service id, serviceId: str # The Id of the service for which the error template is enabled, template40x: str # The html template for 40x errors, template50x: str # The html template for 50x errors, templateBuild: str # The html template for build page, templateMaintenance: str # The html template for maintenance page, messages: map # Map for custom messages}\n@returns(200) {serviceId: str, template40x: str, template50x: str, templateBuild: str, templateMaintenance: str, messages: map} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint POST /api/services/{serviceId}/template\n@desc Create a service descriptor error template\n@required {serviceId: str # The service id, serviceId: str # The Id of the service for which the error template is enabled, template40x: str # The html template for 40x errors, template50x: str # The html template for 50x errors, templateBuild: str # The html template for build page, templateMaintenance: str # The html template for maintenance page, messages: map # Map for custom messages}\n@returns(200) {serviceId: str, template40x: str, template50x: str, templateBuild: str, templateMaintenance: str, messages: map} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint DELETE /api/services/{serviceId}/template\n@desc Delete a service descriptor error template\n@required {serviceId: str # The service id}\n@returns(200) {deleted: bool} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint GET /api/services/{serviceId}/targets\n@desc Get a service descriptor targets\n@required {serviceId: str # The service id}\n@returns(200) Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint POST /api/services/{serviceId}/targets\n@desc Add a target to a service descriptor\n@required {serviceId: str # The service id, host: str(hostname) # The host on which the HTTP call will be forwarded. Can be a domain name, or an IP address. Can also have a port, scheme: str # The protocol used for communication. Can be http or https}\n@returns(200) Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint PATCH /api/services/{serviceId}/targets\n@desc Update a service descriptor targets\n@required {serviceId: str # The service id}\n@returns(200) Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint DELETE /api/services/{serviceId}/targets\n@desc Delete a service descriptor target\n@required {serviceId: str # The service id}\n@returns(200) Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint GET /api/services/{serviceId}\n@desc Get a service descriptor\n@required {serviceId: str # The service id}\n@returns(200) {id: str(uuid), groups: [str], name: str, env: str, domain: str, subdomain: str, targets: [map], root: str, matchingRoot: str, localHost: str, localScheme: str, redirectToLocal: bool, enabled: bool, userFacing: bool, privateApp: bool, forceHttps: bool, maintenanceMode: bool, buildMode: bool, enforceSecureCommunication: bool, sendOtoroshiHeadersBack: bool, xForwardedHeaders: bool, overrideHost: bool, secComExcludedPatterns: [str], publicPatterns: [str], privatePatterns: [str], ipFiltering: map{whitelist: [str(ipv4)], blacklist: [str(ipv4)]}, api: map{exposeApi: bool, openApiDescriptorUrl: str(uri)}, healthCheck: map{enabled: bool, url: str(uri)}, clientConfig: map{useCircuitBreaker: bool, retries: int(int32), maxErrors: int(int32), retryInitialDelay: int(int32), backoffFactor: int(int32), callTimeout: int(int32), globalTimeout: int(int32), sampleInterval: int(int32)}, Canary: map{enabled: bool, traffic: int(int32), targets: [map], root: str}, statsdConfig: map{host: str, port: int(int32), datadog: bool}, chaosConfig: map{enabled: bool, largeRequestFaultConfig: map{ratio: int(double), additionalRequestSize: int(int32)}, largeResponseFaultConfig: map{ratio: int(double), additionalRequestSize: int(int32)}, latencyInjectionFaultConfig: map{ratio: int(double), from: int(int32), to: int(int32)}, badResponsesFaultConfig: map{ratio: int(double), responses: [map]}}, jwtVerifier: any, secComSettings: any, metadata: map, matchingHeaders: map, additionalHeaders: map, authConfigRef: str, transformerRef: str, clientValidatorRef: str, cors: map{enabled: bool, allowOrigin: str, exposeHeaders: [str], allowHeaders: [str], allowMethods: [str], excludedPatterns: [str], maxAge: int(int32), allowCredentials: bool}, redirection: map{enabled: bool, to: str, code: int(int32)}, gzip: map{enabled: bool, excludedPatterns: [str], whiteList: [str], blackList: [str], bufferSize: int(int64), chunkedThreshold: int(int64), compressionLevel: int(int32)}, headersVerification: map} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint PUT /api/services/{serviceId}\n@desc Update a service descriptor\n@required {serviceId: str # The service id, id: str(uuid) # A unique random string to identify your service, groups: [str] # 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, name: str # The name of your service. Only for debug and human readability purposes, env: str # 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', domain: str # The domain on which the service is available., subdomain: str # The subdomain on which the service is available, targets: [map{host!: str(hostname), scheme!: str}] # 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, root: str # 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, enabled: bool # Activate or deactivate your service. Once disabled, users will get an error page saying the service does not exist, privateApp: bool # When enabled, user will be allowed to use the service (UI) only if they are registered users of the private apps domain, forceHttps: bool # Will force redirection to https:// if not present, maintenanceMode: bool # Display a maintainance page when a user try to use the service, buildMode: bool # Display a construction page when a user try to use the service, enforceSecureCommunication: bool # When enabled, Otoroshi will try to exchange headers with downstream service to ensure no one else can use the service from outside}\n@optional {matchingRoot: str # The root path on which the service is available, localHost: str # The host used localy, mainly localhost:xxxx, localScheme: str # The scheme used localy, mainly http, redirectToLocal: bool # 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, userFacing: bool # The fact that this service will be seen by users and cannot be impacted by the Snow Monkey, sendOtoroshiHeadersBack: bool # When enabled, Otoroshi will send headers to consumer like request id, client latency, overhead, etc ..., xForwardedHeaders: bool # Send X-Forwarded-* headers, overrideHost: bool # Host header will be overriden with Host of the target, secComExcludedPatterns: [str] # URI patterns excluded from secured communications, publicPatterns: [str] # 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 '/.*', privatePatterns: [str] # If you define a public pattern that is a little bit too much, you can make some of public URL private again, ipFiltering: map{whitelist!: [str(ipv4)], blacklist!: [str(ipv4)]} # The filtering configuration block for a service of globally., api: map{exposeApi!: bool, openApiDescriptorUrl: str(uri)} # The Open API configuration for your service (if one), healthCheck: map{enabled!: bool, url: str(uri)} # The configuration for checking health of a service. Otoroshi will perform GET call on the URL to check if the service is still alive, clientConfig: map{useCircuitBreaker!: bool, retries!: int(int32), maxErrors!: int(int32), retryInitialDelay!: int(int32), backoffFactor!: int(int32), callTimeout!: int(int32), globalTimeout!: int(int32), sampleInterval!: int(int32)} # The configuration of the circuit breaker for a service descriptor, Canary: map{enabled!: bool, traffic!: int(int32), targets!: [map], root!: str} # The configuration of the canary mode for a service descriptor, statsdConfig: map{host!: str, port!: int(int32), datadog!: bool} # The configuration for statsd metrics push, chaosConfig: map{enabled!: bool, largeRequestFaultConfig: map, largeResponseFaultConfig: map, latencyInjectionFaultConfig: map, badResponsesFaultConfig: map} # Configuration for the faults that can be injected in requests, jwtVerifier: any, secComSettings: any, metadata: map # Just a bunch of random properties, matchingHeaders: map # Specify headers that MUST be present on client request to route it. Useful to implement versioning, additionalHeaders: map # Specify headers that will be added to each client request. Useful to add authentication, authConfigRef: str # A reference to a global auth module config, transformerRef: str # A reference to a request transformer, clientValidatorRef: str # A reference to validation authority, cors: map{enabled!: bool, allowOrigin!: str, exposeHeaders!: [str], allowHeaders!: [str], allowMethods!: [str], excludedPatterns!: [str], maxAge!: int(int32), allowCredentials!: bool} # The configuration for cors support, redirection: map{enabled!: bool, to!: str, code!: int(int32)} # The configuration for redirection per service, gzip: map{enabled!: bool, excludedPatterns!: [str], whiteList!: [str], blackList!: [str], bufferSize!: int(int64), chunkedThreshold!: int(int64), compressionLevel!: int(int32)} # Configuration for gzip of service responses, headersVerification: map # Specify headers that will be verified after routing.}\n@returns(200) {id: str(uuid), groups: [str], name: str, env: str, domain: str, subdomain: str, targets: [map], root: str, matchingRoot: str, localHost: str, localScheme: str, redirectToLocal: bool, enabled: bool, userFacing: bool, privateApp: bool, forceHttps: bool, maintenanceMode: bool, buildMode: bool, enforceSecureCommunication: bool, sendOtoroshiHeadersBack: bool, xForwardedHeaders: bool, overrideHost: bool, secComExcludedPatterns: [str], publicPatterns: [str], privatePatterns: [str], ipFiltering: map{whitelist: [str(ipv4)], blacklist: [str(ipv4)]}, api: map{exposeApi: bool, openApiDescriptorUrl: str(uri)}, healthCheck: map{enabled: bool, url: str(uri)}, clientConfig: map{useCircuitBreaker: bool, retries: int(int32), maxErrors: int(int32), retryInitialDelay: int(int32), backoffFactor: int(int32), callTimeout: int(int32), globalTimeout: int(int32), sampleInterval: int(int32)}, Canary: map{enabled: bool, traffic: int(int32), targets: [map], root: str}, statsdConfig: map{host: str, port: int(int32), datadog: bool}, chaosConfig: map{enabled: bool, largeRequestFaultConfig: map{ratio: int(double), additionalRequestSize: int(int32)}, largeResponseFaultConfig: map{ratio: int(double), additionalRequestSize: int(int32)}, latencyInjectionFaultConfig: map{ratio: int(double), from: int(int32), to: int(int32)}, badResponsesFaultConfig: map{ratio: int(double), responses: [map]}}, jwtVerifier: any, secComSettings: any, metadata: map, matchingHeaders: map, additionalHeaders: map, authConfigRef: str, transformerRef: str, clientValidatorRef: str, cors: map{enabled: bool, allowOrigin: str, exposeHeaders: [str], allowHeaders: [str], allowMethods: [str], excludedPatterns: [str], maxAge: int(int32), allowCredentials: bool}, redirection: map{enabled: bool, to: str, code: int(int32)}, gzip: map{enabled: bool, excludedPatterns: [str], whiteList: [str], blackList: [str], bufferSize: int(int64), chunkedThreshold: int(int64), compressionLevel: int(int32)}, headersVerification: map} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint PATCH /api/services/{serviceId}\n@desc Update a service descriptor with a diff\n@required {serviceId: str # The service id}\n@returns(200) {id: str(uuid), groups: [str], name: str, env: str, domain: str, subdomain: str, targets: [map], root: str, matchingRoot: str, localHost: str, localScheme: str, redirectToLocal: bool, enabled: bool, userFacing: bool, privateApp: bool, forceHttps: bool, maintenanceMode: bool, buildMode: bool, enforceSecureCommunication: bool, sendOtoroshiHeadersBack: bool, xForwardedHeaders: bool, overrideHost: bool, secComExcludedPatterns: [str], publicPatterns: [str], privatePatterns: [str], ipFiltering: map{whitelist: [str(ipv4)], blacklist: [str(ipv4)]}, api: map{exposeApi: bool, openApiDescriptorUrl: str(uri)}, healthCheck: map{enabled: bool, url: str(uri)}, clientConfig: map{useCircuitBreaker: bool, retries: int(int32), maxErrors: int(int32), retryInitialDelay: int(int32), backoffFactor: int(int32), callTimeout: int(int32), globalTimeout: int(int32), sampleInterval: int(int32)}, Canary: map{enabled: bool, traffic: int(int32), targets: [map], root: str}, statsdConfig: map{host: str, port: int(int32), datadog: bool}, chaosConfig: map{enabled: bool, largeRequestFaultConfig: map{ratio: int(double), additionalRequestSize: int(int32)}, largeResponseFaultConfig: map{ratio: int(double), additionalRequestSize: int(int32)}, latencyInjectionFaultConfig: map{ratio: int(double), from: int(int32), to: int(int32)}, badResponsesFaultConfig: map{ratio: int(double), responses: [map]}}, jwtVerifier: any, secComSettings: any, metadata: map, matchingHeaders: map, additionalHeaders: map, authConfigRef: str, transformerRef: str, clientValidatorRef: str, cors: map{enabled: bool, allowOrigin: str, exposeHeaders: [str], allowHeaders: [str], allowMethods: [str], excludedPatterns: [str], maxAge: int(int32), allowCredentials: bool}, redirection: map{enabled: bool, to: str, code: int(int32)}, gzip: map{enabled: bool, excludedPatterns: [str], whiteList: [str], blackList: [str], bufferSize: int(int64), chunkedThreshold: int(int64), compressionLevel: int(int32)}, headersVerification: map} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint DELETE /api/services/{serviceId}\n@desc Delete a service descriptor\n@required {serviceId: str # The service id}\n@returns(200) {deleted: bool} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint GET /api/services\n@desc Get all services\n@returns(200) Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint POST /api/services\n@desc Create a new service descriptor\n@required {id: str(uuid) # A unique random string to identify your service, groups: [str] # 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, name: str # The name of your service. Only for debug and human readability purposes, env: str # 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', domain: str # The domain on which the service is available., subdomain: str # The subdomain on which the service is available, targets: [map{host!: str(hostname), scheme!: str}] # 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, root: str # 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, enabled: bool # Activate or deactivate your service. Once disabled, users will get an error page saying the service does not exist, privateApp: bool # When enabled, user will be allowed to use the service (UI) only if they are registered users of the private apps domain, forceHttps: bool # Will force redirection to https:// if not present, maintenanceMode: bool # Display a maintainance page when a user try to use the service, buildMode: bool # Display a construction page when a user try to use the service, enforceSecureCommunication: bool # When enabled, Otoroshi will try to exchange headers with downstream service to ensure no one else can use the service from outside}\n@optional {matchingRoot: str # The root path on which the service is available, localHost: str # The host used localy, mainly localhost:xxxx, localScheme: str # The scheme used localy, mainly http, redirectToLocal: bool # 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, userFacing: bool # The fact that this service will be seen by users and cannot be impacted by the Snow Monkey, sendOtoroshiHeadersBack: bool # When enabled, Otoroshi will send headers to consumer like request id, client latency, overhead, etc ..., xForwardedHeaders: bool # Send X-Forwarded-* headers, overrideHost: bool # Host header will be overriden with Host of the target, secComExcludedPatterns: [str] # URI patterns excluded from secured communications, publicPatterns: [str] # 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 '/.*', privatePatterns: [str] # If you define a public pattern that is a little bit too much, you can make some of public URL private again, ipFiltering: map{whitelist!: [str(ipv4)], blacklist!: [str(ipv4)]} # The filtering configuration block for a service of globally., api: map{exposeApi!: bool, openApiDescriptorUrl: str(uri)} # The Open API configuration for your service (if one), healthCheck: map{enabled!: bool, url: str(uri)} # The configuration for checking health of a service. Otoroshi will perform GET call on the URL to check if the service is still alive, clientConfig: map{useCircuitBreaker!: bool, retries!: int(int32), maxErrors!: int(int32), retryInitialDelay!: int(int32), backoffFactor!: int(int32), callTimeout!: int(int32), globalTimeout!: int(int32), sampleInterval!: int(int32)} # The configuration of the circuit breaker for a service descriptor, Canary: map{enabled!: bool, traffic!: int(int32), targets!: [map], root!: str} # The configuration of the canary mode for a service descriptor, statsdConfig: map{host!: str, port!: int(int32), datadog!: bool} # The configuration for statsd metrics push, chaosConfig: map{enabled!: bool, largeRequestFaultConfig: map, largeResponseFaultConfig: map, latencyInjectionFaultConfig: map, badResponsesFaultConfig: map} # Configuration for the faults that can be injected in requests, jwtVerifier: any, secComSettings: any, metadata: map # Just a bunch of random properties, matchingHeaders: map # Specify headers that MUST be present on client request to route it. Useful to implement versioning, additionalHeaders: map # Specify headers that will be added to each client request. Useful to add authentication, authConfigRef: str # A reference to a global auth module config, transformerRef: str # A reference to a request transformer, clientValidatorRef: str # A reference to validation authority, cors: map{enabled!: bool, allowOrigin!: str, exposeHeaders!: [str], allowHeaders!: [str], allowMethods!: [str], excludedPatterns!: [str], maxAge!: int(int32), allowCredentials!: bool} # The configuration for cors support, redirection: map{enabled!: bool, to!: str, code!: int(int32)} # The configuration for redirection per service, gzip: map{enabled!: bool, excludedPatterns!: [str], whiteList!: [str], blackList!: [str], bufferSize!: int(int64), chunkedThreshold!: int(int64), compressionLevel!: int(int32)} # Configuration for gzip of service responses, headersVerification: map # Specify headers that will be verified after routing.}\n@returns(200) {id: str(uuid), groups: [str], name: str, env: str, domain: str, subdomain: str, targets: [map], root: str, matchingRoot: str, localHost: str, localScheme: str, redirectToLocal: bool, enabled: bool, userFacing: bool, privateApp: bool, forceHttps: bool, maintenanceMode: bool, buildMode: bool, enforceSecureCommunication: bool, sendOtoroshiHeadersBack: bool, xForwardedHeaders: bool, overrideHost: bool, secComExcludedPatterns: [str], publicPatterns: [str], privatePatterns: [str], ipFiltering: map{whitelist: [str(ipv4)], blacklist: [str(ipv4)]}, api: map{exposeApi: bool, openApiDescriptorUrl: str(uri)}, healthCheck: map{enabled: bool, url: str(uri)}, clientConfig: map{useCircuitBreaker: bool, retries: int(int32), maxErrors: int(int32), retryInitialDelay: int(int32), backoffFactor: int(int32), callTimeout: int(int32), globalTimeout: int(int32), sampleInterval: int(int32)}, Canary: map{enabled: bool, traffic: int(int32), targets: [map], root: str}, statsdConfig: map{host: str, port: int(int32), datadog: bool}, chaosConfig: map{enabled: bool, largeRequestFaultConfig: map{ratio: int(double), additionalRequestSize: int(int32)}, largeResponseFaultConfig: map{ratio: int(double), additionalRequestSize: int(int32)}, latencyInjectionFaultConfig: map{ratio: int(double), from: int(int32), to: int(int32)}, badResponsesFaultConfig: map{ratio: int(double), responses: [map]}}, jwtVerifier: any, secComSettings: any, metadata: map, matchingHeaders: map, additionalHeaders: map, authConfigRef: str, transformerRef: str, clientValidatorRef: str, cors: map{enabled: bool, allowOrigin: str, exposeHeaders: [str], allowHeaders: [str], allowMethods: [str], excludedPatterns: [str], maxAge: int(int32), allowCredentials: bool}, redirection: map{enabled: bool, to: str, code: int(int32)}, gzip: map{enabled: bool, excludedPatterns: [str], whiteList: [str], blackList: [str], bufferSize: int(int64), chunkedThreshold: int(int64), compressionLevel: int(int32)}, headersVerification: map} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint GET /api/groups/{serviceGroupId}/services\n@desc Get all services descriptor for a group\n@required {serviceGroupId: str # The service group id}\n@returns(200) Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint GET /api/groups/{serviceGroupId}\n@desc Get a service group\n@required {serviceGroupId: str # The service group id}\n@returns(200) {id: str, name: str, description: str} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint PUT /api/groups/{serviceGroupId}\n@desc Update a service group\n@required {serviceGroupId: str # The service group id, id: str # The unique id of the group. Usually 64 random alpha numerical characters, but can be anything, name: str # The name of the group}\n@optional {description: str # The descriptoin of the group}\n@returns(200) {id: str, name: str, description: str} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint PATCH /api/groups/{serviceGroupId}\n@desc Update a service group with a diff\n@required {serviceGroupId: str # The service group id}\n@returns(200) {id: str, name: str, description: str} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint DELETE /api/groups/{serviceGroupId}\n@desc Delete a service group\n@required {serviceGroupId: str # The service group id}\n@returns(200) {deleted: bool} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint GET /api/groups\n@desc Get all service groups\n@returns(200) Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint POST /api/groups\n@desc Create a new service group\n@required {id: str # The unique id of the group. Usually 64 random alpha numerical characters, but can be anything, name: str # The name of the group}\n@optional {description: str # The descriptoin of the group}\n@returns(200) {id: str, name: str, description: str} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint GET /api/verifiers\n@desc Get all global JWT verifiers\n@returns(200) Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint POST /api/verifiers\n@desc Create one global JWT verifiers\n@required {id: str # Verifier id, name: str # Verifier name, desc: str # Verifier description, enabled: bool # Is it enabled, strict: bool # Does it fail if JWT not found, source: any, algoSettings: any, strategy: any}\n@returns(200) {id: str, name: str, desc: str, enabled: bool, strict: bool, source: any, algoSettings: any, strategy: any} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint GET /api/verifiers/{verifierId}\n@desc Get one global JWT verifiers\n@required {verifierId: str # The jwt verifier id}\n@returns(200) {id: str, name: str, desc: str, enabled: bool, strict: bool, source: any, algoSettings: any, strategy: any} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint DELETE /api/verifiers/{verifierId}\n@desc Delete one global JWT verifiers\n@required {verifierId: str # The jwt verifier id}\n@returns(200) {deleted: bool} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint PUT /api/verifiers/{verifierId}\n@desc Update one global JWT verifiers\n@required {verifierId: str # The jwt verifier id, id: str # Verifier id, name: str # Verifier name, desc: str # Verifier description, enabled: bool # Is it enabled, strict: bool # Does it fail if JWT not found, source: any, algoSettings: any, strategy: any}\n@returns(200) {id: str, name: str, desc: str, enabled: bool, strict: bool, source: any, algoSettings: any, strategy: any} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint PATCH /api/verifiers/{verifierId}\n@desc Update one global JWT verifiers\n@required {verifierId: str # The jwt verifier id}\n@returns(200) {id: str, name: str, desc: str, enabled: bool, strict: bool, source: any, algoSettings: any, strategy: any} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint GET /api/auths\n@desc Get all global auth. module configs\n@returns(200) Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint POST /api/auths\n@desc Create one global auth. module config\n@returns(200) Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint GET /api/auths/{id}\n@desc Get one global auth. module configs\n@required {id: str # The auth. config id}\n@returns(200) Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint DELETE /api/auths/{id}\n@desc Delete one global auth. module config\n@required {id: str # The auth. config id id}\n@returns(200) {deleted: bool} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint PUT /api/auths/{id}\n@desc Update one global auth. module config\n@required {id: str # The auth. config id}\n@returns(200) Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint PATCH /api/auths/{id}\n@desc Update one global auth. module config\n@required {id: str # The auth. config id}\n@returns(200) Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint POST /api/scripts/_compile\n@desc Compile a script\n@required {id: str # The id of the script, name: str # The name of the script, desc: map # The description of the script, code: map # The code of the script}\n@returns(200) {done: bool, error: map{line: str, column: str, file: map, rawMessage: map, message: map}} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint GET /api/scripts/{scriptId}\n@desc Get a script\n@required {scriptId: str # The script id}\n@returns(200) {id: str, name: str, desc: map, code: map} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint PUT /api/scripts/{scriptId}\n@desc Update a script\n@required {scriptId: str # The script id, id: str # The id of the script, name: str # The name of the script, desc: map # The description of the script, code: map # The code of the script}\n@returns(200) {id: str, name: str, desc: map, code: map} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint PATCH /api/scripts/{scriptId}\n@desc Update a script with a diff\n@required {scriptId: str # The script id}\n@returns(200) {id: str, name: str, desc: map, code: map} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint DELETE /api/scripts/{scriptId}\n@desc Delete a script\n@required {scriptId: str # The script id}\n@returns(200) {deleted: bool} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint GET /api/scripts\n@desc Get all scripts\n@returns(200) Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint POST /api/scripts\n@desc Create a new script\n@required {id: str # The id of the script, name: str # The name of the script, desc: map # The description of the script, code: map # The code of the script}\n@returns(200) {id: str, name: str, desc: map, code: map} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint GET /api/data-exporter-configs/_template\n@desc Get all data exporter configs\n@optional {type: str # The data exporter config type}\n@returns(200) {enabled: str, typ: str, id: str, name: str, desc: str, metadata: map, location: map{tenant: str, teams: [map]}, bufferSize: int(int32), jsonWorkers: int(int32), sendWorkers: int(int32), groupSize: int(int32), groupDuration: int(int64), filtering: map{include: [map], exclude: [map]}, projection: map, config: any} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint POST /api/data-exporter-configs/_bulk\n@desc Create a new data exporter configs\n@returns(200) Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint PUT /api/data-exporter-configs/_bulk\n@desc Update a data exporter configs\n@returns(200) Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint PATCH /api/data-exporter-configs/_bulk\n@desc Update a data exporter configs with a diff\n@returns(200) Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint DELETE /api/data-exporter-configs/_bulk\n@desc Delete a data exporter config\n@returns(200) Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint GET /api/data-exporter-configs/{dataExporterConfigId}\n@desc Get a data exporter config\n@required {dataExporterConfigId: str # The data exporter config id}\n@returns(200) {enabled: str, typ: str, id: str, name: str, desc: str, metadata: map, location: map{tenant: str, teams: [map]}, bufferSize: int(int32), jsonWorkers: int(int32), sendWorkers: int(int32), groupSize: int(int32), groupDuration: int(int64), filtering: map{include: [map], exclude: [map]}, projection: map, config: any} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint PUT /api/data-exporter-configs/{dataExporterConfigId}\n@desc Update a data exporter config\n@required {dataExporterConfigId: str # The data exporter config id}\n@optional {enabled: str # Boolean, typ: str(kafka/pulsar/file/mailer/elastic/console/custom) # Type of data exporter, id: str # Id, name: str # Name, desc: str # Description, metadata: map # Metadata, location: map{tenant!: str, teams!: [map]}, bufferSize: int(int32) # buffer size, jsonWorkers: int(int32) # nb workers, sendWorkers: int(int32) # send workers, groupSize: int(int32) # Group size, groupDuration: int(int64) # duration, filtering: map{include: [map], exclude: [map]}, projection: map # projection, config: any # Data Exporter config}\n@returns(200) {enabled: str, typ: str, id: str, name: str, desc: str, metadata: map, location: map{tenant: str, teams: [map]}, bufferSize: int(int32), jsonWorkers: int(int32), sendWorkers: int(int32), groupSize: int(int32), groupDuration: int(int64), filtering: map{include: [map], exclude: [map]}, projection: map, config: any} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint PATCH /api/data-exporter-configs/{dataExporterConfigId}\n@desc Update a data exporter config with a diff\n@required {dataExporterConfigId: str # The data exporter config id}\n@returns(200) {enabled: str, typ: str, id: str, name: str, desc: str, metadata: map, location: map{tenant: str, teams: [map]}, bufferSize: int(int32), jsonWorkers: int(int32), sendWorkers: int(int32), groupSize: int(int32), groupDuration: int(int64), filtering: map{include: [map], exclude: [map]}, projection: map, config: any} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint DELETE /api/data-exporter-configs/{dataExporterConfigId}\n@desc Delete a data exporter config\n@required {dataExporterConfigId: str # The data exporter config id}\n@returns(200) {deleted: bool} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint GET /api/data-exporter-configs\n@desc Get all data exporter configs\n@returns(200) Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint POST /api/data-exporter-configs\n@desc Create a new data exporter config\n@optional {enabled: str # Boolean, typ: str(kafka/pulsar/file/mailer/elastic/console/custom) # Type of data exporter, id: str # Id, name: str # Name, desc: str # Description, metadata: map # Metadata, location: map{tenant!: str, teams!: [map]}, bufferSize: int(int32) # buffer size, jsonWorkers: int(int32) # nb workers, sendWorkers: int(int32) # send workers, groupSize: int(int32) # Group size, groupDuration: int(int64) # duration, filtering: map{include: [map], exclude: [map]}, projection: map # projection, config: any # Data Exporter config}\n@returns(200) {enabled: str, typ: str, id: str, name: str, desc: str, metadata: map, location: map{tenant: str, teams: [map]}, bufferSize: int(int32), jsonWorkers: int(int32), sendWorkers: int(int32), groupSize: int(int32), groupDuration: int(int64), filtering: map{include: [map], exclude: [map]}, projection: map, config: any} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint GET /api/certificates\n@desc Get all certificates\n@returns(200) Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint POST /api/certificates\n@desc Create one certificate\n@required {id: str # Id of the certificate, chain: str # Certificate chain of trust in PEM format, privateKey: str # PKCS8 private key in PEM format, caRef: str # Reference for a CA certificate in otoroshi, autoRenew: str # Allow Otoroshi to renew the certificate (if self signed), domain: str # Domain of the certificate (read only), selfSigned: str # Certificate is self signed  read only), ca: str # Certificate is a CA (read only), valid: str # Certificate is valid (read only), subject: str # Subject of the certificate (read only), from: str # Start date of validity, to: str # End date of validity}\n@returns(200) {id: str, chain: str, privateKey: str, caRef: str, autoRenew: str, domain: str, selfSigned: str, ca: str, valid: str, subject: str, from: str, to: str} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint GET /api/certificates/{id}\n@desc Get one certificate by id\n@required {id: str # The auth. config id}\n@returns(200) {id: str, chain: str, privateKey: str, caRef: str, autoRenew: str, domain: str, selfSigned: str, ca: str, valid: str, subject: str, from: str, to: str} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint DELETE /api/certificates/{id}\n@desc Delete one certificate by id\n@required {id: str # The certificate id}\n@returns(200) {deleted: bool} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint PUT /api/certificates/{id}\n@desc Update one certificate by id\n@required {id: str # The certificate id, id: str # Id of the certificate, chain: str # Certificate chain of trust in PEM format, privateKey: str # PKCS8 private key in PEM format, caRef: str # Reference for a CA certificate in otoroshi, autoRenew: str # Allow Otoroshi to renew the certificate (if self signed), domain: str # Domain of the certificate (read only), selfSigned: str # Certificate is self signed  read only), ca: str # Certificate is a CA (read only), valid: str # Certificate is valid (read only), subject: str # Subject of the certificate (read only), from: str # Start date of validity, to: str # End date of validity}\n@returns(200) {id: str, chain: str, privateKey: str, caRef: str, autoRenew: str, domain: str, selfSigned: str, ca: str, valid: str, subject: str, from: str, to: str} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint PATCH /api/certificates/{id}\n@desc Update one certificate by id\n@required {id: str # The certificate id}\n@returns(200) {id: str, chain: str, privateKey: str, caRef: str, autoRenew: str, domain: str, selfSigned: str, ca: str, valid: str, subject: str, from: str, to: str} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint GET /api/client-validators\n@desc Get all validation authoritiess\n@returns(200) Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint POST /api/client-validators\n@desc Create one validation authorities\n@required {id: str # The id of the settings, name: str # The name of the settings, description: str # The description of the settings, url: str # The URL of the server, host: str # The host of the server, goodTtl: int(int64) # The TTL for valid access response caching, badTtl: int(int64) # The TTL for invalid access response caching, method: str # The HTTP method, path: str # The URL path, timeout: int(int64) # The call timeout, noCache: bool # Avoid caching responses, alwaysValid: bool # Bypass http calls, every certificates are valids, headers: map # HTTP call headers}\n@returns(200) {id: str, name: str, description: str, url: str, host: str, goodTtl: int(int64), badTtl: int(int64), method: str, path: str, timeout: int(int64), noCache: bool, alwaysValid: bool, headers: map} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint GET /api/client-validators/{id}\n@desc Get one validation authorities by id\n@required {id: str # The auth. config id}\n@returns(200) {id: str, name: str, description: str, url: str, host: str, goodTtl: int(int64), badTtl: int(int64), method: str, path: str, timeout: int(int64), noCache: bool, alwaysValid: bool, headers: map} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint DELETE /api/client-validators/{id}\n@desc Delete one validation authorities by id\n@required {id: str # The validation authorities id}\n@returns(200) {deleted: bool} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint PUT /api/client-validators/{id}\n@desc Update one validation authorities by id\n@required {id: str # The validation authorities id, id: str # The id of the settings, name: str # The name of the settings, description: str # The description of the settings, url: str # The URL of the server, host: str # The host of the server, goodTtl: int(int64) # The TTL for valid access response caching, badTtl: int(int64) # The TTL for invalid access response caching, method: str # The HTTP method, path: str # The URL path, timeout: int(int64) # The call timeout, noCache: bool # Avoid caching responses, alwaysValid: bool # Bypass http calls, every certificates are valids, headers: map # HTTP call headers}\n@returns(200) {id: str, name: str, description: str, url: str, host: str, goodTtl: int(int64), badTtl: int(int64), method: str, path: str, timeout: int(int64), noCache: bool, alwaysValid: bool, headers: map} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint PATCH /api/client-validators/{id}\n@desc Update one validation authorities by id\n@required {id: str # The validation authorities id}\n@returns(200) {id: str, name: str, description: str, url: str, host: str, goodTtl: int(int64), badTtl: int(int64), method: str, path: str, timeout: int(int64), noCache: bool, alwaysValid: bool, headers: map} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint GET /api/snowmonkey/config\n@desc Get current Snow Monkey config\n@returns(200) {enabled: bool, outageStrategy: str, includeUserFacingDescriptors: bool, dryRun: bool, timesPerDay: int(int32), startTime: str(time), stopTime: str(time), outageDurationFrom: int(int32), outageDurationTo: int(int32), targetGroups: [str], chaosConfig: map{enabled: bool, largeRequestFaultConfig: map{ratio: int(double), additionalRequestSize: int(int32)}, largeResponseFaultConfig: map{ratio: int(double), additionalRequestSize: int(int32)}, latencyInjectionFaultConfig: map{ratio: int(double), from: int(int32), to: int(int32)}, badResponsesFaultConfig: map{ratio: int(double), responses: [map]}}} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint PUT /api/snowmonkey/config\n@desc Update current Snow Monkey config\n@required {id: str # The unique id of the group. Usually 64 random alpha numerical characters, but can be anything, name: str # The name of the group}\n@optional {description: str # The descriptoin of the group}\n@returns(200) {enabled: bool, outageStrategy: str, includeUserFacingDescriptors: bool, dryRun: bool, timesPerDay: int(int32), startTime: str(time), stopTime: str(time), outageDurationFrom: int(int32), outageDurationTo: int(int32), targetGroups: [str], chaosConfig: map{enabled: bool, largeRequestFaultConfig: map{ratio: int(double), additionalRequestSize: int(int32)}, largeResponseFaultConfig: map{ratio: int(double), additionalRequestSize: int(int32)}, latencyInjectionFaultConfig: map{ratio: int(double), from: int(int32), to: int(int32)}, badResponsesFaultConfig: map{ratio: int(double), responses: [map]}}} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint PATCH /api/snowmonkey/config\n@desc Update current Snow Monkey config\n@required {id: str # The unique id of the group. Usually 64 random alpha numerical characters, but can be anything, name: str # The name of the group}\n@optional {description: str # The descriptoin of the group}\n@returns(200) {enabled: bool, outageStrategy: str, includeUserFacingDescriptors: bool, dryRun: bool, timesPerDay: int(int32), startTime: str(time), stopTime: str(time), outageDurationFrom: int(int32), outageDurationTo: int(int32), targetGroups: [str], chaosConfig: map{enabled: bool, largeRequestFaultConfig: map{ratio: int(double), additionalRequestSize: int(int32)}, largeResponseFaultConfig: map{ratio: int(double), additionalRequestSize: int(int32)}, latencyInjectionFaultConfig: map{ratio: int(double), from: int(int32), to: int(int32)}, badResponsesFaultConfig: map{ratio: int(double), responses: [map]}}} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint GET /api/snowmonkey/outages\n@desc Get all current Snow Monkey ourages\n@returns(200) Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint DELETE /api/snowmonkey/outages\n@desc Reset Snow Monkey Outages for the day\n@returns(200) {done: bool} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint POST /api/snowmonkey/_start\n@desc Start the Snow Monkey\n@returns(200) {done: bool} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint POST /api/snowmonkey/_stop\n@desc Stop the Snow Monkey\n@returns(200) {done: bool} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint GET /api/live/{id}\n@desc Get live feed of otoroshi stats\n@required {id: str # The service id or global for otoroshi stats}\n@returns(200) {calls: int(int64), dataIn: int(int64), dataOut: int(int64), rate: int(double), duration: int(double), overhead: int(double), dataInRate: int(double), dataOutRate: int(double), concurrentHandledRequests: int(int64)} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint GET /api/live\n@desc Get global otoroshi stats\n@returns(200) {calls: int(int64), dataIn: int(int64), dataOut: int(int64), rate: int(double), duration: int(double), overhead: int(double), dataInRate: int(double), dataOutRate: int(double), concurrentHandledRequests: int(int64)} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint GET /api/globalconfig\n@desc Get the full configuration of Otoroshi\n@returns(200) {lines: [str], streamEntityOnly: bool, autoLinkToDefaultGroup: bool, limitConcurrentRequests: bool, maxConcurrentRequests: int(int64), maxHttp10ResponseSize: int(int64), useCircuitBreakers: bool, apiReadOnly: bool, u2fLoginOnly: bool, ipFiltering: map{whitelist: [str(ipv4)], blacklist: [str(ipv4)]}, throttlingQuota: int(int64), perIpThrottlingQuota: int(int64), elasticWritesConfigs: [map], elasticReadsConfig: map{clusterUri: str, index: str, type: str, user: str, password: str, headers: map}, analyticsWebhooks: [map], alertsWebhooks: [map], alertsEmails: [str(email)], endlessIpAddresses: [str(ipv4)], middleFingers: bool, maxLogsSize: int(int32), cleverSettings: map{consumerKey: str, consumerSecret: str, token: str, secret: str, orgaId: str}, mailerSettings: map{type: str, eu: bool, apiKey: str, domain: str, apiKeyPublic: str, apiKeyPrivate: str, url: str, header: map}, backofficeAuth0Config: map{clientId: str, clientSecret: str, domain: str, callbackUrl: str}, privateAppsAuth0Config: map{clientId: str, clientSecret: str, domain: str, callbackUrl: str}} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint PUT /api/globalconfig\n@desc Update the global configuration\n@required {streamEntityOnly: bool # HTTP will be streamed only. Doesn't work with old browsers, autoLinkToDefaultGroup: bool # If not defined, every new service descriptor will be added to the default group, limitConcurrentRequests: bool # If enabled, Otoroshi will reject new request if too much at the same time, maxConcurrentRequests: int(int64) # The number of authorized request processed at the same time, useCircuitBreakers: bool # If enabled, services will be authorized to use circuit breakers, apiReadOnly: bool # If enabled, Admin API won't be able to write/update/delete entities, u2fLoginOnly: bool # If enabled, login to backoffice through Auth0 will be disabled, ipFiltering: map{whitelist!: [str(ipv4)], blacklist!: [str(ipv4)]} # The filtering configuration block for a service of globally., throttlingQuota: int(int64) # Authorized number of calls per second globally, measured on 10 seconds, perIpThrottlingQuota: int(int64) # Authorized number of calls per second globally per IP address, measured on 10 seconds, analyticsWebhooks: [map{url!: str(uri), headers!: map}] # Webhook that will receive all internal Otoroshi events, alertsWebhooks: [map{url!: str(uri), headers!: map}] # Webhook that will receive all Otoroshi alert events, alertsEmails: [str(email)] # Email addresses that will receive all Otoroshi alert events, endlessIpAddresses: [str(ipv4)] # IP addresses for which any request to Otoroshi will respond with 128 Gb of zeros}\n@optional {lines: [str] # Possibles lines for Otoroshi, maxHttp10ResponseSize: int(int64) # The max size in bytes of an HTTP 1.0 response, elasticWritesConfigs: [map{clusterUri!: str, index!: str, type!: str, user!: str, password!: str, headers!: map}] # Configs. for Elastic writes, elasticReadsConfig: map{clusterUri!: str, index!: str, type!: str, user!: str, password!: str, headers!: map} # The configuration for elastic access, middleFingers: bool # Use middle finger emoji as a response character for endless HTTP responses, maxLogsSize: int(int32) # Number of events kept locally, cleverSettings: map{consumerKey!: str, consumerSecret!: str, token!: str, secret!: str, orgaId!: str} # Configuration for CleverCloud client, mailerSettings: map{type: str, eu: bool, apiKey!: str, domain!: str, apiKeyPublic: str, apiKeyPrivate: str, url: str, header: map} # Configuration for mailgun api client, backofficeAuth0Config: map{clientId!: str, clientSecret!: str, domain!: str, callbackUrl!: str} # Configuration for Auth0 domain, privateAppsAuth0Config: map{clientId!: str, clientSecret!: str, domain!: str, callbackUrl!: str} # Configuration for Auth0 domain}\n@returns(200) {lines: [str], streamEntityOnly: bool, autoLinkToDefaultGroup: bool, limitConcurrentRequests: bool, maxConcurrentRequests: int(int64), maxHttp10ResponseSize: int(int64), useCircuitBreakers: bool, apiReadOnly: bool, u2fLoginOnly: bool, ipFiltering: map{whitelist: [str(ipv4)], blacklist: [str(ipv4)]}, throttlingQuota: int(int64), perIpThrottlingQuota: int(int64), elasticWritesConfigs: [map], elasticReadsConfig: map{clusterUri: str, index: str, type: str, user: str, password: str, headers: map}, analyticsWebhooks: [map], alertsWebhooks: [map], alertsEmails: [str(email)], endlessIpAddresses: [str(ipv4)], middleFingers: bool, maxLogsSize: int(int32), cleverSettings: map{consumerKey: str, consumerSecret: str, token: str, secret: str, orgaId: str}, mailerSettings: map{type: str, eu: bool, apiKey: str, domain: str, apiKeyPublic: str, apiKeyPrivate: str, url: str, header: map}, backofficeAuth0Config: map{clientId: str, clientSecret: str, domain: str, callbackUrl: str}, privateAppsAuth0Config: map{clientId: str, clientSecret: str, domain: str, callbackUrl: str}} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint PATCH /api/globalconfig\n@desc Update the global configuration with a diff\n@returns(200) {lines: [str], streamEntityOnly: bool, autoLinkToDefaultGroup: bool, limitConcurrentRequests: bool, maxConcurrentRequests: int(int64), maxHttp10ResponseSize: int(int64), useCircuitBreakers: bool, apiReadOnly: bool, u2fLoginOnly: bool, ipFiltering: map{whitelist: [str(ipv4)], blacklist: [str(ipv4)]}, throttlingQuota: int(int64), perIpThrottlingQuota: int(int64), elasticWritesConfigs: [map], elasticReadsConfig: map{clusterUri: str, index: str, type: str, user: str, password: str, headers: map}, analyticsWebhooks: [map], alertsWebhooks: [map], alertsEmails: [str(email)], endlessIpAddresses: [str(ipv4)], middleFingers: bool, maxLogsSize: int(int32), cleverSettings: map{consumerKey: str, consumerSecret: str, token: str, secret: str, orgaId: str}, mailerSettings: map{type: str, eu: bool, apiKey: str, domain: str, apiKeyPublic: str, apiKeyPrivate: str, url: str, header: map}, backofficeAuth0Config: map{clientId: str, clientSecret: str, domain: str, callbackUrl: str}, privateAppsAuth0Config: map{clientId: str, clientSecret: str, domain: str, callbackUrl: str}} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint GET /api/otoroshi.json\n@desc Export the full state of Otoroshi\n@returns(200) {label: str, dateRaw: int(int64), date: str(date-time), stats: map{calls: int(int64), dataIn: int(int64), dataOut: int(int64)}, config: map{lines: [str], streamEntityOnly: bool, autoLinkToDefaultGroup: bool, limitConcurrentRequests: bool, maxConcurrentRequests: int(int64), maxHttp10ResponseSize: int(int64), useCircuitBreakers: bool, apiReadOnly: bool, u2fLoginOnly: bool, ipFiltering: map{whitelist: [str(ipv4)], blacklist: [str(ipv4)]}, throttlingQuota: int(int64), perIpThrottlingQuota: int(int64), elasticWritesConfigs: [map], elasticReadsConfig: map{clusterUri: str, index: str, type: str, user: str, password: str, headers: map}, analyticsWebhooks: [map], alertsWebhooks: [map], alertsEmails: [str(email)], endlessIpAddresses: [str(ipv4)], middleFingers: bool, maxLogsSize: int(int32), cleverSettings: map{consumerKey: str, consumerSecret: str, token: str, secret: str, orgaId: str}, mailerSettings: map{type: str, eu: bool, apiKey: str, domain: str, apiKeyPublic: str, apiKeyPrivate: str, url: str, header: map}, backofficeAuth0Config: map{clientId: str, clientSecret: str, domain: str, callbackUrl: str}, privateAppsAuth0Config: map{clientId: str, clientSecret: str, domain: str, callbackUrl: str}}, appConfig: map, admins: [map], simpleAdmins: [map], serviceGroups: [map], apiKeys: [map], serviceDescriptors: [map], errorTemplates: [map]} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint POST /api/otoroshi.json\n@desc Import the full state of Otoroshi\n@required {label: str, dateRaw: int(int64), date: str(date-time), stats: map{calls!: int(int64), dataIn!: int(int64), dataOut!: int(int64)} # Global stats for the current Otoroshi instances, config: map{lines: [str], streamEntityOnly!: bool, autoLinkToDefaultGroup!: bool, limitConcurrentRequests!: bool, maxConcurrentRequests!: int(int64), maxHttp10ResponseSize: int(int64), useCircuitBreakers!: bool, apiReadOnly!: bool, u2fLoginOnly!: bool, ipFiltering!: map, throttlingQuota!: int(int64), perIpThrottlingQuota!: int(int64), elasticWritesConfigs: [map], elasticReadsConfig: map, analyticsWebhooks!: [map], alertsWebhooks!: [map], alertsEmails!: [str(email)], endlessIpAddresses!: [str(ipv4)], middleFingers: bool, maxLogsSize: int(int32), cleverSettings: map, mailerSettings: map, backofficeAuth0Config: map, privateAppsAuth0Config: map} # The global config object of Otoroshi, used to customize settings of the current Otoroshi instance, admins: [map{username!: str, label!: str, password!: str, createdAt!: int(int64), registration!: map}] # Current U2F admin at the time of export, simpleAdmins: [map{username!: str, label!: str, password!: str, createdAt!: int(int64)}] # Current simple admins at the time of export, serviceGroups: [map{id!: str, name!: str, description: str}] # Current service groups at the time of export, apiKeys: [map{clientId!: str, clientSecret!: str, clientName!: str, authorizedEntities!: [str], enabled!: bool, throttlingQuota: int(int64), dailyQuota: int(int64), monthlyQuota: int(int64), metadata: map}] # Current apik keys at the time of export, serviceDescriptors: [map{id!: str(uuid), groups!: [str], name!: str, env!: str, domain!: str, subdomain!: str, targets!: [map], root!: str, matchingRoot: str, localHost: str, localScheme: str, redirectToLocal: bool, enabled!: bool, userFacing: bool, privateApp!: bool, forceHttps!: bool, maintenanceMode!: bool, buildMode!: bool, enforceSecureCommunication!: bool, sendOtoroshiHeadersBack: bool, xForwardedHeaders: bool, overrideHost: bool, secComExcludedPatterns: [str], publicPatterns: [str], privatePatterns: [str], ipFiltering: map, api: map, healthCheck: map, clientConfig: map, Canary: map, statsdConfig: map, chaosConfig: map, jwtVerifier: any, secComSettings: any, metadata: map, matchingHeaders: map, additionalHeaders: map, authConfigRef: str, transformerRef: str, clientValidatorRef: str, cors: map, redirection: map, gzip: map, headersVerification: map}] # Current service descriptors at the time of export, errorTemplates: [map{serviceId!: str, template40x!: str, template50x!: str, templateBuild!: str, templateMaintenance!: str, messages!: map}] # Current error templates at the time of export}\n@optional {appConfig: map # Current env variables at the time of export}\n@returns(200) {done: bool} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endpoint POST /api/import\n@desc Import the full state of Otoroshi as a file\n@required {label: str, dateRaw: int(int64), date: str(date-time), stats: map{calls!: int(int64), dataIn!: int(int64), dataOut!: int(int64)} # Global stats for the current Otoroshi instances, config: map{lines: [str], streamEntityOnly!: bool, autoLinkToDefaultGroup!: bool, limitConcurrentRequests!: bool, maxConcurrentRequests!: int(int64), maxHttp10ResponseSize: int(int64), useCircuitBreakers!: bool, apiReadOnly!: bool, u2fLoginOnly!: bool, ipFiltering!: map, throttlingQuota!: int(int64), perIpThrottlingQuota!: int(int64), elasticWritesConfigs: [map], elasticReadsConfig: map, analyticsWebhooks!: [map], alertsWebhooks!: [map], alertsEmails!: [str(email)], endlessIpAddresses!: [str(ipv4)], middleFingers: bool, maxLogsSize: int(int32), cleverSettings: map, mailerSettings: map, backofficeAuth0Config: map, privateAppsAuth0Config: map} # The global config object of Otoroshi, used to customize settings of the current Otoroshi instance, admins: [map{username!: str, label!: str, password!: str, createdAt!: int(int64), registration!: map}] # Current U2F admin at the time of export, simpleAdmins: [map{username!: str, label!: str, password!: str, createdAt!: int(int64)}] # Current simple admins at the time of export, serviceGroups: [map{id!: str, name!: str, description: str}] # Current service groups at the time of export, apiKeys: [map{clientId!: str, clientSecret!: str, clientName!: str, authorizedEntities!: [str], enabled!: bool, throttlingQuota: int(int64), dailyQuota: int(int64), monthlyQuota: int(int64), metadata: map}] # Current apik keys at the time of export, serviceDescriptors: [map{id!: str(uuid), groups!: [str], name!: str, env!: str, domain!: str, subdomain!: str, targets!: [map], root!: str, matchingRoot: str, localHost: str, localScheme: str, redirectToLocal: bool, enabled!: bool, userFacing: bool, privateApp!: bool, forceHttps!: bool, maintenanceMode!: bool, buildMode!: bool, enforceSecureCommunication!: bool, sendOtoroshiHeadersBack: bool, xForwardedHeaders: bool, overrideHost: bool, secComExcludedPatterns: [str], publicPatterns: [str], privatePatterns: [str], ipFiltering: map, api: map, healthCheck: map, clientConfig: map, Canary: map, statsdConfig: map, chaosConfig: map, jwtVerifier: any, secComSettings: any, metadata: map, matchingHeaders: map, additionalHeaders: map, authConfigRef: str, transformerRef: str, clientValidatorRef: str, cors: map, redirection: map, gzip: map, headersVerification: map}] # Current service descriptors at the time of export, errorTemplates: [map{serviceId!: str, template40x!: str, template50x!: str, templateBuild!: str, templateMaintenance!: str, messages!: map}] # Current error templates at the time of export}\n@optional {appConfig: map # Current env variables at the time of export}\n@returns(200) {done: bool} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 401: 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: Resource not found or does not exist}\n\n@endgroup\n\n@group health\n@endpoint GET /health\n@desc Return current Otoroshi health\n@returns(200) {otoroshi: str, datastore: str} # Successful operation\n@errors {400: Bad resource format. Take another look to the swagger, or open an issue :), 404: Resource not found or does not exist}\n\n@endgroup\n\n@end\n"}}