Skip to main content

API Integration

Client Architecture

fetchWithAuth() — Base Client

// apps/portal/src/lib/fetchWithAuth.ts
export async function fetchWithAuth(url: string, options?: FetchWithAuthOptions): Promise<Response>
  • Injects Authorization: Bearer {token} from Keycloak
  • Sets Content-Type: application/json and Accept: application/json
  • Supports skipAuth and skipContentType options

parseApiResponse<T>() — Response Parser

// apps/portal/src/lib/apiResponse.ts
export async function parseApiResponse<T>(response: Response, options?: ParseOptions): Promise<T>

Pipeline: Error checkJSON parseUnwrap StandardApiResponsesnake_case to camelCase

  • Throws ApiError on non-OK responses
  • 422 → isValidationError: true with fieldErrors[]
  • 204 → returns {}
  • Unwraps { status: "success", data: T } wrappers

Service Singleton Pattern

All services use singleton pattern:

class PipelineService {
private static instance: PipelineService;
static getInstance(): PipelineService {
if (!PipelineService.instance) PipelineService.instance = new PipelineService();
return PipelineService.instance;
}
}

Backend Services

ServicePortEnv VariableBase Path
API Gateway8080VITE_API_BASE_URL/api
Pipeline50002VITE_PIPELINE_API_URL/api/v1/pipelines
Operator50001VITE_OPERATOR_API_URL/api/v1/operator-templates
Schema Registry50031VITE_SCHEMA_REGISTRY_API_URL/api/v1/schema-registry
Synthetic Data50032VITE_SYNTHETIC_DATA_API_URL/api/v1/generators
Kafka50034VITE_KAFKA_API_URL/api/v1/kafka
Cache50035VITE_CACHE_API_URL/api/v1/keys
Observability50010VITE_OBSERVABILITY_API_URL/api/v1/dashboard

All API Endpoints

Pipeline API :50002

MethodEndpointPurpose
GET/api/v1/pipelinesList pipelines (paginated)
GET/api/v1/pipelines/{id}Get pipeline details
POST/api/v1/pipelinesCreate pipeline
PUT/api/v1/pipelines/{id}Update pipeline
DELETE/api/v1/pipelines/{id}Delete pipeline
POST/api/v1/pipelines/{id}/compileCompile pipeline
POST/api/v1/pipelines/{id}/deployDeploy pipeline
GET/api/v1/pipelines/{id}/statusGet deployment status
POST/api/v1/pipelines/{id}/pausePause running pipeline
POST/api/v1/pipelines/{id}/resumeResume pipeline
POST/api/v1/pipelines/{id}/cancelCancel pipeline
POST/api/v1/pipelines/{id}/restoreRestore from savepoint
POST/api/v1/pipelines/{id}/purgePurge pipeline state
GET/api/v1/pipelines/{id}/executionsList executions
GET/api/v1/pipelines/{id}/savepointsList savepoints
POST/api/v1/pipelines/{id}/savepoints/triggerTrigger savepoint
DELETE/api/v1/pipelines/{id}/savepoints?path=...Delete savepoint
GET/api/v1/pipelines/{id}/checkpointsList checkpoints
GET/api/v1/pipelines/{id}/kafka/offsetsGet Kafka offsets

Operator API :50001

MethodEndpointPurpose
GET/api/v1/operator-templatesList all operator templates
GET/api/v1/operator-templates/{id}Get template details
GET/api/v1/operators/{id}/defaultsGet default config
POST/api/v1/operators/{id}/validateValidate config
GET/api/v1/operators/{id}/schema/inputs/{name}Get input schema

Expression Library API :50001

MethodEndpointPurpose
GET/api/v1/expression-library/templatesList expression templates
POST/api/v1/expression-library/evaluateEvaluate expression

Schema Registry API :50031

