Content Delivery API
The Content Delivery API is the easiest way to access your Storyblok content. We prepared some code snippets in the following languages to let you see how simple it really is:
- cUrl
- C (LibCurl)
- C# (RestSharp)
- Go
- Java (Unirest)
- Java / Android (Android SDK)
- JavaScript (XHR)
- JavaScript (jQuery)
- NodeJS (Native)
- NodeJS (Request)
- NodeJS (Unirest)
- Objective-C (NSURL)
- OCaml (Cohttp)
- PHP SDK
- PHP (cUrl)
- PHP (HttpRequest)
- Python (http.client) - Python 3
- Python (requests)
- Ruby (NET::Http)
- Shell (wget)
- Swift (NSURL)
cUrl
curl -X GET "https://api.storyblok.com/v1/cdn/stories/home?token=xs8KfuZGvQVOM824AFUQDQtt"
C (LibCurl)
CURL *hnd = curl_easy_init();
curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "GET");
curl_easy_setopt(hnd, CURLOPT_URL, "https://api.storyblok.com/v1/cdn/stories/home?token=xs8KfuZGvQVOM824AFUQDQtt");
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "cache-control: no-cache");
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);
CURLcode ret = curl_easy_perform(hnd);
C# (RestSharp)
var client = new RestClient("https://api.storyblok.com/v1/cdn/stories/home?token=xs8KfuZGvQVOM824AFUQDQtt");
var request = new RestRequest(Method.GET);
request.AddHeader("cache-control", "no-cache");
IRestResponse response = client.Execute(request);
Go
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
url := "https://api.storyblok.com/v1/cdn/stories/home?token=xs8KfuZGvQVOM824AFUQDQtt"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("cache-control", "no-cache")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
Java (Unirest)
HttpResponse<String> response = Unirest.get("https://api.storyblok.com/v1/cdn/stories/home?token=xs8KfuZGvQVOM824AFUQDQtt")
.header("cache-control", "no-cache")
.asString();
Java / Android (Android SDK)
for Android you can use the Android Storyblok SDK created by @mikepenz
compile "com.mikepenz:storyblok-android-sdk:0.3.0@aar"
Storyblok client = Storyblok.init("your-storyblok-token");
client.getStory("fullSlug", new Storyblok.SuccessCallback<Story>() {
@Override
public void onResponse(final Result<Story> result) {
//on success
}
}, new Storyblok.ErrorCallback() {
@Override
public void onFailure(@Nullable IOException exception, @Nullable String response) {
//on error
}
});
JavaScript (XHR)
var data = null;
var xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.addEventListener("readystatechange", function () {
if (this.readyState === 4) {
console.log(this.responseText);
}
});
xhr.open("GET", "https://api.storyblok.com/v1/cdn/stories/home?token=xs8KfuZGvQVOM824AFUQDQtt");
xhr.setRequestHeader("cache-control", "no-cache");
xhr.send(data);
JavaScript (jQuery)
var settings = {
"async": true,
"crossDomain": true,
"url": "https://api.storyblok.com/v1/cdn/stories/home?token=xs8KfuZGvQVOM824AFUQDQtt",
"method": "GET",
"headers": {
"cache-control": "no-cache"
}
}
$.ajax(settings).done(function (response) {
console.log(response);
});
NodeJS (Native)
var http = require("https");
var options = {
"method": "GET",
"hostname": "api.storyblok.com",
"port": null,
"path": "/v1/cdn/stories/home?token=xs8KfuZGvQVOM824AFUQDQtt",
"headers": {
"cache-control": "no-cache"
}
};
var req = http.request(options, function (res) {
var chunks = [];
res.on("data", function (chunk) {
chunks.push(chunk);
});
res.on("end", function () {
var body = Buffer.concat(chunks);
console.log(body.toString());
});
});
req.end();
NodeJs (Request)
var request = require("request");
var options = { method: 'GET',
url: 'https://api.storyblok.com/v1/cdn/stories/home',
qs: { token: 'xs8KfuZGvQVOM824AFUQDQtt' },
headers:
{ 'cache-control': 'no-cache' } };
request(options, function (error, response, body) {
if (error) throw new Error(error);
console.log(body);
});
NodeJs (Unirest)
var unirest = require("unirest");
var req = unirest("GET", "https://api.storyblok.com/v1/cdn/stories/home");
req.query({
"token": "xs8KfuZGvQVOM824AFUQDQtt"
});
req.headers({
"cache-control": "no-cache"
});
req.end(function (res) {
if (res.error) throw new Error(res.error);
console.log(res.body);
});
Objective-C (NSURL)
#import <Foundation/Foundation.h>
NSDictionary *headers = @{ @"cache-control": @"no-cache" };
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://api.storyblok.com/v1/cdn/stories/home?token=xs8KfuZGvQVOM824AFUQDQtt"]
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:10.0];
[request setHTTPMethod:@"GET"];
[request setAllHTTPHeaderFields:headers];
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (error) {
NSLog(@"%@", error);
} else {
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;
NSLog(@"%@", httpResponse);
}
}];
[dataTask resume];
OCaml (Cohttp)
open Cohttp_lwt_unix
open Cohttp
open Lwt
let uri = Uri.of_string "https://api.storyblok.com/v1/cdn/stories/home?token=xs8KfuZGvQVOM824AFUQDQtt" in
let headers = Header.init ()
|> fun h -> Header.add h "cache-control" "no-cache"
in
Client.call ~headers `GET uri
>>= fun (res, body_stream) ->
(* Do stuff with the result *)
PHP (client library)
For PHP you can use our php-client library.
composer require storyblok/php-client dev-master
// Require composer autoload
require 'vendor/autoload.php';
// Initialize
$client = new \Storyblok\Client('xs8KfuZGvQVOM824AFUQDQtt');
// Optionally set a cache
$client->setCache('filesytem', array('path' => 'cache'));
// Get the story as array
$client->getStoryBySlug('home');
$data = $client->getBody();
Or one of the following code snippets:
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://api.storyblok.com/v1/cdn/stories/home?token=xs8KfuZGvQVOM824AFUQDQtt",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => array(
"cache-control: no-cache"
),
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
PHP (HttpRequest)
<?php
$request = new HttpRequest();
$request->setUrl('https://api.storyblok.com/v1/cdn/stories/home');
$request->setMethod(HTTP_METH_GET);
$request->setQueryData(array(
'token' => 'xs8KfuZGvQVOM824AFUQDQtt'
));
$request->setHeaders(array(
'cache-control' => 'no-cache'
));
try {
$response = $request->send();
echo $response->getBody();
} catch (HttpException $ex) {
echo $ex;
}
Python (http.client) - Python 3
import http.client
conn = http.client.HTTPSConnection("api.storyblok.com")
headers = {
'cache-control': "no-cache"
}
conn.request("GET", "/v1/cdn/stories/home?token=xs8KfuZGvQVOM824AFUQDQtt", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
Python (requests)
import requests
url = "https://api.storyblok.com/v1/cdn/stories/home"
querystring = {"token":"xs8KfuZGvQVOM824AFUQDQtt"}
headers = {
'cache-control': "no-cache"
}
response = requests.request("GET", url, headers=headers, params=querystring)
print(response.text)
Ruby (NET::Http)
require 'uri'
require 'net/http'
url = URI("https://api.storyblok.com/v1/cdn/stories/home?token=xs8KfuZGvQVOM824AFUQDQtt")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
request = Net::HTTP::Get.new(url)
request["cache-control"] = 'no-cache'
response = http.request(request)
puts response.read_body
Shell (wget)
wget --quiet \
--method GET \
--header 'cache-control: no-cache' \
--output-document \
- 'https://api.storyblok.com/v1/cdn/stories/home?token=xs8KfuZGvQVOM824AFUQDQtt'
Swift (NSURL)
import Foundation
let headers = [
"cache-control": "no-cache"
]
let request = NSMutableURLRequest(url: NSURL(string: "https://api.storyblok.com/v1/cdn/stories/home?token=xs8KfuZGvQVOM824AFUQDQtt")! as URL,
cachePolicy: .useProtocolCachePolicy,
timeoutInterval: 10.0)
request.httpMethod = "GET"
request.allHTTPHeaderFields = headers
let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
if (error != nil) {
print(error)
} else {
let httpResponse = response as? HTTPURLResponse
print(httpResponse)
}
})
dataTask.resume()
Didn't find what you were looking for? Ask us on Discord about an example for you. You missed something and want it to be added here? Create a pull request on Github and we will add your example here.