swathapi-com Swaths API

The Swaths API from swathapi-com — 6 operation(s) for swaths.

Operations 6

GET /v1/swaths/geometry Verified storm footprints in a viewport as a GeoJSON FeatureCollection #
GET /v1/swaths/{id} Get one swath summary by swath id (swath_...) or storm id (sw_...) #
GET /v1/swaths/{id}/geometry Get the swath damage footprint as a GeoJSON Feature (MultiPolygon) #
GET /v1/swaths/{id}/properties Swath Report: affected properties inside a swath with per-property hail size… #
GET /v1/swaths/{id}/properties/quote Cost preview for the Swath Report: filtered cached-property count and… #
POST /v1/swaths/{id}/email-report Email a swath report summary to your account email (summary 1 credit; with… #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/swathapi-com:swathapi-com-swaths-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

swathapi-com-swaths-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Swaths API
  version: '1.0'
  description: 'Verified severe-weather intelligence. Swath detects hail storms from live NEXRAD/MRMS radar and damaging-wind events from measured NWS storm reports, builds verified damage swath polygons, and joins them against parcel data to answer: which properties were hit, and how hard. Authentication: every /v1 endpoint takes `Authorization: Bearer sk_...`. Self-serve keys via POST /v1/signup (free tier: 2 trial credits, 60 requests/min — paid plans from $35/mo). Credit costs per successful call: Swath Report (GET /v1/swaths/{id}/properties) = 1 credit per property returned plus 25 credits per record fetched fresh from the parcel vendor, 10-credit minimum; report quote (GET /v1/swaths/{id}/properties/quote) = 1 credit; property lookup (GET /v1/property) = 2 credits; billing endpoints = 0; everything else = 1 credit. Failed requests are never billed. Paid plans: developer (40,000 credits/mo) and scale (600,000 credits/mo) via POST /v1/billing/checkout.'
servers:
- url: https://swathapi.com
security:
- ApiKeyAuth: []
tags:
- name: Swaths
paths:
  /v1/swaths/geometry:
    get:
      operationId: swath_geometry_in_bbox
      summary: Verified storm footprints in a viewport as a GeoJSON FeatureCollection
      description: Every verified swath polygon intersecting the bbox, newest first, simplified for map display (~100 m tolerance by default). Properties carry storm id, type, verified time, peak hail size and peak wind. Built for drawing a storm layer under a canvassing map. Costs 1 credit.
      parameters:
      - name: bbox
        in: query
        required: true
        schema:
          type: string
        description: '"west,south,east,north" in WGS84 degrees; at most 20 degrees on a side'
      - name: since
        in: query
        required: false
        schema:
          type: string
        description: ISO 8601; only storms verified at or after this time
      - name: type
        in: query
        required: false
        schema:
          type: string
          enum:
          - hail
          - wind
      - name: limit
        in: query
        required: false
        schema:
          type: integer
          default: 200
          maximum: 500
      - name: simplify
        in: query
        required: false
        schema:
          type: number
          default: 0.001
        description: Simplification tolerance in degrees; 0 = full resolution
      responses:
        '200':
          description: GeoJSON FeatureCollection
          content:
            application/json:
              schema:
                type: object
                properties:
                  type:
                    type: string
                    enum:
                    - FeatureCollection
                  features:
                    type: array
                    items:
                      type: object
                      properties:
                        type:
                          type: string
                        id:
                          type: string
                        geometry:
                          type: object
                        properties:
                          type: object
                          properties:
                            swath_id:
                              type: string
                            storm_id:
                              type: string
                            type:
                              type: string
                            county:
                              type: string
                              nullable: true
                            verified_at:
                              type: string
                            last_seen_at:
                              type: string
                            mesh_max_in:
                              type: number
                              nullable: true
                            wind_max_mph:
                              type: number
                              nullable: true
                            area_km2:
                              type: number
                              nullable: true
                            link:
                              type: string
                  count:
                    type: integer
                  truncated:
                    type: boolean
      tags:
      - Swaths
  /v1/swaths/{id}:
    get:
      operationId: get_swath
      summary: Get one swath summary by swath id (swath_...) or storm id (sw_...)
      description: Costs 1 credit.
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
        description: Swath id (swath_...) or its storm id (sw_...) — both work
      responses:
        '200':
          description: Swath summary
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SwathDetail'
        '401':
          description: 'Missing, invalid, or revoked API key. Fix: pass Authorization: Bearer sk_... (get a key at /v1/signup).'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '402':
          description: 'Monthly credit limit reached (code credits_exhausted). Fix: upgrade via POST /v1/billing/checkout or wait for the monthly reset.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: No such swath
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Per-minute rate limit for the plan exceeded (code rate_limited). Retry after a short wait.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
      - Swaths
  /v1/swaths/{id}/geometry:
    get:
      operationId: get_swath_geometry
      summary: Get the swath damage footprint as a GeoJSON Feature (MultiPolygon)
      description: Costs 1 credit. Geometry can be large for big storms.
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
        description: Swath id (swath_...) or storm id (sw_...)
      responses:
        '200':
          description: GeoJSON Feature with the swath polygon
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SwathGeometryFeature'
        '401':
          description: 'Missing, invalid, or revoked API key. Fix: pass Authorization: Bearer sk_... (get a key at /v1/signup).'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '402':
          description: 'Monthly credit limit reached (code credits_exhausted). Fix: upgrade via POST /v1/billing/checkout or wait for the monthly reset.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: No such swath
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Per-minute rate limit for the plan exceeded (code rate_limited). Retry after a short wait.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
      - Swaths
  /v1/swaths/{id}/properties:
    get:
      operationId: get_swath_report
      summary: 'Swath Report: affected properties inside a swath with per-property hail size…'
      description: Properties in a swath with exposure.hail_in and exposure.score (0-1), sorted by score then value. Bills 1 credit per property returned +25 per fresh-fetched record (10 min) — preview via the quote endpoint. Free plan is cached-only (coverage.vendor_fetch = "skipped_free_plan").
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
        description: Swath id (swath_...) or storm id (sw_...)
      - name: roof_age_min
        in: query
        required: false
        schema:
          type: number
        description: Minimum estimated roof age in years
      - name: roof_material
        in: query
        required: false
        schema:
          type: string
        description: Exact roof material match, e.g. asphalt_shingle
      - name: owner_occupied
        in: query
        required: false
        schema:
          type: boolean
        description: true = owner-occupied only, false = non-owner-occupied only
      - name: year_built_before
        in: query
        required: false
        schema:
          type: number
        description: Built strictly before this year
      - name: year_built_after
        in: query
        required: false
        schema:
          type: number
        description: Built strictly after this year
      - name: value_min
        in: query
        required: false
        schema:
          type: number
        description: Minimum assessed value (USD)
      - name: value_max
        in: query
        required: false
        schema:
          type: number
        description: Maximum assessed value (USD)
      - name: min_exposure_score
        in: query
        required: false
        schema:
          type: number
        description: Minimum exposure score, 0 to 1
      - name: limit
        in: query
        required: false
        schema:
          type: integer
          default: 100
          maximum: 1000
        description: Page size (default 100, cap 1000)
      - name: offset
        in: query
        required: false
        schema:
          type: integer
          default: 0
        description: Pagination offset
      - name: format
        in: query
        required: false
        schema:
          type: string
          enum:
          - json
          - csv
          default: json
        description: csv returns the same properties as a downloadable spreadsheet (address, roof age, owner-occupied, value, hail in, score) for CRM/canvassing import. Billing identical.
      responses:
        '200':
          description: Report with matched properties
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SwathReport'
        '400':
          description: A filter parameter is not a number
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: 'Missing, invalid, or revoked API key. Fix: pass Authorization: Bearer sk_... (get a key at /v1/signup).'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '402':
          description: 'Monthly credit limit reached (code credits_exhausted). Fix: upgrade via POST /v1/billing/checkout or wait for the monthly reset.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: No such swath
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Per-minute rate limit for the plan exceeded (code rate_limited). Retry after a short wait.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
      - Swaths
  /v1/swaths/{id}/properties/quote:
    get:
      operationId: get_report_quote
      summary: 'Cost preview for the Swath Report: filtered cached-property count and…'
      description: Runs the report's filtered COUNT over cached parcels (1 credit, no property rows). Returns total_cached, whether fresh vendor fetches are possible, and a clearly-labeled fresh_estimate (null when no basis). Billing of the real report always uses actual counts.
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
        description: Swath id (swath_...) or storm id (sw_...)
      - name: roof_age_min
        in: query
        required: false
        schema:
          type: number
        description: Minimum estimated roof age in years
      - name: roof_material
        in: query
        required: false
        schema:
          type: string
        description: Exact roof material match, e.g. asphalt_shingle
      - name: owner_occupied
        in: query
        required: false
        schema:
          type: boolean
        description: true = owner-occupied only, false = non-owner-occupied only
      - name: year_built_before
        in: query
        required: false
        schema:
          type: number
        description: Built strictly before this year
      - name: year_built_after
        in: query
        required: false
        schema:
          type: number
        description: Built strictly after this year
      - name: value_min
        in: query
        required: false
        schema:
          type: number
        description: Minimum assessed value (USD)
      - name: value_max
        in: query
        required: false
        schema:
          type: number
        description: Maximum assessed value (USD)
      - name: min_exposure_score
        in: query
        required: false
        schema:
          type: number
        description: Minimum exposure score, 0 to 1
      responses:
        '200':
          description: Cost preview
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReportQuote'
        '400':
          description: A filter parameter is not a number
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: 'Missing, invalid, or revoked API key. Fix: pass Authorization: Bearer sk_... (get a key at /v1/signup).'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '402':
          description: 'Monthly credit limit reached (code credits_exhausted). Fix: upgrade via POST /v1/billing/checkout or wait for the monthly reset.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: No such swath
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Per-minute rate limit for the plan exceeded (code rate_limited). Retry after a short wait.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
      - Swaths
  /v1/swaths/{id}/email-report:
    post:
      operationId: email_report
      summary: Email a swath report summary to your account email (summary 1 credit; with…
      description: Sends a branded report summary (max hail/wind, area, county, property count, storm link) to the account email your key was signed up with — no other recipients. Pass limit to include the top N properties, billed like the report endpoint. Keys without an account email get a 400.
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
        description: Swath id (swath_...) or storm id (sw_...)
      - name: limit
        in: query
        required: false
        schema:
          type: integer
          maximum: 50
        description: Include the top N properties by exposure (billed like the report, 10-credit minimum); omit for a 1-credit summary
      - name: roof_age_min
        in: query
        required: false
        schema:
          type: number
        description: Minimum estimated roof age in years
      - name: roof_material
        in: query
        required: false
        schema:
          type: string
        description: Exact roof material match, e.g. asphalt_shingle
      - name: owner_occupied
        in: query
        required: false
        schema:
          type: boolean
        description: true = owner-occupied only, false = non-owner-occupied only
      - name: year_built_before
        in: query
        required: false
        schema:
          type: number
        description: Built strictly before this year
      - name: year_built_after
        in: query
        required: false
        schema:
          type: number
        description: Built strictly after this year
      - name: value_min
        in: query
        required: false
        schema:
          type: number
        description: Minimum assessed value (USD)
      - name: value_max
        in: query
        required: false
        schema:
          type: number
        description: Maximum assessed value (USD)
      - name: min_exposure_score
        in: query
        required: false
        schema:
          type: number
        description: Minimum exposure score, 0 to 1
      responses:
        '200':
          description: Report emailed to the account address
        '400':
          description: No account email on file, or a filter parameter is not a number
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: 'Missing, invalid, or revoked API key. Fix: pass Authorization: Bearer sk_... (get a key at /v1/signup).'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '402':
          description: 'Monthly credit limit reached (code credits_exhausted). Fix: upgrade via POST /v1/billing/checkout or wait for the monthly reset.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: No such swath
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Per-minute rate limit for the plan exceeded (code rate_limited). Retry after a short wait.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '502':
          description: Email send failed — nothing billed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '503':
          description: Email sending not configured on this server
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      tags:
      - Swaths
components:
  schemas:
    ReportQuote:
      type: object
      description: Cost preview for a Swath Report — counts only, no property rows
      properties:
        storm_id:
          type: string
        swath_id:
          type: string
        total_cached:
          type: integer
          description: Cached properties matching the filters (1 credit each when returned)
        fresh_possible:
          type: boolean
          description: Whether a paid-plan report could trigger live vendor fetches (uncovered tiles exist)
        fresh_estimate:
          type:
          - integer
          - 'null'
          description: ESTIMATE of fresh-fetchable records (uncovered tiles × observed parcels-per-tile average); null when no basis. Billing uses actuals only.
        quote:
          type: object
          properties:
            cached_credits:
              type: integer
              description: total_cached × 1 credit
            fresh_surcharge_per_record:
              type: integer
              description: Credits added per fresh-fetched record (25 at current rates)
            minimum:
              type: integer
              description: Per-request billing floor (10 credits)
            note:
              type: string
    SwathReport:
      type: object
      description: 'Swath Report: properties inside the swath, highest exposure first'
      properties:
        storm_id:
          type: string
        swath_id:
          type: string
        type:
          type: string
          enum:
          - hail
          - wind
        verified_at:
          type:
          - string
          - 'null'
          format: date-time
        mesh_max_in:
          type:
          - number
          - 'null'
        total:
          type: integer
          description: Total matching properties across all pages
        count:
          type: integer
          description: Properties in this page
        offset:
          type: integer
        coverage:
          $ref: '#/components/schemas/Coverage'
        billing:
          $ref: '#/components/schemas/ReportBilling'
        data:
          type: array
          items:
            $ref: '#/components/schemas/ReportProperty'
    SwathGeometryFeature:
      type: object
      description: GeoJSON Feature carrying the swath footprint
      properties:
        type:
          type: string
          enum:
          - Feature
        properties:
          type: object
          properties:
            swath_id:
              type: string
            storm_id:
              type: string
            mesh_max_in:
              type:
              - number
              - 'null'
        geometry:
          type: object
          description: GeoJSON MultiPolygon in WGS84
    Error:
      type: object
      required:
      - error
      properties:
        error:
          type: object
          required:
          - code
          - message
          properties:
            code:
              type: string
              description: Machine-readable error code, e.g. invalid_request, unauthorized, credits_exhausted, rate_limited, not_found, account_exists, billing_not_configured
            message:
              type: string
            used:
              type: number
              description: Credits used this month (present on credits_exhausted)
            plan:
              type: string
              description: Current plan (present on credits_exhausted)
    Coverage:
      type: object
      description: Parcel-data coverage metadata for this report run
      properties:
        tiles_fetched:
          type: integer
          description: Vendor tiles fetched live during this call
        parcels_fetched:
          type: integer
          description: Parcels fetched live during this call
        vendor:
          type: string
          description: Parcel data source label
        vendor_fetch:
          type: string
          enum:
          - live
          - skipped_free_plan
          description: Whether live vendor fetches ran (free plan is cached-only)
    ReportProperty:
      type: object
      properties:
        address:
          type: string
        parcel_id:
          type:
          - string
          - 'null'
        year_built:
          type:
          - integer
          - 'null'
        sqft:
          type:
          - number
          - 'null'
        roof_material:
          type:
          - string
          - 'null'
          description: Reserved — not populated yet, always null.
        roof_age_est:
          type:
          - number
          - 'null'
          description: Estimated roof age in years
        roof_age_source:
          type:
          - string
          - 'null'
          description: Which input produced roof_age_est. Currently always 'year_built' — permit-derived roof ages are on the roadmap, not in the data yet.
        last_roof_permit:
          type:
          - string
          - 'null'
          description: YYYY-MM-DD of the last roofing permit. Reserved — not populated yet, always null.
        owner_occupied:
          type:
          - boolean
          - 'null'
        assessed_value:
          type:
          - number
          - 'null'
          description: Assessed value, USD
        lat:
          type:
          - number
          - 'null'
        lng:
          type:
          - number
          - 'null'
        exposure:
          $ref: '#/components/schemas/Exposure'
    Exposure:
      type: object
      properties:
        hail_in:
          type:
          - number
          - 'null'
          description: Max radar hail size at this parcel, inches
        score:
          type:
          - number
          - 'null'
          description: 0 at the 1.00" detection threshold up to 1.0 at >= 3.00" hail
    ReportBilling:
      type: object
      description: Actual credits billed for this report call (per-record pricing)
      properties:
        credits:
          type: integer
          description: 'Credits billed: properties_returned × 1 + fresh_fetched × fresh_surcharge_per_record, minimum applied'
        properties_returned:
          type: integer
          description: Properties in this page — 1 credit each
        fresh_fetched:
          type: integer
          description: Records fetched fresh from the parcel vendor during this call
        fresh_surcharge_per_record:
          type: integer
          description: Credits per fresh-fetched record (25 at current rates)
        minimum:
          type: integer
          description: Per-request billing floor (10 credits)
    SwathDetail:
      type: object
      properties:
        id:
          type: string
          description: Swath id (swath_...)
        storm_id:
          type: string
        type:
          type: string
          enum:
          - hail
          - wind
        started_at:
          type: string
          format: date-time
        last_seen_at:
          type: string
          format: date-time
        verified_at:
          type:
          - string
          - 'null'
          format: date-time
        status:
          type: string
        mesh_max_in:
          type:
          - number
          - 'null'
        mesh_mean_in:
          type:
          - number
          - 'null'
        wind_max_mph:
          type:
          - number
          - 'null'
        area_km2:
          type:
          - number
          - 'null'
        updated_at:
          type: string
          format: date-time
  securitySchemes:
    ApiKeyAuth:
      type: http
      scheme: bearer
      description: 'Swath API key, e.g. Authorization: Bearer sk_live_... Get one at POST /v1/signup or https://swathapi.com/signup'