Appwrite Projects API
The Project service allows you to manage all the projects in your Appwrite server. 18 operations across 14 paths in the Appwrite 2.0.0 OpenAPI.
The Project service allows you to manage all the projects in your Appwrite server. 18 operations across 14 paths in the Appwrite 2.0.0 OpenAPI.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/appwrite-projects-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.0.0
info:
title: Appwrite Projects API
description: Appwrite backend as a service cuts up to 70% of the time and costs required for building a modern application. We abstract and simplify common development tasks behind a REST APIs, to help you develop your app in a fast and secure way. For full API documentation and tutorials go to [https://appwrite.io/docs](https://appwrite.io/docs)
version: 2.0.0
termsOfService: https://appwrite.io/policy/terms
contact:
name: Appwrite Team
url: https://appwrite.io/support
email: team@appwrite.io
license:
name: BSD-3-Clause
url: https://raw.githubusercontent.com/appwrite/appwrite/master/LICENSE
servers:
- url: https://cloud.appwrite.io/v1
description: Appwrite Cloud endpoint.
- url: https://{region}.cloud.appwrite.io/v1
description: Appwrite Cloud regional endpoint. Replace `{region}` with your project region.
variables:
region:
default: fra
description: Appwrite Cloud region.
tags:
- name: projects
description: The Project service allows you to manage all the projects in your Appwrite server.
paths:
/projects/{projectId}/addons:
get:
summary: List project addons
operationId: projectsListAddons
tags:
- projects
description: 'List all billing addons for a project.
'
responses:
'200':
description: Addons list
content:
application/json:
schema:
$ref: '#/components/schemas/addonList'
deprecated: false
x-appwrite:
group: null
demo: projects/list-addons.md
rate-limit: 0
rate-time: 3600
rate-key: url:{url},ip:{ip}
scope: projects.read
platforms:
- console
packaging: false
public: true
auth:
console:
Project: []
security:
- Project: []
parameters:
- name: projectId
description: Project ID
required: true
schema:
type: string
example: <PROJECT_ID>
in: path
/projects/{projectId}/addons/premium-geo-db:
post:
summary: Create Premium Geo DB addon for project
operationId: projectsCreatePremiumGeoDBAddon
tags:
- projects
description: 'Create a Premium Geo DB addon for a project.
'
responses:
'201':
description: Addon
content:
application/json:
schema:
$ref: '#/components/schemas/addon'
deprecated: false
x-appwrite:
group: null
demo: projects/create-premium-geo-db-addon.md
rate-limit: 10
rate-time: 3600
rate-key: url:{url},ip:{ip}
scope: projects.write
platforms:
- console
packaging: false
public: true
auth:
console:
Project: []
security:
- Project: []
parameters:
- name: projectId
description: Project ID
required: true
schema:
type: string
example: <PROJECT_ID>
in: path
/projects/{projectId}/addons/{addonId}:
get:
summary: Get project addon
operationId: projectsGetAddon
tags:
- projects
description: 'Get the details of a billing addon for a project.
'
responses:
'200':
description: Addon
content:
application/json:
schema:
$ref: '#/components/schemas/addon'
deprecated: false
x-appwrite:
group: null
demo: projects/get-addon.md
rate-limit: 0
rate-time: 3600
rate-key: url:{url},ip:{ip}
scope: projects.read
platforms:
- console
packaging: false
public: true
auth:
console:
Project: []
security:
- Project: []
parameters:
- name: projectId
description: Project ID
required: true
schema:
type: string
example: <PROJECT_ID>
in: path
- name: addonId
description: Addon ID
required: true
schema:
type: string
example: <ADDON_ID>
in: path
delete:
summary: Delete project addon
operationId: projectsDeleteAddon
tags:
- projects
description: 'Delete a billing addon for a project.
'
responses:
'204':
description: No content
deprecated: false
x-appwrite:
group: null
demo: projects/delete-addon.md
rate-limit: 10
rate-time: 3600
rate-key: url:{url},ip:{ip}
scope: projects.write
platforms:
- console
packaging: false
public: true
auth:
console:
Project: []
security:
- Project: []
parameters:
- name: projectId
description: Project ID
required: true
schema:
type: string
example: <PROJECT_ID>
in: path
- name: addonId
description: Addon ID
required: true
schema:
type: string
example: <ADDON_ID>
in: path
/projects/{projectId}/addons/{addonId}/confirmations:
post:
summary: Confirm project addon payment after 3DS authentication
operationId: projectsConfirmAddonPayment
tags:
- projects
description: 'Confirm payment for a billing addon for a project.
'
responses:
'200':
description: Addon
content:
application/json:
schema:
$ref: '#/components/schemas/addon'
deprecated: false
x-appwrite:
group: null
demo: projects/confirm-addon-payment.md
rate-limit: 10
rate-time: 3600
rate-key: url:{url},ip:{ip}
scope: projects.write
platforms:
- console
packaging: false
public: true
auth:
console:
Project: []
security:
- Project: []
parameters:
- name: projectId
description: Project ID
required: true
schema:
type: string
example: <PROJECT_ID>
in: path
- name: addonId
description: Addon ID
required: true
schema:
type: string
example: <ADDON_ID>
in: path
/projects/{projectId}/addons/{addon}/price:
get:
summary: Get project addon price
operationId: projectsGetAddonPrice
tags:
- projects
description: 'Get the price details for a billing addon for a project, including the prorated amount for the remaining days in the current billing cycle.
'
responses:
'200':
description: AddonPrice
content:
application/json:
schema:
$ref: '#/components/schemas/addonPrice'
deprecated: false
x-appwrite:
group: null
demo: projects/get-addon-price.md
rate-limit: 0
rate-time: 3600
rate-key: url:{url},ip:{ip}
scope: projects.read
platforms:
- console
packaging: false
public: true
auth:
console:
Project: []
security:
- Project: []
parameters:
- name: projectId
description: Project ID
required: true
schema:
type: string
example: <PROJECT_ID>
in: path
- name: addon
description: Addon key identifier (e.g. premiumGeoDB).
required: true
schema:
type: string
example: baa
in: path
/projects/{projectId}/console-access:
patch:
summary: Record console access to a project
operationId: projectsUpdateConsoleAccess
tags:
- projects
description: 'Record console access to a project. This endpoint updates the last accessed timestamp for the project to track console activity.
'
responses:
'204':
description: No content
deprecated: false
x-appwrite:
group: null
demo: projects/update-console-access.md
rate-limit: 0
rate-time: 3600
rate-key: url:{url},ip:{ip}
scope: projects.write
platforms:
- console
packaging: false
public: true
auth:
console:
Project: []
security:
- Project: []
parameters:
- name: projectId
description: Project ID
required: true
schema:
type: string
example: <PROJECT_ID>
in: path
/projects/{projectId}/dev-keys:
get:
summary: List dev keys
operationId: projectsListDevKeys
tags:
- projects
description: List all the project\'s dev keys. Dev keys are project specific and allow you to bypass rate limits and get better error logging during development.'
responses:
'200':
description: Dev Keys List
content:
application/json:
schema:
$ref: '#/components/schemas/devKeyList'
deprecated: false
x-appwrite:
group: devKeys
demo: projects/list-dev-keys.md
rate-limit: 0
rate-time: 3600
rate-key: url:{url},ip:{ip}
scope: devKeys.read
platforms:
- console
packaging: false
public: true
auth:
console:
Project: []
security:
- Project: []
parameters:
- name: projectId
description: Project unique ID.
required: true
schema:
type: string
example: <PROJECT_ID>
in: path
- name: queries
description: 'Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https://appwrite.io/docs/queries). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: accessedAt, expire'
required: false
schema:
type: array
items:
type: string
default: []
in: query
/projects/{projectId}/dev-keys/{keyId}:
get:
summary: Get dev key
operationId: projectsGetDevKey
tags:
- projects
description: Get a project\'s dev key by its unique ID. Dev keys are project specific and allow you to bypass rate limits and get better error logging during development.
responses:
'200':
description: DevKey
content:
application/json:
schema:
$ref: '#/components/schemas/devKey'
deprecated: false
x-appwrite:
group: devKeys
demo: projects/get-dev-key.md
rate-limit: 0
rate-time: 3600
rate-key: url:{url},ip:{ip}
scope: devKeys.read
platforms:
- console
packaging: false
public: true
auth:
console:
Project: []
security:
- Project: []
parameters:
- name: projectId
description: Project unique ID.
required: true
schema:
type: string
example: <PROJECT_ID>
in: path
- name: keyId
description: Key unique ID.
required: true
schema:
type: string
example: <KEY_ID>
in: path
put:
summary: Update dev key
operationId: projectsUpdateDevKey
tags:
- projects
description: Update a project\'s dev key by its unique ID. Use this endpoint to update a project\'s dev key name or expiration time.'
responses:
'200':
description: DevKey
content:
application/json:
schema:
$ref: '#/components/schemas/devKey'
deprecated: false
x-appwrite:
group: devKeys
demo: projects/update-dev-key.md
rate-limit: 0
rate-time: 3600
rate-key: url:{url},ip:{ip}
scope: devKeys.write
platforms:
- console
packaging: false
public: true
auth:
console:
Project: []
security:
- Project: []
parameters:
- name: projectId
description: Project unique ID.
required: true
schema:
type: string
example: <PROJECT_ID>
in: path
- name: keyId
description: Key unique ID.
required: true
schema:
type: string
example: <KEY_ID>
in: path
requestBody:
content:
application/json:
schema:
type: object
properties:
name:
description: 'Key name. Max length: 128 chars.'
type: string
example: <NAME>
expire:
description: Expiration time in [ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format.
type: string
example: '2020-10-15T06:38:00.000+00:00'
format: datetime
required:
- name
- expire
delete:
summary: Delete dev key
operationId: projectsDeleteDevKey
tags:
- projects
description: Delete a project\'s dev key by its unique ID. Once deleted, the key will no longer allow bypassing of rate limits and better logging of errors.
responses:
'204':
description: No content
deprecated: false
x-appwrite:
group: devKeys
demo: projects/delete-dev-key.md
rate-limit: 0
rate-time: 3600
rate-key: url:{url},ip:{ip}
scope: devKeys.write
platforms:
- console
packaging: false
public: true
auth:
console:
Project: []
security:
- Project: []
parameters:
- name: projectId
description: Project unique ID.
required: true
schema:
type: string
example: <PROJECT_ID>
in: path
- name: keyId
description: Key unique ID.
required: true
schema:
type: string
example: <KEY_ID>
in: path
/projects/{projectId}/schedules:
get:
summary: List schedules
operationId: projectsListSchedules
tags:
- projects
description: Get a list of all the project's schedules. You can use the query params to filter your results.
responses:
'200':
description: Schedules List
content:
application/json:
schema:
$ref: '#/components/schemas/scheduleList'
deprecated: false
x-appwrite:
group: schedules
demo: projects/list-schedules.md
rate-limit: 0
rate-time: 3600
rate-key: url:{url},ip:{ip}
scope: schedules.read
platforms:
- console
packaging: false
public: true
auth:
console:
Project: []
security:
- Project: []
parameters:
- name: projectId
description: Project unique ID.
required: true
schema:
type: string
example: <PROJECT_ID>
in: path
- name: queries
description: 'Array of query strings generated using the Query class provided by the SDK. [Learn more about queries](https://appwrite.io/docs/queries). Maximum of 100 queries are allowed, each 4096 characters long. You may filter on the following attributes: resourceType, resourceId, projectId, schedule, active, region'
required: false
schema:
type: array
items:
type: string
default: []
in: query
- name: total
description: When set to false, the total count returned will be 0 and will not be calculated.
required: false
schema:
type: boolean
example: false
default: true
in: query
post:
summary: Create schedule
operationId: projectsCreateSchedule
tags:
- projects
description: Create a new schedule for a resource.
responses:
'201':
description: Schedule
content:
application/json:
schema:
$ref: '#/components/schemas/schedule'
deprecated: false
x-appwrite:
group: schedules
demo: projects/create-schedule.md
rate-limit: 0
rate-time: 3600
rate-key: url:{url},ip:{ip}
scope: schedules.write
platforms:
- console
packaging: false
public: true
auth:
console:
Project: []
security:
- Project: []
parameters:
- name: projectId
description: Project unique ID.
required: true
schema:
type: string
example: <PROJECT_ID>
in: path
requestBody:
content:
application/json:
schema:
type: object
properties:
resourceType:
description: 'The resource type for the schedule. Possible values: function, execution, message, backup.'
type: string
example: function
title: ScheduleResourceType
oneOf:
- type: string
enum:
- function
title: function
- type: string
enum:
- execution
title: execution
- type: string
enum:
- message
title: message
- type: string
enum:
- backup
title: backup
resourceId:
description: The resource ID to associate with this schedule.
type: string
example: <RESOURCE_ID>
schedule:
description: Schedule CRON expression.
type: string
example: 0 0 * * *
active:
description: Whether the schedule is active.
type: boolean
default: false
example: false
data:
description: Schedule data as a JSON string. Used to store resource-specific context needed for execution.
type: object
default: {}
example: {}
required:
- resourceType
- resourceId
- schedule
/projects/{projectId}/schedules/{scheduleId}:
get:
summary: Get schedule
operationId: projectsGetSchedule
tags:
- projects
description: Get a schedule by its unique ID.
responses:
'200':
description: Schedule
content:
application/json:
schema:
$ref: '#/components/schemas/schedule'
deprecated: false
x-appwrite:
group: schedules
demo: projects/get-schedule.md
rate-limit: 0
rate-time: 3600
rate-key: url:{url},ip:{ip}
scope: schedules.read
platforms:
- console
packaging: false
public: true
auth:
console:
Project: []
security:
- Project: []
parameters:
- name: projectId
description: Project unique ID.
required: true
schema:
type: string
example: <PROJECT_ID>
in: path
- name: scheduleId
description: Schedule ID.
required: true
schema:
type: string
example: <SCHEDULE_ID>
in: path
/projects/{projectId}/stages:
get:
summary: List stages
operationId: projectsListStages
tags:
- projects
description: 'Get the onboarding stages for the current project, including each stage’s SDK method key and status (for example pending, completed, or skipped).
'
responses:
'200':
description: Stages List
content:
application/json:
schema:
$ref: '#/components/schemas/stageList'
deprecated: false
x-appwrite:
group: stages
demo: projects/list-stages.md
rate-limit: 0
rate-time: 3600
rate-key: url:{url},ip:{ip}
scope: stages.read
platforms:
- console
packaging: false
public: true
auth:
console:
Project: []
security:
- Project: []
parameters:
- name: projectId
description: Project unique ID.
required: true
schema:
type: string
example: <PROJECT_ID>
in: path
/projects/{projectId}/stages/{stageId}:
patch:
summary: Update stage
operationId: projectsUpdateStage
tags:
- projects
description: 'Update an onboarding stage for the current project. Use this endpoint to skip a stage or leave it unchanged without performing the related API action.
'
responses:
'200':
description: Stage
content:
application/json:
schema:
$ref: '#/components/schemas/stage'
deprecated: false
x-appwrite:
group: stages
demo: projects/update-stage.md
rate-limit: 0
rate-time: 3600
rate-key: url:{url},ip:{ip}
scope: stages.write
platforms:
- console
packaging: false
public: true
auth:
console:
Project: []
security:
- Project: []
parameters:
- name: projectId
description: Project unique ID.
required: true
schema:
type: string
example: <PROJECT_ID>
in: path
- name: stageId
description: SDK method key (namespace.method).
required: true
schema:
type: string
example: <STAGE_ID>
in: path
requestBody:
content:
application/json:
schema:
type: object
properties:
skip:
description: Mark the stage as skipped.
type: boolean
default: true
example: false
/projects/{projectId}/status:
patch:
summary: Update the status of a project
operationId: projectsUpdateStatus
tags:
- projects
description: 'Update the status of a project. Can be used to archive/restore projects, and to restore paused projects. When restoring a paused project, the console fingerprint header must be provided and the project must not be blocked for any reason other than inactivity.
'
responses:
'204':
description: No content
deprecated: false
x-appwrite:
group: null
demo: projects/update-status.md
rate-limit: 10
rate-time: 3600
rate-key: ip:{ip},userId:{userId}
scope: projects.write
platforms:
- console
packaging: false
public: true
auth:
console:
Project: []
security:
- Project: []
parameters:
- name: projectId
description: Project ID
required: true
schema:
type: string
example: <PROJECT_ID>
in: path
requestBody:
content:
application/json:
schema:
type: object
properties:
status:
description: New status for the project
type: string
example: active
title: Status
oneOf:
- type: string
enum:
- active
title: active
required:
- status
/projects/{projectId}/team:
patch:
summary: Update project team
operationId: projectsUpdateTeam
tags:
- projects
description: Update the team ID of a project allowing for it to be transferred to another team.
responses:
'200':
description: Project
content:
application/json:
schema:
$ref: '#/components/schemas/project'
deprecated: false
x-appwrite:
group: projects
demo: projects/update-team.md
rate-limit: 0
rate-time: 3600
rate-key: url:{url},ip:{ip}
scope: projects.write
platforms:
- console
packaging: false
public: true
auth:
console:
Project: []
security:
- Project: []
parameters:
- name: projectId
description: Project unique ID.
required: true
schema:
type: string
example: <PROJECT_ID>
in: path
requestBody:
content:
application/json:
schema:
type: object
properties:
teamId:
description: Team ID of the team to transfer project to.
type: string
example: <TEAM_ID>
required:
- teamId
components:
schemas:
addon:
description: Addon
type: object
properties:
$id:
type: string
description: Addon ID.
example: 5e5ea5c16897e
$createdAt:
type: string
description: Addon creation time in ISO 8601 format.
example: '2020-10-15T06:38:00.000+00:00'
$updatedAt:
type: string
description: Addon update date in ISO 8601 format.
example: '2020-10-15T06:38:00.000+00:00'
$permissions:
type: array
description: Addon permissions. [Learn more about permissions](https://appwrite.io/docs/permissions).
items:
type: string
example:
- read("any")
key:
type: string
description: Addon key
example: baa
resourceType:
type: string
description: Resource type (organization or project)
example: organization
resourceId:
type: string
description: Resource ID
example: 5e5ea5c16897e
status:
type: string
description: 'Payment status. Possible values: pending (awaiting payment confirmation e.g. 3DS), active (payment confirmed and addon is running).'
example: active
currentValue:
type: integer
description: 'Current value for this billing cycle. For toggle addons: 1 (on) or 0 (off). For numeric addons: the active quantity.'
format: int32
example: 1
nextValue:
type: integer
description: Value to apply at the start of the next billing cycle. Null means no change is scheduled. For toggle addons, 0 means the addon will be removed at the next cycle.
format: int32
nullable: true
required:
- $id
- $createdAt
- $updatedAt
- $permissions
- key
- resourceType
- resourceId
- status
- currentValue
example:
$id: 5e5ea5c16897e
$createdAt: '2020-10-15T06:38:00.000+00:00'
$updatedAt: '2020-10-15T06:38:00.000+00:00'
$permissions:
- read("any")
key: baa
resourceType: organization
resourceId: 5e5ea5c16897e
status: active
currentValue: 1
nextValue: null
addonList:
description: Addons list
type: object
properties:
total:
type: integer
description: Total number of addons that matched your query.
format: int32
example: 5
addons:
type: array
description: List of addons.
items:
$ref: '#/components/schemas/addon'
example: []
required:
- total
- addons
example:
total: 5
addons: ''
addonPrice:
description: AddonPrice
type: object
properties:
addonKey:
type: string
description: Addon key.
example: baa
name:
type: string
description: Addon display name.
example: HIPAA BAA
monthlyPrice:
type: number
description: Full monthly price of the addon.
format: double
example: 350
proratedAmount:
type: number
description: Calculated prorated amount for the current billing cycle.
format: double
example: 175.5
remainingDays:
type: integer
description: Days remaining in the current billing cycle.
format: int32
example: 15
totalCycleDays:
type: integer
description: Total days in the billing cycle.
format: int32
example: 30
currency:
type: string
description: Currency code.
example: USD
billingCycleEnd:
type: string
description: When the current billing cycle ends.
example: '2024-02-01T00:00:00.000+00:00'
required:
- addonKey
- name
- monthlyPrice
- proratedAmount
- remainingDays
- totalCycleDays
- currency
- billingCycleEnd
example:
addonKey: baa
name: HIPAA BAA
monthlyPrice: 350
proratedAmount: 175.5
remainingDays: 15
totalCycleDays: 30
currency: USD
billingCycleEnd: '2024-02-01T00:00:00.000+00:00'
billingLimits:
description: Limits
type: object
properties:
bandwidth:
type: integer
description: Bandwidth limit
format: int32
example: 5
nullable: true
storage:
type: integer
description: Storage limit
format: int32
example: 150
nullable: true
users:
type: integer
description: Users limit
format: int32
example: 200000
nullable: true
executions:
type: integer
description: Executions limit
format: int32
example: 750000
nullable: true
GBHours:
type: integer
description: GBHours limit
format: int32
example: 100
nullable: true
imageTransformations:
type: integer
description: Image transformations limit
format: int32
example: 100
nullable: true
authPhone:
type: integer
description: Auth phone limit
format: int32
example: 10
nullable: true
budgetLimit:
type: integer
description: Budget limit percentage
format: int32
example: 100
nullable: true
example:
bandwidth: 5
storage: 150
users: 200000
executions: 750000
GBHours: 100
imageTransformations: 100
authPhone: 10
budgetLimit: 100
block:
description: Block
type: object
properties:
$createdAt:
type: string
description: Block creation date in ISO 8601 format.
example: '2020-10-15T06:38:00.000+00:00'
resourceType:
type: string
description: Resource type that is blocked
example: project
resourceId:
type: string
description: Resource identifier that is blocked
example: 5e5ea5c16897e
mode:
type: string
description: Block mode. full blocks reads and writes; readOnly blocks writes only.
example: readOnly
reason:
type: string
description: Reason for the block. Can be null if no reason was provided.
example: Payment overdue
nullable: true
expiredAt:
type: string
description: Block expiration date in ISO 8601 format. Can be null if the
# --- truncated at 32 KB (54 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/appwrite/refs/heads/main/openapi/appwrite-projects-api-openapi.yml