curl --request POST \
--url https://clientapi.woku.app/v1/report-subscriptions \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"scopeId": "<string>",
"recipients": [
"<string>"
],
"includeCsv": true,
"locale": "es",
"sendAt": "<string>",
"periodFrom": "<string>",
"periodTo": "<string>"
}
'import requests
url = "https://clientapi.woku.app/v1/report-subscriptions"
payload = {
"scopeId": "<string>",
"recipients": ["<string>"],
"includeCsv": True,
"locale": "es",
"sendAt": "<string>",
"periodFrom": "<string>",
"periodTo": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
scopeId: '<string>',
recipients: ['<string>'],
includeCsv: true,
locale: 'es',
sendAt: '<string>',
periodFrom: '<string>',
periodTo: '<string>'
})
};
fetch('https://clientapi.woku.app/v1/report-subscriptions', 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://clientapi.woku.app/v1/report-subscriptions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'scopeId' => '<string>',
'recipients' => [
'<string>'
],
'includeCsv' => true,
'locale' => 'es',
'sendAt' => '<string>',
'periodFrom' => '<string>',
'periodTo' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://clientapi.woku.app/v1/report-subscriptions"
payload := strings.NewReader("{\n \"scopeId\": \"<string>\",\n \"recipients\": [\n \"<string>\"\n ],\n \"includeCsv\": true,\n \"locale\": \"es\",\n \"sendAt\": \"<string>\",\n \"periodFrom\": \"<string>\",\n \"periodTo\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://clientapi.woku.app/v1/report-subscriptions")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"scopeId\": \"<string>\",\n \"recipients\": [\n \"<string>\"\n ],\n \"includeCsv\": true,\n \"locale\": \"es\",\n \"sendAt\": \"<string>\",\n \"periodFrom\": \"<string>\",\n \"periodTo\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://clientapi.woku.app/v1/report-subscriptions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"scopeId\": \"<string>\",\n \"recipients\": [\n \"<string>\"\n ],\n \"includeCsv\": true,\n \"locale\": \"es\",\n \"sendAt\": \"<string>\",\n \"periodFrom\": \"<string>\",\n \"periodTo\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"statusCode": 400,
"message": [
"email must be a valid email",
"password must be at least 8 characters"
],
"error": "Bad Request"
}Schedule a report by email
Emails the PDF report of a folder (every tool of its subtree, optionally with the CSV) or of one tool to up to 10 recipients outside woku. monthly (1st), biweekly (1st and 16th) and weekly (Mondays) go out at 12:00 UTC with the previous complete period; once goes out at sendAt (or now) with periodFrom/periodTo. Each email is sent as the company and carries a one-click unsubscribe.
curl --request POST \
--url https://clientapi.woku.app/v1/report-subscriptions \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"scopeId": "<string>",
"recipients": [
"<string>"
],
"includeCsv": true,
"locale": "es",
"sendAt": "<string>",
"periodFrom": "<string>",
"periodTo": "<string>"
}
'import requests
url = "https://clientapi.woku.app/v1/report-subscriptions"
payload = {
"scopeId": "<string>",
"recipients": ["<string>"],
"includeCsv": True,
"locale": "es",
"sendAt": "<string>",
"periodFrom": "<string>",
"periodTo": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
scopeId: '<string>',
recipients: ['<string>'],
includeCsv: true,
locale: 'es',
sendAt: '<string>',
periodFrom: '<string>',
periodTo: '<string>'
})
};
fetch('https://clientapi.woku.app/v1/report-subscriptions', 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://clientapi.woku.app/v1/report-subscriptions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'scopeId' => '<string>',
'recipients' => [
'<string>'
],
'includeCsv' => true,
'locale' => 'es',
'sendAt' => '<string>',
'periodFrom' => '<string>',
'periodTo' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://clientapi.woku.app/v1/report-subscriptions"
payload := strings.NewReader("{\n \"scopeId\": \"<string>\",\n \"recipients\": [\n \"<string>\"\n ],\n \"includeCsv\": true,\n \"locale\": \"es\",\n \"sendAt\": \"<string>\",\n \"periodFrom\": \"<string>\",\n \"periodTo\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://clientapi.woku.app/v1/report-subscriptions")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"scopeId\": \"<string>\",\n \"recipients\": [\n \"<string>\"\n ],\n \"includeCsv\": true,\n \"locale\": \"es\",\n \"sendAt\": \"<string>\",\n \"periodFrom\": \"<string>\",\n \"periodTo\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://clientapi.woku.app/v1/report-subscriptions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"scopeId\": \"<string>\",\n \"recipients\": [\n \"<string>\"\n ],\n \"includeCsv\": true,\n \"locale\": \"es\",\n \"sendAt\": \"<string>\",\n \"periodFrom\": \"<string>\",\n \"periodTo\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"statusCode": 400,
"message": [
"email must be a valid email",
"password must be at least 8 characters"
],
"error": "Bad Request"
}Authorizations
Company secret API key.
Body
folder, woku, nps, csat, ces Folder or tool id
monthly (1st), biweekly (1st and 16th), weekly (Mondays) at 12:00 UTC with the previous complete period, or once
monthly, biweekly, weekly, once Recipient emails, 1 to 10; they need no woku account
Folder only: also attach the CSV
es, en once only: when to send it (ISO); absent = now
once only: period start (ISO)
once only: period end (ISO, exclusive)
Response
Scheduled report created