Quick Start

Get started with postcore in 5 minutes

Step 1: Get Your API Key

  1. Sign up at postcore.dev/sign-up
  2. Go to your dashboard
  3. Click "Create API Key"
  4. 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 record
import 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 record

Response:

{
  "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:

  1. User clicks "Connect LinkedIn" button in your app
  2. They're redirected to LinkedIn to authorize
  3. After authorizing, they return to your app
  4. 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/callback

You'll authorize LinkedIn, then be redirected to your returnUrl with the profileKey in the URL:

https://yourapp.com/callback?profileKey=prof_abc123

Bluesky (App Password)

Bluesky uses app passwords instead of OAuth. Your users will need to create one in their Bluesky settings.

Quick setup for testing:

  1. To test with your own Bluesky account go to bsky.app/settings/app-passwords
  2. Click "Add App Password" and name it
  3. Copy the generated password (format: xxxx-xxxx-xxxx-xxxx)
  4. 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