Browse the docs

Client galleries

Client galleries in Allpage: its screens, what you can do there and its operations.

Availability. Works when the business has it turned on and its plan includes it. Otherwise its tools answer needs (kind module) with how to turn it on: business.useTool, or a plan that includes it.

Screens

  • Galleries (/galleries)

What you can do

  • Start a client gallery: the assistant can do it on its own
  • Change a client gallery: the assistant can do it on its own
  • Save a gallery set: the assistant can do it on its own
  • Remove a gallery set: the assistant can do it on its own
  • Share a gallery with the client: the assistant asks you first
  • Make a new gallery link: the assistant asks you first
  • Delete a client gallery: the assistant asks you first

For apps

Tools

  • galleries_create (Start a client gallery): a private change: runs now if the owner lets your app make private changes, otherwise waits for their approval
  • galleries_update (Change a client gallery): a private change: runs now if the owner lets your app make private changes, otherwise waits for their approval
  • galleries_saveSet (Save a gallery set): a private change: runs now if the owner lets your app make private changes, otherwise waits for their approval
  • galleries_removeSet (Remove a gallery set): a private change: runs now if the owner lets your app make private changes, otherwise waits for their approval
  • galleries_share (Share a gallery with the client): customers see it: waits for the owner’s approval unless they chose Just do it for your app
  • galleries_newLink (Make a new gallery link): customers see it: waits for the owner’s approval unless they chose Just do it for your app
  • galleries_remove (Delete a client gallery): customers see it: waits for the owner’s approval unless they chose Just do it for your app

Reads

  • galleries_list (List your client galleries)
  • galleries_get (See a client gallery)
  • galleries_downloads (See a gallery’s downloads)
  • galleries_toDeliver (See galleries not shared yet)
  • galleries_customer (See a client’s galleries)
  • galleries_summary (What’s going on)

The owner’s screens

  • Galleries (/galleries)

Operations

Each one's input and output, as JSON Schema. Ids are typed (typed ids).

galleries.create

Start a client gallery

Kind
Change
Tool
galleries_create
Scope
galleries:write
Reached by
API, MCP, ChatGPT

a private change: runs now if the owner lets your app make private changes, otherwise waits for their approval

