API Documentation

WF Release Hub API

RESTful API endpoints for accessing product and release data programmatically. Perfect for integrations, automation, and building custom tooling.

Base URL & Authentication
All API endpoints are accessible at the base URL. No authentication required for read-only access.
Base URL:
https://release.wadhwanifoundation.org/api
No API key required
JSON responses

API Endpoints

Products API
Access product information and metadata
GET
/api/products
Get all products

Returns a list of all products with their basic information and latest release data.

// Response
[
  {
    "id": "wadhwani-skilling-web",
    "name": "Wadhwani Skilling Web",
    "description": "Main web application...",
    "latestRelease": { ... }
  }
]
GET
/api/products/[productId]
Get specific product

Returns detailed information about a specific product including all releases.

Example:
GET /api/products/wadhwani-skilling-web
POST
/api/products
Create new product

Creates a new product with the provided information and GitHub repository details.

// Request Body
{
  "id": "new-product",
  "name": "New Product",
  "description": "Product description",
  "github": {
    "owner": "wadhwani-operating-foundation",
    "name": "repo-name"
  }
}
Releases API
Access release information, versions, and status updates
GET
/api/releases
Get all releases

Returns all releases across all products with full metadata and content.

// Response
[
  {
    "productId": "wadhwani-skilling-web",
    "version": "v3-8-1",
    "status": "Released",
    "plannedDate": "2025-01-15",
    "content": "Release notes..."
  }
]
GET
/api/releases/[productId]/[releaseId]
Get specific release

Returns detailed information about a specific release including full content.

Example:
GET /api/releases/wadhwani-skilling-web/v3-8-1-1758725821902
POST
/api/releases
Create new release

Creates a new release with the provided information, features, and tasks.

// Request Body
{
  "productId": "wadhwani-skilling-web",
  "version": "1.2.3",
  "title": "Release title",
  "status": "Planned",
  "plannedDate": "2025-03-15",
  "features": [],
  "bugFixes": []
}
User Management API
Manage user notifications and email lists for products
PUT
/api/products/[productId]/users
Update user list

Updates the list of users who receive notifications for a product's releases.

// Request Body
{
  "users": [
    "user1@example.com",
    "user2@example.com"
  ]
}
Sync API
Synchronize releases from GitHub repositories
POST
/api/sync/github-releases
Sync GitHub releases

Synchronizes GitHub releases for specified products, creating markdown files for new releases.

// Request Body
{
  "productIds": [
    "wadhwani-skilling-web",
    "genie-entrepreneur-web"
  ],
  "dryRun": false
}
Webhook API
Integration endpoints for GitHub and Jenkins automation
POST
/api/webhooks/github
GitHub release webhook

Receives GitHub webhook events to automatically import releases and notify users. Configure in GitHub repository settings → Webhooks.

Event: Release published
Content-Type: application/json
POST
/api/webhooks/jenkins
Jenkins build webhook

Receives Jenkins build notifications to trigger release notifications. Add to Jenkins pipeline post-success actions.

// Request Body
{
  "repository": {
    "owner": "wadhwani-operating-foundation",
    "name": "repo-name"
  },
  "ref": "refs/heads/main",
  "commits": []
}
Response Format
Standard response structure and data types

Product Object

{
  "id": string,
  "name": string,
  "description": string,
  "directory": string,
  "github": GitHubRepo,
  "users": string[],
  "releases": Release[],
  "latestRelease": Release,
  "totalReleases": number
}

Release Object

{
  "productId": string,
  "version": string,
  "title": string,
  "status": string,
  "plannedDate": string,
  "content": string,
  "filename": string
}

GitHubRepo Object

{
  "owner": string,
  "name": string,
  "branch": string,
  "url": string
}

Status Values

Release status can be: "Planned", "In Progress", "Released", or "Cancelled"

Usage Examples

JavaScript / TypeScript
// Fetch all products
const response = await fetch('/api/products')
const products = await response.json()
// Get specific product releases
const productData = await fetch(
  `/api/products/${productId}`
).then(r => r.json())
cURL
# Get all products
curl -X GET \
  "https://release.wadhwanifoundation.org/api/products"
# Get specific release
curl -X GET \
  "https://release.wadhwanifoundation.org/api/releases/wadhwani-skilling-web/v3-8-1-1758725821902"
# Update product users
curl -X PUT \
  "https://release.wadhwanifoundation.org/api/products/wadhwani-skilling-web/users" \
  -H "Content-Type: application/json" \
  -d '{"users":["user@example.com"]}'
Error Handling
Standard HTTP status codes and error response format

Status Codes

200Success
404Not Found
500Server Error

Error Response

{
  "error": "Not found",
  "message": "Product not found",
  "statusCode": 404
}

Need help with integration? Contact our support team for assistance.