Retrieve the patient storefront
curl --request GET \
--url https://vitarelay.com/api/public/v1/shop \
--header 'Authorization: Bearer <token>'import requests
url = "https://vitarelay.com/api/public/v1/shop"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://vitarelay.com/api/public/v1/shop', 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://vitarelay.com/api/public/v1/shop",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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://vitarelay.com/api/public/v1/shop"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://vitarelay.com/api/public/v1/shop")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://vitarelay.com/api/public/v1/shop")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"settings": {
"shop_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"org_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"is_enabled": true,
"allow_rnd": true,
"headline": "<string>",
"welcome_message": "<string>",
"eligibility": {}
},
"products": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"platform_product_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"markup_type": "percent",
"markup_value": 123,
"custom_title": "<string>",
"custom_description": "<string>",
"rx_mode": "none",
"is_listed": true,
"purchase_mode": "one_time",
"default_cadence": "weekly",
"first_order_immediate": true,
"name": "<string>",
"description": "<string>",
"product_type": "<string>",
"dosage_form": "<string>",
"image_urls": [
"<string>"
],
"requires_prescription": true,
"item_kind": "product",
"available_cadences": [
"weekly"
],
"requires_shipping": true,
"patient_price_cents": 123,
"eligible": true
}
],
"bundles": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"description": "<string>",
"image_url": "<string>",
"pricing_mode": "sum",
"flat_price_cents": 123,
"package_markup_type": "percent",
"package_markup_value": 123,
"is_listed": true,
"is_subscribable": true,
"purchase_mode": "one_time",
"default_cadence": "weekly",
"first_order_immediate": true,
"items": [
{
"platform_product_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"qty": 1,
"name": "<string>",
"product_type": "<string>"
}
],
"item_kind": "bundle",
"patient_price_cents": 123,
"available_cadences": [
"<string>"
],
"requires_prescription": true,
"requires_shipping": true,
"rx_mode": "<string>",
"eligible": true
}
],
"custom_products": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"description": "<string>",
"item_kind": "custom",
"patient_price_cents": 123,
"product_kind": "<string>",
"requires_shipping": true,
"requires_prescription": true,
"available_cadences": [
"<string>"
],
"is_listed": true,
"is_active": true,
"purchase_mode": "one_time",
"default_cadence": "weekly",
"first_order_immediate": true
}
],
"payout": {
"status": "not_started",
"payout_eligible": true,
"invite_url": "<string>",
"routable_company_id": "<string>",
"needs_onboarding": true
}
}{
"error": {
"code": "validation_failed",
"message": "One or more fields are invalid"
}
}{
"error": {
"code": "validation_failed",
"message": "One or more fields are invalid"
}
}{
"error": {
"code": "validation_failed",
"message": "One or more fields are invalid"
}
}{
"error": {
"code": "validation_failed",
"message": "One or more fields are invalid"
}
}{
"error": {
"code": "validation_failed",
"message": "One or more fields are invalid"
}
}Storefront
Retrieve the patient storefront
Returns your clinic’s storefront: settings, curated product listings and bundles. Requires the shop:read scope. The payout object reflects Routable payout-onboarding status. Enabling the store requires payout_eligible=true.
GET
/
shop
Retrieve the patient storefront
curl --request GET \
--url https://vitarelay.com/api/public/v1/shop \
--header 'Authorization: Bearer <token>'import requests
url = "https://vitarelay.com/api/public/v1/shop"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://vitarelay.com/api/public/v1/shop', 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://vitarelay.com/api/public/v1/shop",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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://vitarelay.com/api/public/v1/shop"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://vitarelay.com/api/public/v1/shop")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://vitarelay.com/api/public/v1/shop")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"settings": {
"shop_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"org_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"is_enabled": true,
"allow_rnd": true,
"headline": "<string>",
"welcome_message": "<string>",
"eligibility": {}
},
"products": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"platform_product_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"markup_type": "percent",
"markup_value": 123,
"custom_title": "<string>",
"custom_description": "<string>",
"rx_mode": "none",
"is_listed": true,
"purchase_mode": "one_time",
"default_cadence": "weekly",
"first_order_immediate": true,
"name": "<string>",
"description": "<string>",
"product_type": "<string>",
"dosage_form": "<string>",
"image_urls": [
"<string>"
],
"requires_prescription": true,
"item_kind": "product",
"available_cadences": [
"weekly"
],
"requires_shipping": true,
"patient_price_cents": 123,
"eligible": true
}
],
"bundles": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"description": "<string>",
"image_url": "<string>",
"pricing_mode": "sum",
"flat_price_cents": 123,
"package_markup_type": "percent",
"package_markup_value": 123,
"is_listed": true,
"is_subscribable": true,
"purchase_mode": "one_time",
"default_cadence": "weekly",
"first_order_immediate": true,
"items": [
{
"platform_product_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"qty": 1,
"name": "<string>",
"product_type": "<string>"
}
],
"item_kind": "bundle",
"patient_price_cents": 123,
"available_cadences": [
"<string>"
],
"requires_prescription": true,
"requires_shipping": true,
"rx_mode": "<string>",
"eligible": true
}
],
"custom_products": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"description": "<string>",
"item_kind": "custom",
"patient_price_cents": 123,
"product_kind": "<string>",
"requires_shipping": true,
"requires_prescription": true,
"available_cadences": [
"<string>"
],
"is_listed": true,
"is_active": true,
"purchase_mode": "one_time",
"default_cadence": "weekly",
"first_order_immediate": true
}
],
"payout": {
"status": "not_started",
"payout_eligible": true,
"invite_url": "<string>",
"routable_company_id": "<string>",
"needs_onboarding": true
}
}{
"error": {
"code": "validation_failed",
"message": "One or more fields are invalid"
}
}{
"error": {
"code": "validation_failed",
"message": "One or more fields are invalid"
}
}{
"error": {
"code": "validation_failed",
"message": "One or more fields are invalid"
}
}{
"error": {
"code": "validation_failed",
"message": "One or more fields are invalid"
}
}{
"error": {
"code": "validation_failed",
"message": "One or more fields are invalid"
}
}Authorizations
API key issued by VitaRelay. Send as Authorization: Bearer vr_live_…
(production) or Authorization: Bearer vr_test_… (sandbox).
Response
The storefront.
Storefront settings for your clinic's patient shop.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
The clinic's Routable payout-onboarding state. A storefront cannot be enabled until payout_eligible is true.
Show child attributes
Show child attributes

