Flowra Skills API

Browse, create, import, and install skills

GitHub OpenAPI

Operations 12

GET /api/v1/skills/catalog/browse Browse skill catalog #
POST /api/v1/skills/create Create a custom skill #
DELETE /api/v1/skills/delete/{id} Soft-delete a skill #
GET /api/v1/skills/detail/{id} Get skill by ID #
POST /api/v1/skills/import/github Import SKILL.md from GitHub URL #
POST /api/v1/skills/library/add/{id} Add a platform/registry catalog skill to My Skills #
GET /api/v1/skills/list List My Skills #
POST /api/v1/skills/registry/install Install skill from registry / GitHub repo #
GET /api/v1/skills/registry/list List skills.sh leaderboard #
GET /api/v1/skills/registry/search Search skills.sh registry #
POST /api/v1/skills/registry/sync/{id} Sync a registry skill from GitHub #
PATCH /api/v1/skills/update/{id} Update a skill #

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/flowra-dev:flowra-dev-skills-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

flowra-dev-skills-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Flowra API (API Key Endpoints) Skills API
  description: '**Flowra** is an AI-powered platform for building agents, workflows, and integrations.


    ### Capabilities

    - **Tools & Toolkits** – Define and group tools for agents and workflows.

    - **Workflows** – Orchestrate steps and automate processes.

    - **Triggers** – Schedule or event-based execution.

    - **Auth & Connections** – OAuth, API keys, and connected accounts.

    - **MCP** – Model Context Protocol server integration.

    - **Knowledge / RAG** – Add files and URLs for retrieval-augmented generation.


    ### Authentication

    Use the **x-api-key** header with a project API key to access endpoints that support API Key auth. Create and manage API keys in the dashboard under your project settings.


    Only endpoints that support API Key authentication via the @ApiKeyEnabled() decorator.


    Send x-api-key (required). On multi-tenant endpoints, optionally send x-username to act as an external user.'
  version: '1.0'
  contact:
    name: Flowra
    url: https://flowra.dev
servers:
- url: https://flowra.dev
  description: Flowra API
tags:
- name: Skills
  description: Browse, create, import, and install skills
