Skip to main content

API Reference

Common Convention​

Base URL

https://openapi.gency.ai

Content-Type

All requests and responses use the application/json format.

Authentication

Every API request requires one of the following authentication headers.

MethodHeaderDescription
OAuth2 TokenAuthorization: Bearer {access_token}A token issued through the OAuth flow
API KeyX-API-Key: {api_key}A key issued in the API Center

Success Response

The success response of every API is wrapped in the {"data": ...} form.

{
"data": {
// 리소스 데이터
}
}

Error Response

On error, responses are returned in the following format.

{
"status": 400,
"error": {
"code": "INVALID_REQUEST",
"message": "요청이 올바르지 않습니다."
},
"data": null,
"timestamp": "2025-01-01T00:00:00.000Z"
}
FieldTypeDescription
statusIntegerHTTP status code
error.codeStringError code
error.messageStringError message
dataAnyAdditional error data (optional)
timestampStringError timestamp (ISO 8601, UTC)

Team​

Get My Team Information​

GET /openapi/v1/teams/me

Required Scope: team:read

Response:

{
"data": {
"teamId": "01HABC...",
"teamName": "김젠시의 팀",
"plan": "MASTER_PLAN_01"
}
}
FieldTypeDescription
teamIdStringTeam ID
teamNameStringTeam name
planStringPlan (BASIC: basic, ENTERPRISE: enterprise)

Get Credits​

GET /openapi/v1/usage/credits

Required Scope: team:read

Response:

{
"data": {
"credit": 100
}
}
FieldTypeDescription
creditIntegerCredit

Workspaces​

Get Workspace List​

GET /openapi/v1/workspaces

Required Scope: team:read

Response:

{
"data": {
"workspaces": [
{
"workspaceId": "01HXYZ...",
"workspaceName": "My Workspace",
"createdAt": "2025-01-01T00:00:00+09:00"
}
]
}
}

Create Workspace​

POST /openapi/v1/workspaces

Required Scope: team:write

Request Body:

{
"name": "New Workspace"
}
FieldTypeRequiredDescription
nameStringOWorkspace name (up to 100 characters)

Rename Workspace​

PATCH /openapi/v1/workspaces/{workspaceId}

Required Scope: team:write

Request Body:

{
"name": "Updated Name"
}

Templates​

Get Template List​

GET /openapi/v1/templates?workspaceId={workspaceId}&productType={productType}

Required Scope: product:read

Query Parameters:

ParameterTypeRequiredDescription
workspaceIdStringOWorkspace ID
productTypeStringXProduct type (default: FASHION)

Response:

{
"data": {
"templateIds": ["template_01", "template_02"]
}
}

Products​

Get Product List​

GET /openapi/v1/products?workspaceId={workspaceId}

Required Scope: product:read

Query Parameters:

ParameterTypeRequiredDescription
workspaceIdStringOWorkspace ID

Response:

{
"data": {
"products": [
{
"productId": "01HXYZ...",
"workspaceId": "01HABC...",
"projectId": "01HDEF...",
"name": "상품명",
"titleImageId": "01HIMG...",
"status": "REVIEW_COMPLETE",
"categoryId": "01HCAT...",
"productType": "FASHION",
"createdId": "01HUSR...",
"updatedId": "01HUSR...",
"createdAt": "2025-01-01T00:00:00+09:00",
"updatedAt": "2025-01-02T00:00:00+09:00"
}
]
}
}

Get Product Details​

GET /openapi/v1/products/{productId}

Required Scope: product:read

Response:

{
"data": {
"productId": "01HXYZ...",
"workspaceId": "01HABC...",
"projectId": "01HDEF...",
"name": "상품명",
"titleImageId": "01HIMG...",
"status": "REVIEW_COMPLETE",
"categoryId": "01HCAT...",
"productType": "FASHION",
"createdId": "01HUSR...",
"updatedId": "01HUSR...",
"createdAt": "2025-01-01T00:00:00+09:00",
"updatedAt": "2025-01-02T00:00:00+09:00"
}
}

Create Product​

POST /openapi/v1/products

Required Scope: product:write

Request Body:

{
"workspaceId": "01HABC...",
"products": [
{
"category": "TOP",
"images": ["01HIMG..."],
"projectId": "01HDEF...",
"productNameKo": "상품명(한국어)",
"productNameEn": "Product Name",
"colors": ["BLACK", "WHITE"],
"fabrics": ["COTTON"],
"templateId": "TEMPLATE_01",
"additionalInfo": {
"features": ["스트레치 소재"],
"laundryTips": ["드라이클리닝"],
"sizeName": "FREE",
"sizeTables": [["사이즈","어깨","기장"],["S", "55", "80"], ["M", "60", "85"]],
"manufactureDate": "2025-01",
"manufactureCountry": "대한민국",
"certificationNumber": "KC-12345"
}
}
]
}

