cURL
curl --request PATCH \
--url https://commet.co/api/v1/offers/{id} \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"name": "<string>",
"phases": [
{
"type": "free_trial",
"durationDays": 123
}
]
}
'import { Commet } from "@commet/node";
const commet = new Commet({ apiKey: "ck_xxx" });
const offer = await commet.offers.update({
id: "ofr_xxx",
name: "example",
phases: [
{
type: "free_trial",
durationDays: 30,
},
],
});from commet import Commet
commet = Commet("ck_xxx")
offer = commet.offers.update(
"ofr_xxx",
name="example",
phases=[{"type": "free_trial", "duration_days": 30}],
)client, err := commet.New("ck_xxx")
if err != nil {
log.Fatal(err)
}
ctx := context.Background()
offer, err := client.Offers.Update(ctx, "ofr_xxx", &commet.UpdateOfferParams{
Name: "example",
Phases: []commet.UpdateOfferParamsPhasesItem{{Value: commet.UpdateOfferParamsPhasesItemVariant1{
Type: "free_trial",
DurationDays: 30,
}}},
})
if err != nil {
log.Fatal(err)
}import co.commet.Commet;
import co.commet.models.UpdateOfferParamsPhasesItemVariant1;
import co.commet.params.UpdateOfferParams;
import java.util.List;
var commet = Commet.builder().apiKey("ck_xxx").build();
var offer = commet.offers().update(
"ofr_xxx",
UpdateOfferParams.builder("example", List.of(new UpdateOfferParamsPhasesItemVariant1("free_trial", 30L))).build()
);use Commet\Commet;
$commet = new Commet('ck_xxx');
$offer = $commet->offers->update(
id: 'ofr_xxx',
name: 'example',
phases: [['type' => 'free_trial', 'duration_days' => 30]],
);{
"id": "offer_1a2b3c4d",
"name": "Launch discount",
"phases": [
{
"type": "percentage",
"durationCycles": 3,
"durationInterval": "monthly",
"percentage": 20
}
],
"metadata": {},
"startsAt": null,
"endsAt": null,
"active": true,
"createdAt": "2026-09-07T12:00:00.000Z",
"updatedAt": "2026-09-07T12:00:00.000Z",
"object": "offer",
"livemode": false
}{
"error": {
"type": "validation_error",
"code": "validation_error",
"message": "The request contains an invalid parameter.",
"doc_url": "https://commet.co/docs/api-reference/2026-08-27/errors/validation_error.md"
}
}{
"error": {
"type": "authentication_error",
"code": "unauthorized",
"message": "A valid API key is required.",
"doc_url": "https://commet.co/docs/api-reference/2026-08-27/errors/unauthorized.md"
}
}{
"error": {
"type": "authentication_error",
"code": "forbidden",
"message": "You do not have permission to perform this operation.",
"doc_url": "https://commet.co/docs/api-reference/2026-08-27/errors/forbidden.md"
}
}{
"error": {
"type": "not_found_error",
"code": "not_found",
"message": "The requested resource was not found.",
"doc_url": "https://commet.co/docs/api-reference/2026-08-27/errors/not_found.md"
}
}{
"error": {
"type": "conflict_error",
"code": "idempotency_in_progress",
"message": "A request with this idempotency key is still being processed.",
"doc_url": "https://commet.co/docs/api-reference/2026-08-27/errors/idempotency_in_progress.md"
}
}{
"error": {
"type": "rate_limit_error",
"code": "rate_limited",
"message": "Too many requests. Retry after the interval specified in the Retry-After header.",
"doc_url": "https://commet.co/docs/api-reference/2026-08-27/errors/rate_limited.md"
}
}{
"error": {
"type": "internal_error",
"code": "internal_error",
"message": "An unexpected error occurred while processing the request.",
"doc_url": "https://commet.co/docs/api-reference/2026-08-27/errors/internal_error.md"
}
}{
"error": {
"type": "internal_error",
"code": "idempotency_unavailable",
"message": "Idempotency storage is temporarily unavailable. Retry with the same idempotency key.",
"doc_url": "https://commet.co/docs/api-reference/2026-08-27/errors/idempotency_unavailable.md"
}
}Offers
Update offer
Replace reusable offer terms. Existing applications keep their immutable accepted terms.
PATCH
/
offers
/
{id}
cURL
curl --request PATCH \
--url https://commet.co/api/v1/offers/{id} \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"name": "<string>",
"phases": [
{
"type": "free_trial",
"durationDays": 123
}
]
}
'import { Commet } from "@commet/node";
const commet = new Commet({ apiKey: "ck_xxx" });
const offer = await commet.offers.update({
id: "ofr_xxx",
name: "example",
phases: [
{
type: "free_trial",
durationDays: 30,
},
],
});from commet import Commet
commet = Commet("ck_xxx")
offer = commet.offers.update(
"ofr_xxx",
name="example",
phases=[{"type": "free_trial", "duration_days": 30}],
)client, err := commet.New("ck_xxx")
if err != nil {
log.Fatal(err)
}
ctx := context.Background()
offer, err := client.Offers.Update(ctx, "ofr_xxx", &commet.UpdateOfferParams{
Name: "example",
Phases: []commet.UpdateOfferParamsPhasesItem{{Value: commet.UpdateOfferParamsPhasesItemVariant1{
Type: "free_trial",
DurationDays: 30,
}}},
})
if err != nil {
log.Fatal(err)
}import co.commet.Commet;
import co.commet.models.UpdateOfferParamsPhasesItemVariant1;
import co.commet.params.UpdateOfferParams;
import java.util.List;
var commet = Commet.builder().apiKey("ck_xxx").build();
var offer = commet.offers().update(
"ofr_xxx",
UpdateOfferParams.builder("example", List.of(new UpdateOfferParamsPhasesItemVariant1("free_trial", 30L))).build()
);use Commet\Commet;
$commet = new Commet('ck_xxx');
$offer = $commet->offers->update(
id: 'ofr_xxx',
name: 'example',
phases: [['type' => 'free_trial', 'duration_days' => 30]],
);{
"id": "offer_1a2b3c4d",
"name": "Launch discount",
"phases": [
{
"type": "percentage",
"durationCycles": 3,
"durationInterval": "monthly",
"percentage": 20
}
],
"metadata": {},
"startsAt": null,
"endsAt": null,
"active": true,
"createdAt": "2026-09-07T12:00:00.000Z",
"updatedAt": "2026-09-07T12:00:00.000Z",
"object": "offer",
"livemode": false
}{
"error": {
"type": "validation_error",
"code": "validation_error",
"message": "The request contains an invalid parameter.",
"doc_url": "https://commet.co/docs/api-reference/2026-08-27/errors/validation_error.md"
}
}{
"error": {
"type": "authentication_error",
"code": "unauthorized",
"message": "A valid API key is required.",
"doc_url": "https://commet.co/docs/api-reference/2026-08-27/errors/unauthorized.md"
}
}{
"error": {
"type": "authentication_error",
"code": "forbidden",
"message": "You do not have permission to perform this operation.",
"doc_url": "https://commet.co/docs/api-reference/2026-08-27/errors/forbidden.md"
}
}{
"error": {
"type": "not_found_error",
"code": "not_found",
"message": "The requested resource was not found.",
"doc_url": "https://commet.co/docs/api-reference/2026-08-27/errors/not_found.md"
}
}{
"error": {
"type": "conflict_error",
"code": "idempotency_in_progress",
"message": "A request with this idempotency key is still being processed.",
"doc_url": "https://commet.co/docs/api-reference/2026-08-27/errors/idempotency_in_progress.md"
}
}{
"error": {
"type": "rate_limit_error",
"code": "rate_limited",
"message": "Too many requests. Retry after the interval specified in the Retry-After header.",
"doc_url": "https://commet.co/docs/api-reference/2026-08-27/errors/rate_limited.md"
}
}{
"error": {
"type": "internal_error",
"code": "internal_error",
"message": "An unexpected error occurred while processing the request.",
"doc_url": "https://commet.co/docs/api-reference/2026-08-27/errors/internal_error.md"
}
}{
"error": {
"type": "internal_error",
"code": "idempotency_unavailable",
"message": "Idempotency storage is temporarily unavailable. Retry with the same idempotency key.",
"doc_url": "https://commet.co/docs/api-reference/2026-08-27/errors/idempotency_unavailable.md"
}
}Replace reusable offer terms. Existing applications keep their immutable accepted terms.
Autorizaciones
Encabezados
Unique key used to safely retry this write for 24 hours without applying it twice.
Required string length:
1 - 200API version used by this reference. Send this header to select this contract explicitly.
Parámetros de ruta
Cuerpo
application/json
Respuesta
Success
- Option 1
- Option 2
- Option 3
- Option 4
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Allowed value:
"offer"¿Esta página le ayudó?