Introduction
This documentation aims to provide all the information you need to work with our API.
Authenticating requests
To authenticate requests, include an Authorization header with the value "Bearer {FIREBASE_ID_TOKEN}".
All authenticated endpoints are marked with a requires authentication badge in the documentation below.
Send a Firebase Authentication ID token as Authorization: Bearer {FIREBASE_ID_TOKEN}.
Account
Lookup accounts
Example request:
curl --request GET \
--get "https://api.pantropica.org/api/v1/account/architecto" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"emailAddress\": \"b\"
}"
const url = new URL(
"https://api.pantropica.org/api/v1/account/architecto"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"emailAddress": "b"
};
fetch(url, {
method: "GET",
headers,
body: JSON.stringify(body),
}).then(response => response.json());Example response (500):
Show headers
cache-control: no-cache, private
content-type: application/json
x-ratelimit-limit: 30
x-ratelimit-remaining: 24
access-control-allow-origin: *
access-control-allow-methods: GET, POST, PUT, DELETE, OPTIONS
access-control-allow-credentials: true
access-control-max-age: 86400
access-control-allow-headers: Authorization, Content-Type, X-Requested-With
{
"success": false,
"error": "The email address field must be a valid email address."
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Authentication
Firebase Login
Example request:
curl --request POST \
"https://api.pantropica.org/api/v1/login" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"email\": \"user@example.com\",
\"password\": \"password\"
}"
const url = new URL(
"https://api.pantropica.org/api/v1/login"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"email": "user@example.com",
"password": "password"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Firebase refresh
Example request:
curl --request POST \
"https://api.pantropica.org/api/v1/auth/refresh" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"refresh_token\": \"AMf-vByExampleRefreshToken\"
}"
const url = new URL(
"https://api.pantropica.org/api/v1/auth/refresh"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"refresh_token": "AMf-vByExampleRefreshToken"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Breeze
Request an API login code.
Example request:
curl --request POST \
"https://api.pantropica.org/api/v1/login-code/request" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"email\": \"user@example.com\"
}"
const url = new URL(
"https://api.pantropica.org/api/v1/login-code/request"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"email": "user@example.com"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Verify an API login code.
Example request:
curl --request POST \
"https://api.pantropica.org/api/v1/login-code/verify" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"email\": \"user@example.com\",
\"code\": \"123456\"
}"
const url = new URL(
"https://api.pantropica.org/api/v1/login-code/verify"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"email": "user@example.com",
"code": "123456"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Inbound
Endpoints for that handles incomming callbacks.
Process the data
requires authentication
Adds a job to the queue.
Example request:
curl --request POST \
"https://api.pantropica.org/api/v1/inbound" \
--header "Authorization: Bearer {FIREBASE_ID_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"credentials\": {
\"email\": \"customer@example.com\",
\"firstname\": \"Jane\",
\"lastname\": \"Doe\",
\"country\": \"NL\",
\"street\": \"Hoofdstraat 1\",
\"town\": \"Amsterdam\",
\"zipcode\": \"1011 AB\"
},
\"cards\": [
{
\"firstname\": \"Jane\",
\"lastname\": \"Doe\",
\"date_of_birth\": \"1990-01-31\",
\"base64\": \"data:image\\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAB\",
\"type\": \"adult\"
}
],
\"TrxId\": \"1234567890\",
\"PayId\": \"9876543210\"
}"
const url = new URL(
"https://api.pantropica.org/api/v1/inbound"
);
const headers = {
"Authorization": "Bearer {FIREBASE_ID_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"credentials": {
"email": "customer@example.com",
"firstname": "Jane",
"lastname": "Doe",
"country": "NL",
"street": "Hoofdstraat 1",
"town": "Amsterdam",
"zipcode": "1011 AB"
},
"cards": [
{
"firstname": "Jane",
"lastname": "Doe",
"date_of_birth": "1990-01-31",
"base64": "data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAB",
"type": "adult"
}
],
"TrxId": "1234567890",
"PayId": "9876543210"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Newsletter
Endpoints for that handles newsletter subscriptions
Add user
requires authentication
Add and assign a user to the newsletter environment.
Payments
Endpoints for generating payment links based on the given parameters.
Request a payment link
requires authentication
Example request:
curl --request GET \
--get "https://api.pantropica.org/api/v1/payments" \
--header "Authorization: Bearer {FIREBASE_ID_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"serviceId\": \"SL-1234-5678\",
\"amount\": {
\"value\": 2495,
\"currency\": \"EUR\"
},
\"reference\": \"MEMBERSHIP-2026-0001\",
\"paymentMethod\": {
\"id\": 10
},
\"integration\": {
\"test\": true
}
}"
const url = new URL(
"https://api.pantropica.org/api/v1/payments"
);
const headers = {
"Authorization": "Bearer {FIREBASE_ID_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"serviceId": "SL-1234-5678",
"amount": {
"value": 2495,
"currency": "EUR"
},
"reference": "MEMBERSHIP-2026-0001",
"paymentMethod": {
"id": 10
},
"integration": {
"test": true
}
};
fetch(url, {
method: "GET",
headers,
body: JSON.stringify(body),
}).then(response => response.json());Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
access-control-allow-origin: *
access-control-allow-methods: GET, POST, PUT, DELETE, OPTIONS
access-control-allow-credentials: true
access-control-max-age: 86400
access-control-allow-headers: Authorization, Content-Type, X-Requested-With
{
"success": false,
"error": "Invalid or expired token"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Recreatex
Endpoints that interact with the Recreatex API.
Get article prices
Example request:
curl --request GET \
--get "https://api.pantropica.org/api/v1/recreatex/prices" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"Criteria\": {
\"ArticleGroupId\": \"d4420e2f-33bf-ed11-9595-a98758ce176c\",
\"Includes\": {
\"Prices\": true
}
}
}"
const url = new URL(
"https://api.pantropica.org/api/v1/recreatex/prices"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"Criteria": {
"ArticleGroupId": "d4420e2f-33bf-ed11-9595-a98758ce176c",
"Includes": {
"Prices": true
}
}
};
fetch(url, {
method: "GET",
headers,
body: JSON.stringify(body),
}).then(response => response.json());Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
x-ratelimit-limit: 30
x-ratelimit-remaining: 28
access-control-allow-origin: *
access-control-allow-methods: GET, POST, PUT, DELETE, OPTIONS
access-control-allow-credentials: true
access-control-max-age: 86400
access-control-allow-headers: Authorization, Content-Type, X-Requested-With
{
"child": 30,
"adult": 46.5
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Get article price
Example request:
curl --request GET \
--get "https://api.pantropica.org/api/v1/recreatex/prices/architecto" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"Criteria\": {
\"SubscriptionArticleId\": \"430f8d5e-68c2-ed11-9595-a98758ce176c\",
\"ArticleGroupId\": \"d4420e2f-33bf-ed11-9595-a98758ce176c\",
\"Includes\": {
\"Prices\": true
}
}
}"
const url = new URL(
"https://api.pantropica.org/api/v1/recreatex/prices/architecto"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"Criteria": {
"SubscriptionArticleId": "430f8d5e-68c2-ed11-9595-a98758ce176c",
"ArticleGroupId": "d4420e2f-33bf-ed11-9595-a98758ce176c",
"Includes": {
"Prices": true
}
}
};
fetch(url, {
method: "GET",
headers,
body: JSON.stringify(body),
}).then(response => response.json());Example response (500):
Show headers
cache-control: no-cache, private
content-type: application/json
x-ratelimit-limit: 30
x-ratelimit-remaining: 27
access-control-allow-origin: *
access-control-allow-methods: GET, POST, PUT, DELETE, OPTIONS
access-control-allow-credentials: true
access-control-max-age: 86400
access-control-allow-headers: Authorization, Content-Type, X-Requested-With
{
"success": false,
"error": "HTTP request returned status code 500:\n{\"$type\":\"<>f__AnonymousType0`2[[System.Boolean, mscorlib],[System.String, mscorlib]], SyDelSoft.JsonService.Utilities\", (truncated...)\n"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Get countries
Example request:
curl --request GET \
--get "https://api.pantropica.org/api/v1/recreatex/countries" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"SearchCriteria\": {
\"Paging\": {
\"PageIndex\": 0,
\"PageSize\": 9999,
\"Sorting\": null
}
}
}"
const url = new URL(
"https://api.pantropica.org/api/v1/recreatex/countries"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"SearchCriteria": {
"Paging": {
"PageIndex": 0,
"PageSize": 9999,
"Sorting": null
}
}
};
fetch(url, {
method: "GET",
headers,
body: JSON.stringify(body),
}).then(response => response.json());Example response (200):
Show headers
cache-control: no-cache, private
content-type: application/json
x-ratelimit-limit: 30
x-ratelimit-remaining: 26
access-control-allow-origin: *
access-control-allow-methods: GET, POST, PUT, DELETE, OPTIONS
access-control-allow-credentials: true
access-control-max-age: 86400
access-control-allow-headers: Authorization, Content-Type, X-Requested-With
{
"NL": "Nederland",
"BE": "België",
"DE": "Germany",
"C": "Canada",
"DK": "Denmark",
"FR": "France",
"IT": "Italy",
"LU": "Luxembourg",
"PL": "Poland",
"UA": "Ukraine",
"UK": "United Kingdom",
"US": "United states of America",
"S": "Zweden",
"ANDERS": "Anders"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Get account by route params
deprecated:Prefer /api/v1/account/{emailAddress}.
Example request:
curl --request GET \
--get "https://api.pantropica.org/api/v1/recreatex/account/architecto" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"Criteria\": {
\"Email\": \"email@example.com\",
\"Includes\": {
\"Relations\": true
}
}
}"
const url = new URL(
"https://api.pantropica.org/api/v1/recreatex/account/architecto"
);
const headers = {
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"Criteria": {
"Email": "email@example.com",
"Includes": {
"Relations": true
}
}
};
fetch(url, {
method: "GET",
headers,
body: JSON.stringify(body),
}).then(response => response.json());Example response (422):
Show headers
cache-control: no-cache, private
content-type: application/json
x-ratelimit-limit: 30
x-ratelimit-remaining: 25
access-control-allow-origin: *
access-control-allow-methods: GET, POST, PUT, DELETE, OPTIONS
access-control-allow-credentials: true
access-control-max-age: 86400
access-control-allow-headers: Authorization, Content-Type, X-Requested-With
{
"message": "The given data was invalid.",
"errors": {
"email": [
"No account was found for this email address."
]
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Get expositions
requires authentication
Example request:
curl --request GET \
--get "https://api.pantropica.org/api/v1/recreatex/expositions" \
--header "Authorization: Bearer {FIREBASE_ID_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"SearchCriteria\": {
\"ExpositionId\": null,
\"From\": \"2026-09-01\\\\T00:00:00\",
\"Until\": \"2026-09-01\\\\T23:59:00\",
\"Includes\": {
\"Pricing\": false
},
\"Paging\": {
\"PageIndex\": 0,
\"PageSize\": 99999,
\"Sorting\": null
},
\"ActivePeriods\": true,
\"IgnoreAvailability\": false
}
}"
const url = new URL(
"https://api.pantropica.org/api/v1/recreatex/expositions"
);
const headers = {
"Authorization": "Bearer {FIREBASE_ID_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"SearchCriteria": {
"ExpositionId": null,
"From": "2026-09-01\\T00:00:00",
"Until": "2026-09-01\\T23:59:00",
"Includes": {
"Pricing": false
},
"Paging": {
"PageIndex": 0,
"PageSize": 99999,
"Sorting": null
},
"ActivePeriods": true,
"IgnoreAvailability": false
}
};
fetch(url, {
method: "GET",
headers,
body: JSON.stringify(body),
}).then(response => response.json());Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
x-ratelimit-limit: 30
x-ratelimit-remaining: 23
access-control-allow-origin: *
access-control-allow-methods: GET, POST, PUT, DELETE, OPTIONS
access-control-allow-credentials: true
access-control-max-age: 86400
access-control-allow-headers: Authorization, Content-Type, X-Requested-With
{
"success": false,
"error": "Invalid or expired token"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.