Skip to content

[BUG] listOrderResourceUsageMetricsV1 returns 200 with empty arrays for an unentitled order, while its sibling endpoint returns 404 #60

Description

@dr-arioso

Bug Description

Two sibling endpoints in the same API, both scoped in their own documentation
to Agency Plan orders, decline the same unentitled request two different
ways when queried against a non-Agency order. One returns a well-formed
200 body with populated limits but empty metrics and websites
arrays — a response that is indistinguishable from a true reading of
"nothing happening" on an entitled order. The other returns a 404-shaped
error. Same API, same entitlement boundary, two different behaviors.

Steps to Reproduce

  1. Have an order on a plan that is not Agency Plan (tested against a
    hostinger_business order).
  2. Call listOrderResourceUsageMetricsV1 with a 24h window, then again with
    a 720h window.
  3. Call listAgencyPlanOrderDiskUsageMetricsV1 on the same order with a
    1-day window, then again with a 30-day window.
  4. Compare the two response shapes.

Both pairs of calls were made within the same minute against the same order.

Expected Behavior

An unentitled request against an Agency-Plan-scoped endpoint should be
distinguishable from a true empty reading — either both endpoints should
signal "not entitled" the same way, or the resource-usage endpoint should
not return a 200 with empty arrays when the caller has no entitlement to
see resource usage at all.

Actual Behavior

Endpoint Windows tried Response
listOrderResourceUsageMetricsV1 24 h, 720 h 200, well-formed body, populated limits, empty metrics and websites
listAgencyPlanOrderDiskUsageMetricsV1 1 d, 30 d {"message":"[Hosting:9999] Not found.","correlation_id":…}

The first endpoint's 200-with-empty-arrays is indistinguishable, to any
consumer, from a true reading that nothing is happening — and its sibling
already demonstrates the honest behavior instead, so this reads as an
inconsistency rather than a deliberate design choice.

Error Messages / Stack Trace

Correlation ids for the two disk-usage calls (both 404-shaped):

  • 1 day window: a2a3ce32-3819-4503-8c30-967f204bec6c
  • 30 day window: a2a3ce42-1ee5-4074-bbf7-010c9eb28d02

Both returned:

{"message":"[Hosting:9999] Not found.","correlation_id":""}

Additional Context

Both endpoints are documented as scoped to Agency Plan orders. This was
observed on a hostinger_business-plan order, so the request was unentitled
either way — the finding is about the two endpoints disagreeing on how to
decline it, not about which one is "right" to decline.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions