openapi: 3.0.2
info:
title: Zeplin Authorization Notifications API
description: Access your resources in Zeplin
version: 1.38.0
contact:
name: Zeplin
url: https://zeplin.io
email: support@zeplin.io
servers:
- url: https://api.zeplin.dev
security:
- PersonalAccessToken: []
- OAuth2: []
tags:
- name: Notifications
paths:
/v1/users/me/notifications:
get:
tags:
- Notifications
summary: Get user notifications
description: List all notifications of the user
operationId: GetUserNotifications
parameters:
- $ref: '#/components/parameters/limit'
- $ref: '#/components/parameters/offset'
- $ref: '#/components/parameters/is_read'
- $ref: '#/components/parameters/notification_type'
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Notification'
examples:
Notifications:
value:
- $ref: '#/components/examples/notification/value'
patch:
tags:
- Notifications
summary: Bulk update user notifications
description: 'Updates all user notifications unless `type` or `id` parameter is given.
If `type` parameter is provided, updates notifications with matching type.
Similarly, updates notifications with matching identifiers if `id` parameter is provided.
☝️ `type` and `id` should not be used in conjunction.
'
operationId: UpdateUserNotifications
parameters:
- $ref: '#/components/parameters/notification_type'
- name: id
in: query
description: 'Filter by id
Example: `?id=5fbe387f8c72ef23659fb500&id=602281f4783f72fccc045484`
'
required: false
schema:
type: array
items:
type: string
pattern: /^[0-9a-f]{24}$/i
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/NotificationUpdateBody'
responses:
'204':
$ref: '#/components/responses/noContent'
/v1/users/me/notifications/{notification_id}:
get:
tags:
- Notifications
summary: Get a notification of user
description: Get a notification by id
operationId: GetUserNotification
parameters:
- $ref: '#/components/parameters/notification_id'
responses:
'200':
description: Successful response
content:
application/json:
schema:
$ref: '#/components/schemas/Notification'
examples:
response:
$ref: '#/components/examples/notification'
'404':
$ref: '#/components/responses/notificationNotFound'
patch:
tags:
- Notifications
summary: Update user notification
description: Update a notification for the user
operationId: UpdateUserNotification
parameters:
- $ref: '#/components/parameters/notification_id'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/NotificationUpdateBody'
responses:
'204':
$ref: '#/components/responses/noContent'
'404':
$ref: '#/components/responses/notificationNotFound'
components:
schemas:
NotificationTypeEnum:
title: Notification Type
type: string
enum:
- workspace.project
- workspace.styleguide
- project.extension
- styleguide.extension
- user.project_membership
- user.styleguide_membership
- project.component
- styleguide.component
- project.color
- styleguide.color
- project.screen.note
- project.screen.note.comment
- project.screen
- project.text_style
- styleguide.text_style
- project.spacing_token
- styleguide.spacing_token
- project.jira_attachment
- project.screen_section.jira_attachment
- project.screen.jira_attachment
- workspace.organization.member
- project.slack_integration
- styleguide.slack_integration
- project.member
- styleguide.member
- project.flow_board
NotificationUpdateBody:
title: Notifications Update Body
type: object
required:
- is_read
properties:
is_read:
type: boolean
description: New is_read status for notifications
Notification:
title: Notification
description: 'Notification objects have a polymorphic structure. They can be of various types and each type has a certain set of actions that describe the notification further.
Notification content (specifically `resource` and `context` fields) varies based on the value of type field. These variations and their details are described in the table below.
Type | Actions | Context | Resource | Description
--| --| --| --| --
`workspace.project` | `activated`
`archived`
`deleted`
`ownership_transferred` | - | `Project (extra: { name, platform })` | Used for changes related to projects in a workspace.
`workspace.styleguide` | `activated`
`archived`
`deleted`
`ownership_transferred` | - | `Styleguide (extra: { name, platform })` | Used for changes related to styleguides in a workspace.
`workspace.organization.member` | `role_updated`
`invited` | `Organization (extra: { name })` | `OrganizationMember (extra: { role })` | Used for changes related to members of a workspace.
`project.screen` | `created`
`version_created`
`deleted` | `Project (extra: { name, platform })`
`ScreenVersion (extra: { image_url, thumbnails, width, height })` | `Screen (extra: { name })` | Used for changes related to screens in a project.
`project.screen.note` | `created`
`mentioned` | `Project (extra: { name, platform })`
`Screen (extra: { name })`
`ScreenNoteComment (extra: { content })` | `Screen (extra: { order, color, status })` | Used for changes related to notes.
`project.screen.note.comment` | `created`
`mentioned` | `Project (extra: { name, platform })`
`Screen (extra: { name })`
`Screen (extra: { order, color, status })` | `ScreenNoteComment (extra: { content })` | Used for changes related to note comments.
`project.color` | `created`
`updated`
`deleted` | `Project (extra: { name, platform })` | `Color (extra: { name, r, g, b, a })` | Used for changes related to colors in a project.
`project.text_style` | `created`
`updated`
`deleted` | `Project (extra: { name, platform })` | `TextStyle (extra: { name })` | Used for changes related to text styles in a project.
`project.component` | `created`
`version_created`
`deleted` | `Project (extra: { name, platform })` | `Component (extra: { name })` | Used for changes related to components in a project.
`project.spacing_token` | `created`
`updated`
`deleted` | `Project (extra: { name, platform })` | `SpacingToken (extra: { name, value })` | Used for changes related to spacing tokens in a project.
`project.member` | `joined` | `Project (extra: { name, platform })` | | Used for changes related to members of a project.
`project.extension` | `added`
`removed` | `Project (extra: { name, platform })` | `Extension (extra: { name })` | Used for changes related to extensions in a project.
`project.slack_integration` | `added` | `Project (extra: { name, platform })` | `SlackIntegration (extra: { channel })` | Used for changes related to slack intgrations in a project.
`project.jira_attachment` | `added`
`removed` | `Project (extra: { name, platform })` | `JiraIntegration (extra: { issue })` | Used for changes related to jira attachments in a project.
`project.screen.jira_attachment` | `added`
`removed` | `Project (extra: { name, platform })`
`Screen (extra: { name })` | `JiraIntegration (extra: { issue })` | Used for changes related to jira attachments in a screen.
`project.screen_section.jira_attachment` | `added`
`removed` | `Project (extra: { name, platform })`
`ScreenSection (extra: { name })` | `JiraIntegration (extra: { issue })` | Used for changes related to jira attachments in a screen section.
`project.flow_board` | `added` | `Project (extra: { name, platform })` | `FlowBoard (extra: {})` | Used for changes related to flow boards in a project.
`styleguide.color` | `created`
`updated`
`deleted` | `Styleguide (extra: { name, platform })` | `Color (extra: { name, r, g, b, a })` | Used for changes related to colors in a styleguide.
`styleguide.text_style` | `created`
`updated`
`deleted` | `Styleguide (extra: { name, platform })` | `TextStyle (extra: { name })` | Used for changes related to text styles in a styleguide.
`styleguide.component` | `created`
`version_created`
`deleted` | `Styleguide (extra: { name, platform })` | `Component (extra: { name })` | Used for changes related to components in a styleguide.
`styleguide.spacing_token` | `created`
`updated`
`deleted` | `Styleguide (extra: { name, platform })` | `SpacingToken (extra: { name, value })` | Used for changes related to spacing tokens in a styleguide.
`styleguide.member` | `joined` | `Styleguide (extra: { name, platform })` | `User (extra: { username })` | Used for changes related to members of a styleguide.
`styleguide.extension` | `added`
`removed` | `Styleguide (extra: { name, platform })` | `Extension (extra: { name })` | Used for changes related to extensions in a styleguide.
`styleguide.slack_integration` | `added` | `Styleguide (extra: { name, platform })` | `SlackIntegration (extra: { channel })` | Used for changes related to slack intgrations in a styleguide.
`user.project_membership` | `invited`
`role_updated`
`removed` | - | `Project (extra: { name, platform })` | Used for changes related to notified user''s membership to projects.
`user.styleguide_membership` | `invited`
`role_updated`
`removed` | - | `Styleguide (extra: { name, platform })` | Used for changes related to notified user''s membership to styleguides.
'
type: object
required:
- id
- type
- is_read
- action
- created
- updated
- context
- actor
properties:
id:
type: string
description: The unique id of the notification
type:
allOf:
- $ref: '#/components/schemas/NotificationTypeEnum'
- description: Type of the notification
is_read:
type: boolean
description: Whether the notification is read or not
action:
type: string
description: Action that causes the notification
created:
type: integer
format: timestamp
description: The unix timestamp when the screen was created
updated:
type: integer
format: timestamp
description: The unix timestamp when the screen was updated
resource:
$ref: '#/components/schemas/NotificationResource'
context:
type: object
description: 'Additional objects which are related to the main resource object. The content of this object changes depending on the `type` field (e.g. `{ project: { ... }, screen: { ... } }` for a screen related notification).'
actor:
$ref: '#/components/schemas/NotificationActor'
example:
$ref: '#/components/examples/notification'
ErrorResponse:
title: Error Response
type: object
required:
- message
properties:
message:
type: string
description: A user readable descriptive message for the error
detail:
type: string
description: A detailed message describing the error
code:
type: string
description: The unique code for the error
example:
$ref: '#/components/examples/error'
User:
title: User
description: 'Basic info about Zeplin users.
Zeplin API does not expose any personal information to third-party clients. For this reason, the `email` field is a Zeplin-only alias by default.
You can get the original email addresses of members of your workspace by using a personal access token created with admin rights. Third-party (OAuth) applications are not allowed to access this information.
☝️*Only organization admins (or higher) can retrieve the original email addresses using an admin token.*
'
type: object
required:
- id
- email
- username
properties:
id:
type: string
description: User's unique id
email:
type: string
description: Zeplin-only alias for the user's email (original)
username:
type: string
description: Username of the user
emotar:
type: string
format: emoji
description: Emotar of the user
avatar:
type: string
description: Avatar of the user
last_seen:
type: number
description: The unix timestamp when the user was last seen
example:
$ref: '#/components/examples/user'
x-examples:
User:
$ref: '#/components/examples/user'
My User:
$ref: '#/components/examples/me'
NotificationResource:
title: Notification Resource
type: object
description: The main object that this notification is related. It contains the ID of the object along with its type and partial data. The content of this object varies between notification types.
required:
- id
- type
- extra
properties:
id:
type: string
description: The unique id of the resource (e.g. `"5ed05ecf3356a7967b21f12b"`)
type:
type: string
description: Type of the object, which is one of the API models (e.g. `"ScreenVersion"`)
extra:
type: object
description: Partial data of the resource, whose content changes depending on the `type` field
example:
$ref: '#/components/examples/notificationResource'
NotificationActor:
title: Notification Actor
type: object
description: The actor of the change triggering this notification
required:
- user
properties:
user:
$ref: '#/components/schemas/User'
description: User object
example:
$ref: '#/components/examples/notificationActor'
parameters:
notification_id:
name: notification_id
in: path
description: Notification id
required: true
schema:
type: string
pattern: /^[0-9a-f]{24}$/i
limit:
name: limit
in: query
description: Pagination limit
required: false
schema:
type: integer
minimum: 1
maximum: 100
default: 30
offset:
name: offset
in: query
description: Pagination offset
required: false
schema:
type: integer
minimum: 0
default: 0
notification_type:
name: type
in: query
description: 'Filter by type
Example: `?type=project.extension&type=styleguide.extension`
'
required: false
schema:
type: array
uniqueItems: true
items:
$ref: '#/components/schemas/NotificationTypeEnum'
is_read:
name: is_read
in: query
description: Whether the notification is read or not
required: false
schema:
type: boolean
examples:
user:
summary: User
value:
id: 5d9caaecb4a3fa9bc9718686
email: 5d9caaecb4a3fa9bc9718686@user.zeplin.io
username: zozo
emotar: 🍎
avatar: http://placekitten.com/200/300
last_seen: 1616739240
notificationResource:
summary: Notification Resource
value:
id: 5dbad85a76ea51c1f35b6f69
type: Color
extra:
name: baby poop green
r: 143
g: 152
b: 5
a: 1
notification:
summary: Notification
value:
id: 5fbe387f8c72ef23659fb500
timestamp: 1586852836
type: project.color
action: created
is_read: false
resource:
$ref: '#/components/examples/notificationResource/value'
context:
project:
id: 5db81e73e1e36ee19f138c1a
type: Project
extra:
name: HAL 9000
platform: web
actor:
$ref: '#/components/examples/notificationActor/value'
notificationActor:
summary: Notification Actor
value:
user:
$ref: '#/components/examples/user/value'
error:
summary: Error
value:
message: Project is not found
me:
summary: My user
value:
id: 5d9caaecb4a3fa9bc9718686
email: zo@zeplin.io
username: zozo
emotar: 🍎
avatar: http://placekitten.com/200/300
last_seen: 1616739240
responses:
noContent:
description: Successful response
notificationNotFound:
description: Notification not found response
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
examples:
Notification not found response:
value:
message: Notification not found
securitySchemes:
OAuth2:
type: oauth2
flows:
authorizationCode:
authorizationUrl: /v1/oauth/authorize
tokenUrl: /v1/oauth/token
refreshUrl: /v1/oauth/token
scopes: {}
PersonalAccessToken:
type: http
scheme: bearer
bearerFormat: JWT