{
 "openapi": "3.1.0",
 "info": {
  "title": "B2B Influencers API",
  "version": "1.0",
  "description": "Search B2B creators. Free, read-only, no key."
 },
 "servers": [
  {
   "url": "https://b2binfluencer.marketing"
  }
 ],
 "paths": {
  "/api/creators": {
   "get": {
    "operationId": "searchCreators",
    "summary": "Search and filter creators",
    "parameters": [
     {
      "name": "q",
      "in": "query",
      "schema": {
       "type": "string"
      },
      "description": "Words that must all match"
     },
     {
      "name": "topic",
      "in": "query",
      "schema": {
       "type": "string"
      },
      "description": "Topic id from /api/topics"
     },
     {
      "name": "min_followers",
      "in": "query",
      "schema": {
       "type": "integer"
      },
      "description": "Minimum LinkedIn followers"
     },
     {
      "name": "max_followers",
      "in": "query",
      "schema": {
       "type": "integer"
      },
      "description": "Maximum LinkedIn followers"
     },
     {
      "name": "has_youtube",
      "in": "query",
      "schema": {
       "type": "boolean"
      },
      "description": "Only creators with a verified channel"
     },
     {
      "name": "has_partnership_info",
      "in": "query",
      "schema": {
       "type": "boolean"
      },
      "description": "Only creators with published partnership formats or a link"
     },
     {
      "name": "sort",
      "in": "query",
      "schema": {
       "type": "string"
      },
      "description": "followers, -followers or name; default -followers"
     },
     {
      "name": "limit",
      "in": "query",
      "schema": {
       "type": "integer"
      },
      "description": "1 to 50; default 20"
     },
     {
      "name": "offset",
      "in": "query",
      "schema": {
       "type": "integer"
      },
      "description": "Results to skip"
     }
    ],
    "responses": {
     "200": {
      "description": "Matching creators"
     }
    }
   }
  },
  "/api/creators/{id}": {
   "get": {
    "operationId": "getCreator",
    "summary": "Get one creator",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Creator"
     },
     "404": {
      "description": "Not found"
     }
    }
   }
  },
  "/api/brands": {
   "get": {
    "operationId": "searchBrands",
    "summary": "Find brands by name or minimum creators",
    "parameters": [
     {
      "name": "q",
      "in": "query",
      "schema": {
       "type": "string"
      },
      "description": "Words in the brand name"
     },
     {
      "name": "min_creators",
      "in": "query",
      "schema": {
       "type": "integer"
      },
      "description": "Minimum creators mentioning it"
     },
     {
      "name": "has_deals",
      "in": "query",
      "schema": {
       "type": "boolean"
      },
      "description": "Only brands with a disclosed deal"
     },
     {
      "name": "limit",
      "in": "query",
      "schema": {
       "type": "integer"
      },
      "description": "1 to 50; default 20"
     },
     {
      "name": "offset",
      "in": "query",
      "schema": {
       "type": "integer"
      },
      "description": "Results to skip"
     }
    ],
    "responses": {
     "200": {
      "description": "Brands"
     }
    }
   }
  },
  "/api/brands/{id}": {
   "get": {
    "operationId": "getBrand",
    "summary": "Creators linked to a brand, by relationship, with quotes and post links",
    "parameters": [
     {
      "name": "id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Brand"
     },
     "404": {
      "description": "Not found"
     }
    }
   }
  },
  "/api/publications": {
   "get": {
    "operationId": "searchPublications",
    "summary": "Find B2B newsletters and podcasts and who sponsors them",
    "parameters": [
     {
      "name": "q",
      "in": "query",
      "schema": {
       "type": "string"
      },
      "description": "Words that must all match"
     },
     {
      "name": "kind",
      "in": "query",
      "schema": {
       "type": "string"
      },
      "description": "newsletter or podcast"
     },
     {
      "name": "topic",
      "in": "query",
      "schema": {
       "type": "string"
      },
      "description": "Topic id"
     },
     {
      "name": "sponsor",
      "in": "query",
      "schema": {
       "type": "string"
      },
      "description": "Brand that sponsored it"
     },
     {
      "name": "has_sponsors",
      "in": "query",
      "schema": {
       "type": "boolean"
      },
      "description": "Only those with sponsors found"
     },
     {
      "name": "min_audience",
      "in": "query",
      "schema": {
       "type": "integer"
      },
      "description": "Podcasts only: minimum Podscan audience estimate"
     },
     {
      "name": "limit",
      "in": "query",
      "schema": {
       "type": "integer"
      },
      "description": "1 to 50; default 20"
     },
     {
      "name": "offset",
      "in": "query",
      "schema": {
       "type": "integer"
      },
      "description": "Results to skip"
     }
    ],
    "responses": {
     "200": {
      "description": "Publications"
     }
    }
   }
  },
  "/api/topics": {
   "get": {
    "operationId": "listTopics",
    "summary": "List topics with creator counts",
    "responses": {
     "200": {
      "description": "Topics"
     }
    }
   }
  }
 }
}