Dropto Site folders API

The Site folders API from Dropto — 3 operation(s) for site folders.

Operations 5

GET /api/site-folders Reads the whole of the account's folder tree, with the limits it is bounded by #
POST /api/site-folders Makes a folder, at the top level or inside another #
POST /api/site-folders/move Files several sites and folders into one folder, or to the top level, all or… #
DELETE /api/site-folders/{folderId} Removes a folder and lifts its folders and sites up to its parent #
PATCH /api/site-folders/{folderId} Renames a folder, moves it under another, or both #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/dropto-run:dropto-run-site-folders-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

dropto-run-site-folders-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Drop2Run.Api | v1 Site folders API
  version: 1.0.0
servers:
- description: Production
  url: https://dropto.run
tags:
- name: Site folders
paths:
  /api/site-folders:
    get:
      operationId: ListSiteFolders
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SiteFoldersResponse'
          description: OK
        '403':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Forbidden
      security:
      - session: []
      - accessToken: []
      summary: Reads the whole of the account's folder tree, with the limits it is bounded by
      tags:
      - Site folders
    post:
      operationId: CreateSiteFolder
      requestBody:
        content:
          application/json:
            schema:
              oneOf:
              - type: 'null'
              - $ref: '#/components/schemas/CreateSiteFolderRequest'
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SiteFolderResponse'
          description: Created
        '400':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Bad Request
        '403':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Forbidden
        '404':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Not Found
        '409':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Conflict
      security:
      - session: []
      - accessToken: []
      summary: Makes a folder, at the top level or inside another
      tags:
      - Site folders
  /api/site-folders/move:
    post:
      operationId: MoveSiteFolderItems
      requestBody:
        content:
          application/json:
            schema:
              oneOf:
              - type: 'null'
              - $ref: '#/components/schemas/MoveSiteFolderItemsRequest'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MoveSiteFolderItemsResponse'
          description: OK
        '400':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Bad Request
        '403':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Forbidden
        '404':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Not Found
        '409':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Conflict
      security:
      - session: []
      - accessToken: []
      summary: Files several sites and folders into one folder, or to the top level, all or…
      tags:
      - Site folders
  /api/site-folders/{folderId}:
    delete:
      operationId: DeleteSiteFolder
      parameters:
      - in: path
        name: folderId
        required: true
        schema:
          type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeleteSiteFolderResponse'
          description: OK
        '403':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Forbidden
        '404':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Not Found
        '409':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Conflict
      security:
      - session: []
      - accessToken: []
      summary: Removes a folder and lifts its folders and sites up to its parent
      tags:
      - Site folders
    patch:
      operationId: UpdateSiteFolder
      parameters:
      - in: path
        name: folderId
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              oneOf:
              - type: 'null'
              - $ref: '#/components/schemas/UpdateSiteFolderRequest'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SiteFolderResponse'
          description: OK
        '400':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Bad Request
        '403':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Forbidden
        '404':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Not Found
        '409':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
          description: Conflict
      security:
      - session: []
      - accessToken: []
      summary: Renames a folder, moves it under another, or both
      tags:
      - Site folders
