Organization

GET /organization

Get the organization the request is authenticated against, including its plan and its resolved limits. The limits already have the plan's defaults resolved against anything set on the organization itself. Its behavior settings and time zone are on GET /settings.

Requires the settings:read permission.

Request
curl \
  "https://your-store.meisei.app/api/organization" \
  -H "Authorization: Bearer sk_YOUR_SECRET_KEY"
Response
{
  "data": {
    "id": "uHKNC81a",
    "name": "string",
    "slug": "string",
    "logoUrl": "https://example.com",
    "dashboardUrl": "https://example.com",
    "customerPagesHost": "string",
    "platformSender": "string",
    "plan": "starter",
    "limits": {
      "sites": 0,
      "products": 0,
      "variantsPerProduct": 0,
      "customers": 0,
      "monthlySurveys": 0,
      "monthlyEngagedUsers": 0,
      "storedReviews": 0,
      "monthlyEmails": 0,
      "monthlyAiBudgetCents": 0,
      "apiKeys": 0,
      "seats": 0,
      "pendingInvitations": 0,
      "webhooks": 0,
      "automations": 0,
      "monthlyAutomationRuns": 0,
      "automationRunCpuMs": 0,
      "automationRunWallMs": 0,
      "automationRunSubrequests": 0,
      "automationRunApiCalls": 0,
      "loyaltyPrograms": 0,
      "currencies": 0,
      "rulesPerLoyaltyProgram": 0,
      "tiersPerLoyaltyProgram": 0,
      "rewardsPerLoyaltyProgram": 0,
      "savedCharts": 0,
      "dashboards": 0,
      "savedFilters": 0,
      "quickFilters": 0,
      "tagsPerResource": 0,
      "wishlistsPerCustomer": 0,
      "itemsPerWishlist": 0,
      "brandAssetsMB": 0,
      "totalStorageMB": 0,
      "singleUploadMB": 0,
      "assistantAttachmentBytes": 0,
      "mediaPerReview": 0,
      "monthlyReviewSubmissions": 0,
      "webhookEventRetentionDays": 0,
      "auditLogRetentionDays": 0,
      "importJobRetentionDays": 0,
      "importJobsPerDay": 0,
      "exportJobsPerDay": 0,
      "rowsPerImport": 0,
      "rowsPerExport": 0,
      "jobSliceRows": 0,
      "jobAlarmBudgetMs": 0,
      "heavyJobBatchesPerAlarm": 0,
      "apiRequestsPerMinute": 0,
      "mcpRequestsPerMinute": 0,
      "loyaltyEventsPerMinute": 0,
      "widgetRequestsPerSession": 0,
      "emailsPerCustomerPerDay": 0,
      "aiSummaryMinReviews": 0,
      "aiSummaryRegenerateReviews": 0,
      "aiSummaryRegeneratePercent": 0,
      "aiSummaryMinHoursBetween": 0,
      "monthlyReviewAnswers": 0,
      "aiReviewSummaries": true,
      "aiReviewAnswers": true,
      "aiReviewScreening": true,
      "aiReviewSentiment": true,
      "sso": true,
      "widgetEdgeCache": true
    },
    "access": {
      "state": "active",
      "writable": true,
      "message": "string",
      "trialEndsAt": "2025-01-15T09:30:00Z",
      "readOnlySince": "2025-01-15T09:30:00Z",
      "exportsUntil": "2025-01-15T09:30:00Z"
    },
    "createdAt": "2025-01-15T09:30:00Z",
    "updatedAt": "2025-01-15T09:30:00Z"
  },
  "role": "owner"
}

PATCH /organization

Update the current organization's profile: its display name, its logo or its handle. Only the fields you send are changed; the rest are left alone. All three are recorded in the audit trail. Changing the handle moves the organization's host, so it is allowed once every 30 days and the old handle keeps resolving afterwards. Behavior settings and the time zone are on PATCH /settings.

Requires the settings:write permission.

Body parameters

namestring

A new display name for the organization.

logostring | null

The key of an image uploaded through POST /organization/logo/upload-url, or null to remove the logo.

slugstring

A new handle for the organization: lowercase letters, numbers and hyphens, 3 to 63 characters. The old handle is kept and keeps resolving, so existing links, embed snippets and configured base URLs go on working. Refused if the handle is reserved, already taken, or if the handle changed in the last 30 days.

