openapi: 3.1.0
info:

  title: The API Pulse API Pulse Publishing
  description: |
    This is the  API for publishing to the API pulse.

  version: 0.1.0

  contact:
    name: API Evangelist
    url: https://apievangelist.com
    email: info@apievangelist.com

  termsOfService: http://theapipulse.com//terms/

  license:
    name: Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International
    identifier: CC-BY-NC-SA-4.0

externalDocs:
  description: API Pulse
  url: http://theapipulse.com/

servers:

  - url: http://api.theapipulse.com
    description: The base URL for the API Pulse.

tags:

  - name: Signals
    description: |
      The overall signal.                                                                     

paths:

  /signals:
    post:
      operationId: submitSignal
      summary: The API Pulse Submit Signal
      description: Submits an entire signal.
      tags:
        - Signals
      requestBody:
        required: true
        description: A valid signal schema.
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Signal'
      responses:
        '201':
          description: People Pulse Submitted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Submitted'
              examples:
                Submitted:
                  $ref: '#/components/examples/Submitted'
        '400':
          $ref: '#/components/responses/BadRequest'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'

components:

  examples:

    SignalOne:
      description: Entire Signal One
      value:
        people:
          name: Kin Lane
          email: info@apievangelist.com
          role: API Evangelist
          countries:
            - US
        organization:
          name: API Evangelist
          countries:
            - US
          employees: 1
        sectors:
          industries:
            - Software Delivery
        access:
          internal: 500
          partner: 50
          public: 5
        distribution:
          publicPortal: 1
          internalPortal: 2
          gateway: 1
        authentication:
          basicAuth: false
          keys: true
          jwt: false
          oauth: false
        httpApis:
          producedCount: 150
          producedPercentage: 100
          consumeCount: 20
          consumePercentage: 100
          openApi: true
          designFirst: true
          openApiDocumentation: true
          openApiMockServers: true
          openApiSdks: true
          openApiTesting: true
          openApiSecurity: false
          openApiPortal: false
          openApiRespository: true
        graphQlApis:
          producedCount: 1
          producedPercentage: 5
          consumeCount: 1
          consumePercentage: 5
          internally: true
          externally: false
        eventDrivenApis:
          webhooksPublish: 1
          webhooksSubscribe: 1
          webSocketsProduce: 1
          webSocketsPublish: 1
          webSocketsSubscribe: 1
          kafkaProduce: 1
          kafkaPublish: 1
          kafkaSubscribe: 1
          asyncApi: true
          designFirst: true
          asyncApiDocumentation: true
          asyncApiMockServers: true
          asyncApiSdks: true
          asyncApiTesting: true
          asyncApiSecurity: true
          asyncApiPortal: true
          asyncApiRespository: true
        schema:
          data: true
          apis: true
          validation: true
          forms: true
          registry: true
          repository: true
        contracts:
          discovery: true
          portal: true
          repository: true
        experience:
          discovery: 10
          onboarding: 10
          quality: 10
          reliability: 10
          consistency: 10
          communication: 10
          automation: 10
          integration: 10
        properties:
          editor: 10
          documentation: 10
          mockServers: 10
          sdks: 10
          testing: 10
          security: 10
          versioning: 10
        plans:
          applications: true
          rateLimits: true
          chargeAccess: true
          usage: true
          report: true
        governance:
          spectral: true
          vacuum: true
          design: true
          development: true
          pipelines: true
          gateway: true

    PeopleOne:
      description: People one.
      value:
        name: Kin Lane
        email: info@apievangelist.com
        role: API Evangelist
        countries:
          - US

    OrganizationOne:
      description: Organization one.
      value:
        name: API Evangelist
        countries:
          - US
        employees: 1

    SectorOne:
      description: Sector one.
      value:
        industries:
          - Software Delivery

    AccessOne:
      description: Access one.
      value:
        internal: 500
        partner: 50
        public: 5

    DistributionOne:
      description: Distribution one.
      value:
        publicPortal: 1
        internalPortal: 2
        gateway: 1

    AuthenticationOne:
      description: Authentication one.
      value:
        basicAuth: false
        keys: true
        jwt: false
        oauth: false

    HttpApisOne:
      description: HTTP APIs one.
      value:
        producedCount: 150
        producedPercentage: 100
        consumeCount: 20
        consumePercentage: 100
        openApi: true
        designFirst: true
        openApiDocumentation: true
        openApiMockServers: true
        openApiSdks: true
        openApiTesting: true
        openApiSecurity: false
        openApiPortal: false
        openApiRespository: true

    GraphQlApisOne:
      description: GraphQL APIs one.
      value:
        producedCount: 1
        producedPercentage: 5
        consumeCount: 1
        consumePercentage: 5
        internally: true
        externally: false

    EventDrivenApisOne:
      description: Event-Driven APIs one.
      value:
        webhooksPublish: 1
        webhooksSubscribe: 1
        webSocketsProduce: 1
        webSocketsPublish: 1
        webSocketsSubscribe: 1
        kafkaProduce: 1
        kafkaPublish: 1
        kafkaSubscribe: 1
        asyncApi: true
        designFirst: true
        asyncApiDocumentation: true
        asyncApiMockServers: true
        asyncApiSdks: true
        asyncApiTesting: true
        asyncApiSecurity: true
        asyncApiPortal: true
        asyncApiRespository: true

    SchemaOne:
      description: Schema one.
      value:
        data: true
        apis: true
        validation: true
        forms: true
        registry: true
        repository: true

    ContractOne:
      description: Contract one.
      value:
        discovery: true
        portal: true
        repository: true

    ExperienceOne:
      description: Experience one.
      value:
        discovery: 10
        onboarding: 10
        quality: 10
        reliability: 10
        consistency: 10
        communication: 10
        automation: 10
        integration: 10

    PropertiesOne:
      description: Properties one.
      value:
        editor: 10
        documentation: 10
        mockServers: 10
        sdks: 10
        testing: 10
        security: 10
        versioning: 10

    PlanOne:
      description: Plan one.
      value:
        applications: true
        rateLimits: true
        chargeAccess: true
        usage: true
        report: true

    GovernanceOne:
      description: Governance one.
      value:
        spectral: true
        vacuum: true
        design: true
        development: true
        pipelines: true
        gateway: true

    Submitted:
      description: Submitted
      value:
        message: The people pulse was submitted.

  schemas:

    Signal:
      type: object
      description: A pulse signal.
      required:
        - access
        - authentication
        - contracts
        - distribution
        - eventDrivenApis
        - experience
        - governance
        - graphQlApis
        - httpApis
        - organization
        - people
        - plans
        - properties
        - schema
        - sector
      properties:
        access:
          $ref: '#/components/schemas/Access'
        authentication:
          $ref: '#/components/schemas/Authentication'
        contracts:
          $ref: '#/components/schemas/Contract'
        distribution:
          $ref: '#/components/schemas/Distribution'
        eventDrivenApis:
          $ref: '#/components/schemas/EventDrivenApi'
        experience:
          $ref: '#/components/schemas/Experience'
        governance:
          $ref: '#/components/schemas/Governance'
        graphQlApis:
          $ref: '#/components/schemas/GraphQlApi'
        httpApis:
          $ref: '#/components/schemas/HttpApi'
        organization:
          $ref: '#/components/schemas/Organization'
        people:
          $ref: '#/components/schemas/People'
        plans:
          $ref: '#/components/schemas/Plan'
        properties:
          $ref: '#/components/schemas/Properties'
        schema:
          $ref: '#/components/schemas/Schema'
        sector:
          $ref: '#/components/schemas/Sector'

    People:
      type: object
      description: Pulse of the people.
      required:
        - name
        - email
        - role
        - countries
      properties:
        name:
          type: string
          description: A name.
          minLength: 5
          maxLength: 250
          example: Kin Lane
        email:
          type: string
          description: Valid email address.
          minLength: 1
          maxLength: 500
          example: info@apievangelist.com
        role:
          type: string
          description: Role of the person.
          minLength: 10
          maxLength: 250
          example: Evangelist
        linkedIn:
          type: string
          description: Valid LinkedIn URL.
          minLength: 10
          maxLength: 500
          example: https://www.linkedin.com/in/kinlane/
        countries:
          type: array
          items:
            type: string
          minItems: 1
          maxItems: 10
          description: A valid ISO 3166 country for the person.
          example:
            - US
        other:
          type: string
          description: Other information (People).
          minLength: 10
          maxLength: 250
          example: Something additional I wanted to say.

    Organization:
      type: object
      description: Pulse of the organization.
      required:
        - employees
      properties:
        name:
          type: string
          description: The company name.
          minLength: 1
          maxLength: 500
          example: API Evangelist
        countries:
          type: array
          items:
            type: string
          minItems: 1
          maxItems: 10
          description: A valid ISO 3166 country for the organization.
          example:
            - US
        employees:
          type: integer
          description: The number of employees that work at an enterprise organization.
          minLength: 1
          maxLength: 500000
          example: 100
        other:
          type: string
          description: Other information (Organization).
          minLength: 10
          maxLength: 250
          example: Something additional I wanted to say.

    Sector:
      type: object
      description: Pulse of the sector.
      required:
        - industries
      properties:
        industries:
          type: array
          items:
            type: string
            enum:
              - Technology
              - Healthcare & Pharmaceuticals
              - Finance & Insurance
              - Energy & Utilities
              - Retail & E-Commerce
              - Automotive & Transportation
              - Construction & Real Estate
              - Media & Entertainment
              - Manufacturing & Industrial Production
              - Telecommunications
              - Food & Beverage
              - Agriculture & Agribusiness
              - Education & EdTech
              - Aerospace & Defense
              - Hospitality & Tourism
              - Chemicals & Materials
              - Biotechnology & Life Sciences
              - Environmental & Sustainability
              - Legal & Professional Services
              - Sports & Recreation
              - Mining & Metals
              - Fashion & Apparel
              - Supply Chain & Logistics
              - Nonprofit & Philanthropy
              - Government
          minItems: 1
          maxItems: 10
          description: A valid North American Industry Classification System (NAICS) entry.
          example:
            - Technology

    Access:
      type: object
      description: Pulse of access.
      required:
        - internal
        - partner
        - public
      properties:
        internal:
          type: integer
          description: How many internal APIs do you produce?
          minLength: 0
          maxLength: 50000
          example: 2500
        partner:
          type: integer
          description: How many partner APIs do you produce?
          minLength: 0
          maxLength: 50000
          example: 50
        public:
          type: integer
          description: How many public APIs do you produce?
          minLength: 0
          maxLength: 50000
          example: 50
        other:
          type: string
          description: Other information (Access).
          minLength: 10
          maxLength: 250
          example: Something additional I wanted to say.

    Distribution:
      type: object
      description: Pulse of distribution.
      required:
        - publicPortal
      properties:
        publicPortal:
          type: integer
          description: How many public API portals do you have?
          minLength: 0
          maxLength: 25
          example: 1
        internalPortal:
          type: integer
          description: How many internal API portals do you have?
          minLength: 0
          maxLength: 25
          example: 1
        gateway:
          type: integer
          description: How many API gateways do you have?
          minLength: 0
          maxLength: 25
          example: 2
        other:
          type: string
          description: Other information (Distribution).
          minLength: 10
          maxLength: 250
          example: Something additional I wanted to say.

    Authentication:
      type: object
      description: Pulse of authentication.
      required:
        - basicAuth
        - keys
        - jwt
        - oauth
      properties:
        basicAuth:
          type: boolean
          description: Do you use BasicAuth to authenticate with APIs?
          example: true
        keys:
          type: boolean
          description: Do you use API keys to authenticate with APIs?
          example: true
        jwt:
          type: boolean
          description: HDo you use JWT to authenticate with APIs?
          example: true
        oauth:
          type: boolean
          description: Do you use OAuth to authenticate with APIs?
          example: true
        other:
          type: string
          description: Other information (Authentication).
          minLength: 10
          maxLength: 250
          example: Something additional I wanted to say.

    HttpApi:
      type: object
      description: Pulse of HTTP APIs.
      required:
        - producedCount
        - producedPercentage
        - consumeCount
        - consumePercentage
        - openApi
        - designFirst
        - openApiDocumentation
        - openApiMockServers
        - openApiSdks
        - openApiTesting
        - openApiSecurity
        - openApiPortal
        - openApiRespository
      properties:
        producedCount:
          type: integer
          description: How many HTTP APIs do you produce?
          minLength: 0
          maxLength: 10000
          example: 500
        producedPercentage:
          type: integer
          description: What percentage of APIs you produce are HTTP APIs?
          minLength: 0
          maxLength: 100
          example: 50
        consumeCount:
          type: integer
          description: How many HTTP APIs do you consume?
          minLength: 0
          maxLength: 1000
          example: 25
        consumePercentage:
          type: integer
          description: What percentage of APIs you consume are HTTP APIs?
          minLength: 0
          maxLength: 100
          example: 90
        openApi:
          type: boolean
          description: Do you use OpenAPI?
          example: true
        designFirst:
          type: boolean
          description: Are you design-first when producing HTTP APIs?
          example: true
        openApiDocumentation:
          type: boolean
          description: Do you use OpenAPI for Generating Documentation?
          example: true
        openApiMockServers:
          type: boolean
          description: Do you use OpenAPI for Generating Mock Servers?
          example: true
        openApiSdks:
          type: boolean
          description: Do you use OpenAPI for Software Development Kits (SDKs)?
          example: true
        openApiTesting:
          type: boolean
          description: Do you use OpenAPI for Testing?
          example: true
        openApiSecurity:
          type: boolean
          description: Do you use OpenAPI for Security?
          example: true
        openApiPortal:
          type: boolean
          description: Do you publish OpenAPI to a portal?
          example: true
        openApiRespository:
          type: boolean
          description: Do you publish OpenAPI to a repository?
          example: true
        other:
          type: string
          description: Other information (HTTP APIs).
          minLength: 10
          maxLength: 250
          example: Something additional I wanted to say.

    GraphQlApi:
      type: object
      description: Pulse of GraphQL APIs.
      required:
        - producedCount
        - producedPercentage
        - consumeCount
        - consumePercentage
        - internally
        - externally
      properties:
        producedCount:
          type: integer
          description: How many GraphQL APIs do you produce?
          minLength: 0
          maxLength: 10000
          example: 500
        producedPercentage:
          type: integer
          description: What percentage of the  APIs you produce are GraphQL?
          minLength: 0
          maxLength: 100
          example: 50
        consumeCount:
          type: integer
          description: How many GraphQL APIs do you consume?
          minLength: 0
          maxLength: 1000
          example: 25
        consumePercentage:
          type: integer
          description: What percentage of the APIs you consume are GraphQL APIs?
          minLength: 0
          maxLength: 100
          example: 90
        internally:
          type: boolean
          description: Do you use GraphQL internally?
          example: true
        externally:
          type: boolean
          description: Do you use GraphQL externally?
          example: true
        other:
          type: string
          description: Other information (GraphQL APIs).
          minLength: 10
          maxLength: 250
          example: Something additional I wanted to say.

    EventDrivenApi:
      type: object
      description: Pulse of Event-Driven APIs.
      required:
        - webhooksPublish
        - webhooksSubscribe
        - webSocketsProduce
        - webSocketsPublish
        - webSocketsSubscribe
        - kafkaProduce
        - kafkaPublish
        - kafkaSubscribe
        - asyncApi
        - designFirst
        - asyncApiDocumentation
        - asyncApiMockServers
        - asyncApiSdks
        - asyncApiTesting
        - asyncApiSecurity
        - asyncApiPortal
        - asyncApiRespository
      properties:
        webhooksPublish:
          type: integer
          description: How many Webhooks to you publish?
          minLength: 0
          maxLength: 10000
          example: 500
        webhooksSubscribe:
          type: integer
          description: How many Webhooks to you subscribe?
          minLength: 0
          maxLength: 1000
          example: 25
        webSocketsProduce:
          type: integer
          description: How many WebSockets to you produce?
          minLength: 0
          maxLength: 10000
          example: 500
        webSocketsPublish:
          type: integer
          description: How many WebSockets to you publish to?
          minLength: 0
          maxLength: 10000
          example: 500
        webSocketsSubscribe:
          type: integer
          description: How many WebSockets to you subscribe to?
          minLength: 0
          maxLength: 1000
          example: 25
        kafkaProduce:
          type: integer
          description: How many Kafka APIs to you produce?
          minLength: 0
          maxLength: 10000
          example: 500
        kafkaPublish:
          type: integer
          description: How many Kafka APIs to you publish to?
          minLength: 0
          maxLength: 10000
          example: 500
        kafkaSubscribe:
          type: integer
          description: How many Kafka APIs to you subscribe to?
          minLength: 0
          maxLength: 1000
          example: 25
        asyncApi:
          type: boolean
          description: Do you use AsyncAPI?
          example: true
        designFirst:
          type: boolean
          description: Are you design-first when producing event-driven APIs?
          example: true
        asyncApiDocumentation:
          type: boolean
          description: Do you use AsyncAPI for Generating Documentation?
          example: true
        asyncApiMockServers:
          type: boolean
          description: Do you use AsyncAPI for Generating Mock Servers?
          example: true
        asyncApiSdks:
          type: boolean
          description: Do you use AsyncAPI for Software Development Kits (SDKs)?
          example: true
        asyncApiTesting:
          type: boolean
          description: Do you use AsyncAPI for Testing?
          example: true
        asyncApiSecurity:
          type: boolean
          description: Do you use AsyncAPI for Security?
          example: true
        asyncApiPortal:
          type: boolean
          description: Do you publish AsyncAPI to a portal?
          example: true
        asyncApiRespository:
          type: boolean
          description: Do you publish AsyncAPI to a repository?
          example: true
        other:
          type: string
          description: Other information (Event-Driven APIs).
          minLength: 10
          maxLength: 250
          example: Something additional I wanted to say.

    Schema:
      type: object
      description: Pulse of schema.
      required:
        - data
        - apis
        - validation
        - forms
        - registry
        - repository
      properties:
        data:
          type: boolean
          description: Do you use JSON Schema to define data?
          example: true
        apis:
          type: boolean
          description: Do you use JSON Schema to define APIs?
          example: true
        validation:
          type: boolean
          description: Do you use JSON Schema to validate data?
          example: true
        forms:
          type: boolean
          description: Do you use JSON Schema to generate forms?
          example: true
        registry:
          type: boolean
          description: Do you publish JSON Schema to registry?
          example: true
        repository:
          type: boolean
          description: Do you publish JSON Schema to repository?
          example: true
        other:
          type: string
          description: Other information (Schema).
          minLength: 10
          maxLength: 250
          example: Something additional I wanted to say.

    Contract:
      type: object
      description: Pulse of contract.
      required:
        - discovery
        - portal
        - repository
      properties:
        discovery:
          type: boolean
          description: Do you use APIs.json for discovery?
          example: true
        portal:
          type: boolean
          description: Do you publish APIs.json to portal?
          example: true
        repository:
          type: boolean
          description: Do you publish APIs.json to repository?
          example: true
        other:
          type: string
          description: Other information (Contract).
          minLength: 10
          maxLength: 250
          example: Something additional I wanted to say.

    Experience:
      type: object
      description: Pulse of experience.
      required:
        - discovery
        - onboarding
        - quality
        - reliability
        - consistency
        - communication
      properties:
        discovery:
          type: integer
          description: How much of a priority is API discovery?
          example: 10
          minLength: 3
          maxLength: 3
        onboarding:
          type: integer
          description: How much of a priority is API onboarding?
          example: 10
          minLength: 3
          maxLength: 3
        quality:
          type: integer
          description: How much of a priority is API quality?
          example: 10
          minLength: 3
          maxLength: 3
        reliability:
          type: integer
          description: How much of a priority is API reliability?
          example: 10
          minLength: 3
          maxLength: 3
        consistency:
          type: integer
          description: How much of a priority is API consistency?
          example: 10
          minLength: 3
          maxLength: 3
        communication:
          type: integer
          description: How much of a priority is API communication?
          example: 10
          minLength: 3
          maxLength: 3
        automation:
          type: integer
          description: How much of a priority is API automation?
          example: 10
          minLength: 3
          maxLength: 3
        integration:
          type: integer
          description: How much of a priority is API integration?
          example: 10
          minLength: 3
          maxLength: 3
        other:
          type: string
          description: Other information (Experience).
          minLength: 10
          maxLength: 250
          example: Something additional I wanted to say.

    Properties:
      type: object
      description: Pulse of API operational properties.
      required:
        - documentation
        - mockServers
        - sdks
        - testing
        - security
      properties:
        documentation:
          type: integer
          description: How much of a priority is API documentation?
          example: 10
          minLength: 3
          maxLength: 3
        mockServers:
          type: integer
          description: How much of a priority is API mock servers?
          example: 10
          minLength: 3
          maxLength: 3
        sdks:
          type: integer
          description: How much of a priority is SDKs?
          example: 10
          minLength: 3
          maxLength: 3
        testing:
          type: integer
          description: How much of a priority is API testing?
          example: 10
          minLength: 3
          maxLength: 3
        security:
          type: integer
          description: How much of a priority is API security?
          example: 10
          minLength: 3
          maxLength: 3
        versioning:
          type: integer
          description: How much of a priority is API versioning?
          example: 10
          minLength: 3
          maxLength: 3
        other:
          type: string
          description: Other information (Properties).
          minLength: 10
          maxLength: 250
          example: Something additional I wanted to say.

    Plan:
      type: object
      description: Pulse of API planning.
      required:
        - applications
        - rateLimits
        - chargeAccess
        - usage
        - report
      properties:
        applications:
          type: boolean
          description: Do you require an application to be defined to access APIs?
          example: true
        rateLimits:
          type: boolean
          description: Do you enforce rate limits across all APIs?
          example: true
        chargeAccess:
          type: boolean
          description: Do you charge for access to any APIs?
          example: true
        usage:
          type: boolean
          description: Do you monitor API usage for APIs in production?
          example: true
        report:
          type: boolean
          description: Do you report on API usage data with consumers?
          example: true
        other:
          type: string
          description: Other information (Plan).
          minLength: 10
          maxLength: 250
          example: Something additional I wanted to say.

    Governance:
      type: object
      description: Pulse of API governance.
      required:
        - spectral
        - vacuum
        - design
        - development
        - pipelines
        - gateway
      properties:
        spectral:
          type: boolean
          description: Do you use Spectral for governance rules?
          example: true
        vacuum:
          type: boolean
          description: Do you use Vacuum for governance?
          example: true
        design:
          type: boolean
          description: Do you apply rules during design of APIs?
          example: true
        development:
          type: boolean
          description: Do you apply rules during development of APIs?
          example: true
        pipelines:
          type: boolean
          description: Do you apply rules during pipeline builds of APIs?
          example: true
        gateway:
          type: boolean
          description: Do you validate JSON Schema at the API gateway?
          example: true
        other:
          type: string
          description: Other information (Governance).
          minLength: 10
          maxLength: 250
          example: Something additional I wanted to say.

    Submitted:
      type: object
      description: The submitted pulse.
      required:
        - message
      properties:
        message:
          type: string
          minLength: 10
          maxLength: 50
          description: The message being returned.
          example: The people pulse was submitted.

    Problem:
      type: object
      description: This is a Problem Details for HTTP APIs object.
      required:
        - title
        - status
      xml:
        name: problem
        namespace: urn:ietf:rfc:7807
      properties:
        type:
          type: string
          description: A URI reference that identifies the problem type
          example: https://example.com/probs/out-of-credit
          minLength: 10
          maxLength: 2048
        title:
          type: string
          description: A short, human-readable summary of the problem type
          example: You do not have enough credit.
          minLength: 5
          maxLength: 250
        detail:
          type: string
          description: A human-readable explanation specific to this occurrence of the problem
          example: A valid current balance is 30, but that costs 50.
          minLength: 10
          maxLength: 1000
        instance:
          type: string
          description: A URI reference that identifies the specific occurrence of the problem
          example: /account/12345/msgs/abc
          minLength: 10
          maxLength: 250
        status:
          type: integer
          description: The HTTP status code
          example: 400
          minLength: 3
          maxLength: 3

  headers:

    RateLimit:
      description: |
        The RateLimit header communicates quota policies. It contains a `limit` to
        convey the expiring limit, `remaining` to convey the remaining quota units,
        and `reset` to convey the time window reset time.
      schema:
        type: string
        minLength: 10
        maxLength: 250
        example: limit=10, remaining=0, reset=10

    Retry-After:
      description: |
        The Retry-After header indicates how long the user agent should wait before making a follow-up request. 
        The value is in seconds and can be an integer or a date in the future. 
        If the value is an integer, it indicates the number of seconds to wait. 
        If the value is a date, it indicates the time at which the user agent should make a follow-up request. 
      schema:
        type: string
        minLength: 2
        maxLength: 250
      examples:
        integer:
          value: '120'
          summary: Retry after 120 seconds
        date:
          value: 'Fri, 31 Dec 2021 23:59:59 GMT'
          summary: Retry after the specified date

  responses:

    BadRequest:
      description: Bad Request
      headers:
        RateLimit:
          $ref: '#/components/headers/RateLimit'
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
          example:
            type: https://example.com/errors/bad-request
            title: Bad Request
            status: 400
            detail: The request is invalid or missing required parameters.
        application/problem+xml:
          schema:
            $ref: '#/components/schemas/Problem'
          example:
            type: https://example.com/errors/bad-request
            title: Bad Request
            status: 400
            detail: The request is invalid or missing required parameters.

    InternalServerError:
      description: Internal Server Error
      headers:
        RateLimit:
          $ref: '#/components/headers/RateLimit'
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
          example:
            type: https://example.com/errors/internal-server-error
            title: Internal Server Error
            status: 500
            detail: An unexpected error occurred.
        application/problem+xml:
          schema:
            $ref: '#/components/schemas/Problem'
          example:
            type: https://example.com/errors/internal-server-error
            title: Internal Server Error
            status: 500
            detail: An unexpected error occurred.

    TooManyRequests:
      description: Too Many Requests
      headers:
        RateLimit:
          $ref: '#/components/headers/RateLimit'
        Retry-After:
          $ref: '#/components/headers/Retry-After'
      content:
        application/problem+json:
          schema:
            $ref: '#/components/schemas/Problem'
          example:
            type: https://example.com/errors/too-many-requests
            title: Too Many Requests
            status: 429
            detail: You have exceeded the rate limit.
        application/problem+xml:
          schema:
            $ref: '#/components/schemas/Problem'
          example:
            type: https://example.com/errors/too-many-requests
            title: Too Many Requests
            status: 429
            detail: You have exceeded the rate limit.
