From podium-pack
Sets up OAuth2 auth for Podium API in Node.js/Express apps. Implements authorization flow, token exchange, and verification for messaging, reviews, payments access.
npx claudepluginhub jeremylongshore/claude-code-plugins-plus-skills --plugin podium-packThis skill is limited to using the following tools:
Set up Podium API authentication using OAuth2 authorization code flow. Podium requires a Developer Account, OAuth application credentials, and user authorization to access location data.
Provides TypeScript patterns for Podium API deploy integration using OAuth2-authenticated REST calls for messaging, reviews, and payments.
Installs intercom-client TypeScript SDK and configures Intercom API authentication via access tokens or OAuth. For new integrations or API credential setup.
Installs @mirohq/miro-api Node.js client and configures OAuth 2.0 authentication for Miro REST API v2.
Share bugs, ideas, or general feedback.
Set up Podium API authentication using OAuth2 authorization code flow. Podium requires a Developer Account, OAuth application credentials, and user authorization to access location data.
1. Go to developer.podium.com
2. Create a new OAuth Application
3. Set redirect URI: http://localhost:3000/callback
4. Copy client_id and client_secret
5. Select scopes: messages.read, messages.write, contacts.read, reviews.read
# .env
PODIUM_CLIENT_ID=your_client_id
PODIUM_CLIENT_SECRET=your_client_secret
PODIUM_REDIRECT_URI=http://localhost:3000/callback
import express from 'express';
import axios from 'axios';
const app = express();
// Step 1: Redirect user to Podium authorization
app.get('/auth', (req, res) => {
const authUrl = `https://api.podium.com/oauth/authorize?client_id=${process.env.PODIUM_CLIENT_ID}&redirect_uri=${encodeURIComponent(process.env.PODIUM_REDIRECT_URI!)}&response_type=code&scope=messages.read+messages.write`;
res.redirect(authUrl);
});
// Step 2: Exchange code for access token
app.get('/callback', async (req, res) => {
const { code } = req.query;
const { data } = await axios.post('https://api.podium.com/oauth/token', {
grant_type: 'authorization_code',
code,
client_id: process.env.PODIUM_CLIENT_ID,
client_secret: process.env.PODIUM_CLIENT_SECRET,
redirect_uri: process.env.PODIUM_REDIRECT_URI,
});
console.log(`Access token: ${data.access_token}`);
console.log(`Refresh token: ${data.refresh_token}`);
res.json({ status: 'authenticated' });
});
app.listen(3000);
const podium = axios.create({
baseURL: 'https://api.podium.com/v4',
headers: { 'Authorization': `Bearer ${accessToken}` },
});
const { data } = await podium.get('/locations');
console.log(`Connected! Locations: ${data.data.length}`);
| Error | Cause | Solution |
|---|---|---|
invalid_client | Wrong client_id/secret | Verify credentials in developer portal |
invalid_grant | Expired authorization code | Codes expire quickly — retry auth flow |
invalid_scope | Scope not approved | Request scope approval from Podium |
401 Unauthorized | Expired access token | Use refresh token to get new access token |
Send your first message: podium-hello-world