curl --request GET \
--url https://api.eu.linqalpha.com/v2/documents/presigned_urls \
--header 'X-API-KEY: <api-key>'import requests
url = "https://api.eu.linqalpha.com/v2/documents/presigned_urls"
headers = {"X-API-KEY": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-KEY': '<api-key>'}};
fetch('https://api.eu.linqalpha.com/v2/documents/presigned_urls', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.eu.linqalpha.com/v2/documents/presigned_urls",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-KEY: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.eu.linqalpha.com/v2/documents/presigned_urls"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-KEY", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.eu.linqalpha.com/v2/documents/presigned_urls")
.header("X-API-KEY", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.eu.linqalpha.com/v2/documents/presigned_urls")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-KEY"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"error": null,
"payload": {
"documents": [
{
"document_id": "123e4567-e89b-12d3-a456-426614174000",
"document_name": "document.pdf",
"ticker": "AAPL",
"doc_type": "filing",
"doc_sub_type": "10-K",
"source": null,
"fiscal_date": "2025-12-31",
"calendar_date": "2026-01-30",
"published_at": "2026-01-30T16:00:00Z",
"presigned_url": "https://example.s3.amazonaws.com/...",
"expiration_seconds": null
}
],
"total_count": 8234,
"page": 1,
"per_page": 20,
"has_more": true,
"skipped_count": 0
}
}{
"error": {
"code": "INVALID_REQUEST_BODY",
"msg": "At least one of tickers, stock_ids, or document_ids is required for rms search",
"message": "At least one of tickers, stock_ids, or document_ids is required for rms search"
},
"payload": null
}{
"error": {
"code": "INVALID_REQUEST_BODY",
"msg": "query is required and must be a string",
"message": "query is required and must be a string"
},
"payload": "<unknown>"
}Batch Presigned URLs V2
Generates temporary presigned URLs for multiple documents. Supports both external documents and RMS documents via the search_type parameter.
Two modes:
- By document IDs (RMS only): Pass
document_idsto get presigned URLs for specific documents from search/analytics references. - By filters: Pass
tickers,doc_type, etc. to browse and get presigned URLs.
For platform API keys, pass organization_id to specify which org to query.
curl --request GET \
--url https://api.eu.linqalpha.com/v2/documents/presigned_urls \
--header 'X-API-KEY: <api-key>'import requests
url = "https://api.eu.linqalpha.com/v2/documents/presigned_urls"
headers = {"X-API-KEY": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-KEY': '<api-key>'}};
fetch('https://api.eu.linqalpha.com/v2/documents/presigned_urls', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.eu.linqalpha.com/v2/documents/presigned_urls",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-KEY: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.eu.linqalpha.com/v2/documents/presigned_urls"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-KEY", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.eu.linqalpha.com/v2/documents/presigned_urls")
.header("X-API-KEY", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.eu.linqalpha.com/v2/documents/presigned_urls")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-KEY"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"error": null,
"payload": {
"documents": [
{
"document_id": "123e4567-e89b-12d3-a456-426614174000",
"document_name": "document.pdf",
"ticker": "AAPL",
"doc_type": "filing",
"doc_sub_type": "10-K",
"source": null,
"fiscal_date": "2025-12-31",
"calendar_date": "2026-01-30",
"published_at": "2026-01-30T16:00:00Z",
"presigned_url": "https://example.s3.amazonaws.com/...",
"expiration_seconds": null
}
],
"total_count": 8234,
"page": 1,
"per_page": 20,
"has_more": true,
"skipped_count": 0
}
}{
"error": {
"code": "INVALID_REQUEST_BODY",
"msg": "At least one of tickers, stock_ids, or document_ids is required for rms search",
"message": "At least one of tickers, stock_ids, or document_ids is required for rms search"
},
"payload": null
}{
"error": {
"code": "INVALID_REQUEST_BODY",
"msg": "query is required and must be a string",
"message": "query is required and must be a string"
},
"payload": "<unknown>"
}search_type parameter.
Search Type
| search_type | Source | Supported filters |
|---|---|---|
external (default) | External documents (filings, transcripts, IR slides, news) | tickers, stock_ids, doc_type, doc_sub_type, fiscal_period, calendar_period |
rms | RMS documents | tickers, stock_ids, doc_type, doc_sub_type, fiscal_period, calendar_period, document_ids |
document_ids is RMS only — external does not support batch by IDs.
The valid values for doc_type and doc_sub_type differ by search_type and by organization. Refer to your organization’s specific documentation for available values.
Quick Start
curl --request GET \
--url 'https://api.eu.linqalpha.com/v2/documents/presigned_urls?tickers=AAPL&doc_type=earnings_call&per_page=20' \
--header 'X-API-KEY: <api-key>'
curl --request GET \
--url 'https://api.eu.linqalpha.com/v2/documents/presigned_urls?search_type=rms&organization_id=<org-id>&tickers=MSFT&per_page=20' \
--header 'X-API-KEY: <api-key>'
curl --request GET \
--url 'https://api.eu.linqalpha.com/v2/documents/presigned_urls?search_type=rms&organization_id=<org-id>&document_ids=<id1>&document_ids=<id2>' \
--header 'X-API-KEY: <api-key>'
Minimum Filter Requirements
- external: at least one of
tickersorstock_ids - rms: at least one of
tickers,stock_ids, ordocument_ids
organization_id to specify which org to query. If omitted, defaults to the API key’s primary organization.Authorizations
Query Parameters
Document source. external (default) returns external documents. rms returns documents from your Research Management System (RMS).
external, rms Organization ID. Recommended for search_type=rms and required for platform API keys.
Ticker symbol(s). Use multiple params for multiple tickers (e.g., ?tickers=AAPL&tickers=MSFT).
Stock ID(s). Can be used instead of or together with tickers.
Document ID(s) for batch lookup. RMS only — not supported for search_type=external.
Document type filter. Valid values differ by search_type and organization.
Document sub-type filter. Valid values differ by search_type and organization.
Fiscal period filter. Use nested notation: fiscal_period[start_time][year]=2024&fiscal_period[start_time][quarter]=1.
Show child attributes
Show child attributes
Calendar period filter. Use nested notation: calendar_period[start_time][year]=2025&calendar_period[start_time][month]=1.
Show child attributes
Show child attributes
Page number (default: 1)
x >= 1Results per page (default: 20, max: 200)
1 <= x <= 200