paths:
  /api/v1/skills/catalog/browse:
    get:
      operationId: SkillsController_catalogBrowse
      x-apiKeyEnabled: true
      summary: Browse skill catalog
      description: 'Without q: platform skills. With q: platform + skills.sh registry, tagged with kind, links, installCount.'
      parameters:
      - name: q
        required: false
        in: query
        description: When empty, returns platform skills only. When set, merges platform + registry search.
        schema:
          example: seo
          type: string
      responses:
        '200':
          description: Operation completed successfully
      tags:
      - Skills
      security:
      - x-api-key: []
  /api/v1/skills/create:
    post:
      operationId: SkillsController_create
      x-apiKeyEnabled: true
      summary: Create a custom skill
      description: Creates a project skill from name, instructions, and optional metadata.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateSkillDto'
      responses:
        '200':
          description: Operation completed successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SkillResponseDtoSuccessResponse'
              example:
                success: true
                message: Operation completed successfully
                data:
                  id: ''
                  slug: ''
                  name: ''
                  description: ''
                  instructions: ''
                  category: ''
                  tags:
                  - ''
                  source: custom
                  registryMeta: {}
                  presets: {}
                  isPublic: true
                  version: ''
                  activeStatus: true
                  files:
                  - path: ''
                    sizeBytes: 0
                    contentType: ''
                  packageFileCount: 0
                  sourceUrl: ''
                  skillsShUrl: ''
                  isCreator: true
                  installCount: 0
                  changed: true
      tags:
      - Skills
      security:
      - x-api-key: []
  /api/v1/skills/delete/{id}:
    delete:
      operationId: SkillsController_remove
      x-apiKeyEnabled: true
      summary: Soft-delete a skill
      description: Soft-deletes a skill from My Skills (does not remove platform/registry catalog entries).
      parameters:
      - name: id
        required: true
        in: path
        description: Skill ID
        schema:
          example: 3fa85f64-5717-4562-b3fc-2c963f66afa6
          type: string
      responses:
        '200':
          description: Operation completed successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SimpleSuccessResponseDto'
              example:
                success: true
                message: Operation completed successfully
      tags:
      - Skills
      security:
      - x-api-key: []
  /api/v1/skills/detail/{id}:
    get:
      operationId: SkillsController_detail
      x-apiKeyEnabled: true
      summary: Get skill by ID
      description: Returns one skill from My Skills if the caller can access it.
      parameters:
      - name: id
        required: true
        in: path
        description: Skill ID
        schema:
          example: 3fa85f64-5717-4562-b3fc-2c963f66afa6
          type: string
      responses:
        '200':
          description: Operation completed successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SkillResponseDtoSuccessResponse'
              example:
                success: true
                message: Operation completed successfully
                data:
                  id: ''
                  slug: ''
                  name: ''
                  description: ''
                  instructions: ''
                  category: ''
                  tags:
                  - ''
                  source: custom
                  registryMeta: {}
                  presets: {}
                  isPublic: true
                  version: ''
                  activeStatus: true
                  files:
                  - path: ''
                    sizeBytes: 0
                    contentType: ''
                  packageFileCount: 0
                  sourceUrl: ''
                  skillsShUrl: ''
                  isCreator: true
                  installCount: 0
                  changed: true
      tags:
      - Skills
      security:
      - x-api-key: []
  /api/v1/skills/import/github:
    post:
      operationId: SkillsController_importGithub
      x-apiKeyEnabled: true
      summary: Import SKILL.md from GitHub URL
      description: Parses a SKILL.md (or skill pack) from a public GitHub URL into My Skills.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ImportSkillFromGithubDto'
      responses:
        '200':
          description: Operation completed successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SkillResponseDtoSuccessResponse'
              example:
                success: true
                message: Operation completed successfully
                data:
                  id: ''
                  slug: ''
                  name: ''
                  description: ''
                  instructions: ''
                  category: ''
                  tags:
                  - ''
                  source: custom
                  registryMeta: {}
                  presets: {}
                  isPublic: true
                  version: ''
                  activeStatus: true
                  files:
                  - path: ''
                    sizeBytes: 0
                    contentType: ''
                  packageFileCount: 0
                  sourceUrl: ''
                  skillsShUrl: ''
                  isCreator: true
                  installCount: 0
                  changed: true
      tags:
      - Skills
      security:
      - x-api-key: []
  /api/v1/skills/library/add/{id}:
    post:
      operationId: SkillsController_addToLibrary
      x-apiKeyEnabled: true
      summary: Add a platform/registry catalog skill to My Skills
      description: Installs a catalog skill into the current user’s library so it can be attached to agents.
      parameters:
      - name: id
        required: true
        in: path
        description: Skill ID
        schema:
          example: 3fa85f64-5717-4562-b3fc-2c963f66afa6
          type: string
      responses:
        '200':
          description: Operation completed successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SkillResponseDtoSuccessResponse'
              example:
                success: true
                message: Operation completed successfully
                data:
                  id: ''
                  slug: ''
                  name: ''
                  description: ''
                  instructions: ''
                  category: ''
                  tags:
                  - ''
                  source: custom
                  registryMeta: {}
                  presets: {}
                  isPublic: true
                  version: ''
                  activeStatus: true
                  files:
                  - path: ''
                    sizeBytes: 0
                    contentType: ''
                  packageFileCount: 0
                  sourceUrl: ''
                  skillsShUrl: ''
                  isCreator: true
                  installCount: 0
                  changed: true
      tags:
      - Skills
      security:
      - x-api-key: []
  /api/v1/skills/list:
    get:
      operationId: SkillsController_list
      x-apiKeyEnabled: true
      summary: List My Skills
      description: Skills the current user created or installed (skill_users membership).
      parameters:
      - name: q
        required: false
        in: query
        description: Case-insensitive search over name, slug, and description
        schema:
          example: invoice
          type: string
      - name: source
        required: false
        in: query
        description: 'Filter by origin: user-created, installed from registry, or platform catalog'
        schema:
          example: custom
          enum:
          - custom
          - registry
          - platform
          type: string
      - name: category
        required: false
        in: query
        description: Filter by category
        schema:
          example: finance
          type: string
      - name: page
        required: false
        in: query
        description: Page number (1-based)
        schema:
          default: 1
          example: 1
          type: number
      - name: limit
        required: false
        in: query
        description: Page size
        schema:
          default: 20
          example: 20
          type: number
      responses:
        '200':
          description: Operation completed successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SkillResponseDtoPaginatedResponse'
              example:
                success: true
                message: Data retrieved successfully
                data:
                - id: ''
                  slug: ''
                  name: ''
                  description: ''
                  instructions: ''
                  category: ''
                  tags:
                  - ''
                  source: custom
                  registryMeta: {}
                  presets: {}
                  isPublic: true
                  version: ''
                  activeStatus: true
                  files:
                  - path: ''
                    sizeBytes: 0
                    contentType: ''
                  packageFileCount: 0
                  sourceUrl: ''
                  skillsShUrl: ''
                  isCreator: true
                  installCount: 0
                  changed: true
                total: 100
                totalTools: 5000
                page: 1
                limit: 20
                totalPages: 5
                hasNextPage: true
                hasPreviousPage: false
      tags:
      - Skills
      security:
      - x-api-key: []
  /api/v1/skills/registry/install:
    post:
      operationId: SkillsController_registryInstall
      x-apiKeyEnabled: true
      summary: Install skill from registry / GitHub repo
      description: Fetches a skill from the skills.sh registry or a GitHub repo and adds it to My Skills.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/InstallSkillFromRegistryDto'
      responses:
        '200':
          description: Operation completed successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SkillResponseDtoSuccessResponse'
              example:
                success: true
                message: Operation completed successfully
                data:
                  id: ''
                  slug: ''
                  name: ''
                  description: ''
                  instructions: ''
                  category: ''
                  tags:
                  - ''
                  source: custom
                  registryMeta: {}
                  presets: {}
                  isPublic: true
                  version: ''
                  activeStatus: true
                  files:
                  - path: ''
                    sizeBytes: 0
                    contentType: ''
                  packageFileCount: 0
                  sourceUrl: ''
                  skillsShUrl: ''
                  isCreator: true
                  installCount: 0
                  changed: true
      tags:
      - Skills
      security:
      - x-api-key: []
  /api/v1/skills/registry/list:
    get:
      operationId: SkillsController_registryList
      x-apiKeyEnabled: true
      summary: List skills.sh leaderboard
      description: Requires SKILLS_SH_API_KEY when available.
      parameters:
      - name: page
        required: false
        in: query
        description: Page number (1-based)
        schema:
          default: 1
          example: 1
          type: number
      - name: pageSize
        required: false
        in: query
        description: Page size
        schema:
          default: 20
          example: 20
          type: number
      responses:
        '200':
          description: Operation completed successfully
      tags:
      - Skills
      security:
      - x-api-key: []
  /api/v1/skills/registry/search:
    get:
      operationId: SkillsController_registrySearch
      x-apiKeyEnabled: true
      summary: Search skills.sh registry
      description: Public search against skills.sh (no API key required for search).
      parameters:
      - name: q
        required: true
        in: query
        description: Search query sent to skills.sh
        schema:
          example: frontend design
          type: string
      responses:
        '200':
          description: Operation completed successfully
      tags:
      - Skills
      security:
      - x-api-key: []
  /api/v1/skills/registry/sync/{id}:
    post:
      operationId: SkillsController_registrySync
      x-apiKeyEnabled: true
      summary: Sync a registry skill from GitHub
      description: Re-fetches the shared catalog copy from GitHub. No-op when the folder hash already matches. Attached agents pick up the new playbook on the next run.
      parameters:
      - name: id
        required: true
        in: path
        description: Skill ID
        schema:
          example: 3fa85f64-5717-4562-b3fc-2c963f66afa6
          type: string
      responses:
        '200':
          description: Operation completed successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SkillResponseDtoSuccessResponse'
              example:
                success: true
                message: Operation completed successfully
                data:
                  id: ''
                  slug: ''
                  name: ''
                  description: ''
                  instructions: ''
                  category: ''
                  tags:
                  - ''
                  source: custom
                  registryMeta: {}
                  presets: {}
                  isPublic: true
                  version: ''
                  activeStatus: true
                  files:
                  - path: ''
                    sizeBytes: 0
                    contentType: ''
                  packageFileCount: 0
                  sourceUrl: ''
                  skillsShUrl: ''
                  isCreator: true
                  installCount: 0
                  changed: true
      tags:
      - Skills
      security:
      - x-api-key: []
  /api/v1/skills/update/{id}:
    patch:
      operationId: SkillsController_update
      x-apiKeyEnabled: true
      summary: Update a skill
      description: Updates fields on a skill the current user owns or has in My Skills.
      parameters:
      - name: id
        required: true
        in: path
        description: Skill ID
        schema:
          example: 3fa85f64-5717-4562-b3fc-2c963f66afa6
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateSkillDto'
      responses:
        '200':
          description: Operation completed successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SkillResponseDtoSuccessResponse'
              example:
                success: true
                message: Operation completed successfully
                data:
                  id: ''
                  slug: ''
                  name: ''
                  description: ''
                  instructions: ''
                  category: ''
                  tags:
                  - ''
                  source: custom
                  registryMeta: {}
                  presets: {}
                  isPublic: true
                  version: ''
                  activeStatus: true
                  files:
                  - path: ''
                    sizeBytes: 0
                    contentType: ''
                  packageFileCount: 0
                  sourceUrl: ''
                  skillsShUrl: ''
                  isCreator: true
                  installCount: 0
                  changed: true
      tags:
      - Skills
      security:
      - x-api-key: []