MethodEndpointPurpose
GET/api/v1/schema-registry/schemasList schemas (filterable)
GET/api/v1/schema-registry/schemas/{id}Get schema details
POST/api/v1/schema-registry/schemasCreate schema
PUT/api/v1/schema-registry/schemas/{id}Update schema
DELETE/api/v1/schema-registry/schemas/{id}Delete schema
GET/api/v1/schema-registry/schemas/{id}/versionsList versions
POST/api/v1/schema-registry/schemas/{id}/versionsCreate version
PUT.../versions/{vId}/fields/{name}/piiMark field as PII

Synthetic Data API :50032

MethodEndpointPurpose
GET/api/v1/generatorsList generators (paginated)
GET/api/v1/generators/{id}Get generator details
POST/api/v1/generatorsCreate generator
PUT/api/v1/generators/{id}Update generator
DELETE/api/v1/generators/{id}Delete generator
GET/api/v1/generators/{id}/metricsGet metrics
POST/api/v1/generators/{id}/startStart generation
POST/api/v1/generators/{id}/pausePause generation
POST/api/v1/generators/{id}/stopStop generation
POST/api/v1/generators/{id}/validate-schemaValidate schema
GET/api/v1/poolsList data pools
GET/api/v1/universesList universes
POST/api/v1/universesCreate universe

Kafka API :50034

MethodEndpointPurpose
GET/api/v1/kafka/topicsList topics
GET/api/v1/kafka/topics/{name}Get topic details
POST/api/v1/kafka/topicsCreate topic
DELETE/api/v1/kafka/topics/{name}Delete topic
GET/api/v1/kafka/topics/{name}/messagesBrowse messages
GET/api/v1/kafka/consumer-groupsList consumer groups
GET/api/v1/kafka/consumer-groups/{id}Group details

Cache API :50035

MethodEndpointPurpose
GET/api/v1/healthHealth check
GET/api/v1/server/infoServer info
GET/api/v1/keys/scanBrowse keys by pattern
GET/api/v1/keys/{key}Get key value
PUT/api/v1/keys/{key}Set key value
DELETE/api/v1/keys/{key}Delete key
PUT/api/v1/keys/{key}/expireSet TTL
PUT/api/v1/keys/{key}/renameRename key
DELETE/api/v1/keys/bulk-deleteBulk delete

Observability API :50010

MethodEndpointPurpose
POST/api/v1/ws/ticketObtain WebSocket ticket
GET/api/v1/dashboard/metricsDashboard metrics
GET/api/v1/logs/queryQuery logs
GET/api/v1/traces/queryQuery traces

Approval Workflow API

MethodEndpointPurpose
GET/api/v1/workflowsList workflows
GET/api/v1/workflows/{id}Get workflow
POST/api/v1/workflowsCreate workflow
PUT/api/v1/workflows/{id}Update workflow
DELETE/api/v1/workflows/{id}Delete workflow
GET/api/v1/workflows/{id}/versionsList versions
POST/api/v1/workflows/{id}/versionsCreate version
GET/api/v1/workflows/{id}/instancesList instances
GET/api/v1/tasksList user tasks
GET/api/v1/tasks/{id}Get task details
POST/api/v1/tasks/{id}/claimClaim task
POST/api/v1/tasks/{id}/completeComplete task
POST/api/v1/tasks/{id}/delegateDelegate task

Access Management API

MethodEndpointPurpose
GET/api/v1/usersList users
GET/api/v1/users/{id}Get user
POST/api/v1/usersCreate user
PUT/api/v1/users/{id}Update user
DELETE/api/v1/users/{id}Delete user
GET/api/v1/rolesList roles
GET/api/v1/roles/{id}Get role
POST/api/v1/rolesCreate role
PUT/api/v1/roles/{id}Update role
GET/api/v1/groupsList groups
POST/api/v1/groupsCreate group

Validation API

MethodEndpointPurpose
POST/api/v1/validate/sdg-sourceValidate SDG source config

WebSocket

Used for real-time observability streaming:


Error Handling

class ApiError extends Error {
status: number;
fieldErrors: FieldError[]; // { field, code, message }
isValidationError: boolean; // true for 422
}
  • Global: RouteErrorPage as errorElement on all routes
  • Component-level: ErrorBoundary for React render errors
  • API-level: Each service handles errors via toast notifications (Sonner)