Input
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "customerId": {
      "description": "Someone on your list; or send `name` with `email` or `phone`.",
      "type": "string",
      "pattern": "^cus_[0-9a-hjkmnp-tv-z]{26}$"
    },
    "name": {
      "default": "",
      "description": "Their name, without a customerId.",
      "type": "string",
      "maxLength": 120
    },
    "email": {
      "label": "Email",
      "control": "email",
      "description": "Their email, without a customerId.",
      "type": "string",
      "maxLength": 320
    },
    "phone": {
      "label": "Phone",
      "control": "tel",
      "description": "Their mobile, without a customerId.",
      "type": "string",
      "maxLength": 40
    },
    "galleryName": {
      "description": "Left out, “<client>’s photos”.",
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "agreementId": {
      "description": "The sale it delivers, for releasing downloads once it’s paid.",
      "type": "string",
      "pattern": "^agr_[0-9a-hjkmnp-tv-z]{26}$"
    },
    "sets": {
      "default": [
        "Photos"
      ],
      "description": "Set names, in order.",
      "minItems": 1,
      "maxItems": 20,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 80
      }
    }
  },
  "additionalProperties": false
}
Output
{
  "oneOf": [
    {
      "type": "object",
      "required": [
        "status",
        "title",
        "change"
      ],
      "properties": {
        "status": {
          "const": "done"
        },
        "title": {
          "type": "string"
        },
        "change": {
          "type": "boolean"
        },
        "result": {},
        "undo": {
          "type": "object",
          "properties": {
            "command": {
              "type": "string"
            },
            "input": {}
          }
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "proposalId"
      ],
      "properties": {
        "status": {
          "const": "proposed"
        },
        "proposalId": {
          "type": "string"
        },
        "preview": {},
        "approveAt": {
          "type": "string",
          "format": "uri"
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "check"
      ],
      "properties": {
        "status": {
          "const": "pending"
        },
        "message": {
          "type": "string"
        },
        "check": {
          "type": "string"
        },
        "checkInput": {
          "type": "object"
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "message"
      ],
      "properties": {
        "status": {
          "const": "refused"
        },
        "message": {
          "type": "string"
        },
        "field": {
          "type": "string"
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "kind",
        "message"
      ],
      "properties": {
        "status": {
          "const": "needs"
        },
        "kind": {
          "type": "string"
        },
        "message": {
          "type": "string"
        },
        "note": {
          "type": "string"
        }
      }
    }
  ]
}

galleries.customer

See a client’s galleries

Kind
Read
Tool
galleries_customer
Scope
galleries:read
Reached by
API, MCP

Read-only.

Input
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "customerId": {
      "type": "string",
      "pattern": "^cus_[0-9a-hjkmnp-tv-z]{26}$",
      "description": "A customer id: cus_ and 26 letters and digits."
    }
  },
  "required": [
    "customerId"
  ],
  "additionalProperties": false
}
Output
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "oneOf": [
    {
      "type": "object",
      "properties": {
        "status": {
          "type": "string",
          "const": "done"
        },
        "title": {
          "type": "string"
        },
        "change": {
          "type": "boolean"
        },
        "result": {
          "type": "object",
          "properties": {
            "galleries": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "pattern": "^gal_[0-9a-hjkmnp-tv-z]{26}$",
                    "description": "A gallery id: gal_ and 26 letters and digits."
                  },
                  "name": {
                    "type": "string"
                  },
                  "shared": {
                    "type": "boolean"
                  },
                  "closed": {
                    "type": "boolean"
                  },
                  "photos": {
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  "favorites": {
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  }
                },
                "required": [
                  "id",
                  "name",
                  "shared",
                  "closed",
                  "photos",
                  "favorites"
                ],
                "additionalProperties": false
              }
            },
            "total": {
              "type": "integer",
              "minimum": -9007199254740991,
              "maximum": 9007199254740991
            }
          },
          "required": [
            "galleries",
            "total"
          ],
          "additionalProperties": false
        }
      },
      "required": [
        "status",
        "title",
        "change",
        "result"
      ],
      "additionalProperties": false
    },
    {
      "type": "object",
      "properties": {
        "status": {
          "type": "string",
          "const": "refused"
        },
        "title": {
          "type": "string"
        },
        "change": {
          "type": "boolean"
        },
        "message": {
          "type": "string"
        },
        "field": {
          "type": "string"
        }
      },
      "required": [
        "status",
        "title",
        "change",
        "message"
      ],
      "additionalProperties": false
    },
    {
      "type": "object",
      "properties": {
        "status": {
          "type": "string",
          "const": "needs"
        },
        "kind": {
          "type": "string",
          "enum": [
            "module",
            "portal",
            "business",
            "limit",
            "paused",
            "reauth"
          ]
        },
        "title": {
          "type": "string"
        },
        "change": {
          "type": "boolean"
        },
        "message": {
          "type": "string"
        },
        "note": {
          "type": "string"
        }
      },
      "required": [
        "status",
        "kind",
        "title",
        "change",
        "message"
      ],
      "additionalProperties": {}
    }
  ]
}

galleries.downloads

See a gallery’s downloads

Kind
Read
Tool
galleries_downloads
Scope
galleries:read
Reached by
API, MCP

Read-only.

Input
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "galleryId": {
      "type": "string",
      "pattern": "^gal_[0-9a-hjkmnp-tv-z]{26}$",
      "description": "A gallery id: gal_ and 26 letters and digits."
    }
  },
  "required": [
    "galleryId"
  ],
  "additionalProperties": false
}
Output
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "oneOf": [
    {
      "type": "object",
      "properties": {
        "status": {
          "type": "string",
          "const": "done"
        },
        "title": {
          "type": "string"
        },
        "change": {
          "type": "boolean"
        },
        "result": {
          "type": "object",
          "properties": {
            "downloads": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "pattern": "^gdl_[0-9a-hjkmnp-tv-z]{26}$",
                    "description": "A gallery download id: gdl_ and 26 letters and digits."
                  },
                  "at": {
                    "type": "string"
                  },
                  "viewer": {
                    "type": "string"
                  },
                  "name": {
                    "type": "string"
                  },
                  "web": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "id",
                  "at",
                  "viewer",
                  "name",
                  "web"
                ],
                "additionalProperties": false
              }
            },
            "total": {
              "type": "integer",
              "minimum": -9007199254740991,
              "maximum": 9007199254740991
            }
          },
          "required": [
            "downloads",
            "total"
          ],
          "additionalProperties": false
        }
      },
      "required": [
        "status",
        "title",
        "change",
        "result"
      ],
      "additionalProperties": false
    },
    {
      "type": "object",
      "properties": {
        "status": {
          "type": "string",
          "const": "refused"
        },
        "title": {
          "type": "string"
        },
        "change": {
          "type": "boolean"
        },
        "message": {
          "type": "string"
        },
        "field": {
          "type": "string"
        }
      },
      "required": [
        "status",
        "title",
        "change",
        "message"
      ],
      "additionalProperties": false
    },
    {
      "type": "object",
      "properties": {
        "status": {
          "type": "string",
          "const": "needs"
        },
        "kind": {
          "type": "string",
          "enum": [
            "module",
            "portal",
            "business",
            "limit",
            "paused",
            "reauth"
          ]
        },
        "title": {
          "type": "string"
        },
        "change": {
          "type": "boolean"
        },
        "message": {
          "type": "string"
        },
        "note": {
          "type": "string"
        }
      },
      "required": [
        "status",
        "kind",
        "title",
        "change",
        "message"
      ],
      "additionalProperties": {}
    }
  ]
}