Request
curl \
  -X PATCH \
  "https://your-store.meisei.app/api/organization" \
  -H "Authorization: Bearer sk_YOUR_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "string",
  "logo": "string",
  "slug": "string"
}'
Response
{
  "id": "uHKNC81a",
  "name": "string",
  "slug": "string",
  "logoUrl": "https://example.com",
  "dashboardUrl": "https://example.com",
  "customerPagesHost": "string",
  "platformSender": "string",
  "plan": "starter",
  "limits": {
    "sites": 0,
    "products": 0,
    "variantsPerProduct": 0,
    "customers": 0,
    "monthlySurveys": 0,
    "monthlyEngagedUsers": 0,
    "storedReviews": 0,
    "monthlyEmails": 0,
    "monthlyAiBudgetCents": 0,
    "apiKeys": 0,
    "seats": 0,
    "pendingInvitations": 0,
    "webhooks": 0,
    "automations": 0,
    "monthlyAutomationRuns": 0,
    "automationRunCpuMs": 0,
    "automationRunWallMs": 0,
    "automationRunSubrequests": 0,
    "automationRunApiCalls": 0,
    "loyaltyPrograms": 0,
    "currencies": 0,
    "rulesPerLoyaltyProgram": 0,
    "tiersPerLoyaltyProgram": 0,
    "rewardsPerLoyaltyProgram": 0,
    "savedCharts": 0,
    "dashboards": 0,
    "savedFilters": 0,
    "quickFilters": 0,
    "tagsPerResource": 0,
    "wishlistsPerCustomer": 0,
    "itemsPerWishlist": 0,
    "brandAssetsMB": 0,
    "totalStorageMB": 0,
    "singleUploadMB": 0,
    "assistantAttachmentBytes": 0,
    "mediaPerReview": 0,
    "monthlyReviewSubmissions": 0,
    "webhookEventRetentionDays": 0,
    "auditLogRetentionDays": 0,
    "importJobRetentionDays": 0,
    "importJobsPerDay": 0,
    "exportJobsPerDay": 0,
    "rowsPerImport": 0,
    "rowsPerExport": 0,
    "jobSliceRows": 0,
    "jobAlarmBudgetMs": 0,
    "heavyJobBatchesPerAlarm": 0,
    "apiRequestsPerMinute": 0,
    "mcpRequestsPerMinute": 0,
    "loyaltyEventsPerMinute": 0,
    "widgetRequestsPerSession": 0,
    "emailsPerCustomerPerDay": 0,
    "aiSummaryMinReviews": 0,
    "aiSummaryRegenerateReviews": 0,
    "aiSummaryRegeneratePercent": 0,
    "aiSummaryMinHoursBetween": 0,
    "monthlyReviewAnswers": 0,
    "aiReviewSummaries": true,
    "aiReviewAnswers": true,
    "aiReviewScreening": true,
    "aiReviewSentiment": true,
    "sso": true,
    "widgetEdgeCache": true
  },
  "access": {
    "state": "active",
    "writable": true,
    "message": "string",
    "trialEndsAt": "2025-01-15T09:30:00Z",
    "readOnlySince": "2025-01-15T09:30:00Z",
    "exportsUntil": "2025-01-15T09:30:00Z"
  },
  "createdAt": "2025-01-15T09:30:00Z",
  "updatedAt": "2025-01-15T09:30:00Z"
}

POST /organization/logo/upload-url

Get a short-lived URL to upload an organization logo to. PUT the image's bytes to uploadUrl, then send the returned key as logo on PATCH /organization. The image is served from a public URL and can be at most 2 MB.

Requires the settings:write permission.

Body parameters

fileNamestringrequired

The file's name, including its extension.

sizeBytesinteger

Size of the file in bytes, if you know it up front.

contentTypeimage/png | image/jpeg | image/gif | image/webp | image/avif

The image's MIME type: PNG, JPEG, GIF, WebP or AVIF. The upload is stored and served as this type, whatever the upload request says. Leave it out and the upload's own type is used, but only an image of one of these types can be set as a logo or avatar.

Request
curl \
  -X POST \
  "https://your-store.meisei.app/api/organization/logo/upload-url" \
  -H "Authorization: Bearer sk_YOUR_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "fileName": "string",
  "sizeBytes": 0,
  "contentType": "image/png"
}'
Response
{
  "key": "string",
  "uploadUrl": "https://example.com",
  "expiresAt": "2025-01-15T09:30:00Z"
}