curl --request PUT \
--url https://api.gridbeds.com/api/v1/distribution/properties/{property_id}/listing \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"public_url": "https://channel.example/listings/12345",
"promoted": true,
"updated_at": "2026-10-16T09:30:00Z",
"rejection": {
"text": "<string>"
},
"promoted_until": "2026-10-16T09:30:00Z"
}
'import requests
url = "https://api.gridbeds.com/api/v1/distribution/properties/{property_id}/listing"
payload = {
"public_url": "https://channel.example/listings/12345",
"promoted": True,
"updated_at": "2026-10-16T09:30:00Z",
"rejection": { "text": "<string>" },
"promoted_until": "2026-10-16T09:30:00Z"
}
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({
public_url: 'https://channel.example/listings/12345',
promoted: true,
updated_at: '2026-10-16T09:30:00Z',
rejection: {text: '<string>'},
promoted_until: '2026-10-16T09:30:00Z'
})
};
fetch('https://api.gridbeds.com/api/v1/distribution/properties/{property_id}/listing', 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.gridbeds.com/api/v1/distribution/properties/{property_id}/listing",
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([
'public_url' => 'https://channel.example/listings/12345',
'promoted' => true,
'updated_at' => '2026-10-16T09:30:00Z',
'rejection' => [
'text' => '<string>'
],
'promoted_until' => '2026-10-16T09:30:00Z'
]),
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;
}{
"status": "published",
"public_url": "https://channel.example/listings/12345",
"promoted": true,
"updated_at": "2026-10-16T09:30:00Z",
"property_id": "prp_1qnykkykp69yv8d59hxk5410m9",
"received_at": "2026-10-16T09:30:00Z",
"rejection": {
"reason": "photos",
"text": "<string>"
},
"promoted_until": "2026-10-16T09:30:00Z"
}{
"type": "https://api.gridbeds.com/problems/not-found",
"title": "<string>",
"status": 499,
"instance": "<string>",
"code": "invalid_parameters",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"errors": [
{
"detail": "<string>",
"code": "<string>",
"parameter": "<string>",
"header": "<string>",
"pointer": "<string>"
}
],
"detail": "<string>"
}{
"type": "https://api.gridbeds.com/problems/not-found",
"title": "<string>",
"status": 499,
"instance": "<string>",
"code": "invalid_parameters",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"detail": "<string>"
}{
"type": "https://api.gridbeds.com/problems/not-found",
"title": "<string>",
"status": 499,
"instance": "<string>",
"code": "invalid_parameters",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"required_scopes": [
"read:catalog"
],
"detail": "<string>"
}{
"type": "https://api.gridbeds.com/problems/not-found",
"title": "<string>",
"status": 499,
"instance": "<string>",
"code": "invalid_parameters",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"detail": "<string>"
}{
"type": "https://api.gridbeds.com/problems/not-found",
"title": "<string>",
"status": 499,
"instance": "<string>",
"code": "invalid_parameters",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"detail": "<string>"
}{
"type": "https://api.gridbeds.com/problems/not-found",
"title": "<string>",
"status": 499,
"instance": "<string>",
"code": "invalid_parameters",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"detail": "<string>"
}{
"type": "https://api.gridbeds.com/problems/not-found",
"title": "<string>",
"status": 499,
"instance": "<string>",
"code": "invalid_parameters",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"detail": "<string>"
}Report the state of your listing of a property, replacing the previous report
A full replacement of your listing’s state, idempotent: sending the same body again changes nothing. Send it
whenever the state changes on your side. Gridbeds keeps the report with the latest updated_at; a report
older than the one held changes nothing and answers the one held, so retries and reordering are harmless. An
updated_at more than 300 seconds ahead of Gridbeds’ clock is refused (invalid-parameters, errors[].code
updated_at_in_future), so one wrong clock cannot freeze the report for good. A
property you cannot read as active or inactive (unknown, never distributed to you, another channel’s,
malformed, withdrawn or deleted) answers the same 404 as GET /properties/{property_id}’s unknown id; a
report already held is kept and shown to the host after a withdrawal. Costs 1 unit of your rate limit.
curl --request PUT \
--url https://api.gridbeds.com/api/v1/distribution/properties/{property_id}/listing \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"public_url": "https://channel.example/listings/12345",
"promoted": true,
"updated_at": "2026-10-16T09:30:00Z",
"rejection": {
"text": "<string>"
},
"promoted_until": "2026-10-16T09:30:00Z"
}
'import requests
url = "https://api.gridbeds.com/api/v1/distribution/properties/{property_id}/listing"
payload = {
"public_url": "https://channel.example/listings/12345",
"promoted": True,
"updated_at": "2026-10-16T09:30:00Z",
"rejection": { "text": "<string>" },
"promoted_until": "2026-10-16T09:30:00Z"
}
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({
public_url: 'https://channel.example/listings/12345',
promoted: true,
updated_at: '2026-10-16T09:30:00Z',
rejection: {text: '<string>'},
promoted_until: '2026-10-16T09:30:00Z'
})
};
fetch('https://api.gridbeds.com/api/v1/distribution/properties/{property_id}/listing', 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.gridbeds.com/api/v1/distribution/properties/{property_id}/listing",
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([
'public_url' => 'https://channel.example/listings/12345',
'promoted' => true,
'updated_at' => '2026-10-16T09:30:00Z',
'rejection' => [
'text' => '<string>'
],
'promoted_until' => '2026-10-16T09:30:00Z'
]),
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;
}{
"status": "published",
"public_url": "https://channel.example/listings/12345",
"promoted": true,
"updated_at": "2026-10-16T09:30:00Z",
"property_id": "prp_1qnykkykp69yv8d59hxk5410m9",
"received_at": "2026-10-16T09:30:00Z",
"rejection": {
"reason": "photos",
"text": "<string>"
},
"promoted_until": "2026-10-16T09:30:00Z"
}{
"type": "https://api.gridbeds.com/problems/not-found",
"title": "<string>",
"status": 499,
"instance": "<string>",
"code": "invalid_parameters",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"errors": [
{
"detail": "<string>",
"code": "<string>",
"parameter": "<string>",
"header": "<string>",
"pointer": "<string>"
}
],
"detail": "<string>"
}{
"type": "https://api.gridbeds.com/problems/not-found",
"title": "<string>",
"status": 499,
"instance": "<string>",
"code": "invalid_parameters",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"detail": "<string>"
}{
"type": "https://api.gridbeds.com/problems/not-found",
"title": "<string>",
"status": 499,
"instance": "<string>",
"code": "invalid_parameters",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"required_scopes": [
"read:catalog"
],
"detail": "<string>"
}{
"type": "https://api.gridbeds.com/problems/not-found",
"title": "<string>",
"status": 499,
"instance": "<string>",
"code": "invalid_parameters",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"detail": "<string>"
}{
"type": "https://api.gridbeds.com/problems/not-found",
"title": "<string>",
"status": 499,
"instance": "<string>",
"code": "invalid_parameters",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"detail": "<string>"
}{
"type": "https://api.gridbeds.com/problems/not-found",
"title": "<string>",
"status": 499,
"instance": "<string>",
"code": "invalid_parameters",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"detail": "<string>"
}{
"type": "https://api.gridbeds.com/problems/not-found",
"title": "<string>",
"status": 499,
"instance": "<string>",
"code": "invalid_parameters",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"detail": "<string>"
}Autorizări
A key starts with gbd_live_ (production) or gbd_test_ (sandbox) and ends in a CRC32 checksum of its
secret part, so a mistyped or truncated key is refused before any lookup, as is a key of the other
environment. The prefix is registered with public secret scanners (GitHub secret scanning, TruffleHog,
GitGuardian): a key found in a public repository is revoked at once and your technical contact is told.
Gridbeds stores only a hash of each key. One partner may hold two keys per environment during a rotation.
Operations list the scopes they need; the scopes are OAuth 2.0 scope tokens, so short-lived access tokens
from a client-credentials grant can be offered later beside keys, with the same scopes and no change to any
operation.
Parametri cale
^prp_[0-7][0-9a-hjkmnp-tv-z]{25}$"prp_1qnykkykp69yv8d59hxk5410m9"
Corp
Your listing's state. published: live on your channel. unpublished: not live, by your or the host's choice. pending_review: in your moderation. rejected: refused by your moderation (see rejection). Open enum.
published, unpublished, pending_review, rejected The public page of the listing on your channel. Required with status published; null otherwise.
2048^https://"https://channel.example/listings/12345"
Whether the listing is promoted (featured or boosted) on your channel now.
^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$"2026-10-16T09:30:00Z"
Required with status rejected; refused with any other status.
Show child attributes
Show child attributes
When the promotion ends; null when it has no end or the listing is not promoted.
^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$"2026-10-16T09:30:00Z"
Răspuns
The report Gridbeds holds.
Your listing's state. published: live on your channel. unpublished: not live, by your or the host's choice. pending_review: in your moderation. rejected: refused by your moderation (see rejection). Open enum.
published, unpublished, pending_review, rejected The public page of the listing on your channel. Required with status published; null otherwise.
2048^https://"https://channel.example/listings/12345"
Whether the listing is promoted (featured or boosted) on your channel now.
^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$"2026-10-16T09:30:00Z"
^prp_[0-7][0-9a-hjkmnp-tv-z]{25}$"prp_1qnykkykp69yv8d59hxk5410m9"
^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$"2026-10-16T09:30:00Z"
Required with status rejected; refused with any other status.
Show child attributes
Show child attributes
When the promotion ends; null when it has no end or the listing is not promoted.
^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$"2026-10-16T09:30:00Z"