Asia Private Markets Data — Endpoints
Base URL: https://datafeed.ub-speeda.com/asia/private-markets/v1
Company Endpoints
Search Companies
Search and filter companies with pagination support.
GET /companies
Required Scopes: company:read, country access scope
Parameters
| Name | In | Type | Required | Default | Description |
|---|---|---|---|---|---|
country | query | string | Yes | — | ISO 3166-1 alpha-3 country code, or ALL |
identifier | query | string | No | — | Filter by registration number or other ID |
page | query | integer | No | 1 | Page number |
page_size | query | integer | No | 25 | Items per page |
sort | query | string | No | — | Sort field |
Example Request
- cURL
- Python
- Java
- Node.js
- Kotlin
- Go
curl -X GET "https://datafeed.ub-speeda.com/asia/private-markets/v1/companies?country=SGP&page=1&page_size=25" \
-H "Authorization: Bearer {access_token}"
import requests
response = requests.get(
"https://datafeed.ub-speeda.com/asia/private-markets/v1/companies",
headers={"Authorization": "Bearer {access_token}"},
params={"country": "SGP", "page": 1, "page_size": 25},
)
print(response.json())
import java.net.URI;
import java.net.http.*;
HttpResponse<String> response = HttpClient.newHttpClient().send(
HttpRequest.newBuilder()
.uri(URI.create("https://datafeed.ub-speeda.com/asia/private-markets/v1/companies?country=SGP&page=1&page_size=25"))
.header("Authorization", "Bearer {access_token}")
.GET()
.build(),
HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
const response = await fetch(
"https://datafeed.ub-speeda.com/asia/private-markets/v1/companies?country=SGP&page=1&page_size=25",
{ headers: { Authorization: "Bearer {access_token}" } }
);
console.log(await response.json());
import java.net.URI
import java.net.http.*
val response = HttpClient.newHttpClient().send(
HttpRequest.newBuilder()
.uri(URI.create("https://datafeed.ub-speeda.com/asia/private-markets/v1/companies?country=SGP&page=1&page_size=25"))
.header("Authorization", "Bearer {access_token}")
.GET()
.build(),
HttpResponse.BodyHandlers.ofString()
)
println(response.body())
import (
"fmt"
"io"
"net/http"
)
req, _ := http.NewRequest("GET", "https://datafeed.ub-speeda.com/asia/private-markets/v1/companies?country=SGP&page=1&page_size=25", nil)
req.Header.Set("Authorization", "Bearer {access_token}")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
Example Response
{
"data": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"registrationNumber": "201901234A",
"companyName": "Example Pte. Ltd.",
"businessDescription": "Software development and consulting services",
"registeredAddress": {
"line1": "1 Raffles Place",
"line2": "#20-01",
"city": "Singapore",
"country": "SGP",
"postalCode": "048616"
},
"isCompanyHqInAddressCountry": true,
"telephoneNumber": "+65-6123-4567",
"websiteUrl": "https://example.com",
"representatives": [
{
"fullName": "John Doe",
"role": "DIRECTOR",
"email": "john.doe@example.com",
"phone": "+65-9123-4567",
"dob": "1980-01-15"
}
],
"legalStructure": "Private Limited Company",
"dateOfRegistration": "2019-03-15",
"createdAt": "2024-01-10T08:30:00Z",
"updatedAt": "2025-06-20T14:15:00Z",
"employees": {
"employeeCountType": "REPORTED",
"nonConsolidated": {
"employeeCount": 250,
"numberOfOfficers": 5,
"employeeRange": null,
"updatedAt": "2025-06-20T14:15:00Z"
},
"consolidated": null
},
"industryClassifications": [
{
"standard": "SSIC",
"codes": [
{ "code": "62011", "description": "Software development" }
]
}
]
}
],
"page": 1,
"pageSize": 25,
"total": 800000
}
Get Company by ID
Retrieve a specific company by its unique identifier.
GET /companies/{companyId}
Required Scopes: company:read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
companyId | path | UUID | Yes | Company unique identifier |
Example Request
- cURL
- Python
- Java
- Node.js
- Kotlin
- Go
curl -X GET "https://datafeed.ub-speeda.com/asia/private-markets/v1/companies/550e8400-e29b-41d4-a716-446655440000" \
-H "Authorization: Bearer {access_token}"
import requests
response = requests.get(
"https://datafeed.ub-speeda.com/asia/private-markets/v1/companies/550e8400-e29b-41d4-a716-446655440000",
headers={"Authorization": "Bearer {access_token}"},
)
print(response.json())
import java.net.URI;
import java.net.http.*;
HttpResponse<String> response = HttpClient.newHttpClient().send(
HttpRequest.newBuilder()
.uri(URI.create("https://datafeed.ub-speeda.com/asia/private-markets/v1/companies/550e8400-e29b-41d4-a716-446655440000"))
.header("Authorization", "Bearer {access_token}")
.GET()
.build(),
HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
const response = await fetch(
"https://datafeed.ub-speeda.com/asia/private-markets/v1/companies/550e8400-e29b-41d4-a716-446655440000",
{ headers: { Authorization: "Bearer {access_token}" } }
);
console.log(await response.json());
import java.net.URI
import java.net.http.*
val response = HttpClient.newHttpClient().send(
HttpRequest.newBuilder()
.uri(URI.create("https://datafeed.ub-speeda.com/asia/private-markets/v1/companies/550e8400-e29b-41d4-a716-446655440000"))
.header("Authorization", "Bearer {access_token}")
.GET()
.build(),
HttpResponse.BodyHandlers.ofString()
)
println(response.body())
import (
"fmt"
"io"
"net/http"
)
req, _ := http.NewRequest("GET", "https://datafeed.ub-speeda.com/asia/private-markets/v1/companies/550e8400-e29b-41d4-a716-446655440000", nil)
req.Header.Set("Authorization", "Bearer {access_token}")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
Returns a single Company object (same schema as search results). Returns 404 if not found.
Financials Endpoints
Get Company Financials
Retrieve financial statements for a single company, organized by year.
GET /financials/companies/{companyId}
Required Scopes: financials:read
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
companyId | path | UUID | Yes | Company unique identifier |
year | query | integer | No | Filter by fiscal year (omit for all years) |
Example Request
- cURL
- Python
- Java
- Node.js
- Kotlin
- Go
curl -X GET "https://datafeed.ub-speeda.com/asia/private-markets/v1/financials/companies/550e8400-e29b-41d4-a716-446655440000?year=2024" \
-H "Authorization: Bearer {access_token}"
import requests
response = requests.get(
"https://datafeed.ub-speeda.com/asia/private-markets/v1/financials/companies/550e8400-e29b-41d4-a716-446655440000",
headers={"Authorization": "Bearer {access_token}"},
params={"year": 2024},
)
print(response.json())
import java.net.URI;
import java.net.http.*;
HttpResponse<String> response = HttpClient.newHttpClient().send(
HttpRequest.newBuilder()
.uri(URI.create("https://datafeed.ub-speeda.com/asia/private-markets/v1/financials/companies/550e8400-e29b-41d4-a716-446655440000?year=2024"))
.header("Authorization", "Bearer {access_token}")
.GET()
.build(),
HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
const response = await fetch(
"https://datafeed.ub-speeda.com/asia/private-markets/v1/financials/companies/550e8400-e29b-41d4-a716-446655440000?year=2024",
{ headers: { Authorization: "Bearer {access_token}" } }
);
console.log(await response.json());
import java.net.URI
import java.net.http.*
val response = HttpClient.newHttpClient().send(
HttpRequest.newBuilder()
.uri(URI.create("https://datafeed.ub-speeda.com/asia/private-markets/v1/financials/companies/550e8400-e29b-41d4-a716-446655440000?year=2024"))
.header("Authorization", "Bearer {access_token}")
.GET()
.build(),
HttpResponse.BodyHandlers.ofString()
)
println(response.body())
import (
"fmt"
"io"
"net/http"
)
req, _ := http.NewRequest("GET", "https://datafeed.ub-speeda.com/asia/private-markets/v1/financials/companies/550e8400-e29b-41d4-a716-446655440000?year=2024", nil)
req.Header.Set("Authorization", "Bearer {access_token}")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
Example Response
{
"companyId": "550e8400-e29b-41d4-a716-446655440000",
"years": [
{
"year": 2024,
"currency": "SGD",
"periodType": "ANNUAL",
"period": "FY4",
"periodYear": 2024,
"financialPeriodStart": "2024-01-01",
"financialPeriodEnd": "2024-12-31",
"financialType": "FULL",
"statements": [
{
"statementType": "INCOME_STATEMENT",
"consolidationType": "CONSOLIDATED",
"metrics": [
{ "name": "Revenue", "value": 150000000 },
{ "name": "Cost of Goods Sold", "value": 90000000 },
{ "name": "Gross Profit", "value": 60000000 },
{ "name": "Operating Expenses", "value": 35000000 },
{ "name": "EBITDA", "value": 30000000 },
{ "name": "EBIT", "value": 25000000 },
{ "name": "Net Income", "value": 18000000 }
]
},
{
"statementType": "BALANCE_SHEET",
"consolidationType": "CONSOLIDATED",
"metrics": [
{ "name": "Total Assets", "value": 500000000 },
{ "name": "Total Liabilities", "value": 200000000 },
{ "name": "Cash and equivalents", "value": 75000000 },
{ "name": "Inventory", "value": 30000000 },
{ "name": "Accounts Receivable", "value": 45000000 }
]
},
{
"statementType": "CASH_FLOW",
"consolidationType": "CONSOLIDATED",
"metrics": [
{ "name": "Operating Cash Flow", "value": 22000000 },
{ "name": "Investing Cash Flow", "value": -15000000 },
{ "name": "Financing Cash Flow", "value": -5000000 }
]
}
]
}
]
}
Get Multiple Company Financials
Retrieve financial data for multiple companies. Companies can be specified using companyIds OR identifiers (or both). When both are provided, results are combined using OR logic (union). The year parameter is optional — if not specified, financials for all available years are returned.
POST /financials
Required Scopes: financials:read
Request Body
| Name | Type | Required | Description |
|---|---|---|---|
companyIds | array of strings | No | List of company UUIDs |
identifiers | array of strings | No | List of registration numbers |
year | integer | No | Filter by fiscal year. If omitted, all available years are returned |
At least one of
companyIdsoridentifiersmust be provided.
Example Request
- cURL
- Python
- Java
- Node.js
- Kotlin
- Go
curl -X POST "https://datafeed.ub-speeda.com/asia/private-markets/v1/financials" \
-H "Authorization: Bearer {access_token}" \
-H "Content-Type: application/json" \
-d '{
"companyIds": ["550e8400-e29b-41d4-a716-446655440000", "660e8400-e29b-41d4-a716-446655440001"],
"identifiers": ["reg123"],
"year": 2024
}'
import requests
response = requests.post(
"https://datafeed.ub-speeda.com/asia/private-markets/v1/financials",
headers={"Authorization": "Bearer {access_token}"},
json={
"companyIds": ["550e8400-e29b-41d4-a716-446655440000", "660e8400-e29b-41d4-a716-446655440001"],
"identifiers": ["reg123"],
"year": 2024,
},
)
print(response.json())
import java.net.URI;
import java.net.http.*;
String body = """
{
"companyIds": ["550e8400-e29b-41d4-a716-446655440000", "660e8400-e29b-41d4-a716-446655440001"],
"identifiers": ["reg123"],
"year": 2024
}
""";
HttpResponse<String> response = HttpClient.newHttpClient().send(
HttpRequest.newBuilder()
.uri(URI.create("https://datafeed.ub-speeda.com/asia/private-markets/v1/financials"))
.header("Authorization", "Bearer {access_token}")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(body))
.build(),
HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
const response = await fetch("https://datafeed.ub-speeda.com/asia/private-markets/v1/financials", {
method: "POST",
headers: {
Authorization: "Bearer {access_token}",
"Content-Type": "application/json",
},
body: JSON.stringify({
companyIds: ["550e8400-e29b-41d4-a716-446655440000", "660e8400-e29b-41d4-a716-446655440001"],
identifiers: ["reg123"],
year: 2024,
}),
});
console.log(await response.json());
import java.net.URI
import java.net.http.*
val body = """
{
"companyIds": ["550e8400-e29b-41d4-a716-446655440000", "660e8400-e29b-41d4-a716-446655440001"],
"identifiers": ["reg123"],
"year": 2024
}
""".trimIndent()
val response = HttpClient.newHttpClient().send(
HttpRequest.newBuilder()
.uri(URI.create("https://datafeed.ub-speeda.com/asia/private-markets/v1/financials"))
.header("Authorization", "Bearer {access_token}")
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(body))
.build(),
HttpResponse.BodyHandlers.ofString()
)
println(response.body())
import (
"fmt"
"io"
"net/http"
"strings"
)
body := `{
"companyIds": ["550e8400-e29b-41d4-a716-446655440000", "660e8400-e29b-41d4-a716-446655440001"],
"identifiers": ["reg123"],
"year": 2024
}`
req, _ := http.NewRequest("POST", "https://datafeed.ub-speeda.com/asia/private-markets/v1/financials", strings.NewReader(body))
req.Header.Set("Authorization", "Bearer {access_token}")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
respBody, _ := io.ReadAll(resp.Body)
fmt.Println(string(respBody))
Example Response
{
"data": [
{
"companyId": "550e8400-e29b-41d4-a716-446655440000",
"years": [
{
"year": 2024,
"currency": "SGD",
"periodType": "ANNUAL",
"period": "FY4",
"statements": [...]
}
]
}
],
"page": 1,
"pageSize": 25,
"total": 2
}