> ## Documentation Index
> Fetch the complete documentation index at: https://docs.shoply.gg/llms.txt
> Use this file to discover all available pages before exploring further.

# Update a reseller

> Only what is sent changes. A paused reseller signs in and reads their orders, and cannot buy or top up. Refused with `reseller_removed` for one the store removed.

Needs the `resellers.write` permission (Change Resellers).



## OpenAPI

````yaml /api-reference/openapi.json put /stores/{storeId}/resellers/{resellerId}
openapi: 3.1.0
info:
  title: Shoply API
  version: '1'
  description: >-
    Everything a store's own server can do with a secret API key: its catalogue,
    orders, customers, marketing, finance and the rest of what the dashboard
    does. And the Customer API, which a buyer's own device asks with a token of
    theirs.
servers:
  - url: https://api.shoply.gg/v1
security:
  - apiKey: []
tags:
  - name: API key
  - name: Store
  - name: Domain
  - name: Payment methods
  - name: Analytics
  - name: Storefronts
  - name: Storefront code
  - name: Payment Routing
  - name: Custom payment methods
  - name: Products
  - name: Product pictures
  - name: Stock
  - name: Categories
  - name: Upsells
  - name: Subscriptions
  - name: Orders
  - name: Invoices
  - name: Reviews
  - name: Coupons
  - name: Coupon categories
  - name: Coupon pop-up
  - name: Sales
  - name: Blog
  - name: Search settings
  - name: Redirects
  - name: Sitemap
  - name: Cart Recovery
  - name: Email Marketing
  - name: Email Templates
  - name: Customers
  - name: Affiliates
  - name: Support Tickets
  - name: Teams
  - name: Resellers
  - name: Blacklist
  - name: Allowlist
  - name: Fraud protection
  - name: Disputes
  - name: Finance
  - name: Tax
  - name: Expenses
  - name: Expense setup
  - name: API requests
  - name: Webhook endpoints
  - name: Webhook deliveries
  - name: Customer API
