openapi: 3.2.0 info: description: RadarScope Radar Data API version: 3.0.0 title: RadarScope Radar Data Excessive Rainfall Outlook API servers: - url: https://radarscope-feeds.wdtinc.com schemes: - https tags: - name: Excessive Rainfall Outlook description: Excessive Rainfall Outlook paths: /feeds/v3/ero: get: tags: - Excessive Rainfall Outlook summary: List current Excessive Rainfall Outlooks, defaulting to Day1 description: List current Excessive Rainfall Outlooks, defaulting to Day1 produces: - application/json parameters: [] responses: '200': $ref: '#/components/responses/excessive_rainfall_outlook_list' /feeds/v3/ero/day{ero_horizon}: get: tags: - Excessive Rainfall Outlook summary: Get current Excessive Rainfall Outlook for given time horizon description: Get current Excessive Rainfall Outlook for given time horizon produces: - application/json parameters: - $ref: '#/components/parameters/ero_horizon' responses: '200': $ref: '#/components/responses/excessive_rainfall_outlook_list' /feeds/v3/ero/{ero_id}: get: tags: - Excessive Rainfall Outlook summary: Get raw text of Excessive Rainfall Outlook description: Get raw text of Excessive Rainfall Outlook produces: - text/plain parameters: - $ref: '#/components/parameters/ero_id' responses: '200': description: Excessive Rainfall Outlook Text content: text/plain: example: "\n508 \nFOUS30 KWBC 052011 CCA\nQPFERD\n\nExcessive Rainfall Discussion...CORRECTED\nNWS Weather Prediction Center College Park MD\n311 PM EST Mon Jan 5 2026\n\nDay 1\nValid 16Z Mon Jan 05 2026 - 12Z Tue Jan 06 2026\n\n...THERE IS A MARGINAL RISK OF EXCESSIVE RAINFALL ALONG THE CENTRAL\nTO NORTHERN CALIFORNIA COAST AND NORTHERN CALIFORNIA...\n\n...16Z update...\n\nThe forecast reasoning in the previous discussion remains valid and\nonly minor adjustments were made to the existing Marginal Risk\nacross north-central California. The primary shortwave embedded\nwithin the longwave trough in the eastern Pacific was centered near\n128W and will advance closer to the north-central California coast\nbetween Point Arena and San Francisco Bay through 00Z. After 00Z,\nthe closed mid-level low will elongate and weaken as it moves\nsouthward offshore of the coast. There is good model agreement in\nthis forecast and the corresponding low level wind field becoming\nlargely parallel to the central California coast overnight while\nweakening.\n\nThe main concern for heavy rain related impacts will be prior to\n03Z Tuesday where isolated hourly rainfall of 0.50 to 0.75 inches\nprimarily focused along the Coastal Ranges toward the San Francisco\nBay region later today with isolated hourly totals near 1 inch\npossible. East of the Coastal Ranges, peak hourly rainfall up to\n~0.50 inches is expected. Additional peak rainfall through 12Z\nTuesday will be in the 2-4 inch range\n\nOtto\n\n...previous discussion follows...\n\n\nUpper disturbance off the California coast will meander to the\nsoutheast closer to the coastal plain, eventually pinching off the\nmean trough centered to the north and closing off into an ULL as it\nmigrates down near the latitude of the Bay area. Proximity of the\ndisturbance and prevailing flow will send a modest IVT pulse\n(300-400 kg/ms) crashing into the northern CA coastal plain with\nsome minor protrusion of the IVT signature inland with a secondary\nQPF maxima forecast around the Trinity Mountains over into Shasta\nNational Forest domain. Hi-res deterministic output is pretty\nconsistent with the axis of heaviest precip focused from the King\nRange down towards Santa Rosa, north of the Bay area with the\nlatest HREF EAS probs for 1\" running between 60-90% for much of\nthat location with another prob max focused near Mount Shasta.\n\nThe main threat for this setup is easily over any urbanized zones\nand remnant burn scars across northern CA leading to mainly a\nlower-end flash flood concern in the grand scheme of the setup. IVT\nsignature is one that historically yields more isolated flash flood\nthreats with the primary focus typically aimed at that coastal\nurban centered from the Bay area up towards Eureka, and over the\nnorthern valley locations like Redding. This is where the MRGL\nrisk was maintained during the forecast as the trend for the\nsouthern edge of any heavy rain prospects south of San Jose has all\nbut disappeared on guidance. It's still something we'll monitor\nfor any last minute trends back, but guidance favors mainly the\narea north of the Bay at this time. Total QPF for the impacted\nareas will be between 1.5-3\" with a max between 4-5\" for the\ncoastal ranges north of the Bay area, and over the Shasta National\nForest.\n\nKleebauer\n\n\nDay 2\nValid 12Z Tue Jan 06 2026 - 12Z Wed Jan 07 2026\n\nThe probability of rainfall exceeding flash flood guidance is \nless than 5 percent.\n\nFracasso\n\n\nDay 3\nValid 12Z Wed Jan 07 2026 - 12Z Thu Jan 08 2026\n\nThe probability of rainfall exceeding flash flood guidance is \nless than 5 percent.\n\nFracasso\n\n\nDay 1 threat area: https://www.wpc.ncep.noaa.gov/qpf/94epoints.txt\nDay 2 threat area: https://www.wpc.ncep.noaa.gov/qpf/98epoints.txt\nDay 3 threat area: https://www.wpc.ncep.noaa.gov/qpf/99epoints.txt\n\n" /feeds/v3/ero/day{ero_horizon}/{year}/{month}/{day}/{hour}/{minute}: get: tags: - Excessive Rainfall Outlook summary: List historic Excessive Rainfall Outlooks for given time horizon on given date and time description: List historic Excessive Rainfall Outlooks for given time horizon on given date and time produces: - application/json parameters: - $ref: '#/components/parameters/ero_horizon' - $ref: '#/components/parameters/year' - $ref: '#/components/parameters/month' - $ref: '#/components/parameters/day' - $ref: '#/components/parameters/hour' - $ref: '#/components/parameters/minute' responses: '200': $ref: '#/components/responses/excessive_rainfall_outlook_list' components: parameters: ero_horizon: name: ero_horizon in: path description: horizon in days, from 1 to 5 inclusive required: true schema: type: string ero_id: name: ero_id in: path description: identifier of outlook to retrieve required: true schema: type: string month: name: month in: path description: 2 digit month, 01-12 required: true schema: type: string minute: name: minute in: path description: 2 digit minute, 00-59 required: true schema: type: string day: name: day in: path description: 2 digit day, 01-31 required: true schema: type: string year: name: year in: path description: 4 digit year, e.g. 2026 required: true schema: type: string hour: name: hour in: path description: 2 digit hour, 00-23 required: true schema: type: string headers: content-type: description: MIME-type of returned data schema: type: string responses: excessive_rainfall_outlook_list: description: Excessive Rainfall Outlook List headers: Content-Type: $ref: '#/components/headers/content-type' content: application/json: example: "[\n\t{\n\t\t\"t\": \"RAIN\",\n\t\t\"o\": \"KWNH\",\n\t\t\"s\": \"D1\",\n\t\t\"f\": \"MRGL\",\n\t\t\"b\": 1767628800,\n\t\t\"e\": 1767700800,\n\t\t\"p\": [\n\t\t\t[\n\t\t\t\t3688,\n\t\t\t\t-12232\n\t\t\t],\n\t\t\t[\n\t\t\t\t3710,\n\t\t\t\t-12261\n\t\t\t],\n\t\t\t[\n\t\t\t\t3772,\n\t\t\t\t-12271\n\t\t\t],\n\t\t\t[\n\t\t\t\t3788,\n\t\t\t\t-12315\n\t\t\t],\n\t\t\t[\n\t\t\t\t3836,\n\t\t\t\t-12328\n\t\t\t],\n\t\t\t[\n\t\t\t\t3885,\n\t\t\t\t-12388\n\t\t\t],\n\t\t\t[\n\t\t\t\t3941,\n\t\t\t\t-12404\n\t\t\t],\n\t\t\t[\n\t\t\t\t3964,\n\t\t\t\t-12399\n\t\t\t],\n\t\t\t[\n\t\t\t\t4027,\n\t\t\t\t-12458\n\t\t\t],\n\t\t\t[\n\t\t\t\t4044,\n\t\t\t\t-12433\n\t\t\t],\n\t\t\t[\n\t\t\t\t4068,\n\t\t\t\t-12316\n\t\t\t],\n\t\t\t[\n\t\t\t\t4078,\n\t\t\t\t-12307\n\t\t\t],\n\t\t\t[\n\t\t\t\t4114,\n\t\t\t\t-12222\n\t\t\t],\n\t\t\t[\n\t\t\t\t4104,\n\t\t\t\t-12201\n\t\t\t],\n\t\t\t[\n\t\t\t\t4067,\n\t\t\t\t-12179\n\t\t\t],\n\t\t\t[\n\t\t\t\t4002,\n\t\t\t\t-12162\n\t\t\t],\n\t\t\t[\n\t\t\t\t3976,\n\t\t\t\t-12126\n\t\t\t],\n\t\t\t[\n\t\t\t\t3955,\n\t\t\t\t-12115\n\t\t\t],\n\t\t\t[\n\t\t\t\t3949,\n\t\t\t\t-12155\n\t\t\t],\n\t\t\t[\n\t\t\t\t3913,\n\t\t\t\t-12186\n\t\t\t],\n\t\t\t[\n\t\t\t\t3871,\n\t\t\t\t-12193\n\t\t\t],\n\t\t\t[\n\t\t\t\t3841,\n\t\t\t\t-12185\n\t\t\t],\n\t\t\t[\n\t\t\t\t3746,\n\t\t\t\t-12207\n\t\t\t],\n\t\t\t[\n\t\t\t\t3715,\n\t\t\t\t-12204\n\t\t\t],\n\t\t\t[\n\t\t\t\t3700,\n\t\t\t\t-12212\n\t\t\t],\n\t\t\t[\n\t\t\t\t3688,\n\t\t\t\t-12232\n\t\t\t]\n\t\t],\n\t\t\"a\": \"202601052011-Q\"\n\t}\n]" securitySchemes: clientCredentials: type: oauth2 x-receive-token-in: request-body flows: clientCredentials: tokenUrl: https://api.auth.dtn.com/v1/tokens/authorize description: "# Using DAIS for M2M/API Auth\nYou have been given a Client ID and a Client Secret, which are used to request a DTN Access Token. DTN Access Tokens are required when making calls to each and every DTN API endpoint. The following information provides additional details on these tokens and how they are generated.\n## What is an Access Token and how is it different from an API Key?\nAn API Key is a random string of characters that an API uses to authorize whether or not a calling client has approved access to an endpoint. These keys are a non-standard approach to API authorization and are generally issued on a per-API basis.\n\nAn Access Token is also a string of characters but is a base-64 encoded JavaScript Object Notation Web Token, or JWT. JWTs are a widely accepted standard that use OAuth concepts and approaches. \n\nBoth API Keys and Access Tokens are used in an Authorization Request Header as a Bearer, meaning there is no difference in where you put this string of characters when you make calls to DTN APIs.\n## How to generate an Access Token?\nWhen requested, an Access Token is generated for your specific Client (ID/Secret) and for a specific API. The DTN Auth and Identity Service (DAIS) generates new Access Tokens for your client. The DAIS endpoint is `POST https://api.auth.dtn.com/v1/tokens/authorize`.\n\nThis endpoint takes two Header parameters:\n * `Content-Type: application/json`\n * `Accept: application/json`\n\nThis endpoint takes four parameters in the Request Body:\n * `grant_type`: this should always be client_credentials for generating machine-to-machine tokens.\n * `client_id`: this is the Client ID or Application ID using the token and is given to you by DTN's Identity Team. This ID will never change for your client/application.\n * `client_secret`: this is the Client Secret that is associated with the Application ID and is given to you by DTN's Identity Team. This key is subject to rotation for security purposes but always with the client's knowledge.\n * `audience`: this is the API for which this Access Token will be used. For the RadarScope API, you need to use the following audience: https://radarscope-feeds.wdtinc.com\n\nYou can use this CURL command template as a reference for obtaining an access token:\n ```\n curl --location --request POST 'https://api.auth.dtn.com/v1/tokens/authorize' \\\n--header 'Accept: application/json' \\\n--header 'Content-Type: application/json' \\\n--data-raw '{\n\"grant_type\": \"client_credentials\",\n\"client_id\": \"insert your client id here\",\n\"client_secret\": \"insert your client secret here\",\n\"audience\": \"insert your audience here\"\n}' \n ```\n\n*This document, for demonstration purposes, supplies a client_id and client_secret in all code examples. This client/application is for a fictitious API and cannot be used in practice to gain unauthorized access to any other DTN API.*\nUpon generating a new Access Token, you should receive an HTTP Response from DAIS similar to this:\n ```\n {\n \"data\": {\n \"access_token\": \"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InpfX21pZW13NGhoTmdvQWQxR3N6ciJ9.eyJodHRwczovL2F1dGguZHRuLmNvbS9jdXN0b21lcklkIjoiMTIzNDU2Nzg5MERlbW8iLCJodHRwczovL2F1dGguZHRuLmNvbS9wcm9kdWN0Q29kZSI6IkRlbW9BcGlQIiwiaHR0cHM6Ly9hdXRoLmR0bi5jb20vcmVxdWVzdGVySXAiOiIxOC4yMTMuMTc0LjI3IiwiaHR0cHM6Ly9hdXRoLmR0bi5jb20vcnBzIjoiMTAwIiwiaHR0cHM6Ly9hdXRoLmR0bi5jb20vdGllciI6IkJhc2ljIiwiaHR0cHM6Ly9hdXRoLmR0bi5jb20vcXVvdGEiOiI5OTk5OTkiLCJpc3MiOiJodHRwczovL2lkLmF1dGguZHRuLmNvbS8iLCJzdWIiOiJuZnlPM0tpS1BSOE4wREtSNUNMOGpTOUdGQkNEZXlGTUBjbGllbnRzIiwiYXVkIjoiaHR0cHM6Ly9kZW1vLWFwaS5hdXRoLmR0bi5jb20vIiwiaWF0IjoxNjU2MDk5MDY4LCJleHAiOjE2NTYwOTkxNTgsImF6cCI6Im5meU8zS2lLUFI4TjBES1I1Q0w4alM5R0ZCQ0RleUZNIiwic2NvcGUiOiJyZWFkOmRlbW8gY3JlYXRlOmRlbW8gdXBkYXRlOmRlbW8iLCJndHkiOiJjbGllbnQtY3JlZGVudGlhbHMiLCJwZXJtaXNzaW9ucyI6WyJyZWFkOmRlbW8iLCJjcmVhdGU6ZGVtbyIsInVwZGF0ZTpkZW1vIl19.0VHdyp1w9PPFVI0FPheAwuKZwb5C25rwP-LPMXcSNoRmouvga1DZtNLA67ZzE_sAlc_VpaDRr6daLKr_Alw4347mw9sdjP8wKR27kCZa9JZK5PGQMmXHscATbzBEJYpCPklfyGaajgymqTBGnedcv8F0UvlRzQPsFeRPnVoX7BWOSXpMbyToGiXWkQLBQT7r96KAmLZOPJFZspPtjw-wH2mSL2WNa_nkB4j5vMGhGxlKiNRsKb30TH_WAel2hsxNlcPK3XHCmrMTYsNnu7HNqOTMn2i0__0rvBrhSWEw-_grqQDmWFJuWd7Qhi1q81AaJcdqgoSa_efz93QFclJUNw\",\n \"scope\": \"read:demo create:demo update:demo\",\n \"expires_in\": 90,\n \"token_type\": \"Bearer\"\n },\n \"meta\": {\n \"date_time\": \"2022-06-24T19:09:42.963Z\",\n \"name\": \"v1.tokens.authorize\",\n \"uuid\": \"ee6f9feb-dcf8-4421-a6fd-efd6beabdaa9\",\n \"start_timestamp\": 1656097782509,\n \"end_timestamp\": 1656097782963,\n \"execution_time\": 454\n }\n }\n ```\nLooking at this Response, you will see:\n * `access_token`: contains the JWT Access Token string you will use as your Bearer token.\n * `scope`: contains the scopes that this Access Token gives you permissions to access.\n * `expires_in`: contains the length of time before this Access Token will expire, in seconds.\n * `token_type`: verifies that this Access Token should be used as a Bearer token.\n\n## How to use an Access Token after one is generated?\nOnce a new Access Token is obtained, it is used in each call to a DTN API endpoint as a Bearer token in an Authorization Request Header. For example:\n ```\n Header: 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InpfX21pZW13NGhoTmdvQWQxR3N6ciJ9.eyJodHRwczovL2F1dGguZHRuLmNvbS9jdXN0b21lcklkIjoiMTIzNDU2Nzg5MERlbW8iLCJodHRwczovL2F1dGguZHRuLmNvbS9wcm9kdWN0Q29kZSI6IkRlbW9BcGlQIiwiaHR0cHM6Ly9hdXRoLmR0bi5jb20vcmVxdWVzdGVySXAiOiIxOC4yMTMuMTc0LjI3IiwiaHR0cHM6Ly9hdXRoLmR0bi5jb20vcnBzIjoiMTAwIiwiaHR0cHM6Ly9hdXRoLmR0bi5jb20vdGllciI6IkJhc2ljIiwiaHR0cHM6Ly9hdXRoLmR0bi5jb20vcXVvdGEiOiI5OTk5OTkiLCJpc3MiOiJodHRwczovL2lkLmF1dGguZHRuLmNvbS8iLCJzdWIiOiJuZnlPM0tpS1BSOE4wREtSNUNMOGpTOUdGQkNEZXlGTUBjbGllbnRzIiwiYXVkIjoiaHR0cHM6Ly9kZW1vLWFwaS5hdXRoLmR0bi5jb20vIiwiaWF0IjoxNjU2MDk5MDY4LCJleHAiOjE2NTYwOTkxNTgsImF6cCI6Im5meU8zS2lLUFI4TjBES1I1Q0w4alM5R0ZCQ0RleUZNIiwic2NvcGUiOiJyZWFkOmRlbW8gY3JlYXRlOmRlbW8gdXBkYXRlOmRlbW8iLCJndHkiOiJjbGllbnQtY3JlZGVudGlhbHMiLCJwZXJtaXNzaW9ucyI6WyJyZWFkOmRlbW8iLCJjcmVhdGU6ZGVtbyIsInVwZGF0ZTpkZW1vIl19.0VHdyp1w9PPFVI0FPheAwuKZwb5C25rwP-LPMXcSNoRmouvga1DZtNLA67ZzE_sAlc_VpaDRr6daLKr_Alw4347mw9sdjP8wKR27kCZa9JZK5PGQMmXHscATbzBEJYpCPklfyGaajgymqTBGnedcv8F0UvlRzQPsFeRPnVoX7BWOSXpMbyToGiXWkQLBQT7r96KAmLZOPJFZspPtjw-wH2mSL2WNa_nkB4j5vMGhGxlKiNRsKb30TH_WAel2hsxNlcPK3XHCmrMTYsNnu7HNqOTMn2i0__0rvBrhSWEw-_grqQDmWFJuWd7Qhi1q81AaJcdqgoSa_efz93QFclJUNw'\n ```\n\n## Deconstructing the Access Token\nA DTN Access Token carries information within its JWT Body that is available on every API call. By deconstructing the JWT token, our Access Tokens will resemble:\n ```\n {\n \"https://auth.dtn.com/customerId\": \"1234567890Demo\",\n \"https://auth.dtn.com/productCode\": \"DemoApiP\",\n \"https://auth.dtn.com/requesterIp\": \"18.213.174.27\",\n \"https://auth.dtn.com/rps\": \"100\",\n \"https://auth.dtn.com/tier\": \"Basic\",\n \"https://auth.dtn.com/quota\": \"999999\",\n \"iss\": \"https://id.auth.dtn.com/\",\n \"sub\": \"nfyO3KiKPR8N0DKR5CL8jS9GFBCDeyFM@clients\",\n \"aud\": \"https://demo-api.auth.dtn.com/\",\n \"iat\": 1656099068,\n \"exp\": 1656099158,\n \"azp\": \"nfyO3KiKPR8N0DKR5CL8jS9GFBCDeyFM\",\n \"scope\": \"read:demo create:demo update:demo\",\n \"gty\": \"client-credentials\",\n \"permissions\": [\n \"read:demo\",\n \"create:demo\",\n \"update:demo\"\n ]\n }\n ```\n### Description of Claims\n\n | Claim | Type | Description |\n | -----------------------------------| --------------------------------------------| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n | `https://auth.dtn.com/customerId` | String | Custom DTN claim containing the Customer ID found in the DTN Order Management/Salesforce system associated with this token. |\n | `https://auth.dtn.com/productCode` | String | Custom DTN claim containing the Identity product code associated with this token. |\n | `https://auth.dtn.com/requesterIp` | String | Custom DTN claim containing the IP address of the requesting client. |\n | `https://auth.dtn.com/rps` | String | Custom DTN claim containing the maximum rate per second this customer is authorized to utilize. |\n | `https://auth.dtn.com/tier` | String | Custom DTN claim containing the data tier the customer purchased for the requested access. |\n | `https://auth.dtn.com/quota` | String | Custom DTN claim containing the maximum yearly quota the customer purchased for calling DTN endpoints for the specific product. |\n | `iss` | String (URI) | The Security Token Service (STS) that issues and returns the token. If this value is not from `https://id.auth.dtn.com/`, the token should not be considered trusted. |\n | `sub` | String (URI) | The principle about which the token asserts information (the User ID or Client ID within the Identity Provider). A User ID will start with a prefix of `auth0\\|`, while the Client ID will end with the suffix `@clients`. |\n | `aud` | String \\| Array (Strings) (URI \\| [URI, …]) | Identifies the intended recipient(s) of the token – its audience. The token should be rejected if the audience does not contain values expected by the calling application. |\n | `iat` | Number (Timestamp) | “Issued At” indicates when the authentication for this token occurred. |\n | `exp` | Number (Timestamp) | The “expiration time” on or after which the JWT must not be accepted for processing. |\n | `azp` | String | The application/client ID of the client using the token. The application can cat as itself or on behalf of a user. |\n | `gty` | String (Space-delimited) | The grant type that was used to request the token – not an RFC 7519 registered claim (Auth0-specific). |\n | `permissions` | Array (Strings) | The grant type that was used to request the token – not an RFC 7519 registered claim (Auth0-specific). |\n\n "