Every API here is available over the APIs.io API and to AI agents over MCP.
openapi: 3.2.0
info:
description: 'Get API Key
## Blog2Social API
### One API 25+ Social Platforms
Connect, manage and publish content across 25+ social media, blogging and community platforms through a single integration. Instead of building and maintaining separate integrations for every platform, Blog2Social provides one centralized API for publishing text, links, images and videos at scale. Whether you are building a SaaS platform, CMS, marketing automation solution, agency dashboard, e-commerce platform or enterprise application, Blog2Social helps you automate social media publishing while reducing development effort and maintenance costs. ### Key Benefits
- One integration for 25+ social media and publishing platforms
- Publish content across multiple networks simultaneously
- Connect profiles, pages and groups through one API
- Support for text, links, images and videos
- Retrieve social media insights and performance metrics
- Automate publishing workflows and content distribution
- Scale from a single user to thousands of connected accounts
## Supported Platforms
Schedule, publish and manage content across social media, blogging, business and community platforms through a single API. Connect accounts, publish content, upload media, retrieve insights and automate social media distribution from one centralized interface. | Platform | Post Types | Media |
|-----------|-----------|-----------|
| Facebook | Posts, Reels | Links, Images, Videos |
| X | Posts | Links, Images, Videos |
| LinkedIn | Posts | Links, Images, Videos |
| Instagram | Posts | Images, Videos |
| Pinterest | Pins, Boards | Images, Videos |
| Reddit | Posts, Subreddits | Links, Images |
| Tumblr | Posts | Links, Images, Videos |
| Medium | Articles | Images |
| Telegram | Messages | Links, Images |
| TikTok | Posts | Images, Videos |
| YouTube | Videos, Shorts, Playlists | Videos |
| Vimeo | Videos | Videos |
| Bluesky | Posts | Links, Images |
| Threads | Posts | Links, Images, Videos |
| Mastodon | Posts | Links, Images, Videos |
| Discord | Messages | Images, Videos |
| Google Business Profile | Business Posts | Images |
| VK (VKontakte) | Posts | Links, Images |
| Xing | Posts | Links, Images |
| Blogger | Articles | Images |
| DEV.to | Articles | Images, Videos |
| Flickr | Media Posts | Images, Videos |
| Diigo | Bookmarks | Links |
| Bloglovin | Blog Posts | Images |
| Torial | Articles | Images |
| Ravelry | Posts | Images |
| Instapaper | Saved Content | Links |
| Band | Posts | Images |
| HumHub | Posts | Images |
The Blog2Social API provides a unified interface for publishing content across social media networks, blogging platforms, business networks, video platforms and community platforms. ---
### Platform Features
- Multi-network publishing
- Link, image and video publishing
- Profiles, pages and groups
- Boards, playlists and categories
- Post insights and analytics
- Video upload support
- Automated publishing workflows
---
# Quick Start Guide
Get your first social media post published in less than 5 minutes. ## Authentication Model
The API uses a two-layer authentication model:
service_token = your application
access_token = your user
Think of the service_token as your app key and the access_token as the user''s session token. Most API requests require both tokens. ## Prerequisites
- A free Blog2Social API account to get started. ## Step 1: Get Your API Key
Navigate to the My Apps section in your Blog2Social API Console and click Create App. Once the application has been created, copy the generated service_token and store it securely. The service_token uniquely identifies your application and is required for all API requests. ## Step 2: Authenticate User
POST /user/auth
Request:
```json
{
"service_token": "YOUR_SERVICE_TOKEN"
}
```
Response:
```json
{
"access_token": "USER_ACCESS_TOKEN",
"refresh_token": "REFRESH_TOKEN"
}
```
Save the access_token for all future API requests.'
version: 1.0.0
title: Blog2Social Network API
x-logo:
url: assets/image/b2slogo.png
backgroundColor: '#FFFFFF'
altText: Blog2Social API
servers:
- url: https://api.blog2social.com/rest/v1.0
tags:
- name: Network
paths:
/network/list:
post:
tags:
- Network
summary: List Networks
operationId: listNetwork
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- service_token
- access_token
properties:
service_token:
type: string
description: The token for your service
access_token:
type: string
description: The access token for the authenticated user.
format:
type: string
description: flag (default) - Denormalized flag structure (profile, page, group) | type - Normalized type structure (network_type_id)
example:
service_token: YOUR_SERVICE_TOKEN
access_token: YOUR_ACCESS_TOKEN
x-codeSamples:
- lang: cURL
source: "curl -X POST https://api.blog2social.com/rest/v1.0/network/list \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"service_token\": \"YOUR_SERVICE_TOKEN\",\n \"access_token\": \"YOUR_ACCESS_TOKEN\"\n}'"
- lang: PHP
source: "<?php\n\n$payload = [\n 'service_token' => 'YOUR_SERVICE_TOKEN',\n 'access_token' => 'YOUR_ACCESS_TOKEN',\n];\n\n$curl = curl_init('https://api.blog2social.com/rest/v1.0/network/list');\n\ncurl_setopt_array($curl, [\n CURLOPT_RETURNTRANSFER => true,\n CURLOPT_POST => true,\n CURLOPT_HTTPHEADER => [\n 'Content-Type: application/json',\n ],\n CURLOPT_POSTFIELDS => json_encode($payload),\n]);\n\n$response = curl_exec($curl);\n$error = curl_error($curl);\n\n$curl = null;\n\nif ($response === false) {\n throw new RuntimeException($error);\n}\n\necho $response;"
responses:
'200':
description: Ok
content:
application/json:
schema:
$ref: '#/components/schemas/NetworkList'
'401':
description: Unauthorized
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/error_401'
- $ref: '#/components/schemas/error_1001'
- $ref: '#/components/schemas/error_1003'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/error_500'
/network/add:
post:
tags:
- Network
summary: Add Connection
description: Get a link and session_token to redirect the user in order to authorize a network
operationId: add
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
service_token:
type: string
description: The token for your service
access_token:
type: string
description: The access token for the authenticated user.
network_id:
type: integer
description: The ID of the social media network.
network_type_id:
type: integer
description: 'The network type ID: 0 = Profile, 1 = Page, 2 = Group.'
filter_level:
type: string
description: The filter applied to shown groups and pages by their access level. Currently available for VK (network 17) with the value "admin".
language:
type: string
description: The language used for the authorization flow or form.
required:
- service_token
- access_token
- network_id
- network_type_id
example:
service_token: YOUR_SERVICE_TOKEN
access_token: YOUR_ACCESS_TOKEN
network_id: 1
network_type_id: 1
language: en
x-codeSamples:
- lang: cURL
source: "curl -X POST https://api.blog2social.com/rest/v1.0/network/add \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"service_token\": \"YOUR_SERVICE_TOKEN\",\n \"access_token\": \"YOUR_ACCESS_TOKEN\",\n \"network_id\": 1,\n \"network_type_id\": 1,\n \"language\": \"en\"\n}'"
- lang: PHP
source: "<?php\n\n$payload = [\n 'service_token' => 'YOUR_SERVICE_TOKEN',\n 'access_token' => 'YOUR_ACCESS_TOKEN',\n 'network_id' => 1,\n 'network_type_id' => 1,\n 'language' => 'en',\n];\n\n$curl = curl_init('https://api.blog2social.com/rest/v1.0/network/add');\n\ncurl_setopt_array($curl, [\n CURLOPT_RETURNTRANSFER => true,\n CURLOPT_POST => true,\n CURLOPT_HTTPHEADER => [\n 'Content-Type: application/json',\n ],\n CURLOPT_POSTFIELDS => json_encode($payload),\n]);\n\n$response = curl_exec($curl);\n$error = curl_error($curl);\n\n$curl = null;\n\nif ($response === false) {\n throw new RuntimeException($error);\n}\n\necho $response;"
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
auth_link:
type: string
example: https://api.blog2social.com/auth/v1/?b2s_session_token=abc123defg456hij789klm
session_token:
type: string
example: abc123defg456hij789klm
expired_in:
type: string
example: unix-timestamp
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/error_1002'
'401':
description: Unauthorized
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/error_401'
- $ref: '#/components/schemas/error_1001'
- $ref: '#/components/schemas/error_1003'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/error_403'
'500':
description: Interal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/error_500'
/network/update:
post:
tags:
- Network
summary: Update Connection
description: Get a link and session_token to redirect the user in order to re-authorize a network connection
operationId: update
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
service_token:
type: string
description: The token for your service
access_token:
type: string
description: The access token for the authenticated user.
client_user_network_id:
type: integer
description: The ID of the user's connected social media account authorization.
network_id:
type: integer
description: The ID of the social media network.
network_type_id:
type: integer
description: 'The network type ID: 0 = Profile, 1 = Page, 2 = Group.'
language:
type: string
description: The language used for the authorization flow or form.
required:
- service_token
- access_token
- client_user_network_id
- network_id
- network_type_id
example:
service_token: YOUR_SERVICE_TOKEN
access_token: YOUR_ACCESS_TOKEN
client_user_network_id: YOUR_CLIENT_USER_NETWORK_ID
network_id: 1
network_type_id: 1
language: en
x-codeSamples:
- lang: cURL
source: "curl -X POST https://api.blog2social.com/rest/v1.0/network/update \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"service_token\": \"YOUR_SERVICE_TOKEN\",\n \"access_token\": \"YOUR_ACCESS_TOKEN\",\n \"client_user_network_id\": YOUR_CLIENT_USER_NETWORK_ID,\n \"network_id\": 1,\n \"network_type_id\": 1,\n \"language\": \"en\"\n}'"
- lang: PHP
source: "<?php\n\n$payload = [\n 'service_token' => 'YOUR_SERVICE_TOKEN',\n 'access_token' => 'YOUR_ACCESS_TOKEN',\n 'client_user_network_id' => YOUR_CLIENT_USER_NETWORK_ID,\n 'network_id' => 1,\n 'network_type_id' => 1,\n 'language' => 'en',\n];\n\n$curl = curl_init('https://api.blog2social.com/rest/v1.0/network/update');\n\ncurl_setopt_array($curl, [\n CURLOPT_RETURNTRANSFER => true,\n CURLOPT_POST => true,\n CURLOPT_HTTPHEADER => [\n 'Content-Type: application/json',\n ],\n CURLOPT_POSTFIELDS => json_encode($payload),\n]);\n\n$response = curl_exec($curl);\n$error = curl_error($curl);\n\n$curl = null;\n\nif ($response === false) {\n throw new RuntimeException($error);\n}\n\necho $response;"
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
auth_link:
type: string
example: https://api.blog2social.com/auth/v1/?b2s_session_token=abc123defg456hij789klm
session_token:
type: string
example: abc123defg456hij789klm
expired_in:
type: string
example: unix-timestamp
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/error_1002'
'401':
description: Unauthorized
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/error_401'
- $ref: '#/components/schemas/error_1001'
- $ref: '#/components/schemas/error_1003'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/error_403'
'500':
description: Interal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/error_500'
/network/categories:
post:
tags:
- Network
summary: List Categories
description: 'List categories/boards/subred/playlists a authorization can post to.
Only available for Pinterest, Reddit and YouTube.
Results are cached for 30 minutes.'
operationId: listBoards
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
service_token:
type: string
description: The token for your service
access_token:
type: string
description: The access token for the authenticated user.
client_user_network_id:
type: integer
description: The ID of the user's connected social media account authorization.
required:
- service_token
- access_token
- client_user_network_id
example:
service_token: YOUR_SERVICE_TOKEN
access_token: YOUR_ACCESS_TOKEN
client_user_network_id: YOUR_CLIENT_USER_NETWORK_ID
x-codeSamples:
- lang: cURL
source: "curl -X POST https://api.blog2social.com/rest/v1.0/network/categories \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"service_token\": \"YOUR_SERVICE_TOKEN\",\n \"access_token\": \"YOUR_ACCESS_TOKEN\",\n \"client_user_network_id\": YOUR_CLIENT_USER_NETWORK_ID\n}'"
- lang: PHP
source: "<?php\n\n$payload = [\n 'service_token' => 'YOUR_SERVICE_TOKEN',\n 'access_token' => 'YOUR_ACCESS_TOKEN',\n 'client_user_network_id' => YOUR_CLIENT_USER_NETWORK_ID,\n];\n\n$curl = curl_init('https://api.blog2social.com/rest/v1.0/network/categories');\n\ncurl_setopt_array($curl, [\n CURLOPT_RETURNTRANSFER => true,\n CURLOPT_POST => true,\n CURLOPT_HTTPHEADER => [\n 'Content-Type: application/json',\n ],\n CURLOPT_POSTFIELDS => json_encode($payload),\n]);\n\n$response = curl_exec($curl);\n$error = curl_error($curl);\n\n$curl = null;\n\nif ($response === false) {\n throw new RuntimeException($error);\n}\n\necho $response;"
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/CategoriesList'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/error_1002'
'401':
description: Unauthorized
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/error_401'
- $ref: '#/components/schemas/error_1001'
- $ref: '#/components/schemas/error_1003'
'500':
description: Interal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/error_500'
/network/properties:
post:
tags:
- Network
summary: List Network Properties
description: Returns network-specific publishing properties such as supported content types, limits, instant sharing support, media capabilities, video requirements and network-specific constraints.
operationId: network_properties
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- service_token
- access_token
properties:
service_token:
type: string
description: The token for your service
access_token:
type: string
description: The access token for the authenticated user.
example:
service_token: YOUR_SERVICE_TOKEN
access_token: YOUR_ACCESS_TOKEN
x-codeSamples:
- lang: cURL
source: "curl -X POST https://api.blog2social.com/rest/v1.0/network/properties \\\n -H \"Content-Type: application/json\" \\\n -d '{\n \"service_token\": \"YOUR_SERVICE_TOKEN\",\n \"access_token\": \"YOUR_ACCESS_TOKEN\"\n}'"
- lang: PHP
source: "<?php\n\n$payload = [\n 'service_token' => 'YOUR_SERVICE_TOKEN',\n 'access_token' => 'YOUR_ACCESS_TOKEN',\n];\n\n$curl = curl_init('https://api.blog2social.com/rest/v1.0/network/properties');\n\ncurl_setopt_array($curl, [\n CURLOPT_RETURNTRANSFER => true,\n CURLOPT_POST => true,\n CURLOPT_HTTPHEADER => [\n 'Content-Type: application/json',\n ],\n CURLOPT_POSTFIELDS => json_encode($payload),\n]);\n\n$response = curl_exec($curl);\n$error = curl_error($curl);\n\n$curl = null;\n\nif ($response === false) {\n throw new RuntimeException($error);\n}\n\necho $response;"
responses:
'200':
description: OK
content:
application/json:
schema:
type: array
items:
type: object
properties:
network_id:
type: integer
description: The network ID.
network_type:
type: integer
description: 'Network type: 0 = Profile, 1 = Page, 2 = Group.'
instant_sharing:
type: integer
description: Whether instant sharing is supported.
image_format:
type: string
description: Comma-separated list of supported image formats, if available.
image_max_width:
type: integer
description: Maximum image width in pixels, if available.
image_max_height:
type: integer
description: Maximum image height in pixels, if available.
image_default_convert:
type: string
description: Default image format used for automatic conversion, if available.
force_download_image:
type: integer
description: Whether remote images must be downloaded before publishing.
character_limit:
type: integer
description: Maximum number of characters supported by the network, if available.
character_limit_title:
type: integer
description: Maximum title length supported by the network, if available.
html_support:
type:
- string
- 'null'
description: Supported HTML tags, if available. Null means HTML is not supported or no specific HTML support information is available.
emoji_support:
type: integer
description: Whether emojis are supported.
video_support:
type: integer
description: Whether video publishing is supported.
video_upload_type:
type: integer
description: Video upload mode supported by the network, if available.
video_format:
type: string
description: Comma-separated list of supported video formats, if available.
video_max_length:
type: integer
description: Maximum video length in seconds, if available.
video_min_length:
type: integer
description: Minimum video length in seconds, if available.
video_max_size:
type: integer
description: Maximum processed video file size supported by the API, if available.
video_max_size_original:
type: integer
description: Maximum original video file size supported by the network or upload flow, if available.
reel_support:
type: object
description: Network-specific reel requirements, if reels are supported.
properties:
reel_format:
type: string
description: Comma-separated list of supported reel video formats.
reel_max_length:
type: integer
description: Maximum reel length in seconds.
reel_min_length:
type: integer
description: Minimum reel length in seconds.
reel_min_framerate:
type: integer
description: Minimum reel frame rate.
reel_max_framerate:
type: integer
description: Maximum reel frame rate.
reel_aspect_ratio_x:
type: integer
description: Required reel aspect ratio width value.
reel_aspect_ratio_y:
type: integer
description: Required reel aspect ratio height value.
reel_min_resolution_x:
type: integer
description: Minimum reel width in pixels.
reel_min_resolution_y:
type: integer
description: Minimum reel height in pixels.
reel_max_resolution_x:
type: integer
description: Maximum reel width in pixels.
example:
- network_id: 1
network_type: 1
instant_sharing: 0
image_format: png,jpg,gif,webp
reel_support:
reel_format: mp4,mov
reel_max_length: 90
reel_min_length: 4
reel_min_framerate: 23
reel_aspect_ratio_x: 9
reel_aspect_ratio_y: 16
reel_min_resolution_x: 540
reel_min_resolution_y: 960
video_format: mp4,mov
emoji_support: 1
html_support: null
video_support: 1
video_max_size: 256000
character_limit: 60000
video_max_length: 3600
video_upload_type: 0
character_limit_title: 0
video_max_size_original: 10485760
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/error_1002'
'401':
description: Unauthorized
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/error_401'
- $ref: '#/components/schemas/error_1001'
- $ref: '#/components/schemas/error_1003'
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/error_500'
components:
schemas:
error_1002:
type: object
properties:
error_code:
type: integer
example: 1002
error_message:
type: string
example: required parameter missing {PARAMETER}
error_1003:
type: object
properties:
error_code:
type: integer
example: 1003
error_message:
type: string
example: access token invalid
error_1001:
type: object
properties:
error_code:
type: integer
example: 1001
error_message:
type: string
example: access token required
error_500:
description: Internal Server Error
type: object
properties:
error_code:
type: integer
example: 500
error_message:
type: string
example: interal server error
NetworkList:
type: array
items:
type: object
properties:
name:
type: string
example: X
description: Network name
url:
type: string
example: x.com
description: BaseURL of network
network_id:
type: integer
example: 2
description: Network ID
profile:
type: integer
example: 1
description: Profile disabled (0) / Profile enabled (1) - for this network
page:
type: integer
example: 0
description: Pages disabled (0) / Pages enabled (1) - for this network
group:
type: integer
example: 0
description: Groups disabled (0) / Groups enabled (1) - for this network
network_type_id:
type: integer
example: 0
description: Describes the connection type - Profile (0), Page (1), Group (2) - Only with format = type
error_403:
description: Forbidden
type: object
properties:
error_code:
type: integer
example: 403
error_message:
type: string
example: forbidden
error_401:
description: Unauthorized
type: object
properties:
error_code:
type: integer
example: 401
error_message:
type: string
example: unauthorized
CategoriesList:
type: array
items:
type: object
properties:
id:
type: string
description: id of the board/subred/playlist
name:
type: string
description: name of the board/subred/playlist