Browse the docs

Import

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

Availability. Every business has it.

What you can do

  • Bring a file over from your old system: the assistant can prepare it and you confirm it, twice
  • Ask Allpage to bring your clients over: the assistant can do it on its own

For apps

Tools

  • import_run (Bring a file over from your old system): waits for the owner to confirm it in Allpage, whatever they chose for your app
  • import_requestHelp (Ask Allpage to bring your clients over): a private change: runs now if the owner lets your app make private changes, otherwise waits for their approval

Reads

  • import_mapColumns (Match a file’s columns)
  • import_runs (Files brought over)
  • import_summary (What’s going on)

Operations

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

import.mapColumns

Match a file’s columns

Kind
Read
Tool
import_mapColumns
Scope
import:read
Reached by
API, MCP, ChatGPT

Read-only.

Input
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "header": {
      "type": "string",
      "minLength": 1,
      "maxLength": 20000,
      "description": "The file’s first line, its header row, as CSV text."
    },
    "sample": {
      "description": "Up to three lines under it, as CSV text.",
      "type": "string",
      "maxLength": 20000
    },
    "kind": {
      "description": "What the file holds; worked out from the header when left out.",
      "type": "string",
      "enum": [
        "clients",
        "services",
        "classes",
        "bookings",
        "packs",
        "memberships"
      ]
    },
    "source": {
      "type": "string",
      "enum": [
        "square",
        "mindbody",
        "vagaro",
        "acuity",
        "other"
      ]
    },
    "columns": {
      "description": "Your own matches for the columns the headers don’t settle, each a field this kind of file takes, or null for none. Allpage uses them and asks no AI. Left out, Allpage’s AI suggests them, which spends AI credits.",
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "column": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991,
            "description": "The column’s number, from 0."
          },
          "field": {
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "name",
                  "firstName",
                  "lastName",
                  "email",
                  "phone",
                  "birthday",
                  "note",
                  "emailConsent",
                  "textConsent",
                  "service",
                  "description",
                  "duration",
                  "price",
                  "days",
                  "time",
                  "capacity",
                  "start",
                  "date",
                  "end",
                  "timeZone",
                  "status",
                  "pack",
                  "remaining",
                  "total",
                  "expires",
                  "membership",
                  "frequency",
                  "nextCharge"
                ]
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "column",
          "field"
        ],
        "additionalProperties": false
      }
    }
  },
  "required": [
    "header"
  ],
  "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": {
            "source": {
              "type": "string",
              "enum": [
                "square",
                "mindbody",
                "vagaro",
                "acuity",
                "other"
              ]
            },
            "kind": {
              "type": "string",
              "enum": [
                "clients",
                "services",
                "classes",
                "bookings",
                "packs",
                "memberships"
              ]
            },
            "header": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "mapping": {
              "type": "array",
              "items": {
                "anyOf": [
                  {
                    "type": "string",
                    "enum": [
                      "name",
                      "firstName",
                      "lastName",
                      "email",
                      "phone",
                      "birthday",
                      "note",
                      "emailConsent",
                      "textConsent",
                      "service",
                      "description",
                      "duration",
                      "price",
                      "days",
                      "time",
                      "capacity",
                      "start",
                      "date",
                      "end",
                      "timeZone",
                      "status",
                      "pack",
                      "remaining",
                      "total",
                      "expires",
                      "membership",
                      "frequency",
                      "nextCharge"
                    ]
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            },
            "by": {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "template",
                  "header",
                  "ai",
                  "none"
                ]
              }
            },
            "confirmed": {
              "type": "boolean"
            },
            "note": {
              "type": [
                "string",
                "null"
              ]
            }
          },
          "required": [
            "source",
            "kind",
            "header",
            "mapping",
            "by",
            "confirmed",
            "note"
          ],
          "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": {}
    }
  ]
}

import.requestHelp

Ask Allpage to bring your clients over

Kind
Change
Tool
import_requestHelp
Scope
import: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": {
    "source": {
      "type": "string",
      "enum": [
        "square",
        "mindbody",
        "vagaro",
        "acuity",
        "other"
      ],
      "description": "The system they’re coming from."
    },
    "note": {
      "default": "",
      "description": "Anything we should know, in their words.",
      "type": "string",
      "maxLength": 1000
    }
  },
  "required": [
    "source"
  ],
  "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"
        }
      }
    }
  ]
}

import.run

Bring a file over from your old system