galleries.get

See a client gallery

Kind
Read
Tool
galleries_get
Scope
galleries:read
Reached by
API, MCP, ChatGPT

Read-only.

Input
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "galleryId": {
      "type": "string",
      "pattern": "^gal_[0-9a-hjkmnp-tv-z]{26}$",
      "description": "A gallery id: gal_ and 26 letters and digits."
    }
  },
  "required": [
    "galleryId"
  ],
  "additionalProperties": false
}
Output
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "oneOf": [
    {
      "type": "object",
      "properties": {
        "status": {
          "type": "string",
          "const": "done"
        },
        "title": {
          "type": "string"
        },
        "change": {
          "type": "boolean"
        },
        "result": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "pattern": "^gal_[0-9a-hjkmnp-tv-z]{26}$",
              "description": "A gallery id: gal_ and 26 letters and digits."
            },
            "name": {
              "type": "string"
            },
            "message": {
              "type": "string"
            },
            "customerId": {
              "type": "string",
              "pattern": "^cus_[0-9a-hjkmnp-tv-z]{26}$",
              "description": "A customer id: cus_ and 26 letters and digits."
            },
            "customer": {
              "type": "string"
            },
            "agreementId": {
              "anyOf": [
                {
                  "type": "string",
                  "pattern": "^agr_[0-9a-hjkmnp-tv-z]{26}$",
                  "description": "A agreement id: agr_ and 26 letters and digits."
                },
                {
                  "type": "null"
                }
              ]
            },
            "shared": {
              "type": "boolean"
            },
            "closed": {
              "type": "boolean"
            },
            "url": {
              "type": [
                "string",
                "null"
              ]
            },
            "expiresOn": {
              "type": [
                "string",
                "null"
              ]
            },
            "hasPin": {
              "type": "boolean"
            },
            "watermark": {
              "type": "boolean"
            },
            "canWatermark": {
              "type": "boolean"
            },
            "releaseOnPaid": {
              "type": "boolean"
            },
            "downloads": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "original",
                  "web"
                ]
              }
            },
            "coverFileId": {
              "anyOf": [
                {
                  "type": "string",
                  "pattern": "^fil_[0-9a-hjkmnp-tv-z]{26}$",
                  "description": "A file id: fil_ and 26 letters and digits."
                },
                {
                  "type": "null"
                }
              ]
            },
            "payment": {
              "anyOf": [
                {
                  "type": "object",
                  "properties": {
                    "released": {
                      "type": "boolean"
                    },
                    "due": {
                      "type": "string"
                    },
                    "refunded": {
                      "type": "boolean"
                    }
                  },
                  "required": [
                    "released",
                    "due",
                    "refunded"
                  ],
                  "additionalProperties": false
                },
                {
                  "type": "null"
                }
              ]
            },
            "sets": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "pattern": "^gst_[0-9a-hjkmnp-tv-z]{26}$",
                    "description": "A gallery set id: gst_ and 26 letters and digits."
                  },
                  "collectionId": {
                    "type": "string",
                    "pattern": "^alb_[0-9a-hjkmnp-tv-z]{26}$",
                    "description": "A album id: alb_ and 26 letters and digits."
                  },
                  "name": {
                    "type": "string"
                  },
                  "photos": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "id": {
                          "type": "string",
                          "pattern": "^fil_[0-9a-hjkmnp-tv-z]{26}$",
                          "description": "A file id: fil_ and 26 letters and digits."
                        },
                        "name": {
                          "type": "string"
                        },
                        "alt": {
                          "type": "string"
                        },
                        "kind": {
                          "type": "string"
                        },
                        "thumb": {
                          "type": [
                            "string",
                            "null"
                          ]
                        },
                        "marked": {
                          "type": "boolean"
                        },
                        "favorites": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        }
                      },
                      "required": [
                        "id",
                        "name",
                        "alt",
                        "kind",
                        "thumb",
                        "marked",
                        "favorites"
                      ],
                      "additionalProperties": false
                    }
                  }
                },
                "required": [
                  "id",
                  "collectionId",
                  "name",
                  "photos"
                ],
                "additionalProperties": false
              }
            },
            "viewers": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "pattern": "^gvw_[0-9a-hjkmnp-tv-z]{26}$",
                    "description": "A gallery viewer id: gvw_ and 26 letters and digits."
                  },
                  "name": {
                    "type": "string"
                  },
                  "isClient": {
                    "type": "boolean"
                  },
                  "lastSeenAt": {
                    "type": "string"
                  },
                  "favorites": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "fileId": {
                          "type": "string",
                          "pattern": "^fil_[0-9a-hjkmnp-tv-z]{26}$",
                          "description": "A file id: fil_ and 26 letters and digits."
                        },
                        "name": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "fileId",
                        "name"
                      ],
                      "additionalProperties": false
                    }
                  }
                },
                "required": [
                  "id",
                  "name",
                  "isClient",
                  "lastSeenAt",
                  "favorites"
                ],
                "additionalProperties": false
              }
            },
            "recentDownloads": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "at": {
                    "type": "string"
                  },
                  "when": {
                    "type": "string"
                  },
                  "viewer": {
                    "type": "string"
                  },
                  "name": {
                    "type": "string"
                  },
                  "size": {
                    "type": "string",
                    "enum": [
                      "original",
                      "web"
                    ]
                  }
                },
                "required": [
                  "at",
                  "when",
                  "viewer",
                  "name",
                  "size"
                ],
                "additionalProperties": false
              }
            }
          },
          "required": [
            "id",
            "name",
            "message",
            "customerId",
            "customer",
            "agreementId",
            "shared",
            "closed",
            "url",
            "expiresOn",
            "hasPin",
            "watermark",
            "canWatermark",
            "releaseOnPaid",
            "downloads",
            "coverFileId",
            "payment",
            "sets",
            "viewers",
            "recentDownloads"
          ],
          "additionalProperties": false
        }
      },
      "required": [
        "status",
        "title",
        "change",
        "result"
      ],
      "additionalProperties": false
    },
    {
      "type": "object",
      "properties": {
        "status": {
          "type": "string",
          "const": "refused"
        },
        "title": {
          "type": "string"
        },
        "change": {
          "type": "boolean"
        },
        "message": {
          "type": "string"
        },
        "field": {
          "type": "string"
        }
      },
      "required": [
        "status",
        "title",
        "change",
        "message"
      ],
      "additionalProperties": false
    },
    {
      "type": "object",
      "properties": {
        "status": {
          "type": "string",
          "const": "needs"
        },
        "kind": {
          "type": "string",
          "enum": [
            "module",
            "portal",
            "business",
            "limit",
            "paused",
            "reauth"
          ]
        },
        "title": {
          "type": "string"
        },
        "change": {
          "type": "boolean"
        },
        "message": {
          "type": "string"
        },
        "note": {
          "type": "string"
        }
      },
      "required": [
        "status",
        "kind",
        "title",
        "change",
        "message"
      ],
      "additionalProperties": {}
    }
  ]
}

