Developer Portal

Build with the UnifiedLayer API

Full REST API access to pipelines, connectors, billing, and more. Build custom integrations or extend the platform with the Connector SDK.

API Overview

Authentication

JWT-based authentication with access tokens. Login, register, and manage sessions.

POST /auth/loginPOST /auth/registerGET /auth/me

Pipelines

Create, schedule, and manage data pipelines from any source to any destination.

GET /pipelines/POST /pipelines/POST /pipelines/{id}/runGET /pipelines/{id}/runs

Connectors

List available connectors, their capabilities, and configuration schemas.

GET /connectors/GET /connectors/{name}GET /connectors/categories

Billing & Usage

Manage subscriptions, check usage limits, and handle Stripe webhooks.

GET /billing/plansGET /billing/subscriptionGET /billing/usagePOST /billing/checkout

Quick Start

python

import requests

# Authenticate
resp = requests.post("https://api.yourdomain.com/auth/login", data={
    "username": "your@email.com",
    "password": "your_password",
})
token = resp.json()["access_token"]
headers = {"Authorization": f"Bearer {token}"}

# List pipelines
pipelines = requests.get(
    "https://api.yourdomain.com/pipelines/",
    headers=headers,
).json()

# Trigger a pipeline run
run = requests.post(
    f"https://api.yourdomain.com/pipelines/{pipelines[0]['public_id']}/run",
    headers=headers,
).json()

print(f"Pipeline run started: {run['public_id']}")

javascript

const API_URL = "https://api.yourdomain.com";

// Authenticate
const loginResp = await fetch(`${API_URL}/auth/login`, {
  method: "POST",
  headers: { "Content-Type": "application/x-www-form-urlencoded" },
  body: new URLSearchParams({
    username: "your@email.com",
    password: "your_password",
  }),
});
const { access_token } = await loginResp.json();

// List pipelines
const pipelines = await fetch(`${API_URL}/pipelines/`, {
  headers: { Authorization: `Bearer ${access_token}` },
}).then(r => r.json());

// Trigger a pipeline run
const run = await fetch(
  `${API_URL}/pipelines/${pipelines[0].public_id}/run`,
  {
    method: "POST",
    headers: { Authorization: `Bearer ${access_token}` },
  }
).then(r => r.json());

console.log("Pipeline run started:", run.public_id);

curl

# Authenticate
TOKEN=$(curl -s -X POST https://api.yourdomain.com/auth/login \
  -d "username=your@email.com&password=your_password" | jq -r '.access_token')

# List pipelines
curl -s https://api.yourdomain.com/pipelines/ \
  -H "Authorization: Bearer $TOKEN" | jq

# Check usage
curl -s https://api.yourdomain.com/billing/usage \
  -H "Authorization: Bearer $TOKEN" | jq

# List available connectors
curl -s https://api.yourdomain.com/connectors/ | jq

Connector SDK

Build custom data source connectors with our Python SDK. Your connector automatically gets schema discovery, incremental loading, and integration with the platform's pipeline engine.

from backend.connectors.sdk import BaseConnector, register_connector

@register_connector
class MyConnector(BaseConnector):
    metadata = ConnectorMetadata(
        name="my_source",
        display_name="My Data Source",
        category="api",
    )

    def extract(self, tables=None, **kwargs):
        yield {"id": 1, "name": "Alice"}
        yield {"id": 2, "name": "Bob"}