Quickstart
PostProxy creates your first profile group automatically when you sign up. Connect your social media accounts through the dashboard, then you’re ready to make API calls.
Step 1: Get your profiles
Section titled “Step 1: Get your profiles”First, retrieve your connected profiles to get their IDs.
curl -X GET "https://api.postproxy.dev/api/profiles" \ -H "Authorization: Bearer YOUR_API_KEY"import requests
response = requests.get( "https://api.postproxy.dev/api/profiles", headers={"Authorization": "Bearer YOUR_API_KEY"})
print(response.json())require 'net/http'require 'json'
uri = URI("https://api.postproxy.dev/api/profiles")request = Net::HTTP::Get.new(uri)request["Authorization"] = "Bearer YOUR_API_KEY"
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http| http.request(request)end
puts JSON.parse(response.body)const response = await fetch("https://api.postproxy.dev/api/profiles", { headers: { "Authorization": "Bearer YOUR_API_KEY" }});
const data = await response.json();console.log(data);Response:
{ "data": [ { "id": "prof123abc", "name": "My Company Page", "platform": "facebook", "status": "active", "profile_group_id": "grp456xyz", "expires_at": null, "post_count": 42 }, { "id": "prof789def", "name": "@mycompany", "platform": "instagram", "status": "active", "profile_group_id": "grp456xyz", "expires_at": null, "post_count": 38 } ]}Note the profile IDs and platform types - you’ll use these when creating posts.
Step 2: Create a post
Section titled “Step 2: Create a post”Post content to one or more profiles. You can specify profiles by their ID or by platform name (uses the first profile for that platform).
curl -X POST "https://api.postproxy.dev/api/posts" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "post": { "body": "Hello World!" }, "profiles": ["facebook", "instagram"], "media": ["https://example.com/image.jpg"] }'import requests
response = requests.post( "https://api.postproxy.dev/api/posts", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json" }, json={ "post": { "body": "Hello World!" }, "profiles": ["facebook", "instagram"], "media": ["https://example.com/image.jpg"] })
print(response.json())require 'net/http'require 'json'
uri = URI("https://api.postproxy.dev/api/posts")request = Net::HTTP::Post.new(uri)request["Authorization"] = "Bearer YOUR_API_KEY"request["Content-Type"] = "application/json"request.body = { post: { body: "Hello World!" }, profiles: ["facebook", "instagram"], media: ["https://example.com/image.jpg"]}.to_json
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http| http.request(request)end
puts JSON.parse(response.body)const response = await fetch("https://api.postproxy.dev/api/posts", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json" }, body: JSON.stringify({ post: { body: "Hello World!" }, profiles: ["facebook", "instagram"], media: ["https://example.com/image.jpg"] })});
const data = await response.json();console.log(data);Response:
{ "id": "xyz789abc", "body": "Hello World!", "status": "processed", "scheduled_at": null, "created_at": "2024-01-15T10:30:00.000Z", "platforms": [ { "platform": "facebook", "status": "published", "error": null, "params": null, "attempted_at": "2024-01-15T10:30:01.000Z" }, { "platform": "instagram", "status": "published", "error": null, "params": { "format": "post" }, "attempted_at": "2024-01-15T10:30:02.000Z" } ]}Your post will be published to the specified platforms almost immediately.
Step 3: Schedule a post (optional)
Section titled “Step 3: Schedule a post (optional)”To schedule a post for later, add scheduled_at with an ISO 8601 timestamp.
curl -X POST "https://api.postproxy.dev/api/posts" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "post": { "body": "Hello World!", "scheduled_at": "2024-01-20T12:00:00Z" }, "profiles": ["facebook", "instagram"], "media": ["https://example.com/image.jpg"] }'import requests
response = requests.post( "https://api.postproxy.dev/api/posts", headers={ "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json" }, json={ "post": { "body": "Hello World!", "scheduled_at": "2024-01-20T12:00:00Z" }, "profiles": ["facebook", "instagram"], "media": ["https://example.com/image.jpg"] })
print(response.json())require 'net/http'require 'json'
uri = URI("https://api.postproxy.dev/api/posts")request = Net::HTTP::Post.new(uri)request["Authorization"] = "Bearer YOUR_API_KEY"request["Content-Type"] = "application/json"request.body = { post: { body: "Hello World!", scheduled_at: "2024-01-20T12:00:00Z" }, profiles: ["facebook", "instagram"], media: ["https://example.com/image.jpg"]}.to_json
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http| http.request(request)end
puts JSON.parse(response.body)const response = await fetch("https://api.postproxy.dev/api/posts", { method: "POST", headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json" }, body: JSON.stringify({ post: { body: "Hello World!", scheduled_at: "2024-01-20T12:00:00Z" }, profiles: ["facebook", "instagram"], media: ["https://example.com/image.jpg"] })});
const data = await response.json();console.log(data);Response:
{ "id": "xyz789abc", "body": "Hello World!", "status": "scheduled", "scheduled_at": "2024-01-20T12:00:00.000Z", "created_at": "2024-01-15T10:30:00.000Z", "platforms": [ { "platform": "facebook", "status": "processing", "error": null, "params": null, "attempted_at": null }, { "platform": "instagram", "status": "processing", "error": null, "params": { "format": "post" }, "attempted_at": null } ]}PostProxy handles the scheduling - your post will be published at the specified time.
Next steps
Section titled “Next steps”- Posts API Reference - Full documentation for creating and managing posts
- Platform Parameters - Platform-specific options and media constraints
- Profiles API Reference - Managing connected profiles