import { Crevio } from "@crevio/sdk";
const crevio = new Crevio({
apiKey: process.env["CREVIO_API_KEY"] ?? "",
});
async function run() {
const result = await crevio.products.create({
images: [
"file_abc123",
],
});
console.log(result);
}
run();curl --request POST \
--url https://api.crevio.co/v1/products \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"description": "<string>",
"body_html": "<string>",
"slug": "<string>",
"button_cta": "<string>",
"available_from": "2023-11-07T05:31:56Z",
"available_until": "2023-11-07T05:31:56Z",
"tax_code": "<string>",
"images": [
"file_abc123"
]
}
'import requests
url = "https://api.crevio.co/v1/products"
payload = {
"name": "<string>",
"description": "<string>",
"body_html": "<string>",
"slug": "<string>",
"button_cta": "<string>",
"available_from": "2023-11-07T05:31:56Z",
"available_until": "2023-11-07T05:31:56Z",
"tax_code": "<string>",
"images": ["file_abc123"]
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
description: '<string>',
body_html: '<string>',
slug: '<string>',
button_cta: '<string>',
available_from: '2023-11-07T05:31:56Z',
available_until: '2023-11-07T05:31:56Z',
tax_code: '<string>',
images: ['file_abc123']
})
};
fetch('https://api.crevio.co/v1/products', 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://api.crevio.co/v1/products",
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([
'name' => '<string>',
'description' => '<string>',
'body_html' => '<string>',
'slug' => '<string>',
'button_cta' => '<string>',
'available_from' => '2023-11-07T05:31:56Z',
'available_until' => '2023-11-07T05:31:56Z',
'tax_code' => '<string>',
'images' => [
'file_abc123'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"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://api.crevio.co/v1/products"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"body_html\": \"<string>\",\n \"slug\": \"<string>\",\n \"button_cta\": \"<string>\",\n \"available_from\": \"2023-11-07T05:31:56Z\",\n \"available_until\": \"2023-11-07T05:31:56Z\",\n \"tax_code\": \"<string>\",\n \"images\": [\n \"file_abc123\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<api-key>")
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://api.crevio.co/v1/products")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"body_html\": \"<string>\",\n \"slug\": \"<string>\",\n \"button_cta\": \"<string>\",\n \"available_from\": \"2023-11-07T05:31:56Z\",\n \"available_until\": \"2023-11-07T05:31:56Z\",\n \"tax_code\": \"<string>\",\n \"images\": [\n \"file_abc123\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.crevio.co/v1/products")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"body_html\": \"<string>\",\n \"slug\": \"<string>\",\n \"button_cta\": \"<string>\",\n \"available_from\": \"2023-11-07T05:31:56Z\",\n \"available_until\": \"2023-11-07T05:31:56Z\",\n \"tax_code\": \"<string>\",\n \"images\": [\n \"file_abc123\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"object": "<string>",
"name": "<string>",
"slug": "<string>",
"description": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"body_html": "<string>",
"button_cta": "<string>",
"url": "<string>",
"available_from": "2023-11-07T05:31:56Z",
"available_until": "2023-11-07T05:31:56Z",
"published_at": "2023-11-07T05:31:56Z",
"reviews_count": 123,
"average_rating": 123,
"media_gallery": [
{
"id": "<string>",
"type": "<string>",
"url": "<string>"
}
],
"price_variants": [
{
"id": "<string>",
"object": "<string>",
"name": "<string>",
"amount": 123,
"interval_count": 123,
"installment_count": 123,
"setup_fee_amount": 123,
"trial_period_days": 123,
"revoke_after_days": 123,
"quantity_available": 123,
"archived": true,
"position": 123,
"hidden": true,
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"currency": "<string>",
"discounted_from_amount": 123,
"minimum_amount": 123,
"maximum_amount": 123,
"preset_amount": 123,
"waitlist": true,
"purchase_url": "<string>",
"product": "<string>",
"benefits": [
"<string>"
]
}
],
"seo": "<string>",
"reviews": [
{
"id": "<string>",
"object": "<string>",
"rating": 123,
"customer_name": "<string>",
"content": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"customer_image_url": "<string>"
}
]
}{
"error": {
"type": "invalid_request_error",
"code": "bad_request",
"message": "The request was malformed or contained invalid parameters"
}
}{
"error": {
"type": "invalid_request_error",
"code": "authentication_required",
"message": "You did not provide an API key."
}
}{
"error": {
"type": "invalid_request_error",
"code": "forbidden",
"message": "You do not have permission to perform this action"
}
}{
"error": {
"type": "validation_error",
"code": "validation_failed",
"message": "Email is required",
"errors": {
"email": [
"can't be blank"
]
}
}
}{
"error": {
"type": "api_error",
"code": "internal_error",
"message": "An unexpected error occurred"
}
}Create product
Creates a new product. A product can’t be set to active until it has at least one price variant — create it as draft (the default), add a price variant via POST /price_variants, then PATCH the product to active.
import { Crevio } from "@crevio/sdk";
const crevio = new Crevio({
apiKey: process.env["CREVIO_API_KEY"] ?? "",
});
async function run() {
const result = await crevio.products.create({
images: [
"file_abc123",
],
});
console.log(result);
}
run();curl --request POST \
--url https://api.crevio.co/v1/products \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"description": "<string>",
"body_html": "<string>",
"slug": "<string>",
"button_cta": "<string>",
"available_from": "2023-11-07T05:31:56Z",
"available_until": "2023-11-07T05:31:56Z",
"tax_code": "<string>",
"images": [
"file_abc123"
]
}
'import requests
url = "https://api.crevio.co/v1/products"
payload = {
"name": "<string>",
"description": "<string>",
"body_html": "<string>",
"slug": "<string>",
"button_cta": "<string>",
"available_from": "2023-11-07T05:31:56Z",
"available_until": "2023-11-07T05:31:56Z",
"tax_code": "<string>",
"images": ["file_abc123"]
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
description: '<string>',
body_html: '<string>',
slug: '<string>',
button_cta: '<string>',
available_from: '2023-11-07T05:31:56Z',
available_until: '2023-11-07T05:31:56Z',
tax_code: '<string>',
images: ['file_abc123']
})
};
fetch('https://api.crevio.co/v1/products', 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://api.crevio.co/v1/products",
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([
'name' => '<string>',
'description' => '<string>',
'body_html' => '<string>',
'slug' => '<string>',
'button_cta' => '<string>',
'available_from' => '2023-11-07T05:31:56Z',
'available_until' => '2023-11-07T05:31:56Z',
'tax_code' => '<string>',
'images' => [
'file_abc123'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"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://api.crevio.co/v1/products"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"body_html\": \"<string>\",\n \"slug\": \"<string>\",\n \"button_cta\": \"<string>\",\n \"available_from\": \"2023-11-07T05:31:56Z\",\n \"available_until\": \"2023-11-07T05:31:56Z\",\n \"tax_code\": \"<string>\",\n \"images\": [\n \"file_abc123\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<api-key>")
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://api.crevio.co/v1/products")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"body_html\": \"<string>\",\n \"slug\": \"<string>\",\n \"button_cta\": \"<string>\",\n \"available_from\": \"2023-11-07T05:31:56Z\",\n \"available_until\": \"2023-11-07T05:31:56Z\",\n \"tax_code\": \"<string>\",\n \"images\": [\n \"file_abc123\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.crevio.co/v1/products")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"description\": \"<string>\",\n \"body_html\": \"<string>\",\n \"slug\": \"<string>\",\n \"button_cta\": \"<string>\",\n \"available_from\": \"2023-11-07T05:31:56Z\",\n \"available_until\": \"2023-11-07T05:31:56Z\",\n \"tax_code\": \"<string>\",\n \"images\": [\n \"file_abc123\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"object": "<string>",
"name": "<string>",
"slug": "<string>",
"description": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"body_html": "<string>",
"button_cta": "<string>",
"url": "<string>",
"available_from": "2023-11-07T05:31:56Z",
"available_until": "2023-11-07T05:31:56Z",
"published_at": "2023-11-07T05:31:56Z",
"reviews_count": 123,
"average_rating": 123,
"media_gallery": [
{
"id": "<string>",
"type": "<string>",
"url": "<string>"
}
],
"price_variants": [
{
"id": "<string>",
"object": "<string>",
"name": "<string>",
"amount": 123,
"interval_count": 123,
"installment_count": 123,
"setup_fee_amount": 123,
"trial_period_days": 123,
"revoke_after_days": 123,
"quantity_available": 123,
"archived": true,
"position": 123,
"hidden": true,
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"currency": "<string>",
"discounted_from_amount": 123,
"minimum_amount": 123,
"maximum_amount": 123,
"preset_amount": 123,
"waitlist": true,
"purchase_url": "<string>",
"product": "<string>",
"benefits": [
"<string>"
]
}
],
"seo": "<string>",
"reviews": [
{
"id": "<string>",
"object": "<string>",
"rating": 123,
"customer_name": "<string>",
"content": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"customer_image_url": "<string>"
}
]
}{
"error": {
"type": "invalid_request_error",
"code": "bad_request",
"message": "The request was malformed or contained invalid parameters"
}
}{
"error": {
"type": "invalid_request_error",
"code": "authentication_required",
"message": "You did not provide an API key."
}
}{
"error": {
"type": "invalid_request_error",
"code": "forbidden",
"message": "You do not have permission to perform this action"
}
}{
"error": {
"type": "validation_error",
"code": "validation_failed",
"message": "Email is required",
"errors": {
"email": [
"can't be blank"
]
}
}
}{
"error": {
"type": "api_error",
"code": "internal_error",
"message": "An unexpected error occurred"
}
}Authorizations
API key in the format: Bearer {api_token}
Body
A product can't be set to active until it has at least one price variant. Create it as draft (or omit — draft is the default), add a price variant via POST /v1/price_variants, then PATCH the product to active.
draft, active, archived MediaLibrary file ids (e.g. file_abc123) to set as the product gallery; the first is the cover. Replaces the existing gallery — an empty array clears it. Create files via POST /v1/files or POST /v1/images/generate.
["file_abc123"]
Response
Product created
draft, active, archived Show child attributes
Show child attributes
Show child attributes
Show child attributes
ID by default, full object when expanded
Show child attributes
Show child attributes
Was this page helpful?

