Lucror Analytics — Reference
For detailed API documentation and to test the endpoints interactively, visit the Swagger UI: https://data.sqn.lucroranalytics.com/swagger/index.html
The SQN External Data API is a REST API for retrieving SQN credit scores — C-Scores (issuer level) and V-Scores (issue / ISIN level) — either on the latest snapshot date or as a time series over a date range. Authenticate once for a bearer token, then call the data endpoints below.
Access is granted per account. Your account must be enabled for external data (claim HasExternalDataAccess) and, per score type, for C-Score and/or V-Score data. To request an account or additional entitlements, contact sqnsupport@lucroranalytics.com.
inferredCScore) — returned as "Y"/"N"; Inferred C-Scores extend SQN quality assessment to issuers without liquid single-name CDS, using synthetic CDS from S&P Global Market Intelligence.issuer parameter.This guide will walk you through the steps to use the AuthenticateClient endpoint using Postman.
https://data.sqn.lucroranalytics.comOpen the Postman application on your machine.
AuthenticateClient endpoint:
POST https://data.sqn.lucroranalytics.com/data/authenticate/client
Key: Content-Type Value: application/json
{
"Username": "email@mail.com",
"Password": "pass****"
}
Click on the Send button to send the request.
After sending the request, you should see a response from the server. If the authentication is successful (HTTP 200), you will receive a JSON response containing the authentication token. Example response:
{
"Username": "email@mail.com",
"Token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
If the supplied credentials are incorrect, the endpoint returns HTTP 401 Unauthorized; a genuine server-side problem returns HTTP 500 Internal Server Error. Both are returned as a ProblemDetails body (application/problem+json) whose detail field carries the message (“Invalid username or password.” or “Unable to authenticate client.”).
Copy the token from the response and use it in the Authorization header for subsequent requests to authenticate your API calls.
Key: Authorization Value: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
Once authenticated, you can use the following GET endpoints to retrieve data. Ensure that the token is included in the Authorization header. Each endpoint has a limit of 10 requests per second.
The issuer parameter on the C-Score and V-Score endpoints is matched exactly, so use this endpoint to find the valid values. Only issuers with scored bonds on the most recent snapshot date are listed — everything it returns is queryable.
Endpoint: GET /data/issuers?search={search}&correlationId={correlationId}
Parameters:
:text). Omit to list every available issuer. Partial matching is supported here — use it to look a name up, then pass the exact value to the score endpoints.Description: Returns one row per issuer. The issuer field is the exact value the score endpoints' issuer parameter accepts, so it can be passed straight back. issuerName is the full legal name, for display only — it is not accepted by the issuer parameter.
Sample response (values illustrative):
[
{
"issuer": "Pfizer Inc",
"issuerName": "Pfizer Inc."
},
{
"issuer": "Pepsico Inc",
"issuerName": "PepsiCo, Inc."
}
]
This endpoint returns no score data, so it requires only that your account is enabled for C-Score or V-Score data, and it does not consume the distinct-ISIN quota.
Score access: access to C-Score data is controlled per account. These endpoints require your account to be enabled for C-Score data; if it is not, the request is rejected with 403 Forbidden.
Endpoint: GET /data/issuer/cscore/latest?issuer={issuerName}&correlationId={correlationId}
Parameters:
:text). Partial names are no longer matched and return 404 — use /data/issuers to look up valid values. Omit to return all eligible issuers, subject to the response row limit below.Description: Returns C-Score data on the most recent snapshot date that has data — one row per issuer. Omit issuer for all eligible issuers, or supply it to filter to a single issuer.
Sample response (values illustrative):
[
{
"date": "2025-04-01",
"issuerName": "ACME",
"issuerCScore": 4.20,
"inferredCScore": "N"
}
]
Endpoint: GET /data/issuer/cscore/timeseries?issuer={issuerName}&start={startDate}&end={endDate}&correlationId={correlationId}
Parameters:
:text). Partial names are no longer matched and return 404 — use /data/issuers to look up valid values. Omit to return all eligible issuers, subject to the response row limit below.:date yyyy-MM-dd).:date yyyy-MM-dd). Must be on or after start, and the range must not exceed your account's configured limit (1–365 days; 365 by default).Description: Returns one row per (issuer, snapshot date) in the supplied range.
Throttle and quota: the global per-IP rate limit of 10 requests/second applies. On the time-series endpoint, the date range may not exceed your account's configured limit (1–365 days; 365 by default). A single response may not exceed 100,000 rows; a request that would return more is rejected with 400, and you should narrow it with the issuer parameter or a shorter date range. Note the row count is driven by how many bonds an issuer has, not by the issuer count — a large issuer over a full year can exceed the limit on its own, while all issuers on a single snapshot date comfortably fit. There is no per-user distinct-issuer quota (unlike the distinct-ISIN quota on the issue endpoints).
Score access: access to V-Score data is controlled per account. These endpoints require your account to be enabled for V-Score data; if it is not, the request is rejected with 403 Forbidden.
Endpoint: GET /data/issuer/vscore/latest?issuer={issuerName}&correlationId={correlationId}
Parameters:
:text). Partial names are no longer matched and return 404 — use /data/issuers to look up valid values. Omit to return all eligible issuers, subject to the response row limit below.Description: Returns V-Score data on the most recent snapshot date that has data — one row per issue (ISIN). Omit issuer for all eligible issuers, or supply it to filter to a single issuer.
Sample response (values illustrative):
[
{
"date": "2025-04-01",
"isin": "US1234567890",
"issueVScore": 3.10,
"issueVScoreI": 3.05
}
]
Endpoint: GET /data/issuer/vscore/timeseries?issuer={issuerName}&start={startDate}&end={endDate}&correlationId={correlationId}
Parameters:
:text). Partial names are no longer matched and return 404 — use /data/issuers to look up valid values. Omit to return all eligible issuers, subject to the response row limit below.:date yyyy-MM-dd).:date yyyy-MM-dd). Must be on or after start, and the range must not exceed your account's configured limit (1–365 days; 365 by default).Description: Returns one row per (issue, snapshot date) in the supplied range.
Throttle and quota: the global per-IP rate limit of 10 requests/second applies. On the time-series endpoint, the date range may not exceed your account's configured limit (1–365 days; 365 by default). A single response may not exceed 100,000 rows; a request that would return more is rejected with 400, and you should narrow it with the issuer parameter or a shorter date range. Note the row count is driven by how many bonds an issuer has, not by the issuer count — a large issuer over a full year can exceed the limit on its own, while all issuers on a single snapshot date comfortably fit. There is no per-user distinct-issuer quota (unlike the distinct-ISIN quota on the issue endpoints).
These endpoints take one or more ISINs and return each issue's issuer C-Score and issue V-Scores in a single response. Multiple ISINs may be supplied as a comma-separated list (up to 50 per request). Each response row contains date, isin, issuerName, issuerCScore, inferredCScore (Y/N), issueVScore, and issueVScoreI.
Score access: access to C-Score and V-Score data is controlled per account. The C-Score fields (issuerCScore, inferredCScore) are returned only if your account is enabled for C-Score data, and the V-Score fields (issueVScore, issueVScoreI) only if your account is enabled for V-Score data. If your account is enabled for only one, the fields you are not entitled to are returned as null. If your account is enabled for neither, the request is rejected with 403 Forbidden.
Endpoint: GET /data/issue/scores/timeseries?isin={isin}&start={startDate}&end={endDate}&correlationId={correlationId}
Parameters:
:text). e.g. US1234567890,US0987654321.:date yyyy-MM-dd).:date yyyy-MM-dd). Must be on or after start, and the range must not exceed your account's configured limit (1–365 days; 365 by default).Description: Returns one row per (ISIN, snapshot date) in the supplied range, each containing the issuer C-Score and issue V-Scores.
Endpoint: GET /data/issue/scores/latest?isin={isin}&correlationId={correlationId}
Parameters:
:text). e.g. US1234567890,US0987654321.Description: Returns the issue scores on the most recent snapshot date that has data across the requested ISINs — one row per ISIN that has data on that date. ISINs with no data on the latest snapshot date are omitted, and an empty array is returned if none of the requested ISINs have data.
Throttle and quota: in addition to the global per-IP rate limit (10 requests/second), the issue endpoints enforce a per-user cap of 2,000 distinct ISINs queried within a rolling 1-year window. Re-querying an ISIN already counted in that window does not consume additional quota; each new ISIN in a request counts once. A maximum of 50 ISINs may be supplied per request, and the time-series date range may not exceed your account's configured limit (1–365 days; 365 by default).
These are essential for tracking individual requests through the system for debugging and tracing purposes. Always provide a correlationId if available, as it makes it easier to find and track logs if issues arise.
For all endpoints that require date parameters, use the yyyy-MM-dd format.
Authentication is bearer-token only. Send the JWT from /data/authenticate/client in the Authorization: Bearer <token> header on every data request. Cookies are not used. If the token is missing or invalid, the endpoint returns 401 with a ProblemDetails body.
Every error is returned as an RFC 9457 ProblemDetails body with content type application/problem+json. The human-readable message is in the detail field, alongside status, title, and a traceId. Example:
{
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.4",
"title": "Not Found",
"status": 404,
"detail": "No issuer found matching 'NOPE'. Check the Markit short name and retry.",
"traceId": "00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01"
}
issuer or a shorter date range); invalid ISIN format or more than 50 ISINs on the issue endpoints; end date before start date; or a date range exceeding your account's configured limit./data/authenticate/client, the supplied username or password is incorrect. On data endpoints, the bearer token is missing or invalid.issuer short name did not match exactly. Matching is now exact — a partial or substring name that previously returned results now returns 404, and the detail field names the offending value. Use /data/issuers?search= to find the exact short name.Retry-After header (in seconds)./data/authenticate/client). This will be logged with details if it occurs.The system logs all requests and responses along with any issues encountered. This helps with debugging if anything unexpected happens.