GOOD Grants Seasons API

Use these operations to retrieve information about funding cycles (seasons). A season represents a time-bound grant program instance, such as "2026 Community Grants" or "Q1 2026 Innovation Fund". Seasons contain forms, rounds, categories, and chapters. Seasons progress through statuses: draft, active, archived, and destroyed. Note: Seasons are read-only via the API and must be managed through the Good Grants interface.

Operations 2

GET /season List seasons #
GET /season/{season_slug} Get season #

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/good-grants:good-grants-seasons-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

good-grants-seasons-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Good Grants Seasons API
  version: '2.3'
  description: 'The Good Grants API enables you to programmatically manage grant-making programs, funding cycles, and application workflows.


    Use this API to:

    - Create and manage grant applications and submissions

    - Automate review workflows and scoring assignments

    - Track grant payments and fund allocations

    - Generate compliance reports and analytics

    - Integrate with external systems via webhooks


    All API requests require authentication using an API key provided in the `X-Api-Key` header.'
  license:
    name: Creative Force Client Subscription Terms
    url: https://creativeforce.team/agreement/
servers:
- url: https://api.us.cr4ce.com
  description: US regional endpoint
- url: https://api.eu.cr4ce.com
  description: EU regional endpoint
- url: https://api.au.cr4ce.com
  description: Australasia regional endpoint
- url: https://api.ca.cr4ce.com
  description: Canada regional endpoint
- url: https://api.hk.cr4ce.com
  description: Hong Kong regional endpoint
security:
- ApiKeyAuth: []
tags:
- name: Seasons
  description: 'Use these operations to retrieve information about funding cycles (seasons).

    A season represents a time-bound grant program instance, such as "2026 Community Grants" or "Q1 2026 Innovation Fund".


    Seasons contain forms, rounds, categories, and chapters.

    Seasons progress through statuses: draft, active, archived, and destroyed.

    Note: Seasons are read-only via the API and must be managed through the Good Grants interface.'
paths:
  /season:
    get:
      summary: List seasons
      operationId: GetSeasonCollectionV23
      tags:
      - Seasons
      parameters:
      - $ref: '#/components/parameters/seasonOrder'
      - $ref: '#/components/parameters/sortDirection'
      - $ref: '#/components/parameters/page'
      - $ref: '#/components/parameters/perPage'
      - $ref: '#/components/parameters/Accept'
      - $ref: '#/components/parameters/X-Api-Language'
      responses:
        '200':
          description: Paginated list of seasons.
          headers:
            ETag:
              $ref: '#/components/headers/ETag'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
            X-RateLimit-Reset:
              $ref: '#/components/headers/X-RateLimit-Reset'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SeasonList'
            application/xml:
              schema:
                $ref: '#/components/schemas/SeasonList'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
      description: List seasons.
  /season/{season_slug}:
    parameters:
    - $ref: '#/components/parameters/seasonSlug'
    get:
      summary: Get season
      operationId: GetSeasonV23
      tags:
      - Seasons
      parameters:
      - $ref: '#/components/parameters/Accept'
      - $ref: '#/components/parameters/X-Api-Language'
      responses:
        '200':
          description: Season retrieved.
          headers:
            ETag:
              $ref: '#/components/headers/ETag'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
            X-RateLimit-Reset:
              $ref: '#/components/headers/X-RateLimit-Reset'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Season'
            application/xml:
              schema:
                $ref: '#/components/schemas/Season'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
      description: Get the season identified by the specified slug.