components:
  schemas:
    ImportSkillFromGithubDto:
      type: object
      properties:
        url:
          type: string
          description: Raw GitHub URL to SKILL.md or owner/repo[/path]
          example: https://github.com/vercel-labs/agent-skills/blob/main/skills/frontend-design/SKILL.md
        slug:
          type: string
          maxLength: 64
          description: Override slug after import
          example: frontend-design
      required:
      - url
    InstallSkillFromRegistryDto:
      type: object
      properties:
        registryId:
          type: string
          description: skills.sh search / registry id if known
          example: sk_abc123
        repo:
          type: string
          description: GitHub owner/repo (e.g. vercel-labs/agent-skills)
          example: vercel-labs/agent-skills
        skillPath:
          type: string
          description: Path to skill folder or SKILL.md inside repo
          example: skills/frontend-design
        skillId:
          type: string
          description: Skill folder name / id from skills.sh (used to locate SKILL.md when path is unknown)
          example: ai-video-generation
        slug:
          type: string
          maxLength: 64
          description: Override slug after install
          example: frontend-design
      required:
      - repo
    SkillResponseDtoPaginatedResponse:
      type: object
      properties:
        success:
          type: boolean
          description: Success status
          example: true
        message:
          type: string
          description: Response message
          example: Data retrieved successfully
        data:
          description: Array of items
          type: array
          items:
            type: object
            properties:
              id:
                type: string
              slug:
                type: string
              name:
                type: string
              description:
                type: string
              instructions:
                type: string
              category:
                type:
                - string
                - 'null'
              tags:
                type:
                - array
                - 'null'
                items:
                  type: string
              source:
                type: string
                enum:
                - custom
                - registry
                - platform
              registryMeta:
                type:
                - object
                - 'null'
              presets:
                type:
                - object
                - 'null'
              isPublic:
                type: boolean
              version:
                type: string
              activeStatus:
                type: boolean
              files:
                type: array
                items:
                  type: object
                  properties:
                    path:
                      type: string
                      description: Path relative to skill root, e.g. scripts/run.py
                    sizeBytes:
                      type: number
                    contentType:
                      type: string
                  required:
                  - path
                  - sizeBytes
                  - contentType
              packageFileCount:
                type: number
                description: Companion package file count (excludes SKILL.md, which lives on the skill row).
              sourceUrl:
                type: string
              skillsShUrl:
                type: string
              isCreator:
                type: boolean
                description: True when the current user authored this skill.
              installCount:
                type: number
                description: Total memberships (installs) across all users.
              changed:
                type: boolean
                description: True when a registry sync overwrote the shared catalog copy.
            required:
            - id
            - slug
            - name
            - description
            - instructions
            - source
            - isPublic
            - version
          example:
          - id: ''
            slug: ''
            name: ''
            description: ''
            instructions: ''
            category: ''
            tags:
            - ''
            source: custom
            registryMeta: {}
            presets: {}
            isPublic: true
            version: ''
            activeStatus: true
            files:
            - path: ''
              sizeBytes: 0
              contentType: ''
            packageFileCount: 0
            sourceUrl: ''
            skillsShUrl: ''
            isCreator: true
            installCount: 0
            changed: true
        total:
          type: number
          description: Total number of items across all pages
          example: 100
        totalTools:
          type: number
          description: Optional secondary total (e.g. nested tools across all matching toolkits)
          example: 5000
        page:
          type: number
          description: Current page number (1-based)
          example: 1
        limit:
          type: number
          description: Number of items per page
          example: 20
        totalPages:
          type: number
          description: Total number of pages
          example: 5
        hasNextPage:
          type: boolean
          description: Whether there is a next page
          example: true
        hasPreviousPage:
          type: boolean
          description: Whether there is a previous page
          example: false
      required:
      - success
      - message
      - data
      - total
    SkillResponseDtoSuccessResponse:
      type: object
      properties:
        success:
          type: boolean
          description: Success status
          example: true
        message:
          type: string
          description: Success message
          example: Operation completed successfully
        data:
          type: object
          properties:
            id:
              type: string
            slug:
              type: string
            name:
              type: string
            description:
              type: string
            instructions:
              type: string
            category:
              type:
              - string
              - 'null'
            tags:
              type:
              - array
              - 'null'
              items:
                type: string
            source:
              type: string
              enum:
              - custom
              - registry
              - platform
            registryMeta:
              type:
              - object
              - 'null'
            presets:
              type:
              - object
              - 'null'
            isPublic:
              type: boolean
            version:
              type: string
            activeStatus:
              type: boolean
            files:
              type: array
              items:
                type: object
                properties:
                  path:
                    type: string
                    description: Path relative to skill root, e.g. scripts/run.py
                  sizeBytes:
                    type: number
                  contentType:
                    type: string
                required:
                - path
                - sizeBytes
                - contentType
            packageFileCount:
              type: number
              description: Companion package file count (excludes SKILL.md, which lives on the skill row).
            sourceUrl:
              type: string
            skillsShUrl:
              type: string
            isCreator:
              type: boolean
              description: True when the current user authored this skill.
            installCount:
              type: number
              description: Total memberships (installs) across all users.
            changed:
              type: boolean
              description: True when a registry sync overwrote the shared catalog copy.
          required:
          - id
          - slug
          - name
          - description
          - instructions
          - source
          - isPublic
          - version
          example:
            id: ''
            slug: ''
            name: ''
            description: ''
            instructions: ''
            category: ''
            tags:
            - ''
            source: custom
            registryMeta: {}
            presets: {}
            isPublic: true
            version: ''
            activeStatus: true
            files:
            - path: ''
              sizeBytes: 0
              contentType: ''
            packageFileCount: 0
            sourceUrl: ''
            skillsShUrl: ''
            isCreator: true
            installCount: 0
            changed: true
      required:
      - success
      - message
      - data
    SimpleSuccessResponseDto:
      type: object
      properties:
        success:
          type: boolean
          description: Success status
          example: true
        message:
          type: string
          description: Success message
          example: Operation completed successfully
      required:
      - success
      - message
    CreateSkillDto:
      type: object
      properties:
        name:
          type: string
          maxLength: 200
          description: Display name
          example: Invoice follow-up
        slug:
          type: string
          maxLength: 64
          description: Slug (lowercase alphanumeric + hyphens). Auto-generated from name if omitted.
          example: invoice-follow-up
        description:
          type: string
          maxLength: 1024
          description: WHAT + WHEN for skill discovery (max 1024 chars)
          example: Draft a polite follow-up when an invoice is 7 days overdue.
        instructions:
          type: string
          description: SKILL.md body (markdown instructions)
          example: '# Invoice follow-up


            1. Load the invoice

            2. Draft a reminder email

            '
        category:
          type: string
          maxLength: 64
          description: Optional category for browsing My Skills
          example: finance
        tags:
          description: Free-form tags (max 20)
          example:
          - email
          - billing
          type: array
          items:
            type: string
        suggestedToolSlugs:
          description: Known tool slugs for this playbook (skip DISCOVER → GET_TOOL_SCHEMAS). Not merged onto agents.
          example:
          - gmail_send_email
          - gmail_fetch_emails
          type: array
          items:
            type: string
        isPublic:
          type: boolean
          description: If true, other projects in this workspace can discover the skill
          default: false
          example: false
        version:
          type: string
          maxLength: 32
          description: Semver-style skill version
          default: 1.0.0
          example: 1.0.0
      required:
      - name
      - description
      - instructions
    UpdateSkillDto:
      type: object
      properties:
        name:
          type: string
          maxLength: 200
          description: Display name
          example: Invoice follow-up
        description:
          type: string
          maxLength: 1024
          description: WHAT + WHEN for skill discovery (max 1024 chars)
          example: Draft a polite follow-up when an invoice is 7 days overdue.
        instructions:
          type: string
          description: SKILL.md body (markdown instructions)
          example: '# Invoice follow-up


            1. Load the invoice

            2. Draft a reminder email

            '
        category:
          type:
          - string
          - 'null'
          maxLength: 64
          description: Optional category for browsing My Skills. Null clears it.
          example: finance
        tags:
          description: Free-form tags (max 20). Null clears them.
          example:
          - email
          - billing
          type:
          - array
          - 'null'
          items:
            type: string
        suggestedToolSlugs:
          description: Known tool slugs for this playbook (skip DISCOVER → GET_TOOL_SCHEMAS). Not merged onto agents. Null clears them.
          example:
          - gmail_send_email
          type:
          - array
          - 'null'
          items:
            type: string
        isPublic:
          type: boolean
          description: If true, other projects can discover the skill
          example: false
        version:
          type: string
          maxLength: 32
          description: Semver-style skill version
          example: 1.1.0
        activeStatus:
          type: boolean
          description: False disables the skill without deleting it
          example: true
  securitySchemes:
    x-api-key:
      type: apiKey
      in: header
      name: x-api-key
      description: 'Project API key. Create and manage keys in the dashboard under Project → API Keys. Send as header: x-api-key: <your-key>'
    x-username:
      type: apiKey
      in: header
      name: x-username
      description: 'Optional. External user username. If omitted, Flowra uses the project’s default external user. Send as header: x-username: <username>'