galleries.list

List your client galleries

Kind
Read
Tool
galleries_list
Scope
galleries:read
Reached by
API, MCP, ChatGPT

Read-only.

Input
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "customerId": {
      "type": "string",
      "pattern": "^cus_[0-9a-hjkmnp-tv-z]{26}$",
      "description": "A customer id: cus_ and 26 letters and digits."
    }
  },
  "additionalProperties": false
}
Output
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "oneOf": [
    {
      "type": "object",
      "properties": {
        "status": {
          "type": "string",
          "const": "done"
        },
        "title": {
          "type": "string"
        },
        "change": {
          "type": "boolean"
        },
        "result": {
          "type": "object",
          "properties": {
            "galleries": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "pattern": "^gal_[0-9a-hjkmnp-tv-z]{26}$",
                    "description": "A gallery id: gal_ and 26 letters and digits."
                  },
                  "name": {
                    "type": "string"
                  },
                  "customerId": {
                    "type": "string",
                    "pattern": "^cus_[0-9a-hjkmnp-tv-z]{26}$",
                    "description": "A customer id: cus_ and 26 letters and digits."
                  },
                  "customer": {
                    "type": "string"
                  },
                  "shared": {
                    "type": "boolean"
                  },
                  "closed": {
                    "type": "boolean"
                  },
                  "expiresOn": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "photos": {
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  "favorites": {
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  "downloads": {
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  "cover": {
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                },
                "required": [
                  "id",
                  "name",
                  "customerId",
                  "customer",
                  "shared",
                  "closed",
                  "expiresOn",
                  "photos",
                  "favorites",
                  "downloads",
                  "cover"
                ],
                "additionalProperties": false
              }
            }
          },
          "required": [
            "galleries"
          ],
          "additionalProperties": false
        }
      },
      "required": [
        "status",
        "title",
        "change",
        "result"
      ],
      "additionalProperties": false
    },
    {
      "type": "object",
      "properties": {
        "status": {
          "type": "string",
          "const": "refused"
        },
        "title": {
          "type": "string"
        },
        "change": {
          "type": "boolean"
        },
        "message": {
          "type": "string"
        },
        "field": {
          "type": "string"
        }
      },
      "required": [
        "status",
        "title",
        "change",
        "message"
      ],
      "additionalProperties": false
    },
    {
      "type": "object",
      "properties": {
        "status": {
          "type": "string",
          "const": "needs"
        },
        "kind": {
          "type": "string",
          "enum": [
            "module",
            "portal",
            "business",
            "limit",
            "paused",
            "reauth"
          ]
        },
        "title": {
          "type": "string"
        },
        "change": {
          "type": "boolean"
        },
        "message": {
          "type": "string"
        },
        "note": {
          "type": "string"
        }
      },
      "required": [
        "status",
        "kind",
        "title",
        "change",
        "message"
      ],
      "additionalProperties": {}
    }
  ]
}

