Get report download URL
curl --request GET \
--url https://api.wavynode.com/v1/reports/{reportId} \
--header 'x-api-key: <api-key>'import requests
url = "https://api.wavynode.com/v1/reports/{reportId}"
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.wavynode.com/v1/reports/{reportId}', 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.wavynode.com/v1/reports/{reportId}",
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.wavynode.com/v1/reports/{reportId}"
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.wavynode.com/v1/reports/{reportId}")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.wavynode.com/v1/reports/{reportId}")
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{
"success": true,
"data": {
"name": "<string>",
"signedUrl": "<string>",
"period": "<string>"
}
}{
"error": "<string>",
"message": "<string>"
}Reports
Get report download URL
Retrieves a signed URL to download a specific compliance report.
GET
/
reports
/
{reportId}
Get report download URL
curl --request GET \
--url https://api.wavynode.com/v1/reports/{reportId} \
--header 'x-api-key: <api-key>'import requests
url = "https://api.wavynode.com/v1/reports/{reportId}"
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.wavynode.com/v1/reports/{reportId}', 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.wavynode.com/v1/reports/{reportId}",
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.wavynode.com/v1/reports/{reportId}"
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.wavynode.com/v1/reports/{reportId}")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.wavynode.com/v1/reports/{reportId}")
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{
"success": true,
"data": {
"name": "<string>",
"signedUrl": "<string>",
"period": "<string>"
}
}{
"error": "<string>",
"message": "<string>"
}{reportId} is the report file name (e.g. 12345.xml), not an internal ID. Reports live in project storage under a path like mx/<projectId>/2026-04/<userId>.xml (México) or co/<projectId>/2026-04/<userId>.txt (Colombia).
Use the projectId, countryCode, and period query parameters so the full storage path can be reconstructed:
curl -H "x-api-key: ApiKey wavy_your_api_key_here" \
"https://api.wavynode.com/v1/reports/12345.xml?projectId=$PROJECT_ID&countryCode=MX&period=2026-04"
path query parameter instead of using {reportId}:
curl -H "x-api-key: ApiKey wavy_your_api_key_here" \
"https://api.wavynode.com/v1/reports/download?path=mx/$PROJECT_ID/2026-04/12345.xml"
The signed URL is temporary (valid for 30 days). Use it to download the report file.
Authorizations
Enter the full value with the ApiKey prefix. Example: ApiKey wavy_your-api-key. The prefix is required for authentication.
Path Parameters
The report file name (e.g. 12345.xml), or any value when using the path query parameter
Query Parameters
Full storage path of the report (e.g. mx/1/2026-04/12345.xml). Takes precedence over reportId.
Project ID, used to reconstruct the storage path when only a file name is provided
Country code (MX, CO), used to reconstruct the storage path when only a file name is provided
Report period in YYYY-MM format, used to reconstruct the storage path when only a file name is provided