Ron Swanson Quotes API

Read-only REST API returning random or searched Ron Swanson quotes as a JSON array of strings. No authentication is required. CORS is enabled (Access-Control-Allow-Origin is set to *) so the API can be called directly from browsers. Three endpoints are exposed at the /v2/ base path: GET /quotes returns a single random quote, GET /quotes/{count} returns N random quotes, and GET /quotes/search/{term} returns every quote that contains the given term (case-insensitive).

OpenAPI Specification

ron-swanson-quotes-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Ron Swanson Quotes API
  version: 1.0.0
  description: >-
    A community-built, read-only HTTP API that returns Ron Swanson quotes from
    the NBC television series Parks and Recreation. Authored by James Wright
    as a Node.js / TypeScript Express service hosted on Heroku. The API
    requires no authentication, enables CORS for all origins, and returns
    every response as a JSON array of strings. The upstream GitHub repository
    was archived on 2026-01-19 but the public Heroku endpoint remains
    available as of 2026-05-30.
  contact:
    name: James Wright
    url: https://jamesswright.co.uk
    email: [email protected]
  license:
    name: Apache License 2.0
    url: https://www.apache.org/licenses/LICENSE-2.0.html
  x-generated-from: provider-published-schema
  x-source-url: https://ron-swanson-quotes.herokuapp.com/v2/schema
  x-status: deprecated
  x-status-reason: >-
    Upstream repository archived 2026-01-19; API host remains live without an
    SLA. Suitable for tutorials and demos, not for production use.
servers:
  - url: https://ron-swanson-quotes.herokuapp.com/v2
    description: Production Heroku host
tags:
  - name: Quotes
    description: >-
      Read-only operations that return one or more Ron Swanson quotes from
      the static quote corpus.