galleries.remove

Delete a client gallery

Kind
Change
Tool
galleries_remove
Scope
galleries:write
Reached by
API, MCP, ChatGPT

customers see it: waits for the owner’s approval unless they chose Just do it for your app

Input
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "galleryId": {
      "type": "string",
      "pattern": "^gal_[0-9a-hjkmnp-tv-z]{26}$",
      "description": "A gallery id: gal_ and 26 letters and digits."
    }
  },
  "required": [
    "galleryId"
  ],
  "additionalProperties": false
}
Output
{
  "oneOf": [
    {
      "type": "object",
      "required": [
        "status",
        "title",
        "change"
      ],
      "properties": {
        "status": {
          "const": "done"
        },
        "title": {
          "type": "string"
        },
        "change": {
          "type": "boolean"
        },
        "result": {},
        "undo": {
          "type": "object",
          "properties": {
            "command": {
              "type": "string"
            },
            "input": {}
          }
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "proposalId"
      ],
      "properties": {
        "status": {
          "const": "proposed"
        },
        "proposalId": {
          "type": "string"
        },
        "preview": {},
        "approveAt": {
          "type": "string",
          "format": "uri"
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "check"
      ],
      "properties": {
        "status": {
          "const": "pending"
        },
        "message": {
          "type": "string"
        },
        "check": {
          "type": "string"
        },
        "checkInput": {
          "type": "object"
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "message"
      ],
      "properties": {
        "status": {
          "const": "refused"
        },
        "message": {
          "type": "string"
        },
        "field": {
          "type": "string"
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "kind",
        "message"
      ],
      "properties": {
        "status": {
          "const": "needs"
        },
        "kind": {
          "type": "string"
        },
        "message": {
          "type": "string"
        },
        "note": {
          "type": "string"
        }
      }
    }
  ]
}

galleries.removeSet

Remove a gallery set

Kind
Change
Tool
galleries_removeSet
Scope
galleries:write
Reached by
API, MCP, ChatGPT

a private change: runs now if the owner lets your app make private changes, otherwise waits for their approval

Input
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "setId": {
      "type": "string",
      "pattern": "^gst_[0-9a-hjkmnp-tv-z]{26}$",
      "description": "A gallery set id: gst_ and 26 letters and digits."
    }
  },
  "required": [
    "setId"
  ],
  "additionalProperties": false
}
Output
{
  "oneOf": [
    {
      "type": "object",
      "required": [
        "status",
        "title",
        "change"
      ],
      "properties": {
        "status": {
          "const": "done"
        },
        "title": {
          "type": "string"
        },
        "change": {
          "type": "boolean"
        },
        "result": {},
        "undo": {
          "type": "object",
          "properties": {
            "command": {
              "type": "string"
            },
            "input": {}
          }
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "proposalId"
      ],
      "properties": {
        "status": {
          "const": "proposed"
        },
        "proposalId": {
          "type": "string"
        },
        "preview": {},
        "approveAt": {
          "type": "string",
          "format": "uri"
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "check"
      ],
      "properties": {
        "status": {
          "const": "pending"
        },
        "message": {
          "type": "string"
        },
        "check": {
          "type": "string"
        },
        "checkInput": {
          "type": "object"
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "message"
      ],
      "properties": {
        "status": {
          "const": "refused"
        },
        "message": {
          "type": "string"
        },
        "field": {
          "type": "string"
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "kind",
        "message"
      ],
      "properties": {
        "status": {
          "const": "needs"
        },
        "kind": {
          "type": "string"
        },
        "message": {
          "type": "string"
        },
        "note": {
          "type": "string"
        }
      }
    }
  ]
}

galleries.saveSet

Save a gallery set

Kind
Change
Tool
galleries_saveSet
Scope
galleries:write
Reached by
API, MCP, ChatGPT

a private change: runs now if the owner lets your app make private changes, otherwise waits for their approval

Input
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "galleryId": {
      "type": "string",
      "pattern": "^gal_[0-9a-hjkmnp-tv-z]{26}$",
      "description": "A gallery id: gal_ and 26 letters and digits."
    },
    "setId": {
      "description": "Left out, a new set.",
      "type": "string",
      "pattern": "^gst_[0-9a-hjkmnp-tv-z]{26}$"
    },
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 80
    },
    "add": {
      "description": "Library photos to put at the end, in order.",
      "maxItems": 2000,
      "type": "array",
      "items": {
        "type": "string",
        "pattern": "^fil_[0-9a-hjkmnp-tv-z]{26}$",
        "description": "A file id: fil_ and 26 letters and digits."
      }
    },
    "remove": {
      "maxItems": 2000,
      "type": "array",
      "items": {
        "type": "string",
        "pattern": "^fil_[0-9a-hjkmnp-tv-z]{26}$",
        "description": "A file id: fil_ and 26 letters and digits."
      }
    },
    "order": {
      "description": "Photos in the order they go first; the rest keep theirs after.",
      "maxItems": 2000,
      "type": "array",
      "items": {
        "type": "string",
        "pattern": "^fil_[0-9a-hjkmnp-tv-z]{26}$",
        "description": "A file id: fil_ and 26 letters and digits."
      }
    }
  },
  "required": [
    "galleryId"
  ],
  "additionalProperties": false
}
Output
{
  "oneOf": [
    {
      "type": "object",
      "required": [
        "status",
        "title",
        "change"
      ],
      "properties": {
        "status": {
          "const": "done"
        },
        "title": {
          "type": "string"
        },
        "change": {
          "type": "boolean"
        },
        "result": {},
        "undo": {
          "type": "object",
          "properties": {
            "command": {
              "type": "string"
            },
            "input": {}
          }
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "proposalId"
      ],
      "properties": {
        "status": {
          "const": "proposed"
        },
        "proposalId": {
          "type": "string"
        },
        "preview": {},
        "approveAt": {
          "type": "string",
          "format": "uri"
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "check"
      ],
      "properties": {
        "status": {
          "const": "pending"
        },
        "message": {
          "type": "string"
        },
        "check": {
          "type": "string"
        },
        "checkInput": {
          "type": "object"
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "message"
      ],
      "properties": {
        "status": {
          "const": "refused"
        },
        "message": {
          "type": "string"
        },
        "field": {
          "type": "string"
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "kind",
        "message"
      ],
      "properties": {
        "status": {
          "const": "needs"
        },
        "kind": {
          "type": "string"
        },
        "message": {
          "type": "string"
        },
        "note": {
          "type": "string"
        }
      }
    }
  ]
}

galleries.share

Share a gallery with the client

Kind
Change
Tool
galleries_share
Scope
galleries:write
Reached by
API, MCP, ChatGPT

customers see it: waits for the owner’s approval unless they chose Just do it for your app

Input
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "galleryId": {
      "type": "string",
      "pattern": "^gal_[0-9a-hjkmnp-tv-z]{26}$",
      "description": "A gallery id: gal_ and 26 letters and digits."
    },
    "notify": {
      "default": true,
      "description": "Email the client the link now.",
      "type": "boolean"
    },
    "pin": {
      "description": "Set this PIN now and put it in the email.",
      "type": "string",
      "pattern": "^\\d{4,8}$"
    }
  },
  "required": [
    "galleryId"
  ],
  "additionalProperties": false
}
Output
{
  "oneOf": [
    {
      "type": "object",
      "required": [
        "status",
        "title",
        "change"
      ],
      "properties": {
        "status": {
          "const": "done"
        },
        "title": {
          "type": "string"
        },
        "change": {
          "type": "boolean"
        },
        "result": {},
        "undo": {
          "type": "object",
          "properties": {
            "command": {
              "type": "string"
            },
            "input": {}
          }
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "proposalId"
      ],
      "properties": {
        "status": {
          "const": "proposed"
        },
        "proposalId": {
          "type": "string"
        },
        "preview": {},
        "approveAt": {
          "type": "string",
          "format": "uri"
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "check"
      ],
      "properties": {
        "status": {
          "const": "pending"
        },
        "message": {
          "type": "string"
        },
        "check": {
          "type": "string"
        },
        "checkInput": {
          "type": "object"
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "message"
      ],
      "properties": {
        "status": {
          "const": "refused"
        },
        "message": {
          "type": "string"
        },
        "field": {
          "type": "string"
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "kind",
        "message"
      ],
      "properties": {
        "status": {
          "const": "needs"
        },
        "kind": {
          "type": "string"
        },
        "message": {
          "type": "string"
        },
        "note": {
          "type": "string"
        }
      }
    }
  ]
}

galleries.summary

What’s going on

Kind
Read
Tool
galleries_summary
Scope
galleries:read
Reached by
API, MCP

Read-only.

Input
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
Output
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "oneOf": [
    {
      "type": "object",
      "properties": {
        "status": {
          "type": "string",
          "const": "done"
        },
        "title": {
          "type": "string"
        },
        "change": {
          "type": "boolean"
        },
        "result": {
          "type": "object",
          "properties": {
            "title": {
              "type": "string"
            },
            "facts": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "One-line facts, e.g. \"3 bookings today\"."
            },
            "attention": {
              "description": "Things that need the owner, each with a plain reason.",
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string"
                  },
                  "text": {
                    "type": "string"
                  },
                  "href": {
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "text"
                ],
                "additionalProperties": false
              }
            },
            "happening": {
              "description": "What’s on today, each at its time.",
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string"
                  },
                  "at": {
                    "type": "number",
                    "description": "Epoch milliseconds."
                  },
                  "text": {
                    "type": "string"
                  },
                  "href": {
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "at",
                  "text"
                ],
                "additionalProperties": false
              }
            },
            "metrics": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string"
                  },
                  "label": {
                    "type": "string"
                  },
                  "value": {
                    "type": "number"
                  },
                  "prior": {
                    "type": "number"
                  },
                  "unit": {
                    "type": "string",
                    "enum": [
                      "count",
                      "money"
                    ]
                  },
                  "href": {
                    "type": "string"
                  }
                },
                "required": [
                  "id",
                  "label",
                  "value"
                ],
                "additionalProperties": false
              }
            }
          },
          "required": [
            "title",
            "facts"
          ],
          "additionalProperties": false
        }
      },
      "required": [
        "status",
        "title",
        "change",
        "result"
      ],
      "additionalProperties": false
    },
    {
      "type": "object",
      "properties": {
        "status": {
          "type": "string",
          "const": "refused"
        },
        "title": {
          "type": "string"
        },
        "change": {
          "type": "boolean"
        },
        "message": {
          "type": "string"
        },
        "field": {
          "type": "string"
        }
      },
      "required": [
        "status",
        "title",
        "change",
        "message"
      ],
      "additionalProperties": false
    },
    {
      "type": "object",
      "properties": {
        "status": {
          "type": "string",
          "const": "needs"
        },
        "kind": {
          "type": "string",
          "enum": [
            "module",
            "portal",
            "business",
            "limit",
            "paused",
            "reauth"
          ]
        },
        "title": {
          "type": "string"
        },
        "change": {
          "type": "boolean"
        },
        "message": {
          "type": "string"
        },
        "note": {
          "type": "string"
        }
      },
      "required": [
        "status",
        "kind",
        "title",
        "change",
        "message"
      ],
      "additionalProperties": {}
    }
  ]
}