Kind
Change
Tool
import_run
Scope
import:write
Reached by
API, MCP, ChatGPT

waits for the owner to confirm it in Allpage, whatever they chose for your app

Input
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "source": {
      "type": "string",
      "enum": [
        "square",
        "mindbody",
        "vagaro",
        "acuity",
        "other"
      ],
      "description": "The system the file came from; other when it isn’t listed."
    },
    "kind": {
      "type": "string",
      "enum": [
        "clients",
        "services",
        "classes",
        "bookings",
        "packs",
        "memberships"
      ],
      "description": "What the file holds."
    },
    "fileName": {
      "default": "",
      "type": "string",
      "maxLength": 200
    },
    "header": {
      "minItems": 1,
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 200
      },
      "description": "The file’s header row, cell by cell."
    },
    "mapping": {
      "maxItems": 100,
      "type": "array",
      "items": {
        "anyOf": [
          {
            "type": "string",
            "enum": [
              "name",
              "firstName",
              "lastName",
              "email",
              "phone",
              "birthday",
              "note",
              "emailConsent",
              "textConsent",
              "service",
              "description",
              "duration",
              "price",
              "days",
              "time",
              "capacity",
              "start",
              "date",
              "end",
              "timeZone",
              "status",
              "pack",
              "remaining",
              "total",
              "expires",
              "membership",
              "frequency",
              "nextCharge"
            ]
          },
          {
            "type": "null"
          }
        ]
      },
      "description": "For each column, the field it fills, or null to leave it out. `import.mapColumns` suggests one."
    },
    "rows": {
      "minItems": 1,
      "maxItems": 2000,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "line": {
            "type": "integer",
            "minimum": 2,
            "maximum": 9007199254740991,
            "description": "Its line in the file."
          },
          "cells": {
            "maxItems": 100,
            "type": "array",
            "items": {
              "type": "string",
              "maxLength": 4000
            }
          }
        },
        "required": [
          "line",
          "cells"
        ],
        "additionalProperties": false
      }
    },
    "defaults": {
      "description": "What a row leaves out: a service’s or class’s length, a class’s spots.",
      "type": "object",
      "properties": {
        "durationMinutes": {
          "type": "integer",
          "minimum": 5,
          "maximum": 720,
          "multipleOf": 5
        },
        "capacity": {
          "type": "integer",
          "minimum": 1,
          "maximum": 500
        }
      },
      "additionalProperties": false
    }
  },
  "required": [
    "source",
    "kind",
    "header",
    "mapping",
    "rows"
  ],
  "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"
        }
      }
    }
  ]
}

import.runs

Files brought over

Kind
Read
Tool
import_runs
Scope
import:read
Reached by
API, MCP, ChatGPT

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": {
            "runs": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "pattern": "^imp_[0-9a-hjkmnp-tv-z]{26}$",
                    "description": "A import run id: imp_ and 26 letters and digits."
                  },
                  "source": {
                    "type": "string",
                    "enum": [
                      "square",
                      "mindbody",
                      "vagaro",
                      "acuity",
                      "other"
                    ]
                  },
                  "kind": {
                    "type": "string",
                    "enum": [
                      "clients",
                      "services",
                      "classes",
                      "bookings",
                      "packs",
                      "memberships"
                    ]
                  },
                  "fileName": {
                    "type": "string"
                  },
                  "rows": {
                    "type": "integer",
                    "minimum": -9007199254740991,
                    "maximum": 9007199254740991
                  },
                  "counts": {
                    "type": "object",
                    "propertyNames": {
                      "type": "string"
                    },
                    "additionalProperties": {
                      "type": "number"
                    }
                  },
                  "skipped": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "line": {
                          "type": "integer",
                          "minimum": -9007199254740991,
                          "maximum": 9007199254740991
                        },
                        "message": {
                          "type": "string"
                        }
                      },
                      "required": [
                        "line",
                        "message"
                      ],
                      "additionalProperties": false
                    }
                  },
                  "createdAt": {
                    "type": "string",
                    "format": "date-time",
                    "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
                  }
                },
                "required": [
                  "id",
                  "source",
                  "kind",
                  "fileName",
                  "rows",
                  "counts",
                  "skipped",
                  "createdAt"
                ],
                "additionalProperties": false
              }
            }
          },
          "required": [
            "runs"
          ],
          "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": {}
    }
  ]
}

import.summary

What’s going on

Kind
Read
Tool
import_summary
Scope
import: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": {}
    }
  ]
}