paths:
  /quotes:
    get:
      operationId: getRandomQuote
      summary: Ron Swanson Quotes Get Random Quote
      description: >-
        Return a single random Ron Swanson quote wrapped in a one-element JSON
        array of strings. Equivalent to calling /quotes/1.
      tags:
        - Quotes
      responses:
        '200':
          description: A one-element array containing one random quote.
          headers:
            X-RateLimit-Limit:
              description: Maximum number of requests allowed in the current rolling window.
              schema:
                type: integer
            X-RateLimit-Remaining:
              description: Remaining number of requests in the current rolling window.
              schema:
                type: integer
            X-RateLimit-Reset:
              description: Unix epoch seconds at which the rate-limit window resets.
              schema:
                type: integer
            Access-Control-Allow-Origin:
              description: Always set to "*"; CORS is open for all origins.
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QuoteList'
              examples:
                GetRandomQuote200Example:
                  summary: Default getRandomQuote 200 response
                  x-microcks-default: true
                  value:
                    - >-
                      Capitalism is God's way of determining who is smart and
                      who is poor.
        '429':
          description: Too Many Requests - the per-client rate limit has been exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RateLimitError'
              examples:
                GetRandomQuote429Example:
                  summary: Default getRandomQuote 429 response
                  x-microcks-default: true
                  value:
                    error: rate_limit_exceeded
                    message: >-
                      You have exceeded the request rate limit for this
                      endpoint. Please wait until the time specified by
                      X-RateLimit-Reset before retrying.
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /quotes/{count}:
    get:
      operationId: getRandomQuotes
      summary: Ron Swanson Quotes Get Random Quotes
      description: >-
        Return a JSON array of `count` random Ron Swanson quotes. The service
        does not document an upper bound on `count`; reasonable values are in
        the low tens. Negative or non-integer values yield a single quote.
      tags:
        - Quotes
      parameters:
        - name: count
          in: path
          required: true
          description: Number of random quotes to return.
          schema:
            type: integer
            minimum: 1
            example: 5
      responses:
        '200':
          description: An array of `count` random quotes.
          headers:
            X-RateLimit-Limit:
              description: Maximum number of requests allowed in the current rolling window.
              schema:
                type: integer
            X-RateLimit-Remaining:
              description: Remaining number of requests in the current rolling window.
              schema:
                type: integer
            X-RateLimit-Reset:
              description: Unix epoch seconds at which the rate-limit window resets.
              schema:
                type: integer
            Access-Control-Allow-Origin:
              description: Always set to "*"; CORS is open for all origins.
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QuoteList'
              examples:
                GetRandomQuotes200Example:
                  summary: Default getRandomQuotes 200 response
                  x-microcks-default: true
                  value:
                    - >-
                      I don't want to paint with a broad brush here, but every
                      single contractor in the world is a miserable,
                      incompetent thief.
                    - Just give me all the bacon and eggs you have.
                    - >-
                      Say what you want about organized religion, but those
                      bastards knew how to construct an edifice.
                    - Go back to the library where you belong.
                    - We have one activity planned - not getting killed.
        '429':
          description: Too Many Requests - the per-client rate limit has been exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RateLimitError'
              examples:
                GetRandomQuotes429Example:
                  summary: Default getRandomQuotes 429 response
                  x-microcks-default: true
                  value:
                    error: rate_limit_exceeded
                    message: >-
                      You have exceeded the request rate limit for this
                      endpoint. Please wait until the time specified by
                      X-RateLimit-Reset before retrying.
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /quotes/search/{term}:
    get:
      operationId: searchQuotes
      summary: Ron Swanson Quotes Search Quotes
      description: >-
        Return every Ron Swanson quote whose text contains the URL-escaped
        `term` substring. Matching is case-insensitive. The response is an
        array of zero or more quote strings; an empty array is returned when
        no quotes match.
      tags:
        - Quotes
      parameters:
        - name: term
          in: path
          required: true
          description: >-
            URL-encoded search term. Matched against the quote corpus without
            case sensitivity. Whole-word matching is not enforced - substrings
            also match.
          schema:
            type: string
            example: bacon
      responses:
        '200':
          description: An array of zero or more quotes that contain `term`.
          headers:
            X-RateLimit-Limit:
              description: Maximum number of requests allowed in the current rolling window.
              schema:
                type: integer
            X-RateLimit-Remaining:
              description: Remaining number of requests in the current rolling window.
              schema:
                type: integer
            X-RateLimit-Reset:
              description: Unix epoch seconds at which the rate-limit window resets.
              schema:
                type: integer
            Access-Control-Allow-Origin:
              description: Always set to "*"; CORS is open for all origins.
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QuoteList'
              examples:
                SearchQuotes200Example:
                  summary: Default searchQuotes 200 response
                  x-microcks-default: true
                  value:
                    - >-
                      Just give me all the bacon and eggs you have.
                      Wait...wait. I worry what you just heard was: Give me a
                      lot of bacon and eggs. What I said was: Give me all the
                      bacon and eggs you have. Do you understand?
        '429':
          description: Too Many Requests - the per-client rate limit has been exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RateLimitError'
              examples:
                SearchQuotes429Example:
                  summary: Default searchQuotes 429 response
                  x-microcks-default: true
                  value:
                    error: rate_limit_exceeded
                    message: >-
                      You have exceeded the request rate limit for this
                      endpoint. Please wait until the time specified by
                      X-RateLimit-Reset before retrying.
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
components:
  schemas:
    Quote:
      type: string
      title: Quote
      description: >-
        A single Ron Swanson quote represented as a plain UTF-8 string.
        Includes punctuation, smart quotes, and original capitalisation as
        delivered by the upstream corpus.
      example: >-
        Give a man a fish and feed him for a day. Don't teach a man to fish,
        and feed yourself. He's a grown man. Fishing's not that hard.
    QuoteList:
      type: array
      title: QuoteList
      description: >-
        Ordered JSON array of Ron Swanson quote strings. Every endpoint of
        this API returns this shape regardless of the requested count or
        search term. An empty array is a valid response for searches with no
        matches.
      items:
        $ref: '#/components/schemas/Quote'
      example:
        - Capitalism is God's way of determining who is smart and who is poor.
        - Clear alcohols are for rich women on diets.
    RateLimitError:
      type: object
      title: RateLimitError
      description: >-
        Error body returned when the per-client request rate limit has been
        exceeded. Companion to the X-RateLimit-* response headers.
      properties:
        error:
          type: string
          description: Short machine-readable error code.
          example: rate_limit_exceeded
        message:
          type: string
          description: Human-readable explanation of the rate-limit condition.
          example: >-
            You have exceeded the request rate limit for this endpoint. Please
            wait until the time specified by X-RateLimit-Reset before retrying.
      required:
        - error
        - message