galleries.toDeliver

See galleries not shared yet

Kind
Read
Tool
galleries_toDeliver
Scope
galleries:read
Reached by
API, MCP

Read-only.

Input
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
Output
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "oneOf": [
    {
      "type": "object",
      "properties": {
        "status": {
          "type": "string",
          "const": "done"
        },
        "title": {
          "type": "string"
        },
        "change": {
          "type": "boolean"
        },
        "result": {
          "type": "object",
          "properties": {
            "items": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "pattern": "^gal_[0-9a-hjkmnp-tv-z]{26}$",
                    "description": "A gallery id: gal_ and 26 letters and digits."
                  },
                  "name": {
                    "type": "string"
                  },
                  "customer": {
                    "type": "string",
                    "description": "Whose gallery it is."
                  }
                },
                "required": [
                  "id",
                  "name",
                  "customer"
                ],
                "additionalProperties": false
              }
            },
            "total": {
              "type": "integer",
              "minimum": -9007199254740991,
              "maximum": 9007199254740991
            }
          },
          "required": [
            "items",
            "total"
          ],
          "additionalProperties": false
        }
      },
      "required": [
        "status",
        "title",
        "change",
        "result"
      ],
      "additionalProperties": false
    },
    {
      "type": "object",
      "properties": {
        "status": {
          "type": "string",
          "const": "refused"
        },
        "title": {
          "type": "string"
        },
        "change": {
          "type": "boolean"
        },
        "message": {
          "type": "string"
        },
        "field": {
          "type": "string"
        }
      },
      "required": [
        "status",
        "title",
        "change",
        "message"
      ],
      "additionalProperties": false
    },
    {
      "type": "object",
      "properties": {
        "status": {
          "type": "string",
          "const": "needs"
        },
        "kind": {
          "type": "string",
          "enum": [
            "module",
            "portal",
            "business",
            "limit",
            "paused",
            "reauth"
          ]
        },
        "title": {
          "type": "string"
        },
        "change": {
          "type": "boolean"
        },
        "message": {
          "type": "string"
        },
        "note": {
          "type": "string"
        }
      },
      "required": [
        "status",
        "kind",
        "title",
        "change",
        "message"
      ],
      "additionalProperties": {}
    }
  ]
}

