Authentication
Overview
For external systems providing property data to Cyndicate Club, we use HTTP Basic Authentication. This is used when:
- Our robot fetches data from your endpoints (HTTPS only)
- You send data to our webhook endpoints
Getting Credentials
To obtain your integration credentials:
- Contact Support: Email us at
integration-support@cyndicate.club
- Through Your Manager: Contact your assigned account manager
- During Onboarding: Credentials are provided during the integration setup process
You will receive:
- Username: Unique identifier for your integration
- Password: Secure password for authentication
- Endpoint URLs: Our API endpoints for data submission
⚠️ Important: Our data fetching robot only works with HTTPS. HTTP endpoints will be rejected for security reasons.
HTTP Basic Authentication
How It Works
HTTP Basic Authentication sends credentials in the Authorization
header:
Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
Where dXNlcm5hbWU6cGFzc3dvcmQ=
is base64 encoding of username:password
Setting Up Your Endpoint
You need to protect your data endpoint with Basic Auth. Here's a simple example:
Node.js Example
const express = require('express');
const app = express();
app.use('/properties.json', (req, res, next) => {
const auth = req.headers.authorization;
if (!auth || !auth.startsWith('Basic ')) {
return res.status(401).json({ error: 'Authentication required' });
}
const credentials = Buffer.from(auth.slice(6), 'base64').toString();
const [username, password] = credentials.split(':');
// Check your username and password
if (username === 'your_username' && password === 'your_password') {
next();
} else {
res.status(401).json({ error: 'Invalid credentials' });
}
});
app.get('/properties.json', (req, res) => {
res.json({
"properties": [
// Your property data here
]
});
});
Python Example
from flask import Flask, request, jsonify
import base64
app = Flask(__name__)
@app.route('/properties.json')
def get_properties():
auth = request.headers.get('Authorization')
if not auth or not auth.startswith('Basic '):
return jsonify({'error': 'Authentication required'}), 401
try:
credentials = base64.b64decode(auth[6:]).decode('utf-8')
username, password = credentials.split(':', 1)
except:
return jsonify({'error': 'Invalid authorization header'}), 401
# Check your username and password
if username == 'your_username' and password == 'your_password':
return jsonify({
"properties": [
# Your property data here
]
})
return jsonify({'error': 'Invalid credentials'}), 401
Requirements
- HTTPS only - Our robot exclusively works with HTTPS endpoints. HTTP will not work
- Valid SSL certificate - Your HTTPS endpoint must have a valid SSL certificate
- Strong password - At least 12 characters with mixed case, numbers, symbols
- Unique credentials - Don't reuse passwords from other systems
- Credential security - Store credentials securely and never expose them in logs or version control
Testing
Test your endpoint with curl:
# Test with correct credentials
curl -u "your_username:your_password" https://your-domain.com/properties.json
# Test with wrong credentials (should return 401)
curl -u "wrong:password" https://your-domain.com/properties.json
Common Errors
- 401 Unauthorized
- Wrong username/password - Check credentials
- 400 Bad Request
- Invalid auth header - Fix authorization format
- 403 Forbidden
- Correct credentials but no access - Check permissions