B3

B3 Incentive API

The incentive API from B3 — 2 operation(s) for incentive.

Operations 2

GET /v1/incentive/state Get incentive state
POST /v1/incentive/verify Verify and claim an incentive task

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/b3-incentive-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 email required.

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

OpenAPI Specification

b3-incentive-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  description: Workflow management API for B3OS
  title: B3OS Workflow Incentive API
  version: '1.0'
tags:
- name: incentive
paths:
  /v1/incentive/state:
    get:
      description: Returns all incentive task statuses + totals for caller's active org
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IncentiveStateResponse'
          description: OK
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/github_com_b3-fun_b3-mono_services_b3os-workflow_internal_app_api_http.ErrorResponse'
          description: Unauthorized
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/github_com_b3-fun_b3-mono_services_b3os-workflow_internal_app_api_http.ErrorResponse'
          description: Forbidden
      summary: Get incentive state
      tags:
      - incentive
  /v1/incentive/verify:
    post:
      requestBody:
        content:
          application/json:
            schema:
              oneOf:
              - type: object
              - $ref: '#/components/schemas/IncentiveVerifyRequest'
                summary: body
                description: Task to verify
        description: Task to verify
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IncentiveVerifyResponse'
          description: OK
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/github_com_b3-fun_b3-mono_services_b3os-workflow_internal_app_api_http.ErrorResponse'
          description: Bad Request
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/github_com_b3-fun_b3-mono_services_b3os-workflow_internal_app_api_http.ErrorResponse'
          description: Forbidden
        '429':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/github_com_b3-fun_b3-mono_services_b3os-workflow_internal_app_api_http.ErrorResponse'
          description: Too Many Requests
      summary: Verify and claim an incentive task
      tags:
      - incentive
components:
  schemas:
    github_com_b3-fun_b3-mono_services_b3os-workflow_internal_app_api_http.ErrorResponse:
      properties:
        code:
          type: integer
        details:
          items: {}
          type: array
          uniqueItems: false
        message:
          type: string
        requestId:
          type: string
      type: object
    IncentiveVerifyRequest:
      properties:
        task_type:
          type: string
      required:
      - task_type
      type: object
    IncentiveVerifyResponse:
      properties:
        already:
          type: boolean
        granted:
          $ref: '#/components/schemas/IncentiveGrantedDTO'
        metadata:
          additionalProperties: {}
          type: object
        reason:
          type: string
        reason_code:
          description: 'ReasonCode is the typed bucket the verifier set on a failure

            (FailureClass enum, see incentive/types.go). Frontend should branch on

            this typed value rather than substring-matching `Reason` copy.

            Empty when Status="claimed".'
          type: string
        status:
          description: '"claimed" | "pending"'
          type: string
      type: object
    IncentiveTotalsDTO:
      properties:
        ai_earned:
          type: string
        ai_max:
          type: integer
        completion_pct:
          type: number
        cu_earned:
          description: decimal as string
          type: string
        cu_max:
          type: integer
      type: object
    IncentiveStateResponse:
      properties:
        org_id:
          type: string
        tasks:
          items:
            $ref: '#/components/schemas/IncentiveTaskDTO'
          type: array
          uniqueItems: false
        totals:
          $ref: '#/components/schemas/IncentiveTotalsDTO'
        user_id:
          description: 'UserID is the caller''s resolved user identifier — surfaced so the

            frontend can scope per-user client state (e.g., the Path B

            localStorage gate) without a separate /me round trip.'
          type: string
      type: object
    IncentiveTaskDTO:
      properties:
        claimed_at:
          description: 'claimed_at + claimed_by intentionally NOT omitempty — emit `null` for

            pending tasks so the TS frontend gets a stable shape (`string | null`,

            never `undefined`). See useIncentiveState.ts type IncentiveTaskState.'
          type: string
        claimed_by:
          type: string
        metadata:
          additionalProperties: {}
          type: object
        reward_ai_credits:
          type: integer
        reward_cu:
          type: integer
        status:
          type: string
        type:
          type: string
      type: object
    IncentiveGrantedDTO:
      properties:
        ai_credits_granted:
          type: string
        cu_granted:
          type: string
      type: object