galleries.update

Change a client gallery

Kind
Change
Tool
galleries_update
Scope
galleries:write
Reached by
API, MCP, ChatGPT

a private change: runs now if the owner lets your app make private changes, otherwise waits for their approval

Input
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "galleryId": {
      "type": "string",
      "pattern": "^gal_[0-9a-hjkmnp-tv-z]{26}$",
      "description": "A gallery id: gal_ and 26 letters and digits."
    },
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "message": {
      "description": "A note to the client at the top of the gallery.",
      "type": "string",
      "maxLength": 1000
    },
    "agreementId": {
      "anyOf": [
        {
          "type": "string",
          "pattern": "^agr_[0-9a-hjkmnp-tv-z]{26}$",
          "description": "A agreement id: agr_ and 26 letters and digits."
        },
        {
          "type": "null"
        }
      ]
    },
    "expiresOn": {
      "description": "The last day it opens (YYYY-MM-DD, the business’s time zone); null for no end. Moving it later sends the reminder again.",
      "anyOf": [
        {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
        },
        {
          "type": "null"
        }
      ]
    },
    "pin": {
      "description": "4 to 8 digits the client types to open it; null for link only.",
      "anyOf": [
        {
          "type": "string",
          "pattern": "^\\d{4,8}$"
        },
        {
          "type": "null"
        }
      ]
    },
    "watermark": {
      "description": "Show only watermarked previews, with your logo image drawn over.",
      "type": "boolean"
    },
    "releaseOnPaid": {
      "description": "Downloads open once the sale is paid in full.",
      "type": "boolean"
    },
    "downloads": {
      "description": "What clients can download: `original`, `web` (2048 px JPEG), or none.",
      "maxItems": 2,
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "original",
          "web"
        ]
      }
    },
    "coverFileId": {
      "anyOf": [
        {
          "type": "string",
          "pattern": "^fil_[0-9a-hjkmnp-tv-z]{26}$",
          "description": "A file id: fil_ and 26 letters and digits."
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "required": [
    "galleryId"
  ],
  "additionalProperties": false
}
Output
{
  "oneOf": [
    {
      "type": "object",
      "required": [
        "status",
        "title",
        "change"
      ],
      "properties": {
        "status": {
          "const": "done"
        },
        "title": {
          "type": "string"
        },
        "change": {
          "type": "boolean"
        },
        "result": {},
        "undo": {
          "type": "object",
          "properties": {
            "command": {
              "type": "string"
            },
            "input": {}
          }
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "proposalId"
      ],
      "properties": {
        "status": {
          "const": "proposed"
        },
        "proposalId": {
          "type": "string"
        },
        "preview": {},
        "approveAt": {
          "type": "string",
          "format": "uri"
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "check"
      ],
      "properties": {
        "status": {
          "const": "pending"
        },
        "message": {
          "type": "string"
        },
        "check": {
          "type": "string"
        },
        "checkInput": {
          "type": "object"
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "message"
      ],
      "properties": {
        "status": {
          "const": "refused"
        },
        "message": {
          "type": "string"
        },
        "field": {
          "type": "string"
        }
      }
    },
    {
      "type": "object",
      "required": [
        "status",
        "kind",
        "message"
      ],
      "properties": {
        "status": {
          "const": "needs"
        },
        "kind": {
          "type": "string"
        },
        "message": {
          "type": "string"
        },
        "note": {
          "type": "string"
        }
      }
    }
  ]
}