SavvyCal
App · 20 actions
Work with your SavvyCal scheduling: find open slots and book, list and cancel events, create, copy, update and switch scheduling links on or off, read workflows, and manage webhooks.
Actions
| Action | What it does |
|---|---|
| Book event | Book an event on a scheduling link for someone, at one of the link's open slots (use 'Get available slots' to find one). |
| Cancel event | Cancel an event, optionally giving a reason. |
| Create scheduling link | Create a scheduling link in your personal scope. |
| Create scheduling link in a scope | Create a scheduling link in a team (or personal) scope, chosen by the scope's slug. |
| Create webhook | Have SavvyCal send every event notification (event created, canceled and so on) to an https address. |
| Delete scheduling link | Delete a scheduling link so it can no longer be booked. |
| Delete webhook | Delete a webhook so SavvyCal stops sending to it. |
| Duplicate scheduling link | Copy a scheduling link with its availability, durations and questions. |
| Get available slots | List the open times on a scheduling link, up to 31 days at a time (the next seven days unless a window is given). |
| Get current user | Get the SavvyCal user the connection acts as: name, email, plan (free, basic or premium), time zone and time format. |
| Get event | Get one event with its time, attendees, answers, conferencing details and state. |
| Get scheduling link | Get one scheduling link with its state, durations and booking questions. |
| Get webhook | Get one webhook with its address, state and signing secret. |
| List events | List events, filtered by state, time, date range or scheduling link. |
| List scheduling links | List the scheduling links you can manage. |
| List webhooks | List the account's webhooks with their addresses, states and signing secrets. |
| List workflow rules | List a workflow's rules: what triggers each one, how long before or after, and the actions it takes. |
| List workflows | List the workflows (reminders and follow-ups) in the scopes you manage. |
| Turn scheduling link on or off | Turn a scheduling link on (active) or off (disabled). |
| Update scheduling link | Change a scheduling link's name, description, private name or use. |
Book event
Book an event on a scheduling link for someone, at one of the link's open slots (use 'Get available slots' to find one). The link must be turned on.
Inputs
- Scheduling link
link_idtextRequired - The scheduling link. Pick one, or give its id from an earlier step.
- Start
start_atdate and timeRequired - When the event starts. It must be the start of one of the link's open slots (see 'Get available slots').
- End
end_atdate and timeRequired - When the event ends, the end of the same open slot.
- Attendee name
display_nametextRequired - The full name of the person booking.
- Attendee email
emailtextRequired - The email address of the person booking.
- Attendee time zone
time_zonetextRequired - The time zone of the person booking, such as America/New_York.
- Attendee phone
phone_numbertext - Their phone number with the country code, like +15555555555. Required only if the link always asks for one.
- Answers to the link's questions
field_answersobject - Each question's label (or id) with the answer, for example {"Company": "Acme"}. The question ids and types are looked up for you.
- Metadata
metadataobject - Your own keys and values to keep on the event.
Outputs
eventobject- The event
Example output
{
"event": {
"attendees": [
{
"display_name": "Jo Bloggs",
"email": "jo@example.com",
"fields": [],
"first_name": "Jo",
"id": "attendee_01HX",
"is_organizer": false,
"last_name": "Bloggs",
"marketing_opt_in": false,
"phone_number": null,
"response_status": "accepted",
"time_zone": "America/New_York"
}
],
"buffer_after": 0,
"buffer_before": 0,
"conferencing": {
"join_url": null,
"type": "google_meet"
},
"created_at": "2026-10-15T09:00:00Z",
"duration": 30,
"end_at": "2026-10-20T14:30:00Z",
"id": "event_01HXAMPLE",
"is_group_session": false,
"link": {
"id": "link_01HXAMPLE",
"name": "30-minute intro call",
"slug": "intro"
},
"maximum_group_size": 1,
"metadata": {},
"organizer": {
"display_name": "Jo Bloggs",
"email": "jo@example.com",
"fields": [],
"first_name": "Jo",
"id": "attendee_01HY",
"is_organizer": true,
"last_name": "Bloggs",
"marketing_opt_in": false,
"phone_number": null,
"response_status": "accepted",
"time_zone": "America/New_York"
},
"scope": {
"id": "scope_01HX",
"name": "Jo Bloggs",
"slug": "jo"
},
"start_at": "2026-10-20T14:00:00Z",
"state": "confirmed",
"summary": "30-minute intro call",
"url": "https://savvycal.com/events/2f3c3b1e",
"uuid": "2f3c3b1e-6f1c-4c6a-9d1e-0b5b6f4e2a11"
}
}Cancel event
Cancel an event, optionally giving a reason.
Inputs
- Event ID
event_idtextRequired - The event's id or UUID, from 'List events' or an earlier step.
- Reason
cancel_reasontext - Why the event is canceled.
Outputs
eventobject- The event
Example output
{
"event": {
"attendees": [
{
"display_name": "Jo Bloggs",
"email": "jo@example.com",
"fields": [],
"first_name": "Jo",
"id": "attendee_01HX",
"is_organizer": false,
"last_name": "Bloggs",
"marketing_opt_in": false,
"phone_number": null,
"response_status": "accepted",
"time_zone": "America/New_York"
}
],
"buffer_after": 0,
"buffer_before": 0,
"canceled_at": "2026-10-16T09:00:00Z",
"conferencing": {
"join_url": null,
"type": "google_meet"
},
"created_at": "2026-10-15T09:00:00Z",
"duration": 30,
"end_at": "2026-10-20T14:30:00Z",
"id": "event_01HXAMPLE",
"is_group_session": false,
"link": {
"id": "link_01HXAMPLE",
"name": "30-minute intro call",
"slug": "intro"
},
"maximum_group_size": 1,
"metadata": {},
"organizer": {
"display_name": "Jo Bloggs",
"email": "jo@example.com",
"fields": [],
"first_name": "Jo",
"id": "attendee_01HY",
"is_organizer": true,
"last_name": "Bloggs",
"marketing_opt_in": false,
"phone_number": null,
"response_status": "accepted",
"time_zone": "America/New_York"
},
"scope": {
"id": "scope_01HX",
"name": "Jo Bloggs",
"slug": "jo"
},
"start_at": "2026-10-20T14:00:00Z",
"state": "canceled",
"summary": "30-minute intro call",
"url": "https://savvycal.com/events/2f3c3b1e",
"uuid": "2f3c3b1e-6f1c-4c6a-9d1e-0b5b6f4e2a11"
}
}Create scheduling link
Create a scheduling link in your personal scope. Durations and availability use SavvyCal's defaults; to start from a link that has them set up, use 'Duplicate scheduling link' instead.
Inputs
- Name
nametextRequired - The link's name, shown to people booking.
- Description
descriptiontext - The short description shown on the booking page.
- Private name
private_nametext - A name only you see in SavvyCal, not people booking.
- Use
link_typetext - Multi-use links can be booked again and again; single-use links only once.One of:
recurring(Multi-use),single(Single-use).
Outputs
linkobject- The scheduling link
scope_slugtext- The slug of the scope the link is in, empty if none
Example output
{
"link": {
"default_duration": 30,
"description": "A quick hello.",
"durations": [
30
],
"fields": [
{
"id": "field_01HX",
"is_required": false,
"label": "Company",
"type": "short_text"
}
],
"id": "link_01HXAMPLE",
"increment": 15,
"name": "30-minute intro call",
"private_name": null,
"scope": {
"id": "scope_01HX",
"name": "Jo Bloggs",
"slug": "jo"
},
"slug": "intro",
"state": "active"
},
"scope_slug": "jo"
}Create scheduling link in a scope
Create a scheduling link in a team (or personal) scope, chosen by the scope's slug. You must be able to manage that scope.
Inputs
- Scope
scope_slugtextRequired - The scope's slug, the part after savvycal.com/ in its booking links (for example acme-inc).
- Name
nametextRequired - The link's name, shown to people booking.
- Description
descriptiontext - The short description shown on the booking page.
- Private name
private_nametext - A name only you see in SavvyCal, not people booking.
- Use
link_typetext - Multi-use links can be booked again and again; single-use links only once.One of:
recurring(Multi-use),single(Single-use).
Outputs
linkobject- The scheduling link
scope_slugtext- The slug of the scope the link is in, empty if none
Example output
{
"link": {
"default_duration": 30,
"description": "A quick hello.",
"durations": [
30
],
"fields": [
{
"id": "field_01HX",
"is_required": false,
"label": "Company",
"type": "short_text"
}
],
"id": "link_01HXAMPLE",
"increment": 15,
"name": "30-minute intro call",
"private_name": null,
"scope": {
"id": "scope_01HX",
"name": "Jo Bloggs",
"slug": "jo"
},
"slug": "intro",
"state": "active"
},
"scope_slug": "jo"
}Create webhook
Have SavvyCal send every event notification (event created, canceled and so on) to an https address. The result includes the secret SavvyCal signs each delivery with.
Inputs
- Address
urltextRequired - The https:// address to send notifications to.
Outputs
webhookobject- The webhook
Example output
{
"webhook": {
"created_at": "2026-10-15T09:00:00Z",
"id": "wh_01HXAMPLE",
"secret": "whsec_example",
"state": "active",
"url": "https://example.com/savvycal",
"version": "1"
}
}Delete scheduling link
Delete a scheduling link so it can no longer be booked.
Inputs
- Scheduling link
link_idtextRequired - The scheduling link. Pick one, or give its id from an earlier step.
Outputs
deletedtrue/false- Always true once deleted
linkobject- The link, now deleted
link_idtext- The link deleted
scope_slugtext- The slug of the scope the link is in, empty if none
Example output
{
"deleted": true,
"link": {
"default_duration": 30,
"description": "A quick hello.",
"durations": [
30
],
"fields": [
{
"id": "field_01HX",
"is_required": false,
"label": "Company",
"type": "short_text"
}
],
"id": "link_01HXAMPLE",
"increment": 15,
"name": "30-minute intro call",
"private_name": null,
"scope": {
"id": "scope_01HX",
"name": "Jo Bloggs",
"slug": "jo"
},
"slug": "intro",
"state": "deleted"
},
"link_id": "link_01HXAMPLE",
"scope_slug": "jo"
}Delete webhook
Delete a webhook so SavvyCal stops sending to it.
Inputs
- Webhook ID
webhook_idtextRequired - The webhook's id, from 'List webhooks' or 'Create webhook'.
Outputs
deletedtrue/false- Always true once deleted
webhookobject- The webhook, now deleted
webhook_idtext- The webhook deleted
Example output
{
"deleted": true,
"webhook": {
"created_at": "2026-10-15T09:00:00Z",
"id": "wh_01HXAMPLE",
"secret": "whsec_example",
"state": "deleted",
"url": "https://example.com/savvycal",
"version": "1"
},
"webhook_id": "wh_01HXAMPLE"
}Duplicate scheduling link
Copy a scheduling link with its availability, durations and questions. Returns the new link.
Inputs
- Scheduling link
link_idtextRequired - The scheduling link. Pick one, or give its id from an earlier step.
Outputs
linkobject- The scheduling link
scope_slugtext- The slug of the scope the link is in, empty if none
Example output
{
"link": {
"default_duration": 30,
"description": "A quick hello.",
"durations": [
30
],
"fields": [
{
"id": "field_01HX",
"is_required": false,
"label": "Company",
"type": "short_text"
}
],
"id": "link_01HYCOPY",
"increment": 15,
"name": "30-minute intro call",
"private_name": null,
"scope": {
"id": "scope_01HX",
"name": "Jo Bloggs",
"slug": "jo"
},
"slug": "intro-2",
"state": "active"
},
"scope_slug": "jo"
}Get available slots
List the open times on a scheduling link, up to 31 days at a time (the next seven days unless a window is given). Use a slot's start and end to book with 'Book event'.
Inputs
- Scheduling link
link_idtextRequired - The scheduling link. Pick one, or give its id from an earlier step.
- From
from_timedate and time - Start of the window to search. Defaults to now.
- Until
until_timedate and time - End of the window, at most 31 days after the start. Defaults to seven days after it.
Outputs
countnumber- How many
fromtext- Window start (UTC)
slotslist- The open slots
untiltext- Window end (UTC)
Example output
{
"count": 1,
"from": "2026-10-15T09:00:00Z",
"slots": [
{
"duration": 30,
"end_at": "2026-10-20T14:30:00Z",
"rank": 1,
"start_at": "2026-10-20T14:00:00Z"
}
],
"until": "2026-10-22T09:00:00Z"
}Get current user
Get the SavvyCal user the connection acts as: name, email, plan (free, basic or premium), time zone and time format.
Inputs
None.
Outputs
userobject- The connected user
Example output
{
"user": {
"avatar_url": null,
"display_name": "Jo Bloggs",
"email": "jo@example.com",
"first_day_of_week": 1,
"first_name": "Jo",
"id": "user_01HX",
"last_name": "Bloggs",
"plan": "basic",
"time_format": "12hr",
"time_zone": "America/New_York"
}
}Get event
Get one event with its time, attendees, answers, conferencing details and state.
Inputs
- Event ID
event_idtextRequired - The event's id or UUID, from 'List events' or an earlier step.
Outputs
eventobject- The event
Example output
{
"event": {
"attendees": [
{
"display_name": "Jo Bloggs",
"email": "jo@example.com",
"fields": [],
"first_name": "Jo",
"id": "attendee_01HX",
"is_organizer": false,
"last_name": "Bloggs",
"marketing_opt_in": false,
"phone_number": null,
"response_status": "accepted",
"time_zone": "America/New_York"
}
],
"buffer_after": 0,
"buffer_before": 0,
"conferencing": {
"join_url": null,
"type": "google_meet"
},
"created_at": "2026-10-15T09:00:00Z",
"duration": 30,
"end_at": "2026-10-20T14:30:00Z",
"id": "event_01HXAMPLE",
"is_group_session": false,
"link": {
"id": "link_01HXAMPLE",
"name": "30-minute intro call",
"slug": "intro"
},
"maximum_group_size": 1,
"metadata": {},
"organizer": {
"display_name": "Jo Bloggs",
"email": "jo@example.com",
"fields": [],
"first_name": "Jo",
"id": "attendee_01HY",
"is_organizer": true,
"last_name": "Bloggs",
"marketing_opt_in": false,
"phone_number": null,
"response_status": "accepted",
"time_zone": "America/New_York"
},
"scope": {
"id": "scope_01HX",
"name": "Jo Bloggs",
"slug": "jo"
},
"start_at": "2026-10-20T14:00:00Z",
"state": "confirmed",
"summary": "30-minute intro call",
"url": "https://savvycal.com/events/2f3c3b1e",
"uuid": "2f3c3b1e-6f1c-4c6a-9d1e-0b5b6f4e2a11"
}
}Get scheduling link
Get one scheduling link with its state, durations and booking questions.
Inputs
- Scheduling link
link_idtextRequired - The scheduling link. Pick one, or give its id from an earlier step.
Outputs
linkobject- The scheduling link
scope_slugtext- The slug of the scope the link is in, empty if none
Example output
{
"link": {
"default_duration": 30,
"description": "A quick hello.",
"durations": [
30
],
"fields": [
{
"id": "field_01HX",
"is_required": false,
"label": "Company",
"type": "short_text"
}
],
"id": "link_01HXAMPLE",
"increment": 15,
"name": "30-minute intro call",
"private_name": null,
"scope": {
"id": "scope_01HX",
"name": "Jo Bloggs",
"slug": "jo"
},
"slug": "intro",
"state": "active"
},
"scope_slug": "jo"
}Get webhook
Get one webhook with its address, state and signing secret.
Inputs
- Webhook ID
webhook_idtextRequired - The webhook's id, from 'List webhooks' or 'Create webhook'.
Outputs
webhookobject- The webhook
Example output
{
"webhook": {
"created_at": "2026-10-15T09:00:00Z",
"id": "wh_01HXAMPLE",
"secret": "whsec_example",
"state": "active",
"url": "https://example.com/savvycal",
"version": "1"
}
}List events
List events, filtered by state, time, date range or scheduling link. Returns one page; pass 'next_cursor' as 'after' for more.
Inputs
- State
statetext - Which events to include. Defaults to confirmed.One of:
confirmed(Confirmed (default)),all,canceled,tentative,awaiting_approval(Awaiting approval),declined,awaiting_reschedule(Awaiting reschedule),awaiting_checkout(Awaiting checkout),checkout_expired(Checkout expired). - When
periodtext - Upcoming, past or all events. Ignored when a date range is given below. Defaults to upcoming.One of:
upcoming(Upcoming (default)),past,all. - Starting on or after
from_datedate - Only events that start on or after this date.
- Starting on or before
until_datedate - Only events that start on or before this date.
- Order
directiontext - Sort by start time. Defaults to oldest first.One of:
asc(Oldest first (default)),desc(Newest first). - Whose events
attendancetext - Only events you attend, or every event you can see (such as your team's). Defaults to events you attend.One of:
attending(Events I attend (default)),any(Every event I can see). - Scheduling link
link_idtext - Only events booked through this link.
- Page size
limitnumber - How many to return, 1 to 100. SavvyCal's default is 20.From 1 to 100.
- Next page cursor
aftertext - The 'next_cursor' from an earlier page, to get the page after it.
- Previous page cursor
beforetext - The 'previous_cursor' from an earlier page, to get the page before it.
Outputs
countnumber- How many on this page
eventslist- The events
next_cursortext- Pass as 'after' for the next page; empty on the last one
previous_cursortext- Pass as 'before' for the previous page; empty on the first
Example output
{
"count": 1,
"events": [
{
"attendees": [
{
"display_name": "Jo Bloggs",
"email": "jo@example.com",
"fields": [],
"first_name": "Jo",
"id": "attendee_01HX",
"is_organizer": false,
"last_name": "Bloggs",
"marketing_opt_in": false,
"phone_number": null,
"response_status": "accepted",
"time_zone": "America/New_York"
}
],
"buffer_after": 0,
"buffer_before": 0,
"conferencing": {
"join_url": null,
"type": "google_meet"
},
"created_at": "2026-10-15T09:00:00Z",
"duration": 30,
"end_at": "2026-10-20T14:30:00Z",
"id": "event_01HXAMPLE",
"is_group_session": false,
"link": {
"id": "link_01HXAMPLE",
"name": "30-minute intro call",
"slug": "intro"
},
"maximum_group_size": 1,
"metadata": {},
"organizer": {
"display_name": "Jo Bloggs",
"email": "jo@example.com",
"fields": [],
"first_name": "Jo",
"id": "attendee_01HY",
"is_organizer": true,
"last_name": "Bloggs",
"marketing_opt_in": false,
"phone_number": null,
"response_status": "accepted",
"time_zone": "America/New_York"
},
"scope": {
"id": "scope_01HX",
"name": "Jo Bloggs",
"slug": "jo"
},
"start_at": "2026-10-20T14:00:00Z",
"state": "confirmed",
"summary": "30-minute intro call",
"url": "https://savvycal.com/events/2f3c3b1e",
"uuid": "2f3c3b1e-6f1c-4c6a-9d1e-0b5b6f4e2a11"
}
],
"next_cursor": "",
"previous_cursor": ""
}List scheduling links
List the scheduling links you can manage. Returns one page; pass 'next_cursor' as 'after' for more.
Inputs
- State
statetext - Only links that are on, or only those that are off.One of:
active,disabled. - Page size
limitnumber - How many to return, 1 to 100. SavvyCal's default is 20.From 1 to 100.
- Next page cursor
aftertext - The 'next_cursor' from an earlier page, to get the page after it.
- Previous page cursor
beforetext - The 'previous_cursor' from an earlier page, to get the page before it.
Outputs
countnumber- How many on this page
linkslist- The scheduling links
next_cursortext- Pass as 'after' for the next page; empty on the last one
previous_cursortext- Pass as 'before' for the previous page; empty on the first
Example output
{
"count": 1,
"links": [
{
"default_duration": 30,
"description": "A quick hello.",
"durations": [
30
],
"fields": [
{
"id": "field_01HX",
"is_required": false,
"label": "Company",
"type": "short_text"
}
],
"id": "link_01HXAMPLE",
"increment": 15,
"name": "30-minute intro call",
"private_name": null,
"scope": {
"id": "scope_01HX",
"name": "Jo Bloggs",
"slug": "jo"
},
"slug": "intro",
"state": "active"
}
],
"next_cursor": "",
"previous_cursor": ""
}List webhooks
List the account's webhooks with their addresses, states and signing secrets.
Inputs
- Page size
limitnumber - How many to return, 1 to 100. SavvyCal's default is 20.From 1 to 100.
- Next page cursor
aftertext - The 'next_cursor' from an earlier page, to get the page after it.
- Previous page cursor
beforetext - The 'previous_cursor' from an earlier page, to get the page before it.
Outputs
countnumber- How many on this page
next_cursortext- Pass as 'after' for the next page; empty on the last one
previous_cursortext- Pass as 'before' for the previous page; empty on the first
webhookslist- The webhooks
Example output
{
"count": 1,
"next_cursor": "",
"previous_cursor": "",
"webhooks": [
{
"created_at": "2026-10-15T09:00:00Z",
"id": "wh_01HXAMPLE",
"secret": "whsec_example",
"state": "active",
"url": "https://example.com/savvycal",
"version": "1"
}
]
}List workflow rules
List a workflow's rules: what triggers each one, how long before or after, and the actions it takes.
Inputs
- Workflow
savvycal_workflow_idtextRequired - The SavvyCal workflow. Pick one, or give its id.
Outputs
countnumber- How many
ruleslist- The workflow's rules
Example output
{
"count": 1,
"rules": [
{
"actions": [
{
"created_at": "2026-10-01T09:00:00Z",
"id": "action_01HX",
"properties": {},
"type": "send_custom_email"
}
],
"created_at": "2026-10-01T09:00:00Z",
"id": "rule_01HX",
"trigger_offset_amount": 1,
"trigger_offset_direction": "before",
"trigger_offset_unit": "hours",
"trigger_type": "event_started"
}
]
}List workflows
List the workflows (reminders and follow-ups) in the scopes you manage.
Inputs
- Page size
limitnumber - How many to return, 1 to 100. SavvyCal's default is 20.From 1 to 100.
- Next page cursor
aftertext - The 'next_cursor' from an earlier page, to get the page after it.
- Previous page cursor
beforetext - The 'previous_cursor' from an earlier page, to get the page before it.
Outputs
countnumber- How many on this page
next_cursortext- Pass as 'after' for the next page; empty on the last one
previous_cursortext- Pass as 'before' for the previous page; empty on the first
workflowslist- The workflows
Example output
{
"count": 1,
"next_cursor": "",
"previous_cursor": "",
"workflows": [
{
"created_at": "2026-10-01T09:00:00Z",
"id": "wf_01HXAMPLE",
"name": "Reminders",
"state": "active"
}
]
}Turn scheduling link on or off
Turn a scheduling link on (active) or off (disabled). Nothing changes if it is already that way. Turning a link on needs a paid SavvyCal plan or trial.
Inputs
- Scheduling link
link_idtextRequired - The scheduling link. Pick one, or give its id from an earlier step.
- State
statetextRequired - On lets people book through the link; off stops it.One of:
active(On (active)),disabled(Off (disabled)).
Outputs
changedtrue/false- False if the link was already in that state
linkobject- The scheduling link
scope_slugtext- The slug of the scope the link is in, empty if none
Example output
{
"changed": true,
"link": {
"default_duration": 30,
"description": "A quick hello.",
"durations": [
30
],
"fields": [
{
"id": "field_01HX",
"is_required": false,
"label": "Company",
"type": "short_text"
}
],
"id": "link_01HXAMPLE",
"increment": 15,
"name": "30-minute intro call",
"private_name": null,
"scope": {
"id": "scope_01HX",
"name": "Jo Bloggs",
"slug": "jo"
},
"slug": "intro",
"state": "disabled"
},
"scope_slug": "jo"
}Update scheduling link
Change a scheduling link's name, description, private name or use. Only the fields given change.
Inputs
- Scheduling link
link_idtextRequired - The scheduling link. Pick one, or give its id from an earlier step.
- Name
nametext - A new name for the link. Leave empty to keep it.
- Description
descriptiontext - A new description. Leave empty to keep it.
- Private name
private_nametext - A new private name. Leave empty to keep it.
- Use
link_typetext - Change between multi-use and single-use. Leave empty to keep it.One of:
recurring(Multi-use),single(Single-use).
Outputs
linkobject- The scheduling link
scope_slugtext- The slug of the scope the link is in, empty if none
Example output
{
"link": {
"default_duration": 30,
"description": "A quick hello.",
"durations": [
30
],
"fields": [
{
"id": "field_01HX",
"is_required": false,
"label": "Company",
"type": "short_text"
}
],
"id": "link_01HXAMPLE",
"increment": 15,
"name": "45-minute intro call",
"private_name": null,
"scope": {
"id": "scope_01HX",
"name": "Jo Bloggs",
"slug": "jo"
},
"slug": "intro",
"state": "active"
},
"scope_slug": "jo"
}