components:
  schemas:
    ProblemDetails:
      properties:
        detail:
          type:
          - 'null'
          - string
        instance:
          type:
          - 'null'
          - string
        status:
          format: int32
          pattern: ^-?(?:0|[1-9]\d*)$
          type:
          - 'null'
          - integer
          - string
        title:
          type:
          - 'null'
          - string
        type:
          type:
          - 'null'
          - string
      type: object
    SiteFoldersResponse:
      description: Response of `GET /site-folders`.
      properties:
        folders:
          description: Every folder the account holds, by name.
          items:
            $ref: '#/components/schemas/SiteFolderNode'
          type: array
        maxDepth:
          description: 'How deeply folders may nest. Sent for the same reason as MaxFolders: the drag

            target that would break this rule can be refused before the drop rather than after the request.'
          format: int32
          pattern: ^-?(?:0|[1-9]\d*)$
          type:
          - integer
          - string
        maxFolders:
          description: 'How many folders this account may hold in total.


            Sent so the dashboard can grey out "New folder" before somebody names one and is refused. A client

            that had to discover the limit by hitting it would have to discard what they typed.'
          format: int32
          pattern: ^-?(?:0|[1-9]\d*)$
          type:
          - integer
          - string
      required:
      - folders
      - maxFolders
      - maxDepth
      type: object
    MoveSiteFolderItemsResponse:
      description: Response of `POST /site-folders/move`.
      properties:
        foldersMoved:
          description: Folders that changed parent, counted the same way.
          format: int32
          pattern: ^-?(?:0|[1-9]\d*)$
          type:
          - integer
          - string
        sitesMoved:
          description: Sites that changed folder. Fewer than were sent when some were already there, which is not an error.
          format: int32
          pattern: ^-?(?:0|[1-9]\d*)$
          type:
          - integer
          - string
        targetId:
          description: The folder everything is now in, or null for the top level.
          type:
          - 'null'
          - string
      required:
      - targetId
      - sitesMoved
      - foldersMoved
      type: object
    DeleteSiteFolderResponse:
      description: Response of `DELETE /site-folders/{folderId}`.
      properties:
        folderId:
          description: The folder that was removed.
          type: string
        foldersMoved:
          description: How many folders were lifted one level.
          format: int32
          pattern: ^-?(?:0|[1-9]\d*)$
          type:
          - integer
          - string
        movedTo:
          description: 'Where its contents went: the deleted folder''s own parent, or null when they are now at the root.'
          type:
          - 'null'
          - string
        sitesMoved:
          description: 'How many sites were lifted one level. Reported so the dashboard can say what happened rather than

            leaving somebody to find their sites somewhere they did not put them.'
          format: int32
          pattern: ^-?(?:0|[1-9]\d*)$
          type:
          - integer
          - string
      required:
      - folderId
      - movedTo
      - foldersMoved
      - sitesMoved
      type: object
    CreateSiteFolderRequest:
      description: Body of `POST /site-folders`.
      properties:
        name:
          description: What to call the folder. Cleaned the way a site's name is.
          type:
          - 'null'
          - string
        parentId:
          description: 'Folder to create it inside. Omit it, or send `"root"`, to create it at the top level — see

            string SiteFolderAccess.RootToken for why a literal token rather than null.'
          type:
          - 'null'
          - string
      type: object
    SiteFolderNode:
      description: One folder in the tree.
      properties:
        createdAt:
          description: When the folder was created.
          format: date-time
          type: string
        folderId:
          description: ULID of the folder.
          type: string
        name:
          description: What the owner calls it.
          type: string
        parentId:
          description: The folder it sits inside, or null when it sits at the root.
          type:
          - 'null'
          - string
        siteCount:
          description: 'Sites filed directly in this folder, not counting those in folders inside it. Deleted sites are not

            counted — they are gone from the listing, so counting them would label an empty folder as holding

            something.'
          format: int32
          pattern: ^-?(?:0|[1-9]\d*)$
          type:
          - integer
          - string
        updatedAt:
          description: When it was last renamed or moved.
          format: date-time
          type: string
      required:
      - folderId
      - parentId
      - name
      - siteCount
      - createdAt
      - updatedAt
      type: object
    UpdateSiteFolderRequest:
      description: Body of `PATCH /site-folders/{folderId}`.
      properties:
        name:
          description: A new name, or null to leave it alone.
          type:
          - 'null'
          - string
        parentId:
          description: 'Where to move it: a folder id, or `"root"` to move it to the top level. Null leaves it where it

            is — see string SiteFolderAccess.RootToken for why moving to the root needs a token of its

            own rather than a null.'
          type:
          - 'null'
          - string
      type: object
    SiteFolderResponse:
      description: Response of the endpoints that write a single folder.
      properties:
        folder:
          $ref: '#/components/schemas/SiteFolderNode'
          description: The folder as it now stands.
          __uniqueRefKey: '#/components/schemas/SiteFolderNode__12'
      required:
      - folder
      type: object
    MoveSiteFolderItemsRequest:
      description: Body of `POST /site-folders/move`.
      properties:
        folderIds:
          description: Folders to move under it. May be empty when only sites move.
          items:
            type: string
          type:
          - 'null'
          - array
        siteIds:
          description: Sites to file there. May be empty when only folders move.
          items:
            type: string
          type:
          - 'null'
          - array
        targetId:
          description: 'Where everything goes: a folder id, or `"root"` for the top level. Required — see

            string SiteFolderAccess.RootToken for why the root is a token rather than an absent value.'
          type:
          - 'null'
          - string
      type: object
  securitySchemes:
    accessToken:
      description: 'A personal access token, created at /account/tokens. Sent as `Authorization: Bearer d2r_...`. A rejected token answers 401 with `invalid_token`, which is deliberately distinct from the 403 a valid credential gets for something it may not do.'
      scheme: bearer
      type: http
    claimToken:
      description: Returned once when an anonymous site is created, and the only credential that site has until somebody signs in and claims it.
      in: header
      name: X-Claim-Token
      type: apiKey
    session:
      description: The browser session, set by signing in with Google. HttpOnly, so a script cannot read it and a client outside a browser cannot send it.
      in: cookie
      name: d2r_session
      type: apiKey