FieldRobin Public API

Public content and service discovery endpoints.

GitHub OpenAPI

Operations 13

GET /health Health check #
GET /v1/blog/posts List published blog posts #
GET /v1/blog/posts/categories List blog categories with post counts #
GET /v1/blog/sitemap Published blog post slugs for sitemap generation #
GET /v1/blog/posts/{slug} Get a published blog post by slug #
GET /v1/blog/media/{publicId} Stream a blog media asset (fallback when no CDN URL) #
GET /v1/government-opportunities/public List cached active government opportunities (limited fields) #
GET /v1/government-opportunities/public/filter-options List NAICS and PSC filter options from cached active opportunities #
GET /v1/directory/public List published directory businesses #
GET /v1/directory/public/filter-options Directory filter options #
GET /v1/directory/public/{slug} Directory listing detail #
GET /v1/government-opportunities/public/sitemap List active government contract slugs for SEO sitemap generation #
GET /v1/government-opportunities/public/{identifier} View a government opportunity by SEO slug or legacy notice ID #

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/fieldrobin-com:fieldrobin-com-public-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

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

fieldrobin-com-public-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: FieldRobin Public API
  version: 1.0.0
  description: 'Public, unauthenticated content and agent-commerce endpoints for FieldRobin.


    Authenticated application, account, administrative, webhook, and tokenized endpoints are intentionally excluded.'
  contact:
    name: FieldRobin Support
    email: support@fieldrobin.dev
servers:
- url: https://fieldrobin.com/api
  description: FieldRobin public API
tags:
- name: Public
  description: Public content and service discovery endpoints.