paths:
  /stores/{storeId}/resellers/{resellerId}:
    put:
      tags:
        - Resellers
      summary: Update a reseller
      description: >-
        Only what is sent changes. A paused reseller signs in and reads their
        orders, and cannot buy or top up. Refused with `reseller_removed` for
        one the store removed.


        Needs the `resellers.write` permission (Change Resellers).
      operationId: resellers.update
      parameters:
        - name: storeId
          in: path
          required: true
          description: >-
            The store's ID. A key reaches the store it was made in: `GET /key`
            answers which.
          schema:
            type: string
        - name: resellerId
          in: path
          required: true
          description: The reseller.
          schema:
            type: string
        - $ref: '#/components/parameters/IdempotencyKey'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                tierId:
                  type: string
                  description: Their tier. Empty, none.
                discount:
                  type: number
                  description: >-
                    Their own discount off every Reseller Price, in percent,
                    0.01 to 99.99, in place of their tier's. Null or empty,
                    none.
                status:
                  type: string
                  description: Whether they can buy and top up.
                  enum:
                    - active
                    - paused
      responses:
        '200':
          description: It worked.
          content:
            application/json:
              schema:
                type: object
                properties:
                  success:
                    type: boolean
                  message:
                    nullable: true
                  code:
                    nullable: true
                  data:
                    type: object
                    properties:
                      id:
                        type: string
                      name:
                        type: string
                      website:
                        type: string
                      email:
                        type: string
                      tierId:
                        type: string
                      tierName:
                        type: string
                      tierDiscount:
                        type: number
                      discount:
                        nullable: true
                      paysOff:
                        type: number
                      balance:
                        type: integer
                      status:
                        type: string
                      members:
                        type: integer
                      spent30:
                        type: integer
                      lastOrderAt:
                        nullable: true
                      joinedAt:
                        type: string
                      removedAt:
                        nullable: true
                      inviteName:
                        nullable: true
                      team:
                        type: array
                        items:
                          type: object
                          properties:
                            id:
                              type: string
                            email:
                              type: string
                            owner:
                              type: boolean
                            permissions:
                              type: array
                              items:
                                type: string
                            access:
                              type: object
                              properties:
                                buy:
                                  type: boolean
                                topup:
                                  type: boolean
                                keys:
                                  type: boolean
                                api:
                                  type: boolean
                            twoFactor:
                              type: boolean
                            verified:
                              type: boolean
                            lastSeenAt:
                              nullable: true
                            joinedAt:
                              type: string
                      catalogue:
                        type: array
                        items:
                          type: object
                          properties:
                            id:
                              type: string
                            label:
                              type: string
                            permissions:
                              type: array
                              items:
                                type: object
                                properties:
                                  key:
                                    type: string
                                  label:
                                    type: string
                                  about:
                                    type: string
                                  needs:
                                    type:
                                      - array
                                      - object
                  meta:
                    type: object
                    properties:
                      panel:
                        type: object
                        properties:
                          enabled:
                            type: boolean
                          currency:
                            type: string
                          minTopup:
                            type: integer
                      history:
                        type:
                          - array
                          - object
                      tiers:
                        type: array
                        items:
                          type: object
                          properties:
                            id:
                              type: string
                            name:
                              type: string
                            discount:
                              type: number
                            resellers:
                              type: integer
                            spent30:
                              type: integer
                      limits:
                        type: object
                        properties:
                          members:
                            type: integer
              example:
                success: true
                message: null
                code: null
                data:
                  id: 5802fdf5-5c97-40bb-b505-29a900c278e4
                  name: keydepot.example.com
                  website: keydepot.example.com
                  email: team@keydepot.example.com
                  tierId: 53272267-b8de-4f7f-9c0e-00f69122b91e
                  tierName: Gold
                  tierDiscount: 12.5
                  discount: null
                  paysOff: 12.5
                  balance: 0
                  status: active
                  members: 2
                  spent30: 0
                  lastOrderAt: null
                  joinedAt: '2026-11-09 11:32:36.157'
                  removedAt: null
                  inviteName: null
                  team:
                    - id: 5b6557ec-e06f-4923-bcc1-65addbaf6234
                      email: team@keydepot.example.com
                      owner: true
                      permissions:
                        - products.view
                        - products.buy
                      access:
                        buy: true
                        topup: true
                        keys: true
                        api: true
                      twoFactor: false
                      verified: true
                      lastSeenAt: null
                      joinedAt: '2026-11-09 11:32:36.157'
                    - id: 84709052-59e9-4607-b5f8-07bd5f107eac
                      email: sam@keydepot.example.com
                      owner: false
                      permissions: []
                      access:
                        buy: false
                        topup: false
                        keys: false
                        api: false
                      twoFactor: false
                      verified: true
                      lastSeenAt: null
                      joinedAt: '2026-11-09 11:32:37.157'
                  catalogue:
                    - id: buy
                      label: Buying
                      permissions:
                        - key: products.view
                          label: View Products
                          about: The products on Buy, with their prices and stock.
                          needs: []
                        - key: products.buy
                          label: Buy
                          about: Buy from the panel with the balance.
                          needs:
                            - products.view
                            - balance.view
                    - id: orders
                      label: Orders
                      permissions:
                        - key: orders.view
                          label: View Orders
                          about: >-
                            Every order and what it cost, and the spending and
                            profit on the Overview.
                          needs: []
                        - key: orders.keys
                          label: See Delivered Keys
                          about: >-
                            The keys and items an order handed over. Without it
                            an order says what was bought, not what was
                            delivered.
                          needs:
                            - orders.view
                meta:
                  panel:
                    enabled: true
                    currency: USD
                    minTopup: 25
                  history: []
                  tiers:
                    - id: 53272267-b8de-4f7f-9c0e-00f69122b91e
                      name: Gold
                      discount: 12.5
                      resellers: 1
                      spent30: 0
                  limits:
                    members: 2
        '401':
          $ref: '#/components/responses/NoKey'
        '403':
          $ref: '#/components/responses/NotAllowed'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/Refused'
        '429':
          $ref: '#/components/responses/TooMany'
      x-codeSamples:
        - lang: javascript
          label: Node.js
          source: |
            import Shoply from "@shoplygg/node";

            const shoply = new Shoply({ apiKey: process.env.SHOPLY_API_KEY });

            const result = await shoply.resellers.update("RESELLER_ID");
        - lang: php
          label: PHP
          source: |
            <?php

            require 'vendor/autoload.php';

            $shoply = new Shoply\Client(['apiKey' => getenv('SHOPLY_API_KEY')]);

            $result = $shoply->resellers->update('RESELLER_ID');
        - lang: python
          label: Python
          source: |
            import shoply

            client = shoply.Client()  # reads SHOPLY_API_KEY

            result = client.resellers.update("RESELLER_ID")
components:
  parameters:
    IdempotencyKey:
      name: Idempotency-Key
      in: header
      required: false
      description: >-
        A word of your own for this one change, up to 180 letters, digits, dots,
        dashes, underscores and colons. Sent again with the same key, the
        request is not carried out twice: the first answer comes back, with
        `Idempotent-Replay: true`.
      schema:
        type: string
  responses:
    NoKey:
      description: >-
        No API key was sent, or the one sent is not a live key:
        `api_key_required`, `invalid_api_key`.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Refusal'
    NotAllowed:
      description: >-
        The key is real and may not do this: `missing_scope` (with
        `requiredScope`), `ip_not_allowed`, `account_unavailable`, or
        `dashboard_only` for something only a person in the dashboard may do.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Refusal'
    NotFound:
      description: >-
        There is no such thing in this store: `not_found`. A store that is not
        the key's own is answered the same way.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Refusal'
    Refused:
      description: >-
        The request was understood and not carried out. `validation_failed` says
        what is wrong with each field under `errors`; other codes are the
        route's own.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Refusal'
    TooMany:
      description: >-
        The key has used up its budget for now: `rate_limited`. `Retry-After`
        says how many seconds to wait.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Refusal'
  schemas:
    Refusal:
      type: object
      properties:
        success:
          type: boolean
          example: false
        message:
          type: string
          description: What is wrong, in words for a person.
        code:
          type: string
          description: What is wrong, as a word that does not change.
        data:
          nullable: true
        errors:
          type: object
          description: >-
            For `validation_failed`: what is wrong with each field, by the
            field's name.
          additionalProperties:
            type: string
      required:
        - success
        - message
        - code
  securitySchemes:
    apiKey:
      type: http
      scheme: bearer
      description: >-
        A secret API key, made under Developers in the dashboard:
        `Authorization: Bearer shoply_sk_...`

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.