Request Fields

FieldTypeRequiredDescription
workspaceIdstringOWorkspace ID
productsarrayOArray of product metadata (at least 1)
products[].categorystringOProduct category (see below)
products[].imagesarrayOArray of image IDs (at least 6, must be pre-uploaded via upload URL)
products[].projectIdstringManagement name (project ID)
products[].productNamestringProduct name
products[].productNameKostringProduct name (Korean)
products[].productNameEnstringProduct name (English)
products[].colorsarrayOColor list
products[].fabricsarrayOFabric list
products[].templateIdstringOTemplate ID
products[].additionalInfoobjectAdditional information
products[].additionalInfo.featuresarrayFeatures
products[].additionalInfo.laundryTipsarrayLaundry information
products[].additionalInfo.sizeNamestringSize name
products[].additionalInfo.sizeTablesarraySize table (2D array, the first row is header information)
products[].additionalInfo.manufactureDatestringManufacture date
products[].additionalInfo.manufactureCountrystringCountry of manufacture
products[].additionalInfo.certificationNumberstringCertification number

Category Values

Only CLOTHING is supported; expansion is planned

Response:

{
"data": {
"productIds": ["01HXYZ...", "01HABC..."]
}
}

Change Product Review Status​

PATCH /openapi/v1/products/{productId}/status

Required Scope: product:write

Request Body:

{
"status": "IN_REVIEW"
}
FieldTypeRequiredDescription
statusStringOThe status to change to

Possible status values:

StatusDescription
BEFORE_REVIEWBefore review
IN_REVIEWIn review
REVIEW_COMPLETEReview complete

Note: Changes are only possible when the status is before review / in review / review complete.


Users​

Get My Information​

GET /openapi/v1/users/me

Required Scope: user:read

Response:

{
"data": {
"userId": "01HXYZ...",
"email": "user@example.com",
"name": "김젠시",
"permission": "MANAGER",
"createdAt": "2025-01-01T00:00:00+09:00"
}
}
FieldTypeDescription
userIdStringUser ID
emailStringEmail
nameStringUser name
permissionStringPermission (OWNER: owner, MANAGER: manager, MEMBER: member)
createdAtStringSign-up timestamp (ISO 8601)

Get Member Information​

GET /openapi/v1/users/{userId}

Required Scope: user:read

Path Parameters:

ParameterTypeRequiredDescription
userIdStringOThe user ID to look up

Note: You can only look up users who belong to the same team (master).

Response:

{
"data": {
"userId": "01HXYZ...",
"email": "user@example.com",
"name": "김젠시",
"permission": "MANAGER",
"createdAt": "2025-01-01T00:00:00+09:00"
}
}

Get Team Member List​

GET /openapi/v1/users

Required Scope: user:read

Response:

{
"data": {
"members": [
{
"userId": "01HXYZ...",
"userName": "김젠시",
"email": "user@example.com",
"permission": "OWNER",
"createdAt": "2025-01-01T00:00:00+09:00"
}
]
}
}

Images​

Issue Upload URL​

POST /openapi/v1/images/upload-url

Required Scope: product:write

Request Body:

{
"workspaceId": "01HABC...",
"extension": "png"
}
FieldTypeRequiredDescription
workspaceIdStringOWorkspace ID
extensionStringOFile extension (png, jpg, jpeg, webp)

Response:

{
"data": {
"imageId": "01HXYZ...",
"uploadUrl": "https://s3.amazonaws.com/..."
}
}
FieldTypeDescription
imageIdStringImage identifier (used when creating a product)
uploadUrlStringS3 Presigned URL (valid for 1 hour)

Download Product Image​

GET /openapi/v1/images/download/{productId}?templateId={templateId}

Required Scope: product:read

Query Parameters:

ParameterTypeRequiredDescription
templateIdStringXTemplate ID

Response: PNG image file (binary)


Full Endpoint Summary​

FeatureMethodEndpointScope
Get team infoGET/openapi/v1/teamteam:read
Get creditsGET/openapi/v1/usage/creditsteam:read
List workspacesGET/openapi/v1/workspacesteam:read
Create workspacePOST/openapi/v1/workspacesteam:write
Update workspacePATCH/openapi/v1/workspaces/{workspaceId}team:write
List templatesGET/openapi/v1/templatesproduct:read
List productsGET/openapi/v1/productsproduct:read
Product detailsGET/openapi/v1/products/{productId}product:read
Create clothing productPOST/openapi/v1/productsproduct:write
Change product statusPATCH/openapi/v1/products/{productId}/statusproduct:write
Get my infoGET/openapi/v1/users/meuser:read
Get member infoGET/openapi/v1/users/{userId}user:read
Team member listGET/openapi/v1/usersuser:read
Create upload URLPOST/openapi/v1/images/upload-urlproduct:write
Download imageGET/openapi/v1/images/download/{productId}product:read