PageRun SSR API Documentation
No matter how fast your web pages are, when Google has to render your pages it'll still negatively affect your page speed scores and Core Web Vitals (CWV). SSR generates a fully rendered and functional HTML version of your URLs and serves them to search engines in 0.01 seconds on average. This boost in loading speed gets your CWV scores to near perfect.
Below are the endpoints for accessing web pages. Learn how to integrate the API into your application.
Query Parameters:
- authorization *Specify authorization for site
(e.g., authorization="<API-KEY>"). - park *Set TestPark/OmniPark redirection duration
(e.g., "1000ms | 10000ms | 100000ms | 1000000ms | 10000000ms | 100000000ms | 1000000000ms | 10000000000ms | 1m | hour | day | week | bimonthly | month | triannual | quarter | biannual | year"). - api *Does page include external api call
(e.g., "NO|YES"). - path Default path=api if !path passed
(e.g., "api") to wait for "/api/" has to be flat single word.
Route Parameters:
- :region *Please check location table here
(e.g., "WEST_3|ARAB_1|EAST_3|NORD_6").
Body Parameters:
- agent Track agent activity with FREE record keeping
Optional (e.g., "agent" = req.headers['user-agent']) - task *Specify which process to run
(e.g., "render"|"screenshot"|"serialize"). - link *Specify which page url to load
(e.g., "https://svgtile.com/static-rendering"). - key *Pagerun relies on html class as Anchor key
(e.g., "iAmRandomSelectorClassPublicKey") where class="iAmRandomSelectorClassPublicKey".
POST
This endpoint provides rendered html for the requested url for page.
import Foundation
struct APIClient {
static let baseURL = "https://pagerun.api.svgtile.com/v1"
static func fetchData() async throws -> [String: Any] {
// API configuration
let params = [
"region": "YOUR_REGION" // Replace with actual region value
]
// Build URL
var urlComponents = URLComponents(string: baseURL)!
// Add path parameters
let pathParams = ["region"]
let pathItems = pathParams.map { params[$0]! }
urlComponents.path += "/" + pathItems.joined(separator: "/")
// Add query parameters
let queryParams: [String: String] = {"api":"NO","park":"month"}
urlComponents.queryItems = queryParams.map { URLQueryItem(name: $0.key, value: $0.value) }
guard let url = urlComponents.url else {
throw URLError(.badURL)
}
// Create request
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
// Add body for POST/PUT requests
if ["POST", "PUT"].contains("POST") {
let bodyData = {"task":"render|screenshot|serialize","key":"<selector-here>","link":"<url-here>"}
request.httpBody = try JSONSerialization.data(withJSONObject: bodyData)
}
// Send request
let (data, response) = try await URLSession.shared.data(for: request)
guard let httpResponse = response as? HTTPURLResponse else {
throw URLError(.badServerResponse)
}
guard httpResponse.statusCode < 400 else {
throw URLError(.badServerResponse)
}
guard let result = try JSONSerialization.jsonObject(with: data) as? [String: Any] else {
throw URLError(.cannotParseResponse)
}
return result
}
}
// Example usage
@main
struct APIExample {
static func main() async {
do {
let result = try await APIClient.fetchData()
let prettyJSON = try JSONSerialization.data(withJSONObject: result, options: .prettyPrinted)
if let jsonString = String(data: prettyJSON, encoding: .utf8) {
print(jsonString)
}
} catch {
print("Error: \(error)")
}
}
}Suggested Selector for interface stealth
<div class="iAmRandomSelectorClassPublicKey"
style="line-height: 8px; font-size: 3px; padding: 0 4px; background: transparent; display: inline-block; position: absolute; bottom: 0; left: 28px;">
<a href="https://svgtile.com/pagerun" style="color: transparent;">PageRun SSR</a>
</div>