DevelopersAPI reference

Organizations API

REST endpoints for organizations in SKUFlow: 5 operations with parameters, request and response fields, permissions and curl examples.

Base URL: https://app.skuflow.ai/api. Every call needs Authorization: Bearer skf_… (Authentication); {organizationId} ($ORGANIZATION_ID in the examples) is your business's id.

OperationEndpointRisk
Update organizationPATCH /organizations/{organizationId}write
Name the business (first run)POST /organizations/{organizationId}/namewrite
Create logo upload URLPOST /organizations/logo-upload-urlwrite
Your role and permissions in an organizationGET /organizations/{organizationId}/permissionsread
Set the business logo (content in the request)POST /organizations/{organizationId}/logo/contentwrite

Update organization

PATCH /organizations/{organizationId}

Renames the organization (in Base316 first), sets its logo path from POST /organizations/logo-upload-url (null removes it) and/or its IANA timezone (today, overdue dates and report days are counted in it from then on) and/or its trade (the kind of business: what the website builder starts from, and what the AI assistant is told; changing it changes no existing records). Returns the organization.

Permissionorganization.manage (Owner, Admin)
Riskwrite, OAuth scope skuflow.write. Write: creates or changes records inside the business; nothing leaves it.
MCP toolorganizations_update (toolset settings)

Request body

FieldTypeRequiredDescription
namestringNoUp to 64 characters.
logostring or nullNo
timezonestringNoIANA timezone, e.g. America/Chicago. Up to 100 characters.
tradeenumNoThe kind of business, e.g. screen-printing, embroidery, promotional-products (the website builder's templates), or "other". Starts the website builder from that template. One of screen-printing, embroidery, promotional-products, print-on-demand, signs-and-graphics, other.

Example

curl -X PATCH "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"Dana Whitfield","logo":"string","timezone":"string"}'

Response

200: the answer's fields
FieldTypeDescription
idstring
namestring
needsNamebooleanMade at sign-up with the person's name and not named yet: POST /organizations/{organizationId}/name.
needsPlanbooleanNamed but no plan chosen yet (first run): GET /billing/plan-options, then POST /billing/choose-plan (plan "trial" keeps the free trial).
slugstring
logostring or null
tradestring or nullThe kind of business (a website template key, e.g. screen-printing, embroidery, promotional-products, "other"); null = not chosen yet.
timezonestringThe business's IANA timezone (e.g. America/Chicago): today, due dates, the scheduler and report days are counted in it.
rolestringThe caller's Base316 role key here: owner, admin, staff or member.
permissionsarray of stringThe caller's effective permissions here.
memberCountinteger

Name the business (first run)

POST /organizations/{organizationId}/name

The first step after sign-up: sets the business's name (in Base316 first) and its timezone, and makes its URL slug from the name. With trade (the kind of business), it is stored for the website builder. Naming also queues the business's automatic texting number (bought by the worker in its SKUFlow account, included on every plan) and makes SKUFlow email its email provider unless one was chosen; neither happens before the business is named. Once named, use PATCH /organizations/{organizationId} to rename (the slug then stays). 409 when the business was named already.

Permissionorganization.manage (Owner, Admin)
Riskwrite, OAuth scope skuflow.write. Write: creates or changes records inside the business; nothing leaves it.
MCP toolorganizations_name (toolset settings)

Request body

FieldTypeRequiredDescription
namestringYesUp to 64 characters.
timezonestringNoIANA timezone, e.g. America/Chicago. Up to 100 characters.
tradeenumNoThe kind of business, e.g. screen-printing, embroidery, promotional-products (the website builder's templates), or "other". Starts the website builder from that template. One of screen-printing, embroidery, promotional-products, print-on-demand, signs-and-graphics, other.

Example

curl -X POST "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/name" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name":"Dana Whitfield"}'

Response

200: the answer's fields
FieldTypeDescription
idstring
namestring
needsNamebooleanMade at sign-up with the person's name and not named yet: POST /organizations/{organizationId}/name.
needsPlanbooleanNamed but no plan chosen yet (first run): GET /billing/plan-options, then POST /billing/choose-plan (plan "trial" keeps the free trial).
slugstring
logostring or null
tradestring or nullThe kind of business (a website template key, e.g. screen-printing, embroidery, promotional-products, "other"); null = not chosen yet.
timezonestringThe business's IANA timezone (e.g. America/Chicago): today, due dates, the scheduler and report days are counted in it.
rolestringThe caller's Base316 role key here: owner, admin, staff or member.
permissionsarray of stringThe caller's effective permissions here.
memberCountinteger

Create logo upload URL

POST /organizations/logo-upload-url

Step 1 of changing the logo: returns a signed URL to PUT a PNG to, and its path. Then save the path with PATCH /organizations/{organizationId} (logo).

Permissionorganization.manage (Owner, Admin)
Riskwrite, OAuth scope skuflow.write. Write: creates or changes records inside the business; nothing leaves it.
MCP toolorganizations_createLogoUploadUrl (toolset settings)

Request body

FieldTypeRequiredDescription
organizationIdstringYesThe organization whose logo is changing.

Example

curl -X POST "https://app.skuflow.ai/api/organizations/logo-upload-url" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"organizationId":"organization_id"}'

Response

200: the answer's fields
FieldTypeDescription
signedUploadUrlstring (uri)
pathstring

Your role and permissions in an organization

GET /organizations/{organizationId}/permissions

The caller's role in the organization and every permission it grants, with the catalog's descriptions. Check this before attempting writes: a call needing a permission you lack is refused with 403. Read-only.

Permissionorganization.read (Owner, Admin, Staff, Member)
Riskread, OAuth scope skuflow.read. Read: reads only.
MCP toolorganizations_permissions (toolset settings, in the default set)

Example

curl "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/permissions" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY"

Response

200: the answer's fields
FieldTypeDescription
rolestring
roleNamestring
permissionsarray of string
POST /organizations/{organizationId}/logo/content

Replaces the business's logo in one call: send contentBase64 or a public sourceUrl (a PNG, JPEG or WebP image, up to 10 MB). It appears in the app, on customer pages, quotes and invoices. Returns the logo path.

Permissionorganization.manage (Owner, Admin)
Riskwrite, OAuth scope skuflow.write. Write: creates or changes records inside the business; nothing leaves it.
MCP toolorganizations_uploadLogo (toolset settings)

Request body

FieldTypeRequiredDescription
fileNamestringNoThe file's name, e.g. receipt.jpg (default: from the URL, else 'file'). Up to 500 characters.
contentTypestringNoMIME type, e.g. image/jpeg or application/pdf. Optional: taken from a data: URL, the URL's answer or the file's first bytes. Up to 200 characters.
contentBase64stringNoThe file's bytes as base64 (a data: URL is accepted too). Up to 10 MB. Give this or sourceUrl.
sourceUrlstring (uri)NoA public http(s) URL SKUFlow downloads the file from (up to 10 MB, 20 s, 3 redirects; private and internal addresses are refused). Give this or contentBase64. Up to 2000 characters.

Example

curl -X POST "https://app.skuflow.ai/api/organizations/$ORGANIZATION_ID/logo/content" \
  -H "Authorization: Bearer $SKUFLOW_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"fileName":"string","contentType":"string","contentBase64":"string"}'

Response

200: the answer's fields
FieldTypeDescription
logostringThe logo's storage path (the organization's logo).

On this page