---
title: Subscription Balancers
description: 'Client-side balancers for the JSON subscription: each enabled
  balancer is emitted as one extra config document whose members are the proxy
  outbounds of the selected inbounds (routing.balancers + burstObservatory).
  Managed in Settings → Sub Balancers.'
full: true
_openapi:
  preload:
    - ./public/openapi.json
  toc:
    - depth: 2
      title: List all subscription balancers in sort order (sort_order asc, id asc).
      url: '#list-all-subscription-balancers-in-sort-order-sort_order-asc-id-asc'
    - depth: 2
      title: Create a subscription balancer. It appears in the JSON subscription of
        every client that sits on at least one selected inbound.
      url: '#create-a-subscription-balancer-it-appears-in-the-json-subscription-of-every-client-that-sits-on-at-least-one-selected-inbound'
    - depth: 2
      title: Update a balancer by id. Accepts the same form fields as create (full-row
        update); omitting memberWeights clears stored weights, while omitting
        enabled keeps its current value.
      url: '#update-a-balancer-by-id-accepts-the-same-form-fields-as-create-full-row-update-omitting-memberweights-clears-stored-weights-while-omitting-enabled-keeps-its-current-value'
    - depth: 2
      title: Delete a balancer by id.
      url: '#delete-a-balancer-by-id'
    - depth: 2
      title: Delete a balancer by id (POST alias of DELETE for clients that cannot
        send DELETE).
      url: '#delete-a-balancer-by-id-post-alias-of-delete-for-clients-that-cannot-send-delete'
  structuredData:
    headings:
      - content: List all subscription balancers in sort order (sort_order asc, id asc).
        id: list-all-subscription-balancers-in-sort-order-sort_order-asc-id-asc
      - content: Create a subscription balancer. It appears in the JSON subscription of
          every client that sits on at least one selected inbound.
        id: create-a-subscription-balancer-it-appears-in-the-json-subscription-of-every-client-that-sits-on-at-least-one-selected-inbound
      - content: Update a balancer by id. Accepts the same form fields as create
          (full-row update); omitting memberWeights clears stored weights, while
          omitting enabled keeps its current value.
        id: update-a-balancer-by-id-accepts-the-same-form-fields-as-create-full-row-update-omitting-memberweights-clears-stored-weights-while-omitting-enabled-keeps-its-current-value
      - content: Delete a balancer by id.
        id: delete-a-balancer-by-id
      - content: Delete a balancer by id (POST alias of DELETE for clients that cannot
          send DELETE).
        id: delete-a-balancer-by-id-post-alias-of-delete-for-clients-that-cannot-send-delete
    contents: []
---

{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}

export default function Layout(props) {
  const { APIPage, OpenAPIPage } = props.components ?? {};
  // "APIPage" is the old name from v10, this allows both for backward compatibility
  const Comp = OpenAPIPage ?? APIPage;
  return (
    <>
      {props.children}
      <Comp document="./public/openapi.json" webhooks={[]} operations={[{"path":"/panel/api/sub-balancers","method":"get"},{"path":"/panel/api/sub-balancers","method":"post"},{"path":"/panel/api/sub-balancers/{id}","method":"post"},{"path":"/panel/api/sub-balancers/{id}","method":"delete"},{"path":"/panel/api/sub-balancers/{id}/del","method":"post"}]} showTitle />
    </>
  );
}