notpanel
ServicesPricingFAQGiveaway
notpanel

The fastest and most affordable SMM panel. Trusted by 1M+ users worldwide.

Product

  • Services
  • Pricing
  • Why NotPanel
  • About
  • Developers
  • Blog
  • FAQ

Legal

  • Terms of Service
  • Privacy Policy
  • Refund Policy

Connect

  • Contact Us
  • support@notpanel.com

© © 2026 NotPanel. All rights reserved.

API documentation
+
API Documentation

Introduction

  • Overview
  • Getting started
  • Authentication
  • Rate limits
  • Errors

Catalog

  • List services

Orders

  • Place order
  • Order status
  • Refill
  • Cancel

Account

  • Balance

Webhooks

  • Manage webhooks

Reference

  • Changelog
  • SDKs & libraries

Need help?

support@notpanel.com →

Cancel

Cancels a pending order with an immediate atomic refund, or queues a cancel-request to the upstream provider for an in-flight order. Both flows return success synchronously — for in-flight cancels the eventual outcome shows up in the order's status the next time you query it.

POSThttps://notpanel.com/api/v2action=cancel
API key requiredRate limited (per-key + per-tier + per-IP)Body: application/x-www-form-urlencoded

Parameters

NameTypeDescription
keyRequiredstringYour API key.
actionRequiredstringMust be the literal string "cancel".
orderstringSingle-order ID. Either order or orders is required, not both.
ordersstring (CSV)Up to 100 comma-separated order IDs. Returns an array — each row carries either {order, cancel} on success or {order, error} per row.

Example request

Replace YOUR_API_KEYwith the key generated under your dashboard’s API page.

curl -X POST https://notpanel.com/api/v2 \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "key=YOUR_API_KEY&action=cancel&order=ord_01HG9X7KJP4N..."
const res = await fetch("https://notpanel.com/api/v2", {
  method: "POST",
  headers: { "Content-Type": "application/x-www-form-urlencoded" },
  body: new URLSearchParams({
    key: "YOUR_API_KEY",
    action: "cancel",
    order: "ord_01HG9X7KJP4N...",
  }),
});

const data = await res.json();
console.log(data);
import requests

res = requests.post(
  "https://notpanel.com/api/v2",
  data={
    "key": "YOUR_API_KEY",
    "action": "cancel",
    "order": "ord_01HG9X7KJP4N...",
},
)
print(res.json())
<?php
$body = http_build_query([
    'key' => 'YOUR_API_KEY',
    'action' => 'cancel',
    'order' => 'ord_01HG9X7KJP4N...',
]);

$response = file_get_contents('https://notpanel.com/api/v2', false, stream_context_create([
    'http' => [
        'method'  => 'POST',
        'header'  => "Content-Type: application/x-www-form-urlencoded\r\n",
        'content' => $body,
        'ignore_errors' => true,
    ],
]));

print_r(json_decode($response, true));

Example response

{
  "cancel": "ord_01HG9X7KJP4N..."
}

Common errors

StatusBodyCause
400{"error":"Order not found"}Order ID doesn't exist or doesn't belong to your account.
400{"error":"Order cannot be cancelled (already completed)"}Order is in a terminal state (completed, cancelled, refunded). Use refill instead if delivery was incomplete.
400{"error":"Service does not support cancellation"}Service has cancel=false in the catalog. Pending orders can still be cancelled regardless.

Multi-cancel response

The bulk shape mirrors refill — per-row success or per-row error. Sequential processing on our end avoids pool exhaustion when you cancel a large batch; expect roughly 50–100ms per row.

[
  { "order": "ord_01HG9X7K...", "cancel": "ord_01HG9X7K..." },
  { "order": "ord_01HG9X8M...", "error": "Order already completed" }
]

What "cancel" means under the hood

  • Pending orders are cancelled atomically — single transaction, instant refund, no upstream call. The order moves to cancelled immediately.
  • Processing / in_progress orders create a cancel-request row that's enqueued to a worker. The worker calls the upstream provider; if the provider accepts, we flip the order to cancelled and issue the refund inside one transaction. If the provider refuses (already delivered, partial complete), the order keeps its current status and you can use refill if applicable.
  • Idempotency. Re-cancel requests for the same order are a no-op — the underlying cancel-request table has UNIQUE on order ID.