paths:
  /health:
    get:
      tags:
      - Public
      summary: Health check
      description: Returns API status. No authentication required.
      operationId: healthCheck
      security: []
      responses:
        '200':
          description: API is healthy
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    example: ok
                  version:
                    type: string
                    example: v1
  /v1/blog/posts:
    get:
      tags:
      - Public
      summary: List published blog posts
      operationId: listPublicBlogPosts
      security: []
      parameters:
      - name: page
        in: query
        schema:
          type: integer
          minimum: 1
      - name: per_page
        in: query
        schema:
          type: integer
          minimum: 1
          maximum: 50
      - name: locale
        in: query
        schema:
          type: string
          enum:
          - en-US
          - es-US
          default: en-US
      - name: category
        in: query
        schema:
          type: string
      - name: tag
        in: query
        schema:
          type: string
      - name: q
        in: query
        schema:
          type: string
      responses:
        '200':
          description: Paginated blog post summaries
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BlogPostPublicListResponse'
  /v1/blog/posts/categories:
    get:
      tags:
      - Public
      summary: List blog categories with post counts
      operationId: listPublicBlogCategories
      security: []
      parameters:
      - name: locale
        in: query
        schema:
          type: string
          enum:
          - en-US
          - es-US
          default: en-US
      responses:
        '200':
          description: Blog categories
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BlogPostCategoryListResponse'
  /v1/blog/sitemap:
    get:
      tags:
      - Public
      summary: Published blog post slugs for sitemap generation
      operationId: listPublicBlogSitemap
      security: []
      parameters:
      - name: page
        in: query
        schema:
          type: integer
          minimum: 1
      - name: per_page
        in: query
        schema:
          type: integer
          minimum: 1
          maximum: 1000
      responses:
        '200':
          description: Blog sitemap rows
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BlogPostSitemapResponse'
  /v1/blog/posts/{slug}:
    get:
      tags:
      - Public
      summary: Get a published blog post by slug
      operationId: showPublicBlogPost
      security: []
      parameters:
      - name: slug
        in: path
        required: true
        schema:
          type: string
      - name: locale
        in: query
        schema:
          type: string
          enum:
          - en-US
          - es-US
          default: en-US
      responses:
        '200':
          description: Blog post detail
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BlogPostDetailResponse'
        '404':
          $ref: '#/components/responses/NotFound'
  /v1/blog/media/{publicId}:
    get:
      tags:
      - Public
      summary: Stream a blog media asset (fallback when no CDN URL)
      operationId: showPublicBlogMedia
      security: []
      parameters:
      - name: publicId
        in: path
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: Image bytes
          content:
            image/*:
              schema:
                type: string
                format: binary
        '404':
          $ref: '#/components/responses/NotFound'
  /v1/government-opportunities/public:
    get:
      tags:
      - Public
      summary: List cached active government opportunities (limited fields)
      operationId: listPublicGovernmentOpportunities
      security: []
      parameters:
      - name: page
        in: query
        schema:
          type: integer
          minimum: 1
      - name: per_page
        in: query
        schema:
          type: integer
          minimum: 1
          maximum: 50
      - name: keyword
        in: query
        schema:
          type: string
      - name: state
        in: query
        schema:
          type: string
          minLength: 2
          maxLength: 2
      - name: category
        in: query
        schema:
          type: string
      - name: naics
        in: query
        schema:
          type: string
      - name: psc
        in: query
        schema:
          type: string
        description: Product service code (classification code) prefix filter
      - name: set_aside
        in: query
        schema:
          type: string
      responses:
        '200':
          description: Paginated public opportunity summaries
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/GovernmentOpportunityPublic'
        '429':
          description: Too many requests
  /v1/government-opportunities/public/filter-options:
    get:
      tags:
      - Public
      summary: List NAICS and PSC filter options from cached active opportunities
      operationId: listPublicGovernmentOpportunityFilterOptions
      security: []
      responses:
        '200':
          description: Searchable NAICS and PSC code options
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/GovernmentOpportunityFilterOptions'
        '429':
          description: Too many requests
  /v1/directory/public:
    get:
      tags:
      - Public
      summary: List published directory businesses
      operationId: listPublicDirectoryListings
      security: []
      parameters:
      - name: zip
        in: query
        schema:
          type: string
      - name: postal_code
        in: query
        schema:
          type: string
      - name: industry
        in: query
        schema:
          type: string
      - name: metro
        in: query
        schema:
          type: string
      - name: min_rating
        in: query
        schema:
          type: number
      - name: min_reviews
        in: query
        schema:
          type: integer
      - name: q
        in: query
        schema:
          type: string
      - name: sort
        in: query
        schema:
          type: string
          enum:
          - rating_desc
          - rating_asc
          - reviews_desc
          - name_asc
      - $ref: '#/components/parameters/PageParam'
      - name: per_page
        in: query
        schema:
          type: integer
          minimum: 1
          maximum: 50
      responses:
        '200':
          description: Paginated directory listings
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DirectoryListingPublicListResponse'
  /v1/directory/public/filter-options:
    get:
      tags:
      - Public
      summary: Directory filter options
      operationId: listPublicDirectoryFilterOptions
      security: []
      responses:
        '200':
          description: Industries, metros, postal codes
          content:
            application/json:
              schema:
                type: object
  /v1/directory/public/{slug}:
    get:
      tags:
      - Public
      summary: Directory listing detail
      operationId: getPublicDirectoryListing
      security: []
      parameters:
      - name: slug
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Listing detail
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DirectoryListingPublicResponse'
        '404':
          description: Not found
  /v1/government-opportunities/public/sitemap:
    get:
      tags:
      - Public
      summary: List active government contract slugs for SEO sitemap generation
      operationId: listPublicGovernmentOpportunitySitemap
      security: []
      parameters:
      - name: page
        in: query
        schema:
          type: integer
          minimum: 1
      - name: per_page
        in: query
        schema:
          type: integer
          minimum: 1
          maximum: 1000
          default: 500
      responses:
        '200':
          description: Paginated slug rows for indexable active opportunities
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/GovernmentOpportunitySitemapEntry'
                  meta:
                    type: object
                    properties:
                      current_page:
                        type: integer
                      last_page:
                        type: integer
                      per_page:
                        type: integer
                      total:
                        type: integer
        '429':
          description: Too many requests
  /v1/government-opportunities/public/{identifier}:
    get:
      tags:
      - Public
      summary: View a government opportunity by SEO slug or legacy notice ID
      operationId: showPublicGovernmentOpportunity
      security: []
      parameters:
      - name: identifier
        in: path
        required: true
        schema:
          type: string
        description: SEO slug (preferred) or legacy SAM.gov notice_id
      responses:
        '200':
          description: Full public opportunity detail
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/GovernmentOpportunityDetail'
        '404':
          description: Opportunity not found
        '429':
          description: Too many requests
components:
  schemas:
    BlogPostDetail:
      allOf:
      - $ref: '#/components/schemas/BlogPostPublic'
      - type: object
        properties:
          body:
            type: string
          meta_description:
            type: string
            nullable: true
    DirectoryListingPhoto:
      type: object
      required:
      - id
      - kind
      - public_id
      - url
      - sort_order
      properties:
        id:
          type: integer
        kind:
          type: string
          enum:
          - photo
          - logo
        public_id:
          type: string
          format: uuid
        url:
          type: string
          format: uri
        alt_text:
          type: string
          nullable: true
        sort_order:
          type: integer
        mime_type:
          type: string
          nullable: true
        byte_size:
          type: integer
        original_filename:
          type: string
          nullable: true
    ErrorMessage:
      type: object
      required:
      - code
      - message
      - resolution
      - status
      properties:
        code:
          type: string
          example: RESOURCE_NOT_FOUND
        message:
          type: string
          example: The given data was invalid.
        resolution:
          type: string
          example: Verify the identifier and try again.
        status:
          type: integer
          example: 404
    GovernmentOpportunitySitemapEntry:
      type: object
      required:
      - slug
      properties:
        slug:
          type: string
        posted_date:
          type: string
          format: date-time
          nullable: true
        last_modified:
          type: string
          format: date-time
          nullable: true
        response_deadline:
          type: string
          format: date-time
          nullable: true
    BlogPostDetailResponse:
      type: object
      properties:
        data:
          $ref: '#/components/schemas/BlogPostDetail'
    GovernmentOpportunityFilterOption:
      type: object
      required:
      - code
      - label
      - count
      properties:
        code:
          type: string
        description:
          type: string
          nullable: true
        label:
          type: string
        count:
          type: integer
    DirectoryListingPublicListResponse:
      type: object
      required:
      - data
      - meta
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/DirectoryListingPublic'
        meta:
          type: object
          properties:
            current_page:
              type: integer
            last_page:
              type: integer
            per_page:
              type: integer
            total:
              type: integer
    GovernmentOpportunityFilterOptions:
      type: object
      properties:
        naics:
          type: array
          items:
            $ref: '#/components/schemas/GovernmentOpportunityFilterOption'
        psc:
          type: array
          items:
            $ref: '#/components/schemas/GovernmentOpportunityFilterOption'
    GovernmentOpportunityDetail:
      allOf:
      - $ref: '#/components/schemas/GovernmentOpportunityPublic'
      - type: object
        properties:
          solicitation_number:
            type: string
            nullable: true
          related_notice:
            type: string
            nullable: true
          contract_line_item_number:
            type: string
            nullable: true
          type:
            type: string
            nullable: true
          base_type:
            type: string
            nullable: true
          archive_type:
            type: string
            nullable: true
          archive_policy:
            type: string
            nullable: true
          department:
            type: string
            nullable: true
          subtier:
            type: string
            nullable: true
          office:
            type: string
            nullable: true
          organization_type:
            type: string
            nullable: true
          organization_name:
            type: string
            nullable: true
          full_parent_path_name:
            type: string
            nullable: true
          naics_display:
            type: string
            nullable: true
          classification_code:
            type: string
            nullable: true
          product_service_code:
            type: string
            nullable: true
          set_aside:
            type: string
            nullable: true
          set_aside_code:
            type: string
            nullable: true
          place_of_performance:
            type: object
            properties:
              street:
                type: string
                nullable: true
              street_2:
                type: string
                nullable: true
              city:
                type: string
                nullable: true
              state:
                type: string
                nullable: true
              zip:
                type: string
                nullable: true
              country:
                type: string
                nullable: true
              formatted:
                type: string
                nullable: true
          office_address:
            type: object
            properties:
              street:
                type: string
                nullable: true
              street_2:
                type: string
                nullable: true
              city:
                type: string
                nullable: true
              state:
                type: string
                nullable: true
              zip:
                type: string
                nullable: true
              country:
                type: string
                nullable: true
              formatted:
                type: string
                nullable: true
          award:
            type: object
            properties:
              amount:
                type: string
                nullable: true
              date:
                type: string
                format: date-time
                nullable: true
              awardee_name:
                type: string
                nullable: true
              awardee_uei:
                type: string
                nullable: true
          point_of_contact:
            type: array
            items:
              type: object
              additionalProperties: true
          resource_links:
            type: array
            items:
              type: object
              properties:
                url:
                  type: string
                  nullable: true
                label:
                  type: string
                updated_at:
                  type: string
                  format: date-time
                  nullable: true
                kind:
                  type: string
                  enum:
                  - link
                  - file
                resource_id:
                  type: string
                  nullable: true
          source_link:
            type: string
            nullable: true
          description_cached:
            type: string
            nullable: true
          sam_gov_public_url:
            type: string
            nullable: true
          additional_info_link:
            type: string
            nullable: true
          trade_tags:
            type: array
            items:
              type: string
          fit_score:
            type: number
            nullable: true
          saved:
            type: boolean
    BlogPostPublic:
      type: object
      properties:
        slug:
          type: string
        locale:
          $ref: '#/components/schemas/BlogPostLocale'
        title:
          type: string
        excerpt:
          type: string
          nullable: true
        category:
          type: string
          nullable: true
        tags:
          type: array
          items:
            type: string
        author_name:
          type: string
          nullable: true
        cover_image_url:
          type: string
          nullable: true
        published_at:
          type: string
          format: date-time
          nullable: true
        updated_at:
          type: string
          format: date-time
          nullable: true
    DirectoryListingPublicResponse:
      type: object
      required:
      - data
      properties:
        data:
          $ref: '#/components/schemas/DirectoryListingPublic'
    GovernmentOpportunityPublic:
      type: object
      required:
      - id
      - title
      - status
      properties:
        id:
          type: integer
        notice_id:
          type: string
          nullable: true
        slug:
          type: string
          nullable: true
        title:
          type: string
        organization:
          type: string
          nullable: true
        place_city:
          type: string
          nullable: true
        place_state:
          type: string
          nullable: true
        naics_code:
          type: string
          nullable: true
        naics_display:
          type: string
          nullable: true
        classification_code:
          type: string
          nullable: true
        product_service_code:
          type: string
          nullable: true
        category:
          type: string
          nullable: true
        posted_date:
          type: string
          format: date-time
          nullable: true
        response_deadline:
          type: string
          format: date-time
          nullable: true
        set_aside:
          type: string
          nullable: true
        status:
          type: string
        is_actionable:
          type: boolean
    BlogPostLocale:
      type: string
      enum:
      - en-US
      - es-US
    DirectoryListingPublic:
      type: object
      required:
      - id
      - slug
      - name
      - industry_key
      - industry_label
      - metro_key
      - review_count
      - services
      - claim_status
      - is_claimed
      - logo_url
      - photos
      properties:
        id:
          type: integer
        slug:
          type: string
        name:
          type: string
        industry_key:
          type: string
        industry_label:
          type: string
        metro_key:
          type: string
        phone:
          type: string
          nullable: true
        website_url:
          type: string
          format: uri
          nullable: true
        address:
          type: string
          nullable: true
        postal_code:
          type: string
          nullable: true
        city:
          type: string
          nullable: true
        state:
          type: string
          nullable: true
        latitude:
          type: number
          nullable: true
        longitude:
          type: number
          nullable: true
        rating:
          type: number
          nullable: true
        review_count:
          type: integer
        short_description:
          type: string
          nullable: true
        services:
          type: array
          items:
            type: string
        claim_status:
          type: string
          enum:
          - unclaimed
          - claim_pending
          - claimed
        is_claimed:
          type: boolean
        google_maps_url:
          type: string
          format: uri
          nullable: true
        logo_url:
          type: string
          format: uri
          nullable: true
        photos:
          type: array
          items:
            $ref: '#/components/schemas/DirectoryListingPhoto'
    BlogPostCategoryListResponse:
      type: object
      properties:
        data:
          type: array
          items:
            type: object
            properties:
              category:
                type: string
              post_count:
                type: integer
    BlogPostPublicListResponse:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/BlogPostPublic'
        links:
          type: object
        meta:
          type: object
    BlogPostSitemapResponse:
      type: object
      properties:
        data:
          type: array
          items:
            type: object
            properties:
              slug:
                type: string
              locale:
                $ref: '#/components/schemas/BlogPostLocale'
              published_at:
                type: string
                format: date-time
                nullable: true
              last_modified:
                type: string
                format: date-time
                nullable: true
        meta:
          type: object
  parameters:
    PageParam:
      name: page
      in: query
      required: false
      description: Page number (default 1, 20 items per page)
      schema:
        type: integer
        minimum: 1
        default: 1
        example: 2
  responses:
    NotFound:
      description: Resource not found or does not belong to the authenticated user
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorMessage'
          example:
            message: No query results for model.
x-service-info:
  categories:
  - field-service
  - agent-commerce
  - payments
  docs:
    homepage: https://fieldrobin.com/docs
    llms: https://fieldrobin.com/llms.txt
    apiReference: https://fieldrobin.com/openapi.json
  discovery:
    acp: https://fieldrobin.com/.well-known/acp.json
    ucp: https://fieldrobin.com/.well-known/ucp
    a2a: https://fieldrobin.com/.well-known/agent.json
  integrations:
    mcp:
      endpoint: https://fieldrobin.com/api/v1/mcp
      serverCard: https://fieldrobin.com/.well-known/mcp/server-card.json
      authorizationServerMetadata: https://fieldrobin.com/.well-known/oauth-authorization-server
      protectedResourceMetadata: https://fieldrobin.com/.well-known/oauth-protected-resource