Quick Start
Get started with postcore in 5 minutes
Step 1: Get Your API Key
- Sign up at postcore.dev/sign-up
- Go to your dashboard
- Click "Create API Key"
- Copy your key - you'll need it for all requests
Step 2: Create a Profile
In postcore, profiles are meant to represent your end-users. Each profile can connect to one of each platform available (one LinkedIn, one Bluesky, etc., per account).
curl -X POST https://api.postcore.dev/profiles/create \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"profileName": "John Smith Profile"
}'const response = await fetch('https://api.postcore.dev/profiles/create', {
method: 'POST',
headers: {
'x-api-key': process.env.POSTCORE_API_KEY,
'Content-Type': 'application/json',
},
body: JSON.stringify({
profileName: 'John Smith Profile'
}),
});
const { profileKey } = await response.json();
console.log('Profile created:', profileKey);
// Store this profileKey with your user recordimport os
import requests
response = requests.post(
'https://api.postcore.dev/profiles/create',
headers={
'x-api-key': os.getenv('POSTCORE_API_KEY'),
'Content-Type': 'application/json'
},
json={'profileName': 'John Smith Profile'}
)
data = response.json()
profile_key = data['profileKey']
# Store this profile_key with your user recordResponse:
{
"profileKey": "prof_abc123...",
"profileName": "John Smith Profile"
}Step 3: Connect Platforms
Now connect your user's social media accounts to their profile.
LinkedIn (OAuth)
LinkedIn uses OAuth for secure, user-authorized connections.
How it works for your end-users:
- User clicks "Connect LinkedIn" button in your app
- They're redirected to LinkedIn to authorize
- After authorizing, they return to your app
- Connection is complete and ready for posting
Quick setup for testing:
To test with your own LinkedIn account, simply visit this URL in your browser (replace with your actual values):
https://api.postcore.dev/profiles/connect?apiKey=YOUR_API_KEY&platform=linkedin&profileKey=prof_abc123&returnUrl=https://yourapp.com/callbackYou'll authorize LinkedIn, then be redirected to your returnUrl with the profileKey in the URL:
https://yourapp.com/callback?profileKey=prof_abc123Bluesky (App Password)
Bluesky uses app passwords instead of OAuth. Your users will need to create one in their Bluesky settings.
Quick setup for testing:
- To test with your own Bluesky account go to bsky.app/settings/app-passwords
- Click "Add App Password" and name it
- Copy the generated password (format:
xxxx-xxxx-xxxx-xxxx) - Use it to connect:
curl -X POST https://api.postcore.dev/profiles/connect \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"profileKey": "prof_abc123",
"platform": "bluesky",
"credentials": {
"handle": "yourhandle.bsky.social",
"appPassword": "xxxx-xxxx-xxxx-xxxx"
}
}'const response = await fetch('https://api.postcore.dev/profiles/connect', {
method: 'POST',
headers: {
'x-api-key': process.env.POSTCORE_API_KEY,
'Content-Type': 'application/json',
},
body: JSON.stringify({
profileKey: 'prof_abc123',
platform: 'bluesky',
credentials: {
handle: 'yourhandle.bsky.social',
appPassword: 'xxxx-xxxx-xxxx-xxxx'
}
}),
});
console.log('Bluesky connected!');response = requests.post(
'https://api.postcore.dev/profiles/connect',
headers={
'x-api-key': os.getenv('POSTCORE_API_KEY'),
'Content-Type': 'application/json'
},
json={
'profileKey': 'prof_abc123',
'platform': 'bluesky',
'credentials': {
'handle': 'yourhandle.bsky.social',
'appPassword': 'xxxx-xxxx-xxxx-xxxx'
}
}
)
print('Bluesky connected!')For production apps: See the full connection guide for how to collect app passwords from your end-users.
Step 4: Schedule Your First Post
curl -X POST https://api.postcore.dev/posts \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"profileKey": "prof_abc123",
"content": "Hello from postcore! 🚀",
"platforms": ["linkedin", "bluesky"],
"scheduledFor": "2025-01-15T10:00:00Z"
}'const response = await fetch('https://api.postcore.dev/posts', {
method: 'POST',
headers: {
'x-api-key': process.env.POSTCORE_API_KEY,
'Content-Type': 'application/json',
},
body: JSON.stringify({
profileKey: 'prof_abc123',
content: 'Hello from postcore! 🚀',
platforms: ['linkedin', 'bluesky'],
scheduledFor: '2025-01-15T10:00:00Z',
}),
});
const data = await response.json();
console.log('Scheduled:', data.posts);response = requests.post(
'https://api.postcore.dev/posts',
headers={
'x-api-key': os.getenv('POSTCORE_API_KEY'),
'Content-Type': 'application/json'
},
json={
'profileKey': 'prof_abc123',
'content': 'Hello from postcore! 🚀',
'platforms': ['linkedin', 'bluesky'],
'scheduledFor': '2025-01-15T10:00:00Z'
}
)
data = response.json()
print(f'Scheduled {len(data["posts"])} posts')Response:
{
"posts": [
{
"postId": "uuid-1",
"platform": "linkedin",
"scheduledFor": "2025-01-15T10:00:00Z",
"createdAt": "2025-01-06T12:00:00Z"
},
{
"postId": "uuid-2",
"platform": "bluesky",
"scheduledFor": "2025-01-15T10:00:00Z",
"createdAt": "2025-01-06T12:00:00Z"
}
],
"usage": {
"month": "January 2025",
"used": 2,
"limit": 10,
"remaining": 8
}
}That's it! You're now scheduling posts across multiple platforms.
Next Steps
- Learn about platform-specific details
- Understand rate limits
- See more code examples