Skip to main content

Authentication

Overview

For external systems providing property data to Cyndicate Club, we use HTTP Basic Authentication. This is used when:

  1. Our robot fetches data from your endpoints (HTTPS only)
  2. 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