curl --request PUT \
--url https://api-sandbox.beinfi.com/products/{productID}/deliverable \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"objectKey": "<string>",
"fileName": "<string>",
"contentType": "<string>",
"sizeBytes": 123,
"url": "<string>"
}
'import requests
url = "https://api-sandbox.beinfi.com/products/{productID}/deliverable"
payload = {
"objectKey": "<string>",
"fileName": "<string>",
"contentType": "<string>",
"sizeBytes": 123,
"url": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
objectKey: '<string>',
fileName: '<string>',
contentType: '<string>',
sizeBytes: 123,
url: '<string>'
})
};
fetch('https://api-sandbox.beinfi.com/products/{productID}/deliverable', 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-sandbox.beinfi.com/products/{productID}/deliverable",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'objectKey' => '<string>',
'fileName' => '<string>',
'contentType' => '<string>',
'sizeBytes' => 123,
'url' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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-sandbox.beinfi.com/products/{productID}/deliverable"
payload := strings.NewReader("{\n \"objectKey\": \"<string>\",\n \"fileName\": \"<string>\",\n \"contentType\": \"<string>\",\n \"sizeBytes\": 123,\n \"url\": \"<string>\"\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.put("https://api-sandbox.beinfi.com/products/{productID}/deliverable")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"objectKey\": \"<string>\",\n \"fileName\": \"<string>\",\n \"contentType\": \"<string>\",\n \"sizeBytes\": 123,\n \"url\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-sandbox.beinfi.com/products/{productID}/deliverable")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"objectKey\": \"<string>\",\n \"fileName\": \"<string>\",\n \"contentType\": \"<string>\",\n \"sizeBytes\": 123,\n \"url\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"productId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"kind": "file",
"fileName": "<string>",
"contentType": "<string>",
"sizeBytes": 123,
"url": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z"
}{
"message": "<string>",
"error_code": "internal_error",
"tracer_id": "<string>"
}{
"message": "<string>",
"error_code": "internal_error",
"tracer_id": "<string>",
"resource": "<string>"
}{
"message": "<string>",
"error_code": "internal_error",
"tracer_id": "<string>",
"errors": [
{
"field": "<string>",
"value": "<string>",
"constraint": "<string>",
"description": "<string>"
}
]
}Save the deliverable
Sets what the buyer receives when the payment is confirmed: a file (kind: "file", with the upload’s objectKey) or a link (kind: "link", with url). A product has one deliverable; saving again replaces it. Only allowed on type: "item" products with pricingModel: "one_time".
curl --request PUT \
--url https://api-sandbox.beinfi.com/products/{productID}/deliverable \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"objectKey": "<string>",
"fileName": "<string>",
"contentType": "<string>",
"sizeBytes": 123,
"url": "<string>"
}
'import requests
url = "https://api-sandbox.beinfi.com/products/{productID}/deliverable"
payload = {
"objectKey": "<string>",
"fileName": "<string>",
"contentType": "<string>",
"sizeBytes": 123,
"url": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
objectKey: '<string>',
fileName: '<string>',
contentType: '<string>',
sizeBytes: 123,
url: '<string>'
})
};
fetch('https://api-sandbox.beinfi.com/products/{productID}/deliverable', 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-sandbox.beinfi.com/products/{productID}/deliverable",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'objectKey' => '<string>',
'fileName' => '<string>',
'contentType' => '<string>',
'sizeBytes' => 123,
'url' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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-sandbox.beinfi.com/products/{productID}/deliverable"
payload := strings.NewReader("{\n \"objectKey\": \"<string>\",\n \"fileName\": \"<string>\",\n \"contentType\": \"<string>\",\n \"sizeBytes\": 123,\n \"url\": \"<string>\"\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.put("https://api-sandbox.beinfi.com/products/{productID}/deliverable")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"objectKey\": \"<string>\",\n \"fileName\": \"<string>\",\n \"contentType\": \"<string>\",\n \"sizeBytes\": 123,\n \"url\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-sandbox.beinfi.com/products/{productID}/deliverable")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"objectKey\": \"<string>\",\n \"fileName\": \"<string>\",\n \"contentType\": \"<string>\",\n \"sizeBytes\": 123,\n \"url\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"productId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"kind": "file",
"fileName": "<string>",
"contentType": "<string>",
"sizeBytes": 123,
"url": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z"
}{
"message": "<string>",
"error_code": "internal_error",
"tracer_id": "<string>"
}{
"message": "<string>",
"error_code": "internal_error",
"tracer_id": "<string>",
"resource": "<string>"
}{
"message": "<string>",
"error_code": "internal_error",
"tracer_id": "<string>",
"errors": [
{
"field": "<string>",
"value": "<string>",
"constraint": "<string>",
"description": "<string>"
}
]
}Authorizations
Your account's secret key: Authorization: Bearer sk_test_… or sk_live_…. Server-side only.
Path Parameters
Product ID.
Body
file or link.
file, link For file: the objectKey from the presign. Upload the file before saving; if it does not exist, the call is refused.
For file: the name shown to the buyer.
For file: MIME type. If omitted, it is read from the uploaded file.
For file: size in bytes. If omitted, it is read from the uploaded file.
For link: the URL the buyer receives (members area, Notion, video…).
Response
Deliverable saved.
What the buyer receives once the payment is confirmed: a file or a link.
file (uploaded file) or link (external URL).
file, link File name, when kind is file.
MIME type, when kind is file.
Size in bytes, when kind is file.
The delivered URL, when kind is link.