components:
  schemas:
    Forbidden:
      allOf:
      - $ref: '#/components/schemas/BaseProblem'
      - type: object
        properties:
          status_code:
            type: integer
            minimum: 403
            maximum: 403
    NotFound:
      allOf:
      - $ref: '#/components/schemas/BaseProblem'
      - type: object
        properties:
          status_code:
            type: integer
            minimum: 404
            maximum: 404
    BadRequest:
      allOf:
      - $ref: '#/components/schemas/BaseProblem'
      - type: object
        properties:
          status_code:
            type: integer
            minimum: 400
            maximum: 400
    Season:
      type: object
      properties:
        created:
          type: string
          format: date-time
        name:
          type: object
          description: Map keyed by locale code (for example, `en_GB` or `fr_FR`).
          additionalProperties:
            type: string
        slug:
          type: string
        status:
          type: string
          description: Lifecycle status of the season.
          enum:
          - draft
          - active
          - archived
          - destroyed
        updated:
          type: string
          format: date-time
      example:
        created: '2023-01-16T10:01:11Z'
        name:
          en_GB: '2026'
        slug: AbCdEfGh
        status: active
        updated: '2026-06-03T06:50:16Z'
    TooManyRequests:
      allOf:
      - $ref: '#/components/schemas/BaseProblem'
      - type: object
        properties:
          status_code:
            type: integer
            minimum: 429
            maximum: 429
    Pagination:
      type: object
      title: Pagination
      properties:
        current_page:
          type: integer
          description: Number of the page returned by this response, starting at `1`.
        first_page_url:
          type: string
          description: URL of the first page in the result set, relative when the requested page is beyond the last page.
        from:
          type:
          - integer
          - 'null'
          description: Position of the first record on this page within the full result set, starting at `1`, or `null` when the requested page is beyond the last page.
        last_page:
          type: integer
          description: Total number of pages.
        last_page_url:
          type: string
          description: URL of the last page in the result set, relative when the requested page is beyond the last page.
        next_page_url:
          type: string
          description: URL of the next page in the result set, empty when the current page is the last page.
        path:
          type: string
          description: Canonical URL of the endpoint, without query parameters.
        per_page:
          type: integer
          default: 10
          description: Maximum number of records returned per page.
        prev_page_url:
          type: string
          description: URL of the previous page in the result set, empty when the current page is the first page.
        to:
          type:
          - integer
          - 'null'
          description: Position of the last record on this page within the full result set, or `null` when the requested page is beyond the last page.
        total:
          type: integer
          description: Total number of records across all pages.
    BaseProblem:
      description: Standard error envelope for all API error responses.
      type: object
      properties:
        message:
          type: string
        status_code:
          type: integer
          minimum: 400
          maximum: 599
    SeasonList:
      allOf:
      - $ref: '#/components/schemas/Pagination'
      - type: object
        properties:
          data:
            type: array
            items:
              $ref: '#/components/schemas/Season'
      example:
        current_page: 1
        data:
        - created: '2023-01-16T10:01:11Z'
          name:
            en_GB: '2026'
          slug: AbCdEfGh
          status: active
          updated: '2026-06-03T06:50:16Z'
        - created: '2026-06-02T14:11:32Z'
          name:
            en_GB: copy test 2 june
          slug: CdEfGhIj
          status: archived
          updated: '2026-06-03T06:50:16Z'
        first_page_url: https://api.eu.cr4ce.com/season?per_page=100&page=1
        from: 1
        last_page: 1
        last_page_url: https://api.eu.cr4ce.com/season?per_page=100&page=1
        next_page_url: ''
        path: https://api.eu.cr4ce.com/season
        per_page: 100
        prev_page_url: ''
        to: 8
        total: 8
    Unauthorized:
      allOf:
      - $ref: '#/components/schemas/BaseProblem'
      - type: object
        properties:
          status_code:
            type: integer
            minimum: 401
            maximum: 401
  parameters:
    sortDirection:
      name: dir
      in: query
      required: false
      description: Sort in ascending or descending order. Invalid values are rejected with `400 Bad Request`.
      schema:
        type: string
        enum:
        - asc
        - desc
    Accept:
      name: Accept
      in: header
      required: true
      description: Defines the response type.
      schema:
        type: string
        enum:
        - application/vnd.Creative Force.v2.3+json
        - application/vnd.Creative Force.v2.3+xml
    seasonOrder:
      name: order
      in: query
      required: false
      description: Column name to order by. An unrecognised value falls back to the default sort by `updated`.
      schema:
        type: string
        enum:
        - created
        - name
        - status
        - updated
    X-Api-Language:
      name: x-api-language
      in: header
      required: false
      description: 'Defines the languages included in the response. If non are provided, the account default language is returned.


        Value `all` overrides any other values present.


        You can request multiple languages using a comma-separated string of languages.


        The selected language must be supported by your account or a `400` error is returned.'
      style: simple
      explode: false
      schema:
        type: array
        items:
          type: string
          enum:
          - all
          - ar_AR
          - bg_BG
          - bn_IN
          - ca_ES
          - cs_CZ
          - cy_GB
          - da_DK
          - de_DE
          - en_GB
          - en_US
          - el_GR
          - es_NN
          - es_LA
          - et_EE
          - fa_NN
          - fi_FI
          - fr_FR
          - fr_CA
          - he_IL
          - hi_IN
          - hr_HR
          - hu_HU
          - hy_AM
          - it_IT
          - ja_JP
          - ko_KR
          - lt_LT
          - ms_MY
          - nl_NL
          - nb_NO
          - pl_PL
          - pt_BR
          - ro_RO
          - ru_RU
          - sk_SK
          - sl_SI
          - sq_AL
          - sr_RS
          - sv_SE
          - sw_NN
          - th_TH
          - tr_TR
          - uk_UA
          - vi_VN
          - zh_CN
          - zh_HK
      example:
      - en_GB
      - fr_FR
    perPage:
      name: per_page
      in: query
      required: false
      description: 'Limit the number of items returned to between 1 and 100.


        If you provide a value outside this range, you will receive a `400` response.

        '
      schema:
        type: integer
        minimum: 1
        maximum: 100
        default: 10
    seasonSlug:
      name: season_slug
      in: path
      required: true
      description: Slug of the season.
      schema:
        type: string
        pattern: ^[A-Za-z]{8}$
    page:
      name: page
      in: query
      required: false
      description: Specify the page number to return.
      schema:
        type: integer
        minimum: 1
        default: 1
  responses:
    NotFound:
      description: Resource identified by the path slug does not exist. Returned when the slug is well-formed but no record matches it.
      headers:
        X-RateLimit-Limit:
          $ref: '#/components/headers/X-RateLimit-Limit'
        X-RateLimit-Remaining:
          $ref: '#/components/headers/X-RateLimit-Remaining'
        X-RateLimit-Reset:
          $ref: '#/components/headers/X-RateLimit-Reset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/NotFound'
        application/xml:
          schema:
            $ref: '#/components/schemas/NotFound'
    ServiceUnavailable:
      description: Service is temporarily unavailable due to regional maintenance.
      content:
        application/json:
          schema:
            type: object
            properties:
              status:
                type: string
                description: Human-readable maintenance status.
            example:
              status: Maintenance in progress
        application/xml:
          schema:
            type: object
            properties:
              status:
                type: string
                description: Human-readable maintenance status.
            example:
              status: Maintenance in progress
    Unauthorized:
      description: Missing `x-api-key` header.
      headers:
        X-RateLimit-Limit:
          $ref: '#/components/headers/X-RateLimit-Limit'
        X-RateLimit-Remaining:
          $ref: '#/components/headers/X-RateLimit-Remaining'
        X-RateLimit-Reset:
          $ref: '#/components/headers/X-RateLimit-Reset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Unauthorized'
        application/xml:
          schema:
            $ref: '#/components/schemas/Unauthorized'
    BadRequest:
      description: 'Request was rejected before the endpoint could process it. Common causes: invalid `Accept` header, unsupported `x-api-language` code, empty request body on `POST` / `PUT`, invalid JSON in the request body, or an invalid slug format in a path parameter.'
      headers:
        X-RateLimit-Limit:
          $ref: '#/components/headers/X-RateLimit-Limit'
        X-RateLimit-Remaining:
          $ref: '#/components/headers/X-RateLimit-Remaining'
        X-RateLimit-Reset:
          $ref: '#/components/headers/X-RateLimit-Reset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/BadRequest'
        application/xml:
          schema:
            $ref: '#/components/schemas/BadRequest'
    TooManyRequests:
      description: Rate limit of 60 requests per minute exceeded.
      headers:
        Retry-After:
          $ref: '#/components/headers/Retry-After'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/TooManyRequests'
        application/xml:
          schema:
            $ref: '#/components/schemas/TooManyRequests'
    Forbidden:
      description: 'Authenticated request denied. Common causes: invalid or unknown

        API key, suspended account, `api` feature not enabled for

        the account, or a read-only API key used for a request that

        is not a `GET`.'
      headers:
        X-RateLimit-Limit:
          $ref: '#/components/headers/X-RateLimit-Limit'
        X-RateLimit-Remaining:
          $ref: '#/components/headers/X-RateLimit-Remaining'
        X-RateLimit-Reset:
          $ref: '#/components/headers/X-RateLimit-Reset'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Forbidden'
        application/xml:
          schema:
            $ref: '#/components/schemas/Forbidden'
  headers:
    X-RateLimit-Remaining:
      description: Number of requests remaining in the current rate limit window.
      schema:
        type: integer
        example: 58
    X-RateLimit-Limit:
      description: Maximum number of requests allowed per minute.
      schema:
        type: integer
        example: 60
    X-RateLimit-Reset:
      description: Unix timestamp when the rate limit window resets.
      schema:
        type: integer
        example: 1783470988
    Retry-After:
      description: Number of seconds the client should wait before retrying.
      schema:
        type: integer
      example: 60
    ETag:
      description: Entity tag for the selected representation.
      schema:
        type: string
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: 'API key used to authenticate and authorise every request.

        Include it in the `x-api-key` header.'