List plan moves
curl --request GET \
--url https://commet.co/api/v1/plans/{id}/moves \
--header 'x-api-key: <api-key>'const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://commet.co/api/v1/plans/{id}/moves', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://commet.co/api/v1/plans/{id}/moves"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://commet.co/api/v1/plans/{id}/moves"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://commet.co/api/v1/plans/{id}/moves")
.header("x-api-key", "<api-key>")
.asString();<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://commet.co/api/v1/plans/{id}/moves",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}{
"object": "list",
"data": [
{
"id": "pvm_1a2b3c4d",
"toVersionId": "plr_9i0j1k2l",
"fromVersionIds": [
"plr_1a2b3c4d"
],
"effective": "period_end",
"preview": false,
"status": "moving",
"counts": {
"moving": 179,
"moved": 0,
"needsAChange": 1,
"leftOut": 3,
"canceled": 0,
"keptOnVersion": 0
},
"subscriptions": [
{
"subscriptionId": "sub_1a2b3c4d",
"status": "moving",
"code": null,
"message": null
},
{
"subscriptionId": "sub_9i0j1k2l",
"status": "needs_a_change",
"code": "addon_unavailable",
"message": "The version does not sell the add-on SSO, which the subscription has active. Deactivate it before moving the subscription."
},
{
"subscriptionId": "sub_5e6f7g8h",
"status": "left_out",
"code": "invalid_subscription_status",
"message": "A paused subscription cannot change versions. Only active, trialing and past due subscriptions can."
}
],
"createdAt": "2026-09-07T12:00:00.000Z",
"completedAt": null,
"canceledAt": null,
"object": "plan_move"
}
]
}{
"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": "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"
}
}Plans
List plan moves
List a plan’s latest moves of subscribers between versions, newest first, including the change of a single subscription, with how many are moving, moved, need a change, were left out, canceled or kept on their version.
GET
/
plans
/
{id}
/
moves
List plan moves
curl --request GET \
--url https://commet.co/api/v1/plans/{id}/moves \
--header 'x-api-key: <api-key>'const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://commet.co/api/v1/plans/{id}/moves', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://commet.co/api/v1/plans/{id}/moves"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://commet.co/api/v1/plans/{id}/moves"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://commet.co/api/v1/plans/{id}/moves")
.header("x-api-key", "<api-key>")
.asString();<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://commet.co/api/v1/plans/{id}/moves",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}{
"object": "list",
"data": [
{
"id": "pvm_1a2b3c4d",
"toVersionId": "plr_9i0j1k2l",
"fromVersionIds": [
"plr_1a2b3c4d"
],
"effective": "period_end",
"preview": false,
"status": "moving",
"counts": {
"moving": 179,
"moved": 0,
"needsAChange": 1,
"leftOut": 3,
"canceled": 0,
"keptOnVersion": 0
},
"subscriptions": [
{
"subscriptionId": "sub_1a2b3c4d",
"status": "moving",
"code": null,
"message": null
},
{
"subscriptionId": "sub_9i0j1k2l",
"status": "needs_a_change",
"code": "addon_unavailable",
"message": "The version does not sell the add-on SSO, which the subscription has active. Deactivate it before moving the subscription."
},
{
"subscriptionId": "sub_5e6f7g8h",
"status": "left_out",
"code": "invalid_subscription_status",
"message": "A paused subscription cannot change versions. Only active, trialing and past due subscriptions can."
}
],
"createdAt": "2026-09-07T12:00:00.000Z",
"completedAt": null,
"canceledAt": null,
"object": "plan_move"
}
]
}{
"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": "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"
}
}List a plan’s latest moves of subscribers between versions, newest first, including the change of a single subscription, with how many are moving, moved, need a change, were left out, canceled or kept on their version.
Autorizaciones
Encabezados
API version used by this reference. Send this header to select this contract explicitly.
Parámetros de ruta
¿Esta página le ayudó?